From d01af540b961aaaa17f68e70374f78a6695219cc Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 17 十一月 2025 10:25:32 +0800
Subject: [PATCH] fix: bug

---
 src/views/FlexJobManage/components/AddInternalStaffDialog.vue |  219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 219 insertions(+), 0 deletions(-)

diff --git a/src/views/FlexJobManage/components/AddInternalStaffDialog.vue b/src/views/FlexJobManage/components/AddInternalStaffDialog.vue
new file mode 100644
index 0000000..5939095
--- /dev/null
+++ b/src/views/FlexJobManage/components/AddInternalStaffDialog.vue
@@ -0,0 +1,219 @@
+<template>
+  <ProDialog
+    title="鏂板缓鐏靛伐"
+    v-model="visible"
+    @close="onDialogClose"
+    destroy-on-close
+    draggable
+    :width="900"
+  >
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormCol>
+        <ProFormColItem :span="12">
+          <ProFormItemV2 label="濮撳悕锛�" prop="name" :check-rules="[{ message: '璇疯緭鍏ュ鍚�' }]">
+            <ProFormText placeholder="璇疯緭鍏ュ鍚�" v-model.trim="form.name"></ProFormText>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2 label="鏈嶅姟鍗忚锛�" prop="contractUrl">
+            <ProFormUpload
+              v-model:file-url="form.contractUrl"
+              :limit="1"
+              :limitFileSize="10"
+              accept="jpg/jpeg,png,pdf"
+            ></ProFormUpload>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="韬唤璇佸彿锛�"
+            prop="identity"
+            :check-rules="[{ message: '璇疯緭鍏ヨ韩浠借瘉鍙�', type: 'idCard' }]"
+          >
+            <ProFormText
+              placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�"
+              v-model.trim="form.identity"
+              @blur="handleCalculateAge"
+            ></ProFormText>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2 label="鍗忚鏃堕棿:" prop="contractTime">
+            <ProFormDatePicker
+              v-model="form.contractTime"
+              type="daterange"
+              range-separator="鑷�"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="缁堟鏃ユ湡"
+            ></ProFormDatePicker>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="鎵嬫満鍙凤細"
+            prop="contactPhoneNumber"
+            :check-rules="[{ message: '璇疯緭鍏ユ墜鏈哄彿', type: 'phone' }]"
+          >
+            <ProFormText
+              placeholder="璇疯緭鍏ユ墜鏈哄彿"
+              v-model.trim="form.contactPhoneNumber"
+            ></ProFormText>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12"> </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="鎬у埆锛�"
+            prop="gender"
+            required
+            :check-rules="[{ message: '璇烽�夋嫨鎬у埆' }]"
+          >
+            <ProFormRadio
+              v-model="form.gender"
+              :value-enum="EnumUserGenderTextForPerson"
+              :buttonStyle="false"
+            ></ProFormRadio>
+          </ProFormItemV2>
+        </ProFormColItem>
+        <ProFormColItem :span="12"> </ProFormColItem>
+        <ProFormColItem :span="12">
+          <ProFormItemV2
+            label="骞撮緞锛�"
+            prop="age"
+            :check-rules="[{ message: '璇疯緭鍏ュ勾榫�', type: 'number' }]"
+          >
+            <ProFormInputNumber
+              v-model="form.age"
+              :controls="false"
+              :min="0"
+              :max="9999"
+              placeholder="璇疯緭鍏ュ勾榫�"
+              unit="宀�"
+            />
+          </ProFormItemV2>
+        </ProFormColItem>
+      </ProFormCol>
+      <ProFormItemV2
+        label="韬唤璇佹闈細"
+        prop="identityImg"
+        :check-rules="[{ message: '璇蜂笂浼犺韩浠借瘉姝i潰', type: 'upload' }]"
+      >
+        <ProFormImageUpload
+          v-model:file-url="form.identityImg"
+          :limitFileSize="10"
+          :showTip="false"
+        >
+        </ProFormImageUpload>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="韬唤璇佸弽闈細"
+        prop="identityBackImg"
+        :check-rules="[{ message: '璇蜂笂浼犺韩浠借瘉鍙嶉潰', type: 'upload' }]"
+      >
+        <ProFormImageUpload
+          v-model:file-url="form.identityBackImg"
+          :limitFileSize="10"
+          :showTip="false"
+        >
+        </ProFormImageUpload>
+      </ProFormItemV2>
+    </ProForm>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">鎻愪氦</el-button>
+        <el-button @click="emit('onCancel')">鍙栨秷</el-button>
+      </span>
+    </template>
+  </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance, ModelValueType } from 'element-plus';
+import {
+  ProDialog,
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  UploadUserFile,
+  ProFormCol,
+  ProFormColItem,
+  ProFormImageUpload,
+  ProFormRadio,
+  ProFormUpload,
+  ProFormInputNumber,
+  ProFormDatePicker,
+} from '@bole-core/components';
+import { calculateAge, deepClone, format } from '@/utils';
+import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
+import { BoleRegExp } from '@bole-core/core';
+
+defineOptions({
+  name: 'AddInternalStaffDialog',
+});
+
+type Form = {
+  title?: string;
+  id: string;
+  name: string;
+  identity: string;
+  contactPhoneNumber: string;
+  gender: EnumUserGender;
+  age: number;
+  identityImg: UploadUserFile[];
+  identityBackImg: UploadUserFile[];
+  contractUrl: UploadUserFile[];
+  regiterTime: string;
+  userRealTime: string;
+  userSignContractTime: string;
+
+  contractTime: ModelValueType;
+};
+
+const visible = defineModel({ type: Boolean });
+
+const form = defineModel<Form>('form');
+let defaultForm: Form = null;
+
+watch(
+  visible,
+  (visible) => {
+    if (visible) {
+      defaultForm = deepClone(unref(form));
+    }
+  },
+  {
+    immediate: true,
+  }
+);
+
+const emit = defineEmits<{
+  (e: 'onConfirm'): void;
+  (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+  if (!dialogForm.value) return;
+  dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+  if (!dialogForm.value) return;
+  dialogForm.value.validate((valid) => {
+    if (valid) {
+      emit('onConfirm');
+    } else {
+      return;
+    }
+  });
+}
+
+function handleReset() {
+  form.value = { ...defaultForm };
+}
+
+function handleCalculateAge() {
+  form.value.age = calculateAge(form.value.identity);
+}
+</script>

--
Gitblit v1.9.1