feat: 电子签署设置新增培训/绩效/违纪3个开关,改为两列卡片布局
This commit is contained in:
@@ -136,6 +136,9 @@ model Organization {
|
||||
esignPolicyEnabled Boolean @default(false) // 规章制度电子签
|
||||
esignPayslipEnabled Boolean @default(false) // 工资条电子签
|
||||
esignOnboardingEnabled Boolean @default(false) // 入职文件电子签
|
||||
esignTrainingEnabled Boolean @default(false) // 培训记录电子签
|
||||
esignPerformanceEnabled Boolean @default(false) // 绩效考核电子签
|
||||
esignDisciplinaryEnabled Boolean @default(false) // 违纪记录电子签
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
|
||||
@@ -100,6 +100,9 @@ function OrgSettings({ orgData, onSave, saving }: { orgData: any; onSave: (data:
|
||||
esignPolicyEnabled: false,
|
||||
esignPayslipEnabled: false,
|
||||
esignOnboardingEnabled: false,
|
||||
esignTrainingEnabled: false,
|
||||
esignPerformanceEnabled: false,
|
||||
esignDisciplinaryEnabled: false,
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
@@ -114,6 +117,9 @@ function OrgSettings({ orgData, onSave, saving }: { orgData: any; onSave: (data:
|
||||
esignPolicyEnabled: orgData.esignPolicyEnabled || false,
|
||||
esignPayslipEnabled: orgData.esignPayslipEnabled || false,
|
||||
esignOnboardingEnabled: orgData.esignOnboardingEnabled || false,
|
||||
esignTrainingEnabled: orgData.esignTrainingEnabled || false,
|
||||
esignPerformanceEnabled: orgData.esignPerformanceEnabled || false,
|
||||
esignDisciplinaryEnabled: orgData.esignDisciplinaryEnabled || false,
|
||||
})
|
||||
}
|
||||
}, [orgData])
|
||||
@@ -180,58 +186,33 @@ function OrgSettings({ orgData, onSave, saving }: { orgData: any; onSave: (data:
|
||||
<PenTool className="w-5 h-5 text-primary" />
|
||||
<h3 className="font-medium">电子签署设置</h3>
|
||||
</div>
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<div className="text-sm font-medium">规章制度电子签</div>
|
||||
<p className="text-xs text-gray-500 mt-0.5">开启后,员工阅读规章制度时需电子签署;关闭时保持阅读确认</p>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
{([
|
||||
{ key: 'esignPolicyEnabled', label: '规章制度电子签', desc: '开启后,员工阅读规章制度时需电子签署;关闭时保持阅读确认' },
|
||||
{ key: 'esignPayslipEnabled', label: '工资条电子签', desc: '开启后,员工确认工资条时需电子签署;关闭时保持点击确认' },
|
||||
{ key: 'esignOnboardingEnabled', label: '入职文件电子签', desc: '开启后,HR审批通过入职流程时自动创建入职文件签署;关闭时不签' },
|
||||
{ key: 'esignTrainingEnabled', label: '培训记录电子签', desc: '开启后,员工签收培训记录时需电子签署;关闭时保持点击签收' },
|
||||
{ key: 'esignPerformanceEnabled', label: '绩效考核电子签', desc: '开启后,员工签字确认绩效时需电子签署;关闭时保持点击确认' },
|
||||
{ key: 'esignDisciplinaryEnabled', label: '违纪记录电子签', desc: '开启后,员工签字确认违纪记录时需电子签署;关闭时保持点击确认' },
|
||||
] as const).map((item) => (
|
||||
<div key={item.key} className="flex items-center justify-between border rounded-lg p-3">
|
||||
<div className="flex-1 mr-3">
|
||||
<div className="text-sm font-medium">{item.label}</div>
|
||||
<p className="text-xs text-gray-500 mt-0.5">{item.desc}</p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const next = !form.esignPolicyEnabled
|
||||
setForm({ ...form, esignPolicyEnabled: next })
|
||||
onSave({ esignPolicyEnabled: next })
|
||||
const next = !form[item.key]
|
||||
setForm({ ...form, [item.key]: next })
|
||||
onSave({ [item.key]: next })
|
||||
}}
|
||||
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${form.esignPolicyEnabled ? 'bg-primary' : 'bg-gray-200'}`}
|
||||
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors flex-shrink-0 ${form[item.key] ? 'bg-primary' : 'bg-gray-200'}`}
|
||||
>
|
||||
<span className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${form.esignPolicyEnabled ? 'translate-x-6' : 'translate-x-1'}`} />
|
||||
</button>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<div className="text-sm font-medium">工资条电子签</div>
|
||||
<p className="text-xs text-gray-500 mt-0.5">开启后,员工确认工资条时需电子签署;关闭时保持点击确认</p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const next = !form.esignPayslipEnabled
|
||||
setForm({ ...form, esignPayslipEnabled: next })
|
||||
onSave({ esignPayslipEnabled: next })
|
||||
}}
|
||||
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${form.esignPayslipEnabled ? 'bg-primary' : 'bg-gray-200'}`}
|
||||
>
|
||||
<span className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${form.esignPayslipEnabled ? 'translate-x-6' : 'translate-x-1'}`} />
|
||||
</button>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<div>
|
||||
<div className="text-sm font-medium">入职文件电子签</div>
|
||||
<p className="text-xs text-gray-500 mt-0.5">开启后,HR审批通过入职流程时自动创建入职文件签署;关闭时不签</p>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const next = !form.esignOnboardingEnabled
|
||||
setForm({ ...form, esignOnboardingEnabled: next })
|
||||
onSave({ esignOnboardingEnabled: next })
|
||||
}}
|
||||
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${form.esignOnboardingEnabled ? 'bg-primary' : 'bg-gray-200'}`}
|
||||
>
|
||||
<span className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${form.esignOnboardingEnabled ? 'translate-x-6' : 'translate-x-1'}`} />
|
||||
<span className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${form[item.key] ? 'translate-x-6' : 'translate-x-1'}`} />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ export default function DisciplinaryRecords() {
|
||||
{r.employeeAck ? (
|
||||
<span className="text-xs text-green-600">已签字</span>
|
||||
) : (
|
||||
<span className="text-xs text-gray-400">未签字</span>
|
||||
<span className="text-xs text-amber-600">待签字</span>
|
||||
)}
|
||||
</td>
|
||||
<td className="py-2 pr-4">
|
||||
|
||||
Reference in New Issue
Block a user