From 9d192d0fbc46f56b7daef5a5130db1c64461cf20 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 07 七月 2026 15:51:53 +0800
Subject: [PATCH] Merge branch 'dev_NEW_pro' into dev_山西晋中_平遥盛达

---
 src/views/index.vue                                                                                        |   21 
 multiple/config.json                                                                                       |    9 
 src/views/officeProcessAutomation/HrManage/resign-apply/components/formDia.vue                             |  467 +++---
 src/views/salesManagement/receiptPaymentLedger/index.vue                                                   |   24 
 src/views/salesManagement/returnOrder/components/detailDia.vue                                             |   12 
 src/views/officeProcessAutomation/ApproveManage/approve-template/selectOptionSource.js                     |   77 +
 src/views/personnelManagement/contractManagement/index.vue                                                 |  582 ++++----
 multiple/assets/favicon/QLMCico.ico                                                                        |    0 
 src/views/salesManagement/returnOrder/index.vue                                                            |   16 
 src/views/officeProcessAutomation/HrManage/work-handover/index.vue                                         |    1 
 src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue                           |  151 +
 src/views/officeProcessAutomation/HrManage/regular-apply/index.vue                                         |    1 
 multiple/assets/logo/QLMCLogo.png                                                                          |    0 
 src/views/officeProcessAutomation/HrManage/staff-contract/index.vue                                        |  520 ++++----
 src/views/officeProcessAutomation/HrManage/transfer-apply/index.vue                                        |    1 
 src/views/salesManagement/returnOrder/components/formDia.vue                                               |   56 
 src/views/procurementManagement/purchaseReturnOrder/index.vue                                              |   60 
 src/views/procurementManagement/purchaseReturnOrder/ProductList.vue                                        |   13 
 src/views/officeProcessAutomation/HrManage/resign-apply/index.vue                                          |  364 ++---
 src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue              |   17 
 src/views/financialManagement/receivable/salesReturn.vue                                                   |   24 
 src/views/procurementManagement/paymentLedger/index.vue                                                    |   16 
 src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js                             |   12 
 src/views/personnelManagement/dimission/components/formDia.vue                                             |  467 +++---
 src/views/procurementManagement/procurementLedger/index.vue                                                |    2 
 src/views/officeProcessAutomation/ApproveManage/approve-template/useSelectOptionSources.js                 |   13 
 src/views/personnelManagement/classsSheduling/index.vue                                                    |  151 ++
 src/views/salesManagement/indicatorStats/index.vue                                                         |   20 
 src/views/personnelManagement/attendanceCheckin/checkinRules/index.vue                                     |   78 
 src/views/procurementManagement/purchaseReturnOrder/New.vue                                                |   91 +
 src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateBindDialog.vue   |    2 
 src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalInstanceSubmitDialog.vue |    2 
 src/views/personnelManagement/dimission/index.vue                                                          |  399 +++---
 src/views/financialManagement/payable/purchaseReturn.vue                                                   |   24 
 src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateFormSection.vue  |    2 
 35 files changed, 2,124 insertions(+), 1,571 deletions(-)

diff --git a/multiple/assets/favicon/QLMCico.ico b/multiple/assets/favicon/QLMCico.ico
new file mode 100644
index 0000000..8a51d67
--- /dev/null
+++ b/multiple/assets/favicon/QLMCico.ico
Binary files differ
diff --git a/multiple/assets/logo/QLMCLogo.png b/multiple/assets/logo/QLMCLogo.png
new file mode 100644
index 0000000..f94d826
--- /dev/null
+++ b/multiple/assets/logo/QLMCLogo.png
Binary files differ
diff --git a/multiple/config.json b/multiple/config.json
index 5a6a34c..efb5665 100644
--- a/multiple/config.json
+++ b/multiple/config.json
@@ -24,6 +24,15 @@
     "logo": "logo/SDZZLogo.png",
     "favicon": "favicon/SDZZfavicon.ico"
   },
+  "QLMC": {
+    "env": {
+      "VITE_APP_TITLE": "绁佽繛鐗у満淇℃伅绠$悊绯荤粺",
+      "VITE_BASE_API": "http://114.132.189.42:9066",
+      "VITE_JAVA_API": "http://114.132.189.42:9060"
+    },
+    "logo": "logo/QLMCLogo.png",
+    "favicon": "favicon/QLMCico.ico"
+  },
   "logo": "/src/assets/logo/logo.png",
   "favicon": "/public/favicon.ico"
 }
diff --git a/src/views/financialManagement/payable/purchaseReturn.vue b/src/views/financialManagement/payable/purchaseReturn.vue
index 4171df2..5c274ac 100644
--- a/src/views/financialManagement/payable/purchaseReturn.vue
+++ b/src/views/financialManagement/payable/purchaseReturn.vue
@@ -85,6 +85,30 @@
   { label: "閫�璐у崟鍙�", prop: "returnNo", minWidth: "150" },
   { label: "渚涘簲鍟�", prop: "supplierName", minWidth: "180" },
   { label: "鍏宠仈鍏ュ簱鍗曞彿", prop: "inboundBatches", minWidth: "150" },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    minWidth: "110",
+    formatData: (val) => ({ 1: "璐ц溅", 2: "蹇��" }[String(val)] || "--"),
+  },
+  {
+    label: "鍙戣揣杞︾墝鍙�",
+    prop: "truckPlateNo",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "1" ? row?.truckPlateNo || "--" : "--"),
+  },
+  {
+    label: "蹇�掑叕鍙�",
+    prop: "expressCompany",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressCompany || "--" : "--"),
+  },
+  {
+    label: "蹇�掑崟鍙�",
+    prop: "expressNo",
+    minWidth: "150",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressNo || "--" : "--"),
+  },
   { label: "閫�璐ф棩鏈�", prop: "preparedAt", minWidth: "170" },
   {
     label: "閫�娆炬�婚",
diff --git a/src/views/financialManagement/receivable/salesReturn.vue b/src/views/financialManagement/receivable/salesReturn.vue
index afe363c..85153bf 100644
--- a/src/views/financialManagement/receivable/salesReturn.vue
+++ b/src/views/financialManagement/receivable/salesReturn.vue
@@ -77,6 +77,30 @@
   { label: "閫�璐у崟鍙�", prop: "returnNo", minWidth: "150" },
   { label: "瀹㈡埛鍚嶇О", prop: "customerName", minWidth: "180" },
   { label: "鍏宠仈鍙戣揣鍗曞彿", prop: "shippingNo", minWidth: "150" },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    minWidth: "110",
+    formatData: (val) => ({ 1: "璐ц溅", 2: "蹇��" }[String(val)] || "--"),
+  },
+  {
+    label: "鍙戣揣杞︾墝鍙�",
+    prop: "truckPlateNo",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "1" ? row?.truckPlateNo || "--" : "--"),
+  },
+  {
+    label: "蹇�掑叕鍙�",
+    prop: "expressCompany",
+    minWidth: "140",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressCompany || "--" : "--"),
+  },
+  {
+    label: "蹇�掑崟鍙�",
+    prop: "expressNo",
+    minWidth: "150",
+    formatData: (_val, row) => (String(row?.shippingType) === "2" ? row?.expressNo || "--" : "--"),
+  },
   { label: "閫�璐ф棩鏈�", prop: "makeTime", minWidth: "170" },
   {
     label: "閫�娆炬�婚",
diff --git a/src/views/index.vue b/src/views/index.vue
index 4a03b41..5a76883 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1031,8 +1031,8 @@
     pathPrefixes: ["/inventorymanagement"],
   },
   production: {
-    titles: ["鐢熶骇绠$悊", "涓荤敓浜ц鍒�", "鐢熶骇璁㈠崟", "鐢熶骇鎶ュ伐"],
-    pathPrefixes: ["/productionmanagement", "/productionplan"],
+    titles: ["鐢熶骇绠℃帶"],
+    pathPrefixes: ["/productionManagement", "/productionPlan"],
   },
   quality: {
     titles: ["璐ㄩ噺绠$悊"],
@@ -1086,7 +1086,7 @@
   realtime: visibleModules.value.production,
   quick: quickEntries.value.length > 0,
   plan: visibleModules.value.production,
-  receipt: visibleModules.value.sales || visibleModules.value.finance,
+  receipt: visibleModules.value.finance,
 }));
 
 const hasLeftPanels = computed(
@@ -1584,9 +1584,12 @@
 }
 
 .stats-grid {
-  display: grid;
-  grid-template-columns: repeat(4, minmax(0, 1fr));
+  display: flex;
   gap: 14px;
+}
+
+.stats-grid .stat-card {
+  flex: 1;
 }
 
 .stat-card {
@@ -2457,10 +2460,6 @@
   .main-grid {
     grid-template-columns: minmax(0, 1fr) 340px;
   }
-
-  .stats-grid {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
-  }
 }
 
 @media (max-width: 1200px) {
@@ -2504,10 +2503,6 @@
 
   .meta-extra {
     justify-content: flex-start;
-  }
-
-  .stats-grid {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
   }
 
   .right-column {
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue
index 7933db5..817a007 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue
@@ -80,12 +80,12 @@
           clearable
           filterable
         >
-          <el-option
-            v-for="o in getOptions(field)"
-            :key="String(o.value)"
-            :label="o.label"
-            :value="o.value"
-          />
+        <el-option
+          v-for="o in getOptions(field, { moduleKey: props.moduleKey })"
+          :key="String(o.value)"
+          :label="o.label"
+          :value="o.value"
+        />
         </el-select>
         <span v-else class="field-value">{{ displayValue(field) }}</span>
       </el-form-item>
@@ -103,13 +103,14 @@
   fields: { type: Array, default: () => [] },
   formPayload: { type: Object, default: () => ({}) },
   readonly: { type: Boolean, default: false },
+  moduleKey: { type: String, default: "" },
 });
 
 const { loading: optionSourceLoading, ensureForFields, getOptions, getDisplayLabel } =
   useSelectOptionSources();
 
 async function loadOptionCaches() {
-  await ensureForFields(props.fields);
+  await ensureForFields(props.fields, { moduleKey: props.moduleKey });
 }
 
 onMounted(() => {
@@ -127,7 +128,7 @@
 function displayValue(field) {
   const val = props.formPayload?.[field.key];
   if (field.type === "select" && field.optionSource && field.optionSource !== "static") {
-    return getDisplayLabel(field, val);
+    return getDisplayLabel(field, val, { moduleKey: props.moduleKey });
   }
   return formatFieldDisplayValue(field, val);
 }
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
index 25b6ae5..737e2de 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/useApproveList.js
@@ -310,7 +310,10 @@
     else if (row.businessType === 5) {
       const purchaseContractNumber = row?.purchaseContractNumber;
       if (purchaseContractNumber) {
-        const res = await getPurchaseByCode({ purchaseContractNumber });
+        const res = await getPurchaseByCode({
+          purchaseContractNumber,
+          approvalInstanceId: row?.id,
+        });
         detailData.value = res || {};
       }
     }
@@ -355,7 +358,10 @@
     else if (row.businessType === 5) {
       const purchaseContractNumber = row?.purchaseContractNumber;
       if (purchaseContractNumber) {
-        const res = await getPurchaseByCode({ purchaseContractNumber });
+        const res = await getPurchaseByCode({
+          purchaseContractNumber,
+          approvalInstanceId: row?.id,
+        });
         detailData.value = res || {};
       }
     }
@@ -699,4 +705,4 @@
     openApprove,
     fetchApprovalList,
   };
-}
\ No newline at end of file
+}
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalInstanceSubmitDialog.vue b/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalInstanceSubmitDialog.vue
index 53de9e1..0f9646c 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalInstanceSubmitDialog.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalInstanceSubmitDialog.vue
@@ -24,6 +24,7 @@
         v-model:attachments="form.storageBlobDTOs"
         :template-attachments="form.templateAttachments"
         :user-options="userOptions"
+        :module-key="moduleKey"
         :show-template-name="!isEdit"
         :allow-change-template="false"
         :flow-attachments-only="flowAttachmentsOnly"
@@ -56,6 +57,7 @@
   fields: { type: Array, default: () => [] },
   activeTemplate: { type: Object, default: null },
   userOptions: { type: Array, default: () => [] },
+  moduleKey: { type: String, default: "" },
   isEdit: { type: Boolean, default: false },
   saving: { type: Boolean, default: false },
   formRef: { type: Object, default: null },
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateBindDialog.vue b/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateBindDialog.vue
index 409dd41..6d56084 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateBindDialog.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateBindDialog.vue
@@ -4,7 +4,7 @@
   鐢ㄦ硶锛�
   <ApprovalTemplateBindDialog
     v-model:visible="visible"
-    module-key="regular"
+    :module-key="APPROVAL_MODULE_KEYS.REGULAR"
     @confirm="onTemplateBound"
   />
 -->
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateFormSection.vue b/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateFormSection.vue
index d6e7073..ebc5ac4 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateFormSection.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-shared/components/ApprovalTemplateFormSection.vue
@@ -15,6 +15,7 @@
       v-if="!hideFormFields && !flowAttachmentsOnly && !flowOnly"
       :fields="fields"
       :form-payload="formPayload"
+      :module-key="moduleKey"
     />
 
     <el-form-item label="瀹℃壒娴佺▼" required>
@@ -87,6 +88,7 @@
   uploadLimit: { type: Number, default: 10 },
   /** 涓� true 鏃跺彲缂栬緫妯℃澘棰勭疆鐨勫鎵逛汉锛堜粎瀹℃壒妯℃澘绠$悊椤典娇鐢級 */
   flowEditable: { type: Boolean, default: false },
+  moduleKey: { type: String, default: "" },
 });
 
 const emit = defineEmits(["update:flowNodes", "update:attachments", "change-template"]);
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/selectOptionSource.js b/src/views/officeProcessAutomation/ApproveManage/approve-template/selectOptionSource.js
index 99706b4..3dbc6f0 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/selectOptionSource.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/selectOptionSource.js
@@ -1,30 +1,42 @@
 import { deptTreeSelect, userListNoPageByTenantId } from "@/api/system/user.js";
+import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
 
 /** 涓嬫媺閫夐」鏉ユ簮锛堝啓鍏� formConfig锛屾彁浜ら〉鎸夋潵婧愭媺鍙栨暟鎹級 */
 export const SELECT_OPTION_SOURCE = {
   STATIC: "static",
   USER: "user",
   DEPT: "dept",
+  EMPLOYEE: "employee",
 };
 
 export const SELECT_OPTION_SOURCE_OPTIONS = [
   { value: SELECT_OPTION_SOURCE.STATIC, label: "鎵嬪姩閰嶇疆", desc: "鍦ㄦā鏉夸腑鑷畾涔夐�夐」鏂囨湰涓庡��" },
   { value: SELECT_OPTION_SOURCE.USER, label: "浜哄憳鍒楄〃", desc: "浠庣郴缁熺敤鎴蜂腑閫夋嫨锛屽�间负鐢ㄦ埛 ID" },
   { value: SELECT_OPTION_SOURCE.DEPT, label: "閮ㄩ棬鍒楄〃", desc: "浠庣粍缁囨灦鏋勪腑閫夋嫨锛屽�间负閮ㄩ棬 ID" },
+  { value: SELECT_OPTION_SOURCE.EMPLOYEE, label: "鍛樺伐鍒楄〃", desc: "浠庡湪鑱屽憳宸ヤ腑閫夋嫨锛屽�间负鍛樺伐 ID" },
 ];
+
+const EMPLOYEE_APPLICANT_MODULE_KEYS = new Set(["regular"]);
 
 export function selectOptionSourceLabel(source) {
   return SELECT_OPTION_SOURCE_OPTIONS.find((x) => x.value === source)?.label || "鈥�";
 }
 
 export function isDynamicOptionSource(source) {
-  return source === SELECT_OPTION_SOURCE.USER || source === SELECT_OPTION_SOURCE.DEPT;
+  return (
+    source === SELECT_OPTION_SOURCE.USER ||
+    source === SELECT_OPTION_SOURCE.DEPT ||
+    source === SELECT_OPTION_SOURCE.EMPLOYEE
+  );
 }
 
 function unwrapArray(payload) {
   if (Array.isArray(payload)) return payload;
+  if (Array.isArray(payload?.records)) return payload.records;
   if (payload?.data && Array.isArray(payload.data)) return payload.data;
+  if (Array.isArray(payload?.data?.records)) return payload.data.records;
   if (payload?.rows && Array.isArray(payload.rows)) return payload.rows;
+  if (Array.isArray(payload?.data?.rows)) return payload.data.rows;
   return [];
 }
 
@@ -39,6 +51,15 @@
   const value = u.userId ?? u.id;
   return {
     label: u.nickName || u.userName || `鐢ㄦ埛${value}`,
+    value,
+  };
+}
+
+/** 鍦ㄨ亴鍛樺伐 鈫� 涓嬫媺 option */
+export function mapEmployeeToSelectOption(u) {
+  const value = u.id ?? u.staffOnJobId ?? u.staffId;
+  return {
+    label: u.staffName || u.name || u.userName || `鍛樺伐${value}`,
     value,
   };
 }
@@ -70,21 +91,41 @@
 }
 
 /** 鎸夊瓧娈甸厤缃В鏋愪笅鎷� options锛堥渶浼犲叆宸插姞杞界殑缂撳瓨锛� */
-export function resolveFieldSelectOptions(field, caches = {}) {
+function isApplicantField(field) {
+  const key = String(field?.key || "").toLowerCase();
+  const label = String(field?.label || "");
+  return (
+    key === "applicant" ||
+    key === "applicantname" ||
+    label.includes("鐢宠浜�")
+  );
+}
+
+export function resolveFieldSelectOptions(field, caches = {}, context = {}) {
   const source = field?.optionSource || SELECT_OPTION_SOURCE.STATIC;
+  if (
+    source === SELECT_OPTION_SOURCE.USER &&
+    EMPLOYEE_APPLICANT_MODULE_KEYS.has(context.moduleKey) &&
+    isApplicantField(field)
+  ) {
+    return (caches.employees || []).map(mapEmployeeToSelectOption);
+  }
   if (source === SELECT_OPTION_SOURCE.USER) {
     return (caches.users || []).map(mapUserToSelectOption);
   }
   if (source === SELECT_OPTION_SOURCE.DEPT) {
     return caches.deptOptions || [];
   }
+  if (source === SELECT_OPTION_SOURCE.EMPLOYEE) {
+    return (caches.employees || []).map(mapEmployeeToSelectOption);
+  }
   return (field?.options || []).filter((o) => o.value !== "" && o.value != null);
 }
 
 /** 鏍规嵁宸茶В鏋愮殑 options 鍙嶆煡灞曠ず鏂囨湰 */
-export function resolveSelectDisplayLabel(field, val, caches = {}) {
+export function resolveSelectDisplayLabel(field, val, caches = {}, context = {}) {
   if (val == null || val === "") return "鈥�";
-  const options = resolveFieldSelectOptions(field, caches);
+  const options = resolveFieldSelectOptions(field, caches, context);
   const hit = options.find((o) => String(o.value) === String(val));
   return hit?.label || String(val);
 }
@@ -93,9 +134,10 @@
 export async function fetchSelectOptionCaches(sources = []) {
   const needUser = sources.includes(SELECT_OPTION_SOURCE.USER);
   const needDept = sources.includes(SELECT_OPTION_SOURCE.DEPT);
-  const caches = { users: [], deptOptions: [] };
+  const needEmployee = sources.includes(SELECT_OPTION_SOURCE.EMPLOYEE);
+  const caches = { users: [], deptOptions: [], employees: [] };
 
-  if (!needUser && !needDept) return caches;
+  if (!needUser && !needDept && !needEmployee) return caches;
 
   const tasks = [];
   if (needUser) {
@@ -123,17 +165,36 @@
         })
     );
   }
+  if (needEmployee) {
+    tasks.push(
+      staffOnJobListPage({ current: -1, size: -1, staffState: 1 })
+        .then((res) => {
+          caches.employees = unwrapArray(res);
+        })
+        .catch(() => {
+          caches.employees = [];
+        })
+    );
+  }
 
   await Promise.all(tasks);
   return caches;
 }
 
 /** 浠庡瓧娈靛垪琛ㄦ敹闆嗛渶瑕侀鍔犺浇鐨勫姩鎬佹潵婧� */
-export function collectOptionSourcesFromFields(fields) {
+export function collectOptionSourcesFromFields(fields, context = {}) {
   const set = new Set();
   (fields || []).forEach((f) => {
     if (f?.type === "select" && isDynamicOptionSource(f.optionSource)) {
-      set.add(f.optionSource);
+      if (
+        EMPLOYEE_APPLICANT_MODULE_KEYS.has(context.moduleKey) &&
+        f.optionSource === SELECT_OPTION_SOURCE.USER &&
+        isApplicantField(f)
+      ) {
+        set.add(SELECT_OPTION_SOURCE.EMPLOYEE);
+      } else {
+        set.add(f.optionSource);
+      }
     }
   });
   return [...set];
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/useSelectOptionSources.js b/src/views/officeProcessAutomation/ApproveManage/approve-template/useSelectOptionSources.js
index 8397288..5d246e1 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/useSelectOptionSources.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/useSelectOptionSources.js
@@ -14,25 +14,26 @@
     deptOptions: [],
   });
 
-  async function ensureForFields(fields) {
-    const sources = collectOptionSourcesFromFields(fields);
+  async function ensureForFields(fields, context = {}) {
+    const sources = collectOptionSourcesFromFields(fields, context);
     if (!sources.length) return;
     loading.value = true;
     try {
       const next = await fetchSelectOptionCaches(sources);
       caches.users = next.users;
       caches.deptOptions = next.deptOptions;
+      caches.employees = next.employees || [];
     } finally {
       loading.value = false;
     }
   }
 
-  function getOptions(field) {
-    return resolveFieldSelectOptions(field, caches);
+  function getOptions(field, context = {}) {
+    return resolveFieldSelectOptions(field, caches, context);
   }
 
-  function getDisplayLabel(field, val) {
-    return resolveSelectDisplayLabel(field, val, caches);
+  function getDisplayLabel(field, val, context = {}) {
+    return resolveSelectDisplayLabel(field, val, caches, context);
   }
 
   return {
diff --git a/src/views/officeProcessAutomation/HrManage/regular-apply/index.vue b/src/views/officeProcessAutomation/HrManage/regular-apply/index.vue
index 291d57d..df70f4f 100644
--- a/src/views/officeProcessAutomation/HrManage/regular-apply/index.vue
+++ b/src/views/officeProcessAutomation/HrManage/regular-apply/index.vue
@@ -48,6 +48,7 @@
       :fields="submitFormFields"
       :active-template="activeTemplate"
       :user-options="flowUserOptions"
+      :module-key="APPROVAL_MODULE_KEYS.REGULAR"
       :is-edit="isSubmitEdit"
       :saving="submitSaving"
       :form-ref="submitFormRef"
diff --git a/src/views/officeProcessAutomation/HrManage/resign-apply/components/formDia.vue b/src/views/officeProcessAutomation/HrManage/resign-apply/components/formDia.vue
index 86c59ce..20c1794 100644
--- a/src/views/officeProcessAutomation/HrManage/resign-apply/components/formDia.vue
+++ b/src/views/officeProcessAutomation/HrManage/resign-apply/components/formDia.vue
@@ -1,29 +1,31 @@
 <template>
   <div>
-    <el-dialog
-        v-model="dialogFormVisible"
-        :title="operationType === 'add' ? '鏂板绂昏亴' : '缂栬緫绂昏亴'"
-        width="70%"
-        @close="closeDia"
-    >
+    <el-dialog v-model="dialogFormVisible"
+               :title="operationType === 'add' ? '鏂板绂昏亴' : '缂栬緫绂昏亴'"
+               width="70%"
+               @close="closeDia">
       <!-- 鍛樺伐淇℃伅灞曠ず鍖哄煙 -->
       <div class="info-section">
         <div class="info-title">鍛樺伐淇℃伅</div>
-        <el-form :model="form" label-width="200px" label-position="left" :rules="rules" ref="formRef" style="margin-top: 20px">
+        <el-form :model="form"
+                 label-width="200px"
+                 label-position="left"
+                 :rules="rules"
+                 ref="formRef"
+                 style="margin-top: 20px">
           <el-row :gutter="30">
             <el-col :span="12">
-              <el-form-item label="濮撳悕锛�" prop="staffOnJobId">
+              <el-form-item label="濮撳悕锛�"
+                            prop="staffOnJobId">
                 <el-select v-model="form.staffOnJobId"
                            placeholder="璇烽�夋嫨浜哄憳"
                            style="width: 100%"
                            :disabled="operationType === 'edit'"
                            @change="handleSelect">
-                  <el-option
-                      v-for="item in personList"
-                      :key="item.id"
-                      :label="item.staffName"
-                      :value="item.id"
-                  />
+                  <el-option v-for="item in personList"
+                             :key="item.id"
+                             :label="item.staffName"
+                             :value="item.id" />
                 </el-select>
               </el-form-item>
             </el-col>
@@ -39,21 +41,11 @@
                 {{ currentStaffRecord.sex || '-' }}
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="鎴风睄浣忓潃锛�">
-                {{ currentStaffRecord.nativePlace || '-' }}
-              </el-form-item>
-            </el-col>
           </el-row>
           <el-row :gutter="30">
             <el-col :span="12">
               <el-form-item label="宀椾綅锛�">
                 {{ currentStaffRecord.postName || '-' }}
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="鐜颁綇鍧�锛�">
-                {{ currentStaffRecord.adress || '-' }}
               </el-form-item>
             </el-col>
           </el-row>
@@ -97,74 +89,74 @@
           </el-row>
           <el-row :gutter="30">
             <el-col :span="12">
-              <el-form-item label="绂昏亴鏃ユ湡锛�" prop="leaveDate">
-                <el-date-picker
-                    v-model="form.leaveDate"
-                    type="date"
-                    :disabled="operationType === 'edit'"
-                    :disabled-date="disabledFutureDate"
-                    placeholder="璇烽�夋嫨绂昏亴鏃ユ湡"
-                    value-format="YYYY-MM-DD"
-                    format="YYYY-MM-DD"
-                    style="width: 100%"
-                />
+              <el-form-item label="绂昏亴鏃ユ湡锛�"
+                            prop="leaveDate">
+                <el-date-picker v-model="form.leaveDate"
+                                type="date"
+                                :disabled="operationType === 'edit'"
+                                :disabled-date="disabledFutureDate"
+                                placeholder="璇烽�夋嫨绂昏亴鏃ユ湡"
+                                value-format="YYYY-MM-DD"
+                                format="YYYY-MM-DD"
+                                style="width: 100%" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="绂昏亴鍘熷洜锛�" prop="reason">
-                <el-select v-model="form.reason" placeholder="璇烽�夋嫨绂昏亴鍘熷洜" style="width: 100%" @change="handleSelectDimissionReason">
-                  <el-option
-                      v-for="(item, index) in dimissionReasonOptions"
-                      :key="index"
-                      :label="item.label"
-                      :value="item.value"
-                  />
+              <el-form-item label="绂昏亴鍘熷洜锛�"
+                            prop="reason">
+                <el-select v-model="form.reason"
+                           placeholder="璇烽�夋嫨绂昏亴鍘熷洜"
+                           style="width: 100%"
+                           @change="handleSelectDimissionReason">
+                  <el-option v-for="(item, index) in dimissionReasonOptions"
+                             :key="index"
+                             :label="item.label"
+                             :value="item.value" />
                 </el-select>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="30">
             <el-col :span="12">
-              <el-form-item label="澶囨敞锛�" prop="remark" v-if="form.reason === 'other'">
-                <el-input
-                    v-model="form.remark"
-                    type="textarea"
-                    :rows="3"
-                    placeholder="澶囨敞"
-                    maxlength="500"
-                    show-word-limit
-                />
+              <el-form-item label="澶囨敞锛�"
+                            prop="remark"
+                            v-if="form.reason === 'other'">
+                <el-input v-model="form.remark"
+                          type="textarea"
+                          :rows="3"
+                          placeholder="澶囨敞"
+                          maxlength="500"
+                          show-word-limit />
               </el-form-item>
             </el-col>
           </el-row>
         </el-form>
-
-<!--        <el-row :gutter="30">-->
-<!--          <el-col :span="12">-->
-<!--            <div class="info-item">-->
-<!--              <span class="info-label">绂昏亴鍘熷洜锛�</span>-->
-<!--              <el-select v-model="form.reason" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">-->
-<!--                <el-option-->
-<!--                    v-for="(item, index) in dimissionReasonOptions"-->
-<!--                    :key="index"-->
-<!--                    :label="item.label"-->
-<!--                    :value="item.value"-->
-<!--                />-->
-<!--              </el-select>-->
-<!--            </div>-->
-<!--          </el-col>-->
-<!--          <el-col :span="12">-->
-<!--            <div class="info-item">-->
-<!--              <span class="info-label">鍛樺伐缂栧彿锛�</span>-->
-<!--              <span class="info-value">{{ form.staffNo || '-' }}</span>-->
-<!--            </div>-->
-<!--          </el-col>-->
-<!--        </el-row>-->
+        <!--        <el-row :gutter="30">-->
+        <!--          <el-col :span="12">-->
+        <!--            <div class="info-item">-->
+        <!--              <span class="info-label">绂昏亴鍘熷洜锛�</span>-->
+        <!--              <el-select v-model="form.reason" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">-->
+        <!--                <el-option-->
+        <!--                    v-for="(item, index) in dimissionReasonOptions"-->
+        <!--                    :key="index"-->
+        <!--                    :label="item.label"-->
+        <!--                    :value="item.value"-->
+        <!--                />-->
+        <!--              </el-select>-->
+        <!--            </div>-->
+        <!--          </el-col>-->
+        <!--          <el-col :span="12">-->
+        <!--            <div class="info-item">-->
+        <!--              <span class="info-label">鍛樺伐缂栧彿锛�</span>-->
+        <!--              <span class="info-value">{{ form.staffNo || '-' }}</span>-->
+        <!--            </div>-->
+        <!--          </el-col>-->
+        <!--        </el-row>-->
       </div>
-
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="submitForm">纭</el-button>
+          <el-button type="primary"
+                     @click="submitForm">纭</el-button>
           <el-button @click="closeDia">鍙栨秷</el-button>
         </div>
       </template>
@@ -173,175 +165,180 @@
 </template>
 
 <script setup>
-import {ref, reactive, toRefs, getCurrentInstance} from "vue";
-import {staffOnJobListPage} from "@/api/personnelManagement/staffOnJob.js";
-import {createStaffLeave, updateStaffLeave} from "@/api/personnelManagement/staffLeave.js";
-const { proxy } = getCurrentInstance()
-const emit = defineEmits(['close'])
+  import { ref, reactive, toRefs, getCurrentInstance } from "vue";
+  import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
+  import {
+    createStaffLeave,
+    updateStaffLeave,
+  } from "@/api/personnelManagement/staffLeave.js";
+  const { proxy } = getCurrentInstance();
+  const emit = defineEmits(["close"]);
 
-const dialogFormVisible = ref(false);
-const operationType = ref('')
-const getTodayDate = () => {
-  const now = new Date();
-  const year = now.getFullYear();
-  const month = `${now.getMonth() + 1}`.padStart(2, '0');
-  const day = `${now.getDate()}`.padStart(2, '0');
-  return `${year}-${month}-${day}`;
-};
-
-const disabledFutureDate = (time) => {
-  const todayEnd = new Date();
-  todayEnd.setHours(23, 59, 59, 999);
-  return time.getTime() > todayEnd.getTime();
-};
-const data = reactive({
-  form: {
-    staffOnJobId: undefined,
-    leaveDate: "",
-    reason: "",
-    remark: "",
-  },
-  rules: {
-    staffName: [{ required: true, message: "璇烽�夋嫨浜哄憳" }],
-    leaveDate: [{ required: true, message: "璇烽�夋嫨绂昏亴鏃ユ湡", trigger: "change" }],
-    reason: [{ required: true, message: "璇烽�夋嫨绂昏亴鍘熷洜"}],
-  },
-  dimissionReasonOptions: [
-      {label: '钖祫寰呴亣', value: 'salary'},
-      {label: '鑱屼笟鍙戝睍', value: 'career_development'},
-      {label: '宸ヤ綔鐜', value: 'work_environment'},
-      {label: '涓汉鍘熷洜', value: 'personal_reason'},
-      {label: '鍏朵粬', value: 'other'},
-  ],
-  currentStaffRecord: {},
-});
-const { form, rules, dimissionReasonOptions, currentStaffRecord } = toRefs(data);
-
-// 鎵撳紑寮规
-const openDialog = (type, row) => {
-  operationType.value = type;
-  dialogFormVisible.value = true;
-  if (operationType.value === 'edit') {
-    currentStaffRecord.value = row
-    form.value.staffOnJobId = row.staffOnJobId
-    form.value.leaveDate = row.leaveDate
-    form.value.reason = row.reason
-    form.value.remark = row.remark
-    personList.value = [
-      {
-        staffName: row.staffName,
-        id: row.staffOnJobId,
-      }
-    ]
-  } else {
-    form.value.leaveDate = getTodayDate()
-    getList()
-  }
-}
-
-const handleSelectDimissionReason = (val) => {
-  if (val === 'other') {
-    form.value.remark = ''
-  }
-}
-// 鎻愪氦浜у搧琛ㄥ崟
-const submitForm = () => {
-  form.value.staffState = 0
-  if (form.value.reason !== 'other') {
-    form.value.remark = ''
-  }
-  proxy.$refs["formRef"].validate(valid => {
-    if (valid) {
-      if (operationType.value === "add") {
-        createStaffLeave(form.value).then(res => {
-          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-          closeDia();
-        })
-      } else {
-        updateStaffLeave(currentStaffRecord.value.id, form.value).then(res => {
-          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-          closeDia();
-        })
-      }
-    }
-  })
-
-}
-// 鍏抽棴寮规
-const closeDia = () => {
-  // 琛ㄥ崟宸叉敞閲婏紝鎵嬪姩閲嶇疆琛ㄥ崟鏁版嵁
-  form.value = {
-    staffOnJobId: undefined,
-    leaveDate: "",
-    reason: "",
-    remark: "",
+  const dialogFormVisible = ref(false);
+  const operationType = ref("");
+  const getTodayDate = () => {
+    const now = new Date();
+    const year = now.getFullYear();
+    const month = `${now.getMonth() + 1}`.padStart(2, "0");
+    const day = `${now.getDate()}`.padStart(2, "0");
+    return `${year}-${month}-${day}`;
   };
-  dialogFormVisible.value = false;
-  emit('close')
-};
 
-const personList = ref([]);
+  const disabledFutureDate = time => {
+    const todayEnd = new Date();
+    todayEnd.setHours(23, 59, 59, 999);
+    return time.getTime() > todayEnd.getTime();
+  };
+  const data = reactive({
+    form: {
+      staffOnJobId: undefined,
+      leaveDate: "",
+      reason: "",
+      remark: "",
+    },
+    rules: {
+      staffName: [{ required: true, message: "璇烽�夋嫨浜哄憳" }],
+      leaveDate: [
+        { required: true, message: "璇烽�夋嫨绂昏亴鏃ユ湡", trigger: "change" },
+      ],
+      reason: [{ required: true, message: "璇烽�夋嫨绂昏亴鍘熷洜" }],
+    },
+    dimissionReasonOptions: [
+      { label: "钖祫寰呴亣", value: "salary" },
+      { label: "鑱屼笟鍙戝睍", value: "career_development" },
+      { label: "宸ヤ綔鐜", value: "work_environment" },
+      { label: "涓汉鍘熷洜", value: "personal_reason" },
+      { label: "鍏朵粬", value: "other" },
+    ],
+    currentStaffRecord: {},
+  });
+  const { form, rules, dimissionReasonOptions, currentStaffRecord } =
+    toRefs(data);
 
-/**
- * 鑾峰彇褰撳墠鍦ㄨ亴浜哄憳鍒楄〃
- */
-const getList = () => {
-  staffOnJobListPage({
-    current: -1,
-    size: -1,
-		staffState: 1
-  }).then(res => {
-    personList.value = res.data.records || []
-  })
-};
+  // 鎵撳紑寮规
+  const openDialog = (type, row) => {
+    operationType.value = type;
+    dialogFormVisible.value = true;
+    if (operationType.value === "edit") {
+      currentStaffRecord.value = row;
+      form.value.staffOnJobId = row.staffOnJobId;
+      form.value.leaveDate = row.leaveDate;
+      form.value.reason = row.reason;
+      form.value.remark = row.remark;
+      personList.value = [
+        {
+          staffName: row.staffName,
+          id: row.staffOnJobId,
+        },
+      ];
+    } else {
+      form.value.leaveDate = getTodayDate();
+      getList();
+    }
+  };
 
-const handleSelect = (val) => {
-  let obj = personList.value.find(item => item.id === val)
-  currentStaffRecord.value = {}
-  if (obj) {
-    // 淇濈暀绂昏亴鏃ユ湡鍜岀鑱屽師鍥狅紝鍙洿鏂板憳宸ヤ俊鎭�
-    currentStaffRecord.value = obj
-  }
-}
-defineExpose({
-  openDialog,
-});
+  const handleSelectDimissionReason = val => {
+    if (val === "other") {
+      form.value.remark = "";
+    }
+  };
+  // 鎻愪氦浜у搧琛ㄥ崟
+  const submitForm = () => {
+    form.value.staffState = 0;
+    if (form.value.reason !== "other") {
+      form.value.remark = "";
+    }
+    proxy.$refs["formRef"].validate(valid => {
+      if (valid) {
+        if (operationType.value === "add") {
+          createStaffLeave(form.value).then(res => {
+            proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+            closeDia();
+          });
+        } else {
+          updateStaffLeave(currentStaffRecord.value.id, form.value).then(res => {
+            proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+            closeDia();
+          });
+        }
+      }
+    });
+  };
+  // 鍏抽棴寮规
+  const closeDia = () => {
+    // 琛ㄥ崟宸叉敞閲婏紝鎵嬪姩閲嶇疆琛ㄥ崟鏁版嵁
+    form.value = {
+      staffOnJobId: undefined,
+      leaveDate: "",
+      reason: "",
+      remark: "",
+    };
+    dialogFormVisible.value = false;
+    emit("close");
+  };
+
+  const personList = ref([]);
+
+  /**
+   * 鑾峰彇褰撳墠鍦ㄨ亴浜哄憳鍒楄〃
+   */
+  const getList = () => {
+    staffOnJobListPage({
+      current: -1,
+      size: -1,
+      staffState: 1,
+    }).then(res => {
+      personList.value = res.data.records || [];
+    });
+  };
+
+  const handleSelect = val => {
+    let obj = personList.value.find(item => item.id === val);
+    currentStaffRecord.value = {};
+    if (obj) {
+      // 淇濈暀绂昏亴鏃ユ湡鍜岀鑱屽師鍥狅紝鍙洿鏂板憳宸ヤ俊鎭�
+      currentStaffRecord.value = obj;
+    }
+  };
+  defineExpose({
+    openDialog,
+  });
 </script>
 
 <style scoped>
-.info-section {
-  background: #f5f7fa;
-  padding: 20px;
-  border-radius: 8px;
-  margin-bottom: 20px;
-}
+  .info-section {
+    background: #f5f7fa;
+    padding: 20px;
+    border-radius: 8px;
+    margin-bottom: 20px;
+  }
 
-.info-title {
-  font-size: 16px;
-  font-weight: 600;
-  color: #303133;
-  margin-bottom: 20px;
-  padding-bottom: 10px;
-  border-bottom: 1px solid #e4e7ed;
-}
+  .info-title {
+    font-size: 16px;
+    font-weight: 600;
+    color: #303133;
+    margin-bottom: 20px;
+    padding-bottom: 10px;
+    border-bottom: 1px solid #e4e7ed;
+  }
 
-.info-item {
-  display: flex;
-  align-items: center;
-  margin-bottom: 16px;
-  min-height: 32px;
-}
+  .info-item {
+    display: flex;
+    align-items: center;
+    margin-bottom: 16px;
+    min-height: 32px;
+  }
 
-.info-label {
-  min-width: 140px;
-  color: #606266;
-  font-size: 14px;
-  font-weight: 500;
-}
+  .info-label {
+    min-width: 140px;
+    color: #606266;
+    font-size: 14px;
+    font-weight: 500;
+  }
 
-.info-value {
-  flex: 1;
-  color: #303133;
-  font-size: 14px;
-}
+  .info-value {
+    flex: 1;
+    color: #303133;
+    font-size: 14px;
+  }
 </style>
diff --git a/src/views/officeProcessAutomation/HrManage/resign-apply/index.vue b/src/views/officeProcessAutomation/HrManage/resign-apply/index.vue
index 2b20970..8d96dd9 100644
--- a/src/views/officeProcessAutomation/HrManage/resign-apply/index.vue
+++ b/src/views/officeProcessAutomation/HrManage/resign-apply/index.vue
@@ -4,216 +4,206 @@
     <div class="search_form mb20">
       <div>
         <span class="search_title">濮撳悕锛�</span>
-        <el-input
-            v-model="searchForm.staffName"
-            style="width: 240px"
-            placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
-            @change="handleQuery"
-            clearable
-            :prefix-icon="Search"
-        />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-        >鎼滅储</el-button
-        >
+        <el-input v-model="searchForm.staffName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div>
-        <el-button type="primary" @click="openForm('add')">鏂板绂昏亴</el-button>
+        <el-button type="primary"
+                   @click="openForm('add')">鏂板绂昏亴</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
       </div>
     </div>
     <div class="table_list">
-      <PIMTable
-          rowKey="id"
-          :column="tableColumn"
-          :tableData="tableData"
-          :page="page"
-          :isSelection="true"
-          @selection-change="handleSelectionChange"
-          :tableLoading="tableLoading"
-          @pagination="pagination"
-          :total="page.total"
-      ></PIMTable>
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total"></PIMTable>
     </div>
-    <form-dia ref="formDia" @close="handleQuery"></form-dia>
+    <form-dia ref="formDia"
+              @close="handleQuery"></form-dia>
   </div>
 </template>
 
 <script setup>
-import { Search } from "@element-plus/icons-vue";
-import {onMounted, ref} from "vue";
-import FormDia from "@/views/personnelManagement/dimission/components/formDia.vue";
-import { findStaffLeaveListPage } from "@/api/personnelManagement/staffLeave.js";
-import {ElMessageBox} from "element-plus";
+  import { Search } from "@element-plus/icons-vue";
+  import { onMounted, ref } from "vue";
+  import FormDia from "@/views/personnelManagement/dimission/components/formDia.vue";
+  import { findStaffLeaveListPage } from "@/api/personnelManagement/staffLeave.js";
+  import { ElMessageBox } from "element-plus";
 
-const data = reactive({
-  searchForm: {
-    staffName: "",
-  },
-});
-const { searchForm } = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "鐘舵��",
-    prop: "staffState",
-    dataType: "tag",
-    formatData: (params) => {
-      if (params == 0) {
-        return "绂昏亴";
-      } else if (params == 1) {
-        return "鍦ㄨ亴";
-      } else {
-        return null;
-      }
+  const data = reactive({
+    searchForm: {
+      staffName: "",
     },
-    formatType: (params) => {
-      if (params == 0) {
-        return "danger";
-      } else if (params == 1) {
-        return "primary";
-      } else {
-        return null;
-      }
-    },
-  },
-  {
-    label: "绂昏亴鏃ユ湡",
-    prop: "leaveDate",
-  },
-  {
-    label: "鍛樺伐缂栧彿",
-    prop: "staffNo",
-  },
-  {
-    label: "濮撳悕",
-    prop: "staffName",
-  },
-  {
-    label: "鎬у埆",
-    prop: "sex",
-  },
-  {
-    label: "鎴风睄浣忓潃",
-    prop: "nativePlace",
-  },
-  {
-    label: "閮ㄩ棬",
-    prop: "deptName",
-  },
-  {
-    label: "宀椾綅",
-    prop: "postName",
-  },
-  {
-    label: "鐜颁綇鍧�",
-    prop: "adress",
-    width:200
-  },
-  {
-    label: "绗竴瀛﹀巻",
-    prop: "firstStudy",
-  },
-  {
-    label: "涓撲笟",
-    prop: "profession",
-    width:100
-  },
-  {
-    label: "骞撮緞",
-    prop: "age",
-  },
-  {
-    label: "鑱旂郴鐢佃瘽",
-    prop: "phone",
-    width:150
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉",
-    prop: "emergencyContact",
-    width: 120
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
-    prop: "emergencyContactPhone",
-    width:150
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: 'right',
-    operation: [
-      {
-        name: "缂栬緫",
-        type: "text",
-        clickFun: (row) => {
-          openForm("edit", row);
-        },
+  });
+  const { searchForm } = toRefs(data);
+  const tableColumn = ref([
+    {
+      label: "鐘舵��",
+      prop: "staffState",
+      dataType: "tag",
+      formatData: params => {
+        if (params == 0) {
+          return "绂昏亴";
+        } else if (params == 1) {
+          return "鍦ㄨ亴";
+        } else {
+          return null;
+        }
       },
-    ],
-  },
-]);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0,
-});
-const formDia = ref()
-const { proxy } = getCurrentInstance()
+      formatType: params => {
+        if (params == 0) {
+          return "danger";
+        } else if (params == 1) {
+          return "primary";
+        } else {
+          return null;
+        }
+      },
+    },
+    {
+      label: "绂昏亴鏃ユ湡",
+      prop: "leaveDate",
+    },
+    {
+      label: "鍛樺伐缂栧彿",
+      prop: "staffNo",
+    },
+    {
+      label: "濮撳悕",
+      prop: "staffName",
+    },
+    {
+      label: "鎬у埆",
+      prop: "sex",
+    },
+    {
+      label: "閮ㄩ棬",
+      prop: "deptName",
+    },
+    {
+      label: "宀椾綅",
+      prop: "postName",
+    },
+    {
+      label: "绗竴瀛﹀巻",
+      prop: "firstStudy",
+    },
+    {
+      label: "涓撲笟",
+      prop: "profession",
+      width: 100,
+    },
+    {
+      label: "骞撮緞",
+      prop: "age",
+    },
+    {
+      label: "鑱旂郴鐢佃瘽",
+      prop: "phone",
+      width: 150,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉",
+      prop: "emergencyContact",
+      width: 120,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
+      prop: "emergencyContactPhone",
+      width: 150,
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      operation: [
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            openForm("edit", row);
+          },
+        },
+      ],
+    },
+  ]);
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const formDia = ref();
+  const { proxy } = getCurrentInstance();
 
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    findStaffLeaveListPage({ ...page, ...searchForm.value })
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
 
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const pagination = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  findStaffLeaveListPage({...page, ...searchForm.value}).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
 
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
-
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         proxy.download("/staff/staffLeave/export", {}, "浜哄憳绂昏亴.xlsx");
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
-onMounted(() => {
-  getList();
-});
+  };
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped></style>
diff --git a/src/views/officeProcessAutomation/HrManage/staff-contract/index.vue b/src/views/officeProcessAutomation/HrManage/staff-contract/index.vue
index 8186bdd..91b48be 100644
--- a/src/views/officeProcessAutomation/HrManage/staff-contract/index.vue
+++ b/src/views/officeProcessAutomation/HrManage/staff-contract/index.vue
@@ -4,43 +4,57 @@
     <div class="search_form mb20">
       <div>
         <span class="search_title">濮撳悕锛�</span>
-        <el-input v-model="searchForm.staffName" style="width: 240px" placeholder="璇疯緭鍏ュ鍚嶆悳绱�" @change="handleQuery"
-          clearable :prefix-icon="Search" />
-        <span style="margin-left: 10px" class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span>
-        <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
-          placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
+        <el-input v-model="searchForm.staffName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <span style="margin-left: 10px"
+              class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span>
+        <el-date-picker v-model="searchForm.entryDate"
+                        value-format="YYYY-MM-DD"
+                        format="YYYY-MM-DD"
+                        type="daterange"
+                        placeholder="璇烽�夋嫨"
+                        clearable
+                        @change="changeDaterange" />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div>
         <el-button @click="handleOut">瀵煎嚭</el-button>
       </div>
     </div>
     <div class="table_list">
-      <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true"
-        @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"
-        :total="page.total"></PIMTable>
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total"></PIMTable>
     </div>
-    <form-dia ref="formDia" @close="handleQuery"></form-dia>
-
+    <form-dia ref="formDia"
+              @close="handleQuery"></form-dia>
     <!-- 鍚堝悓瀵煎叆瀵硅瘽妗� -->
-    <el-dialog
-      :title="upload.title"
-      v-model="upload.open"
-      width="400px"
-      append-to-body
-    >
-      <el-upload
-        ref="uploadRef"
-        :limit="1"
-        accept=".xlsx, .xls"
-        :headers="upload.headers"
-        :action="upload.url + '?updateSupport=' + upload.updateSupport"
-        :disabled="upload.isUploading"
-        :on-progress="handleFileUploadProgress"
-        :on-success="handleFileSuccess"
-        :auto-upload="false"
-        drag
-      >
+    <el-dialog :title="upload.title"
+               v-model="upload.open"
+               width="400px"
+               append-to-body>
+      <el-upload ref="uploadRef"
+                 :limit="1"
+                 accept=".xlsx, .xls"
+                 :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport"
+                 :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress"
+                 :on-success="handleFileSuccess"
+                 :auto-upload="false"
+                 drag>
         <el-icon class="el-icon--upload"><upload-filled /></el-icon>
         <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
         <template #tip>
@@ -51,7 +65,8 @@
       </el-upload>
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+          <el-button type="primary"
+                     @click="submitFileForm">纭� 瀹�</el-button>
           <el-button @click="upload.open = false">鍙� 娑�</el-button>
         </div>
       </template>
@@ -61,235 +76,232 @@
 </template>
 
 <script setup>
-import { Search } from "@element-plus/icons-vue";
-import { onMounted, ref } from "vue";
-import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue";
-import { ElMessageBox } from "element-plus";
-import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
-import dayjs from "dayjs";
-import { getToken } from "@/utils/auth.js";
-import FilesDia from "./filesDia.vue";
-const data = reactive({
-  searchForm: {
-    staffName: "",
-    entryDate: null, // 褰曞叆鏃ユ湡
-    entryDateStart: undefined,
-    entryDateEnd: undefined,
-  },
-});
-const { searchForm } = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "鐘舵��",
-    prop: "staffState",
-    dataType: "tag",
-    formatData: (params) => {
-      if (params == 0) {
-        return "绂昏亴";
-      } else if (params == 1) {
-        return "鍦ㄨ亴";
-      } else {
-        return null;
-      }
+  import { Search } from "@element-plus/icons-vue";
+  import { onMounted, ref } from "vue";
+  import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue";
+  import { ElMessageBox } from "element-plus";
+  import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
+  import dayjs from "dayjs";
+  import { getToken } from "@/utils/auth.js";
+  import FilesDia from "./filesDia.vue";
+  const data = reactive({
+    searchForm: {
+      staffName: "",
+      entryDate: null, // 褰曞叆鏃ユ湡
+      entryDateStart: undefined,
+      entryDateEnd: undefined,
     },
-    formatType: (params) => {
-      if (params == 0) {
-        return "danger";
-      } else if (params == 1) {
-        return "primary";
-      } else {
-        return null;
-      }
+  });
+  const { searchForm } = toRefs(data);
+  const tableColumn = ref([
+    {
+      label: "鐘舵��",
+      prop: "staffState",
+      dataType: "tag",
+      formatData: params => {
+        if (params == 0) {
+          return "绂昏亴";
+        } else if (params == 1) {
+          return "鍦ㄨ亴";
+        } else {
+          return null;
+        }
+      },
+      formatType: params => {
+        if (params == 0) {
+          return "danger";
+        } else if (params == 1) {
+          return "primary";
+        } else {
+          return null;
+        }
+      },
     },
-  },
-  {
-    label: "鍛樺伐缂栧彿",
-    prop: "staffNo",
-  },
-  {
-    label: "濮撳悕",
-    prop: "staffName",
-  },
-  {
-    label: "鎬у埆",
-    prop: "sex",
-  },
-  {
-    label: "鎴风睄浣忓潃",
-    prop: "nativePlace",
-  },
-  {
-    label: "宀椾綅",
-    prop: "postName",
-  },
-  {
-    label: "鐜颁綇鍧�",
-    prop: "adress",
-    width: 200
-  },
-  {
-    label: "绗竴瀛﹀巻",
-    prop: "firstStudy",
-  },
-  {
-    label: "涓撲笟",
-    prop: "profession",
-    width: 100
-  },
-  {
-    label: "骞撮緞",
-    prop: "age",
-  },
-  {
-    label: "鑱旂郴鐢佃瘽",
-    prop: "phone",
-    width: 150
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉",
-    prop: "emergencyContact",
-    width: 120
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
-    prop: "emergencyContactPhone",
-    width: 150
-  },
-  {
-    label: "鍚堝悓缁撴潫鏃ユ湡",
-    prop: "contractExpireTime",
-    width: 120
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: 'right',
-    width: 120,
-    operation: [
-      {
-        name: "璇︽儏",
-        type: "text",
-        clickFun: (row) => {
-          openForm("edit", row);
+    {
+      label: "鍛樺伐缂栧彿",
+      prop: "staffNo",
+    },
+    {
+      label: "濮撳悕",
+      prop: "staffName",
+    },
+    {
+      label: "鎬у埆",
+      prop: "sex",
+    },
+    {
+      label: "宀椾綅",
+      prop: "postName",
+    },
+    {
+      label: "绗竴瀛﹀巻",
+      prop: "firstStudy",
+    },
+    {
+      label: "涓撲笟",
+      prop: "profession",
+      width: 100,
+    },
+    {
+      label: "骞撮緞",
+      prop: "age",
+    },
+    {
+      label: "鑱旂郴鐢佃瘽",
+      prop: "phone",
+      width: 150,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉",
+      prop: "emergencyContact",
+      width: 120,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
+      prop: "emergencyContactPhone",
+      width: 150,
+    },
+    {
+      label: "鍚堝悓缁撴潫鏃ユ湡",
+      prop: "contractExpireTime",
+      width: 120,
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      width: 120,
+      operation: [
+        {
+          name: "璇︽儏",
+          type: "text",
+          clickFun: row => {
+            openForm("edit", row);
+          },
         },
-      }
-    ],
-  },
-]);
-const filesDia = ref()
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0,
-});
-const formDia = ref()
-const { proxy } = getCurrentInstance()
+      ],
+    },
+  ]);
+  const filesDia = ref();
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const formDia = ref();
+  const { proxy } = getCurrentInstance();
 
-const changeDaterange = (value) => {
-  searchForm.value.entryDateStart = undefined;
-  searchForm.value.entryDateEnd = undefined;
-  if (value) {
-    searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
-    searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
-  }
-  getList();
-};
-// 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (row) => {
-  nextTick(() => {
-    filesDia.value?.openDialog( row,'鍚堝悓')
-  })
-};
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const pagination = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  const params = { ...searchForm.value, ...page };
-  params.entryDate = undefined
-  params.staffState = 1
-  staffOnJobListPage(params).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
-
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(() => {
-      proxy.download("/staff/staffOnJob/export", {staffState: 1}, "鍚堝悓绠$悊.xlsx");
-    })
-    .catch(() => {
-      proxy.$modal.msg("宸插彇娑�");
+  const changeDaterange = value => {
+    searchForm.value.entryDateStart = undefined;
+    searchForm.value.entryDateEnd = undefined;
+    if (value) {
+      searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+      searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+    }
+    getList();
+  };
+  // 鎵撳紑闄勪欢寮规
+  const openFilesFormDia = row => {
+    nextTick(() => {
+      filesDia.value?.openDialog(row, "鍚堝悓");
     });
-};
-const upload = reactive({
-  // 鏄惁鏄剧ず寮瑰嚭灞傦紙鍚堝悓瀵煎叆锛�
-  open: false,
-  // 寮瑰嚭灞傛爣棰橈紙鍚堝悓瀵煎叆锛�
-  title: "",
-  // 鏄惁绂佺敤涓婁紶
-  isUploading: false,
-  // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
-  updateSupport: 1,
-  // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-  headers: { Authorization: "Bearer " + getToken() },
-  // 涓婁紶鐨勫湴鍧�
-  url: import.meta.env.VITE_APP_BASE_API + "/staff/staffOnJob/import",
-});
-/** 瀵煎叆鎸夐挳鎿嶄綔 */
-function handleImport() {
-  upload.title = "鍚堝悓瀵煎叆";
-  upload.open = true;
-}
-/** 鎻愪氦涓婁紶鏂囦欢 */
-function submitFileForm() {
-  proxy.$refs["uploadRef"].submit();
-}
-/**鏂囦欢涓婁紶涓鐞� */
-const handleFileUploadProgress = (event, file, fileList) => {
-  upload.isUploading = true;
-};
-/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */
-const handleFileSuccess = (response, file, fileList) => {
-  upload.open = false;
-  upload.isUploading = false;
-  proxy.$refs["uploadRef"].handleRemove(file);
-  getList();
-};
-onMounted(() => {
-  getList();
-});
+  };
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    const params = { ...searchForm.value, ...page };
+    params.entryDate = undefined;
+    params.staffState = 1;
+    staffOnJobListPage(params)
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
+
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        proxy.download(
+          "/staff/staffOnJob/export",
+          { staffState: 1 },
+          "鍚堝悓绠$悊.xlsx"
+        );
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+  const upload = reactive({
+    // 鏄惁鏄剧ず寮瑰嚭灞傦紙鍚堝悓瀵煎叆锛�
+    open: false,
+    // 寮瑰嚭灞傛爣棰橈紙鍚堝悓瀵煎叆锛�
+    title: "",
+    // 鏄惁绂佺敤涓婁紶
+    isUploading: false,
+    // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+    updateSupport: 1,
+    // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+    headers: { Authorization: "Bearer " + getToken() },
+    // 涓婁紶鐨勫湴鍧�
+    url: import.meta.env.VITE_APP_BASE_API + "/staff/staffOnJob/import",
+  });
+  /** 瀵煎叆鎸夐挳鎿嶄綔 */
+  function handleImport() {
+    upload.title = "鍚堝悓瀵煎叆";
+    upload.open = true;
+  }
+  /** 鎻愪氦涓婁紶鏂囦欢 */
+  function submitFileForm() {
+    proxy.$refs["uploadRef"].submit();
+  }
+  /**鏂囦欢涓婁紶涓鐞� */
+  const handleFileUploadProgress = (event, file, fileList) => {
+    upload.isUploading = true;
+  };
+  /** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */
+  const handleFileSuccess = (response, file, fileList) => {
+    upload.open = false;
+    upload.isUploading = false;
+    proxy.$refs["uploadRef"].handleRemove(file);
+    getList();
+  };
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped></style>
diff --git a/src/views/officeProcessAutomation/HrManage/transfer-apply/index.vue b/src/views/officeProcessAutomation/HrManage/transfer-apply/index.vue
index f731d57..8b43805 100644
--- a/src/views/officeProcessAutomation/HrManage/transfer-apply/index.vue
+++ b/src/views/officeProcessAutomation/HrManage/transfer-apply/index.vue
@@ -58,6 +58,7 @@
       :fields="submitFormFields"
       :active-template="activeTemplate"
       :user-options="flowUserOptions"
+      :module-key="APPROVAL_MODULE_KEYS.TRANSFER"
       :is-edit="isSubmitEdit"
       :saving="submitSaving"
       :form-ref="submitFormRef"
diff --git a/src/views/officeProcessAutomation/HrManage/work-handover/index.vue b/src/views/officeProcessAutomation/HrManage/work-handover/index.vue
index a9b96ae..37ff223 100644
--- a/src/views/officeProcessAutomation/HrManage/work-handover/index.vue
+++ b/src/views/officeProcessAutomation/HrManage/work-handover/index.vue
@@ -58,6 +58,7 @@
       :fields="submitFormFields"
       :active-template="activeTemplate"
       :user-options="flowUserOptions"
+      :module-key="APPROVAL_MODULE_KEYS.WORK_HANDOVER"
       :is-edit="isSubmitEdit"
       :saving="submitSaving"
       :form-ref="submitFormRef"
diff --git a/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue b/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue
index cbbb8af..0ddea67 100644
--- a/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue
+++ b/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue
@@ -37,11 +37,17 @@
           <el-option v-for="item in shifts_list"
                      :key="item.value"
                      :label="item.label"
-                     :value="item.value" />
+                     :value="item.value"
+                     :disabled="
+              operationType === 'add' &&
+              (String(item.label || '').includes('鍋�') ||
+                String(item.label || '').includes('浼�'))
+            " />
         </el-select>
       </el-form-item>
       <el-form-item label="鎵撳崱鑼冨洿(m)"
-                    prop="radius">
+                    prop="radius"
+                    v-show="!hideClockFields">
         <el-input-number v-model="form.radius"
                          :min="10"
                          :max="1000"
@@ -51,7 +57,8 @@
       </el-form-item>
       <!-- 楂樺痉鍦板浘閫夋嫨 -->
       <el-form-item label="鎵撳崱浣嶇疆"
-                    prop="longitude">
+                    prop="longitude"
+                    v-show="!hideClockFields">
         <div class="map-container">
           <div class="map-header"
                style="margin-bottom: 10px">
@@ -82,14 +89,16 @@
         </div>
       </el-form-item>
       <el-form-item label="鍦扮偣鍚嶇О"
-                    prop="locationName">
+                    prop="locationName"
+                    v-show="!hideClockFields">
         <el-input v-model="form.locationName"
                   :disabled="operationType === 'view'"
                   placeholder="璇疯緭鍏ュ湴鐐瑰悕绉�" />
       </el-form-item>
       <!-- 涓婁笅鐝椂闂� -->
       <el-form-item label="涓婄彮鏃堕棿"
-                    prop="startAt">
+                    prop="startAt"
+                    v-show="!hideClockFields">
         <el-time-picker v-model="form.startAt"
                         format="HH:mm"
                         value-format="HH:mm"
@@ -97,7 +106,8 @@
                         :disabled="operationType === 'view'" />
       </el-form-item>
       <el-form-item label="涓嬬彮鏃堕棿"
-                    prop="endAt">
+                    prop="endAt"
+                    v-show="!hideClockFields">
         <el-time-picker v-model="form.endAt"
                         format="HH:mm"
                         value-format="HH:mm"
@@ -110,7 +120,9 @@
     </el-form>
     <template #footer>
       <span class="dialog-footer">
-        <el-button type="primary" @click="submitForm" v-if="operationType !== 'view'">纭畾</el-button>
+        <el-button type="primary"
+                   @click="submitForm"
+                   v-if="operationType !== 'view'">纭畾</el-button>
         <el-button @click="dialogVisible = false">鍙栨秷</el-button>
       </span>
     </template>
@@ -157,6 +169,21 @@
   // 鑾峰彇鐝瀛楀吀鍊�
   const { shifts_list } = useDict("shifts_list");
 
+  const selectedShiftLabel = computed(() => {
+    const item = shifts_list.value?.find(
+      s => String(s.value) === String(form.shift)
+    );
+    return item?.label || "";
+  });
+
+  const hideClockFields = computed(() => {
+    if (props.operationType === "view") return false;
+    return (
+      selectedShiftLabel.value.includes("鍋�") ||
+      selectedShiftLabel.value.includes("浼�")
+    );
+  });
+
   // 琛ㄥ崟鏁版嵁
   const formRef = ref();
   const form = reactive({
@@ -172,44 +199,53 @@
   });
 
   // 琛ㄥ崟楠岃瘉瑙勫垯
-  const rules = {
-    sysDeptId: [{ required: true, message: "璇烽�夋嫨閮ㄩ棬", trigger: "change" }],
-    locationName: [
-      { required: true, message: "璇疯緭鍏ュ湴鐐瑰悕绉�", trigger: "blur" },
-    ],
-    longitude: [{ required: true, message: "璇烽�夋嫨鎵撳崱浣嶇疆", trigger: "blur" }],
-    latitude: [{ required: true, message: "璇烽�夋嫨鎵撳崱浣嶇疆", trigger: "blur" }],
-    shift: [{ required: true, message: "璇烽�夋嫨鐝", trigger: "change" }],
-    radius: [{ required: true, message: "璇疯緭鍏ユ墦鍗¤寖鍥�", trigger: "blur" }],
-    startAt: [{ required: true, message: "璇烽�夋嫨涓婄彮鏃堕棿", trigger: "change" }],
-    endAt: [
-      { required: true, message: "璇烽�夋嫨涓嬬彮鏃堕棿", trigger: "change" },
-      {
-        validator: (rule, value, callback) => {
-          // 濡傛灉鏄鐝紝涓嶉檺鍒舵椂闂撮『搴�
-          if (form.shift && ['澶滅彮', '澶�'].includes(form.shift)) {
-            callback();
-            return;
-          }
-          if (form.startAt && value) {
-            const startParts = form.startAt.split(":");
-            const endParts = value.split(":");
-            const startTime =
-              parseInt(startParts[0]) * 60 + parseInt(startParts[1]);
-            const endTime = parseInt(endParts[0]) * 60 + parseInt(endParts[1]);
-            if (endTime <= startTime) {
-              callback(new Error("涓嬬彮鏃堕棿涓嶈兘鏃╀簬涓婄彮鏃堕棿"));
+  const rules = computed(() => {
+    const base = {
+      sysDeptId: [{ required: true, message: "璇烽�夋嫨閮ㄩ棬", trigger: "change" }],
+      shift: [{ required: true, message: "璇烽�夋嫨鐝", trigger: "change" }],
+    };
+
+    if (hideClockFields.value) {
+      return base;
+    }
+
+    return {
+      ...base,
+      locationName: [
+        { required: true, message: "璇疯緭鍏ュ湴鐐瑰悕绉�", trigger: "blur" },
+      ],
+      longitude: [{ required: true, message: "璇烽�夋嫨鎵撳崱浣嶇疆", trigger: "blur" }],
+      latitude: [{ required: true, message: "璇烽�夋嫨鎵撳崱浣嶇疆", trigger: "blur" }],
+      radius: [{ required: true, message: "璇疯緭鍏ユ墦鍗¤寖鍥�", trigger: "blur" }],
+      startAt: [{ required: true, message: "璇烽�夋嫨涓婄彮鏃堕棿", trigger: "change" }],
+      endAt: [
+        { required: true, message: "璇烽�夋嫨涓嬬彮鏃堕棿", trigger: "change" },
+        {
+          validator: (rule, value, callback) => {
+            if (form.shift && ["澶滅彮", "澶�"].includes(form.shift)) {
+              callback();
+              return;
+            }
+            if (form.startAt && value) {
+              const startParts = form.startAt.split(":");
+              const endParts = value.split(":");
+              const startTime =
+                parseInt(startParts[0]) * 60 + parseInt(startParts[1]);
+              const endTime = parseInt(endParts[0]) * 60 + parseInt(endParts[1]);
+              if (endTime <= startTime) {
+                callback(new Error("涓嬬彮鏃堕棿涓嶈兘鏃╀簬涓婄彮鏃堕棿"));
+              } else {
+                callback();
+              }
             } else {
               callback();
             }
-          } else {
-            callback();
-          }
+          },
+          trigger: "change",
         },
-        trigger: "change",
-      },
-    ],
-  };
+      ],
+    };
+  });
 
   // 閮ㄩ棬閫夐」
   const deptOptions = ref([]);
@@ -393,8 +429,8 @@
   watch(
     () => form.radius,
     newValue => {
-      if (circle) {
-        circle.setRadius(newValue);
+      if (circle && newValue != null && newValue !== "") {
+        circle.setRadius(Number(newValue));
       }
     }
   );
@@ -405,6 +441,29 @@
     () => {
       if (formRef.value && form.endAt) {
         formRef.value.validateField("endAt");
+      }
+    }
+  );
+
+  watch(
+    () => hideClockFields.value,
+    val => {
+      if (!val) return;
+      form.radius = null;
+      form.longitude = "";
+      form.latitude = "";
+      form.locationName = "";
+      form.startAt = "";
+      form.endAt = "";
+      if (formRef.value) {
+        formRef.value.clearValidate([
+          "radius",
+          "longitude",
+          "latitude",
+          "locationName",
+          "startAt",
+          "endAt",
+        ]);
       }
     }
   );
@@ -442,7 +501,9 @@
 
         // 鍒濆鍖栧湴鍥�
         setTimeout(() => {
-          initMap();
+          if (!hideClockFields.value) {
+            initMap();
+          }
         }, 100);
       }
     }
@@ -513,4 +574,4 @@
   .mt8 {
     margin-top: 8px;
   }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/personnelManagement/attendanceCheckin/checkinRules/index.vue b/src/views/personnelManagement/attendanceCheckin/checkinRules/index.vue
index c47dd2e..8bebe3b 100644
--- a/src/views/personnelManagement/attendanceCheckin/checkinRules/index.vue
+++ b/src/views/personnelManagement/attendanceCheckin/checkinRules/index.vue
@@ -13,30 +13,37 @@
         </el-button>
       </div>
     </div>
-    <!-- 鏌ヨ鏉′欢 -->
-    <!-- <el-form :model="searchForm"
+    <el-form :model="searchForm"
              :inline="true"
              class="search-form mb16">
       <el-form-item label="閮ㄩ棬锛�"
-                    prop="countId">
-        <el-tree-select v-model="searchForm.countId"
+                    prop="sysDeptId">
+        <el-tree-select v-model="searchForm.sysDeptId"
                         :data="deptOptions"
                         :props="{ value: 'id', label: 'label', children: 'children' }"
                         value-key="id"
                         placeholder="璇烽�夋嫨閮ㄩ棬"
                         check-strictly
+                        clearable
                         style="width: 200px" />
       </el-form-item>
-      <el-form-item label="鍦扮偣锛�"
-                    prop="locationName">
-        <el-input v-model="searchForm.locationName"
-                  placeholder="璇疯緭鍏ュ湴鐐瑰悕绉�"
-                  clearable
-                  style="width: 200px" />
+      <el-form-item label="鐝锛�"
+                    prop="shift">
+        <el-select v-model="searchForm.shift"
+                   placeholder="璇烽�夋嫨鐝"
+                   clearable
+                   style="width: 200px">
+          <el-option
+              v-for="item in shifts_list"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+          />
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary"
-                   @click="fetchData">
+                   @click="handleSearch">
           <el-icon>
             <Search />
           </el-icon>
@@ -49,7 +56,7 @@
           閲嶇疆
         </el-button>
       </el-form-item>
-    </el-form> -->
+    </el-form>
     <!-- 鐝鍒楄〃 -->
     <el-card shadow="never"
              class="mb16">
@@ -74,23 +81,39 @@
           </template>
         </el-table-column>
         <el-table-column prop="locationName"
-                         label="鍦扮偣鍚嶇О" />
+                         label="鍦扮偣鍚嶇О">
+          <template #default="scope">
+            {{ scope.row.locationName || "-" }}
+          </template>
+        </el-table-column>
         <el-table-column prop="longitude"
-                         label="缁忓害" />
+                         label="缁忓害">
+          <template #default="scope">
+            {{ scope.row.longitude ?? "-" }}
+          </template>
+        </el-table-column>
         <el-table-column prop="latitude"
-                         label="绾害" />
+                         label="绾害">
+          <template #default="scope">
+            {{ scope.row.latitude ?? "-" }}
+          </template>
+        </el-table-column>
         <el-table-column prop="radius"
-                         label="鎵撳崱鑼冨洿(m)" />
+                         label="鎵撳崱鑼冨洿(m)">
+          <template #default="scope">
+            {{ scope.row.radius ?? "-" }}
+          </template>
+        </el-table-column>
         <el-table-column prop="startAt"
                          label="涓婄彮鏃堕棿">
           <template #default="scope">
-            {{ scope.row.startAt }}
+            {{ scope.row.startAt || "-" }}
           </template>
         </el-table-column>
         <el-table-column prop="endAt"
                          label="涓嬬彮鏃堕棿">
           <template #default="scope">
-            {{ scope.row.endAt }}
+            {{ scope.row.endAt || "-" }}
           </template>
         </el-table-column>
         <el-table-column label="鎿嶄綔"
@@ -124,7 +147,7 @@
 </template>
 
 <script setup>
-  import { ref, reactive, onMounted } from "vue";
+  import { ref, reactive, onMounted, getCurrentInstance } from "vue";
   import { ElMessage, ElMessageBox } from "element-plus";
   import {
     Plus,
@@ -158,8 +181,8 @@
 
   // 鏌ヨ琛ㄥ崟
   const searchForm = reactive({
-    countId: "",
-    locationName: "",
+    sysDeptId: "",
+    shift: "",
   });
 
   // 閮ㄩ棬閫夐」
@@ -232,12 +255,18 @@
     tableLoading.value = true;
     getAttendanceRules({ ...page, ...searchForm })
       .then(res => {
-        tableData.value = res.data.records;
+        const records = Array.isArray(res?.data?.records) ? res.data.records : [];
+        tableData.value = records.filter(r => String(r?.id) !== "999");
         page.total = res.data.total;
       })
       .finally(() => {
         tableLoading.value = false;
       });
+  };
+
+  const handleSearch = () => {
+    page.current = 1;
+    fetchData();
   };
 
   // 鍒嗛〉鍙樻洿
@@ -249,8 +278,9 @@
 
   // 閲嶇疆鎼滅储
   const resetSearch = () => {
-    searchForm.countId = "";
-    searchForm.locationName = "";
+    searchForm.sysDeptId = "";
+    searchForm.shift = "";
+    page.current = 1;
     fetchData();
   };
 
diff --git a/src/views/personnelManagement/classsSheduling/index.vue b/src/views/personnelManagement/classsSheduling/index.vue
index 140ffba..8228be9 100644
--- a/src/views/personnelManagement/classsSheduling/index.vue
+++ b/src/views/personnelManagement/classsSheduling/index.vue
@@ -149,12 +149,12 @@
                       'shift-box-early': m.shift === '鏃╃彮',
                       'shift-box-mid': m.shift === '涓彮',
                       'shift-box-night': m.shift === '澶滅彮',
-                      'shift-box-rest': m.shift === '浼戞伅',
+                      'shift-box-rest': !m.shift || m.shift === '浼戞伅',
                       'shift-box-leave': m.shift === '璇峰亣',
                       'shift-box-other': m.shift === '澶�11',
                       'shift-box-business': m.shift === '澶�12',
                     }">
-                      <span class="shift-text">{{ getShiftNameByValue(m.shift) || '鈥�' }}</span>
+                      <span class="shift-text">{{ getShiftNameByValue(m.shift) || '浼戞伅' }}</span>
                     </div>
                     <template #dropdown>
                       <el-dropdown-menu>
@@ -199,7 +199,7 @@
               </div> -->
               <div class="user-total">
                 <span class="total-label">鍚堣鍑哄嫟:</span>
-                <span class="total-value">{{ item.work_time }}澶�</span>
+                <span class="total-value">{{ item.year.totalYearAttendance }}澶�</span>
               </div>
             </div>
           </div>
@@ -271,6 +271,23 @@
       <div class="search_thing">
         <div class="search_label"
              style="width: 90px">
+          <span style="color: red; margin-right: 4px">*</span>閮ㄩ棬锛�
+        </div>
+        <div class="search_input">
+          <el-tree-select v-model="schedulingQuery.deptId"
+                          :data="deptOptions"
+                          :props="{ value: 'id', label: 'label', children: 'children' }"
+                          value-key="id"
+                          placeholder="璇烽�夋嫨閮ㄩ棬"
+                          check-strictly
+                          clearable
+                          @change="onSchedulingDeptChange"
+                          style="width: 100%" />
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label"
+             style="width: 90px">
           <span style="color: red; margin-right: 4px">*</span>浜哄憳鍚嶇О锛�
         </div>
         <div class="search_input">
@@ -279,7 +296,8 @@
                      style="width: 100%"
                      multiple
                      clearable
-                     collapse-tags>
+                     collapse-tags
+                     :disabled="!schedulingQuery.deptId">
             <el-option v-for="item in personList"
                        :key="item.id"
                        :label="item.staffName"
@@ -296,8 +314,9 @@
         <div class="search_input">
           <el-select v-model="schedulingQuery.shift"
                      placeholder="璇烽�夋嫨"
-                     style="width: 100%">
-            <el-option v-for="item in classType"
+                     style="width: 100%"
+                     :disabled="!schedulingQuery.deptId">
+            <el-option v-for="item in schedulingClassType"
                        :key="item.id"
                        :label="getShiftNameByValue(item.shift)"
                        :value="item.id">
@@ -318,7 +337,14 @@
 </template>
 
 <script setup>
-  import { ref, reactive, onMounted, getCurrentInstance } from "vue";
+  import {
+    ref,
+    reactive,
+    computed,
+    watch,
+    onMounted,
+    getCurrentInstance,
+  } from "vue";
   import { useRouter } from "vue-router";
   import {
     page,
@@ -376,6 +402,7 @@
 
   // 浜哄憳鍒楄〃
   const personList = ref([]);
+  const personListAll = ref([]);
 
   // 鍔犺浇鐘舵��
   const loading = ref(false);
@@ -383,8 +410,18 @@
   // 鎺掔彮鏌ヨ鏉′欢
   const schedulingQuery = reactive({
     week: "",
+    deptId: "",
     userId: null,
     shift: "",
+  });
+
+  const schedulingClassType = computed(() => {
+    if (!schedulingQuery.deptId) return classType.value || [];
+    return (classType.value || []).filter(item => {
+      if (["998", "999"].includes(String(item?.id))) return true;
+      const itemDeptId = item.deptId ?? item.sysDeptId ?? item.dept_id;
+      return String(itemDeptId) === String(schedulingQuery.deptId);
+    });
   });
 
   // 鍒楄〃鏁版嵁
@@ -593,6 +630,10 @@
       proxy.$modal.msgError("璇烽�夋嫨鍛ㄦ");
       return;
     }
+    if (!schedulingQuery.deptId) {
+      proxy.$modal.msgError("璇烽�夋嫨閮ㄩ棬");
+      return;
+    }
     let time = schedulingQuery.week.getTime();
 
     // 鏍煎紡鍖栨棩鏈熶负 YYYY-MM-DD 鏍煎紡
@@ -628,8 +669,10 @@
         proxy.$modal.msgSuccess("鎿嶄綔鎴愬姛");
         schedulingVisible.value = false;
         schedulingQuery.week = "";
+        schedulingQuery.deptId = "";
         schedulingQuery.userId = null;
         schedulingQuery.shift = "";
+        personList.value = [];
         refresh();
       })
       .catch(err => {
@@ -683,8 +726,7 @@
         }
         proxy.$download.saveAs(blob, fileName + ".xlsx");
       })
-      .catch(err => {
-      })
+      .catch(err => {})
       .finally(() => {
         downLoading.value = false;
       });
@@ -709,7 +751,18 @@
   // 鏌ヨ瑙勫垯鍒楄〃
   const fetchData = () => {
     getAttendanceRules({ current: -1, size: -1 }).then(res => {
-      classType.value = res.data.records;
+      const records = Array.isArray(res?.data?.records) ? res.data.records : [];
+      const appendList = [
+        { id: 998, shift: "浼戞伅" },
+        { id: 999, shift: "璇峰亣" },
+      ];
+      const exists = new Set(records.map(r => String(r?.id)));
+      appendList.forEach(item => {
+        if (!exists.has(String(item.id))) {
+          records.push(item);
+        }
+      });
+      classType.value = records;
     });
   };
   // 鑾峰彇鐢ㄦ埛
@@ -724,8 +777,61 @@
       staffState: 1,
     }).then(res => {
       let arr = res.data.records;
-      personList.value = arr;
+      personListAll.value = arr;
+      updatePersonListByDept();
     });
+  };
+
+  const findDeptNodeById = (deptId, deptList = deptOptions.value) => {
+    const list = Array.isArray(deptList) ? deptList : [];
+    for (const node of list) {
+      if (String(node.id) === String(deptId)) return node;
+      if (node.children && node.children.length) {
+        const found = findDeptNodeById(deptId, node.children);
+        if (found) return found;
+      }
+    }
+    return null;
+  };
+
+  const collectDeptIds = node => {
+    const ids = [];
+    if (!node) return ids;
+    ids.push(String(node.id));
+    if (node.children && node.children.length) {
+      node.children.forEach(child => {
+        ids.push(...collectDeptIds(child));
+      });
+    }
+    return ids;
+  };
+
+  const updatePersonListByDept = () => {
+    if (!schedulingQuery.deptId) {
+      personList.value = [];
+      return;
+    }
+    const node = findDeptNodeById(schedulingQuery.deptId);
+    const deptIds = new Set(collectDeptIds(node));
+    personList.value = (personListAll.value || []).filter(item => {
+      const itemDeptId = item.deptId ?? item.sysDeptId ?? item.dept_id;
+      return deptIds.has(String(itemDeptId));
+    });
+  };
+
+  const setDefaultShiftByDept = () => {
+    if (!schedulingQuery.deptId) {
+      schedulingQuery.shift = "";
+      return;
+    }
+    const first = schedulingClassType.value?.[0];
+    schedulingQuery.shift = first ? first.id : "";
+  };
+
+  const onSchedulingDeptChange = () => {
+    schedulingQuery.userId = null;
+    updatePersonListByDept();
+    setDefaultShiftByDept();
   };
 
   // 鏍规嵁瀛楀吀鑾峰彇鏃ユ湡
@@ -761,6 +867,27 @@
     }
     monthList.value.reverse();
   });
+
+  watch(
+    () => classType.value,
+    () => {
+      if (schedulingVisible.value && schedulingQuery.deptId) {
+        setDefaultShiftByDept();
+      }
+    }
+  );
+
+  watch(
+    () => schedulingVisible.value,
+    val => {
+      if (!val) return;
+      schedulingQuery.week = "";
+      schedulingQuery.deptId = "";
+      schedulingQuery.userId = null;
+      schedulingQuery.shift = "";
+      personList.value = [];
+    }
+  );
 </script>
 
 <style scoped>
@@ -973,7 +1100,7 @@
   .user-stats {
     /* display: flex; */
     /* flex-wrap: wrap;
-                                                                                                                                                                                                                                                                                        gap: 10px; */
+                                                                                                                                                                                                                                                                                                      gap: 10px; */
     margin-bottom: 4px;
   }
 
diff --git a/src/views/personnelManagement/contractManagement/index.vue b/src/views/personnelManagement/contractManagement/index.vue
index ae0087e..bde498a 100644
--- a/src/views/personnelManagement/contractManagement/index.vue
+++ b/src/views/personnelManagement/contractManagement/index.vue
@@ -3,52 +3,64 @@
     <div class="search_form mb20">
       <div>
         <span class="search_title">濮撳悕锛�</span>
-        <el-input v-model="searchForm.staffName" style="width: 240px" placeholder="璇疯緭鍏ュ鍚嶆悳绱�" @change="handleQuery"
-          clearable :prefix-icon="Search" />
-        <span style="margin-left: 10px" class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span>
-        <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
-          placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
+        <el-input v-model="searchForm.staffName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <span style="margin-left: 10px"
+              class="search_title">鍚堝悓缁撴潫鏃ユ湡锛�</span>
+        <el-date-picker v-model="searchForm.entryDate"
+                        value-format="YYYY-MM-DD"
+                        format="YYYY-MM-DD"
+                        type="daterange"
+                        placeholder="璇烽�夋嫨"
+                        clearable
+                        @change="changeDaterange" />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div>
         <!--        <el-button type="primary" @click="openForm('add')">鏂板鍏ヨ亴</el-button>-->
-<!--        <el-button type="info" @click="handleImport">瀵煎叆</el-button>-->
+        <!--        <el-button type="info" @click="handleImport">瀵煎叆</el-button>-->
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <!--        <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>-->
       </div>
     </div>
     <div class="table_list">
-      <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true"
-        @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"
-        :total="page.total"></PIMTable>
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total"></PIMTable>
     </div>
-    <form-dia ref="formDia" @close="handleQuery"></form-dia>
-    <renew-contract
-        v-if="isShowRenewContractModal"
-        v-model:visible="isShowRenewContractModal"
-        :id="id"
-        @completed="handleQuery"
-    />
-
+    <form-dia ref="formDia"
+              @close="handleQuery"></form-dia>
+    <renew-contract v-if="isShowRenewContractModal"
+                    v-model:visible="isShowRenewContractModal"
+                    :id="id"
+                    @completed="handleQuery" />
     <!-- 鍚堝悓瀵煎叆瀵硅瘽妗� -->
-    <el-dialog
-      :title="upload.title"
-      v-model="upload.open"
-      width="400px"
-      append-to-body
-    >
-      <el-upload
-        ref="uploadRef"
-        :limit="1"
-        accept=".xlsx, .xls"
-        :headers="upload.headers"
-        :action="upload.url + '?updateSupport=' + upload.updateSupport"
-        :disabled="upload.isUploading"
-        :on-progress="handleFileUploadProgress"
-        :on-success="handleFileSuccess"
-        :auto-upload="false"
-        drag
-      >
+    <el-dialog :title="upload.title"
+               v-model="upload.open"
+               width="400px"
+               append-to-body>
+      <el-upload ref="uploadRef"
+                 :limit="1"
+                 accept=".xlsx, .xls"
+                 :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport"
+                 :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress"
+                 :on-success="handleFileSuccess"
+                 :auto-upload="false"
+                 drag>
         <el-icon class="el-icon--upload"><upload-filled /></el-icon>
         <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
         <template #tip>
@@ -66,7 +78,8 @@
       </el-upload>
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+          <el-button type="primary"
+                     @click="submitFileForm">纭� 瀹�</el-button>
           <el-button @click="upload.open = false">鍙� 娑�</el-button>
         </div>
       </template>
@@ -76,258 +89,259 @@
 </template>
 
 <script setup>
-import { Search } from "@element-plus/icons-vue";
-import { onMounted, ref, defineAsyncComponent } from "vue";
-import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue";
-const RenewContract = defineAsyncComponent(() => import("@/views/personnelManagement/employeeRecord/components/RenewContract.vue"));
-import { ElMessageBox } from "element-plus";
-import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
-import dayjs from "dayjs";
-import { getToken } from "@/utils/auth.js";
-import FilesDia from "./filesDia.vue";
-const data = reactive({
-  searchForm: {
-    staffName: "",
-    entryDate: null, // 褰曞叆鏃ユ湡
-    entryDateStart: undefined,
-    entryDateEnd: undefined,
-  },
-});
-const { searchForm } = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "鐘舵��",
-    prop: "staffState",
-    dataType: "tag",
-    formatData: (params) => {
-      if (params == 0) {
-        return "绂昏亴";
-      } else if (params == 1) {
-        return "鍦ㄨ亴";
-      } else {
-        return null;
-      }
+  import { Search } from "@element-plus/icons-vue";
+  import { onMounted, ref, defineAsyncComponent } from "vue";
+  import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue";
+  const RenewContract = defineAsyncComponent(() =>
+    import(
+      "@/views/personnelManagement/employeeRecord/components/RenewContract.vue"
+    )
+  );
+  import { ElMessageBox } from "element-plus";
+  import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
+  import dayjs from "dayjs";
+  import { getToken } from "@/utils/auth.js";
+  import FilesDia from "./filesDia.vue";
+  const data = reactive({
+    searchForm: {
+      staffName: "",
+      entryDate: null, // 褰曞叆鏃ユ湡
+      entryDateStart: undefined,
+      entryDateEnd: undefined,
     },
-    formatType: (params) => {
-      if (params == 0) {
-        return "danger";
-      } else if (params == 1) {
-        return "primary";
-      } else {
-        return null;
-      }
-    },
-  },
-  {
-    label: "鍛樺伐缂栧彿",
-    prop: "staffNo",
-  },
-  {
-    label: "濮撳悕",
-    prop: "staffName",
-  },
-  {
-    label: "鎬у埆",
-    prop: "sex",
-  },
-  {
-    label: "鎴风睄浣忓潃",
-    prop: "nativePlace",
-  },
-  {
-    label: "宀椾綅",
-    prop: "postName",
-  },
-  {
-    label: "鐜颁綇鍧�",
-    prop: "adress",
-    width: 200
-  },
-  {
-    label: "绗竴瀛﹀巻",
-    prop: "firstStudy",
-  },
-  {
-    label: "涓撲笟",
-    prop: "profession",
-    width: 100
-  },
-  {
-    label: "骞撮緞",
-    prop: "age",
-  },
-  {
-    label: "鑱旂郴鐢佃瘽",
-    prop: "phone",
-    width: 150
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉",
-    prop: "emergencyContact",
-    width: 120
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
-    prop: "emergencyContactPhone",
-    width: 150
-  },
-  // {
-  //   label: "鍚堝悓骞撮檺",
-  //   prop: "contractTerm",
-  // },
-  // {
-  //   label: "鍚堝悓寮�濮嬫棩鏈�",
-  //   prop: "contractStartTime",
-  //   width: 120
-  // },
-  {
-    label: "鍚堝悓缁撴潫鏃ユ湡",
-    prop: "contractExpireTime",
-    width: 120
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: 'right',
-    width: 160,
-    operation: [
-      {
-        name: "璇︽儏",
-        type: "text",
-        clickFun: (row) => {
-          openForm("edit", row);
-        },
+  });
+  const { searchForm } = toRefs(data);
+  const tableColumn = ref([
+    {
+      label: "鐘舵��",
+      prop: "staffState",
+      dataType: "tag",
+      formatData: params => {
+        if (params == 0) {
+          return "绂昏亴";
+        } else if (params == 1) {
+          return "鍦ㄨ亴";
+        } else {
+          return null;
+        }
       },
-      {
-        name: "缁鍚堝悓",
-        type: "text",
-        showHide: row => row.staffState === 1,
-        clickFun: (row) => {
-          isShowRenewContractModal.value = true;
-          id.value = row.id;
+      formatType: params => {
+        if (params == 0) {
+          return "danger";
+        } else if (params == 1) {
+          return "primary";
+        } else {
+          return null;
+        }
+      },
+    },
+    {
+      label: "鍛樺伐缂栧彿",
+      prop: "staffNo",
+    },
+    {
+      label: "濮撳悕",
+      prop: "staffName",
+    },
+    {
+      label: "鎬у埆",
+      prop: "sex",
+    },
+    {
+      label: "宀椾綅",
+      prop: "postName",
+    },
+    {
+      label: "绗竴瀛﹀巻",
+      prop: "firstStudy",
+    },
+    {
+      label: "涓撲笟",
+      prop: "profession",
+      width: 100,
+    },
+    {
+      label: "骞撮緞",
+      prop: "age",
+    },
+    {
+      label: "鑱旂郴鐢佃瘽",
+      prop: "phone",
+      width: 150,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉",
+      prop: "emergencyContact",
+      width: 120,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
+      prop: "emergencyContactPhone",
+      width: 150,
+    },
+    // {
+    //   label: "鍚堝悓骞撮檺",
+    //   prop: "contractTerm",
+    // },
+    // {
+    //   label: "鍚堝悓寮�濮嬫棩鏈�",
+    //   prop: "contractStartTime",
+    //   width: 120
+    // },
+    {
+      label: "鍚堝悓缁撴潫鏃ユ湡",
+      prop: "contractExpireTime",
+      width: 120,
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      width: 160,
+      operation: [
+        {
+          name: "璇︽儏",
+          type: "text",
+          clickFun: row => {
+            openForm("edit", row);
+          },
         },
-      }
-    ],
-  },
-]);
-const filesDia = ref()
-const isShowRenewContractModal = ref(false);
-const id = ref(0);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0,
-});
-const formDia = ref()
-const { proxy } = getCurrentInstance()
+        {
+          name: "缁鍚堝悓",
+          type: "text",
+          showHide: row => row.staffState === 1,
+          clickFun: row => {
+            isShowRenewContractModal.value = true;
+            id.value = row.id;
+          },
+        },
+      ],
+    },
+  ]);
+  const filesDia = ref();
+  const isShowRenewContractModal = ref(false);
+  const id = ref(0);
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const formDia = ref();
+  const { proxy } = getCurrentInstance();
 
-const changeDaterange = (value) => {
-  searchForm.value.entryDateStart = undefined;
-  searchForm.value.entryDateEnd = undefined;
-  if (value) {
-    searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
-    searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
-  }
-  getList();
-};
-// 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (row) => {
-  console.log(row)
-  nextTick(() => {
-    filesDia.value?.openDialog( row,'鍚堝悓')
-  })
-};
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const pagination = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  const params = { ...searchForm.value, ...page };
-  params.entryDate = undefined
-  params.staffState = 1
-  staffOnJobListPage(params).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
-
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(() => {
-      proxy.download("/staff/staffOnJob/export", {staffState: 1}, "鍚堝悓绠$悊.xlsx");
-    })
-    .catch(() => {
-      proxy.$modal.msg("宸插彇娑�");
+  const changeDaterange = value => {
+    searchForm.value.entryDateStart = undefined;
+    searchForm.value.entryDateEnd = undefined;
+    if (value) {
+      searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+      searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+    }
+    getList();
+  };
+  // 鎵撳紑闄勪欢寮规
+  const openFilesFormDia = row => {
+    console.log(row);
+    nextTick(() => {
+      filesDia.value?.openDialog(row, "鍚堝悓");
     });
-};
-const upload = reactive({
-  // 鏄惁鏄剧ず寮瑰嚭灞傦紙鍚堝悓瀵煎叆锛�
-  open: false,
-  // 寮瑰嚭灞傛爣棰橈紙鍚堝悓瀵煎叆锛�
-  title: "",
-  // 鏄惁绂佺敤涓婁紶
-  isUploading: false,
-  // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
-  updateSupport: 1,
-  // 璁剧疆涓婁紶鐨勮姹傚ご閮�
-  headers: { Authorization: "Bearer " + getToken() },
-  // 涓婁紶鐨勫湴鍧�
-  url: import.meta.env.VITE_APP_BASE_API + "/staff/staffOnJob/import",
-});
-/** 瀵煎叆鎸夐挳鎿嶄綔 */
-function handleImport() {
-  upload.title = "鍚堝悓瀵煎叆";
-  upload.open = true;
-}
-/** 鎻愪氦涓婁紶鏂囦欢 */
-function submitFileForm() {
-  console.log(upload.url + '?updateSupport=' + upload.updateSupport)
-  proxy.$refs["uploadRef"].submit();
-}
-/**鏂囦欢涓婁紶涓鐞� */
-const handleFileUploadProgress = (event, file, fileList) => {
-  upload.isUploading = true;
-};
-/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */
-const handleFileSuccess = (response, file, fileList) => {
-  upload.open = false;
-  upload.isUploading = false;
-  proxy.$refs["uploadRef"].handleRemove(file);
-  getList();
-};
-onMounted(() => {
-  getList();
-});
+  };
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    const params = { ...searchForm.value, ...page };
+    params.entryDate = undefined;
+    params.staffState = 1;
+    staffOnJobListPage(params)
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
+
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
+      .then(() => {
+        proxy.download(
+          "/staff/staffOnJob/export",
+          { staffState: 1 },
+          "鍚堝悓绠$悊.xlsx"
+        );
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
+  const upload = reactive({
+    // 鏄惁鏄剧ず寮瑰嚭灞傦紙鍚堝悓瀵煎叆锛�
+    open: false,
+    // 寮瑰嚭灞傛爣棰橈紙鍚堝悓瀵煎叆锛�
+    title: "",
+    // 鏄惁绂佺敤涓婁紶
+    isUploading: false,
+    // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+    updateSupport: 1,
+    // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+    headers: { Authorization: "Bearer " + getToken() },
+    // 涓婁紶鐨勫湴鍧�
+    url: import.meta.env.VITE_APP_BASE_API + "/staff/staffOnJob/import",
+  });
+  /** 瀵煎叆鎸夐挳鎿嶄綔 */
+  function handleImport() {
+    upload.title = "鍚堝悓瀵煎叆";
+    upload.open = true;
+  }
+  /** 鎻愪氦涓婁紶鏂囦欢 */
+  function submitFileForm() {
+    console.log(upload.url + "?updateSupport=" + upload.updateSupport);
+    proxy.$refs["uploadRef"].submit();
+  }
+  /**鏂囦欢涓婁紶涓鐞� */
+  const handleFileUploadProgress = (event, file, fileList) => {
+    upload.isUploading = true;
+  };
+  /** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */
+  const handleFileSuccess = (response, file, fileList) => {
+    upload.open = false;
+    upload.isUploading = false;
+    proxy.$refs["uploadRef"].handleRemove(file);
+    getList();
+  };
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped></style>
diff --git a/src/views/personnelManagement/dimission/components/formDia.vue b/src/views/personnelManagement/dimission/components/formDia.vue
index 86c59ce..20c1794 100644
--- a/src/views/personnelManagement/dimission/components/formDia.vue
+++ b/src/views/personnelManagement/dimission/components/formDia.vue
@@ -1,29 +1,31 @@
 <template>
   <div>
-    <el-dialog
-        v-model="dialogFormVisible"
-        :title="operationType === 'add' ? '鏂板绂昏亴' : '缂栬緫绂昏亴'"
-        width="70%"
-        @close="closeDia"
-    >
+    <el-dialog v-model="dialogFormVisible"
+               :title="operationType === 'add' ? '鏂板绂昏亴' : '缂栬緫绂昏亴'"
+               width="70%"
+               @close="closeDia">
       <!-- 鍛樺伐淇℃伅灞曠ず鍖哄煙 -->
       <div class="info-section">
         <div class="info-title">鍛樺伐淇℃伅</div>
-        <el-form :model="form" label-width="200px" label-position="left" :rules="rules" ref="formRef" style="margin-top: 20px">
+        <el-form :model="form"
+                 label-width="200px"
+                 label-position="left"
+                 :rules="rules"
+                 ref="formRef"
+                 style="margin-top: 20px">
           <el-row :gutter="30">
             <el-col :span="12">
-              <el-form-item label="濮撳悕锛�" prop="staffOnJobId">
+              <el-form-item label="濮撳悕锛�"
+                            prop="staffOnJobId">
                 <el-select v-model="form.staffOnJobId"
                            placeholder="璇烽�夋嫨浜哄憳"
                            style="width: 100%"
                            :disabled="operationType === 'edit'"
                            @change="handleSelect">
-                  <el-option
-                      v-for="item in personList"
-                      :key="item.id"
-                      :label="item.staffName"
-                      :value="item.id"
-                  />
+                  <el-option v-for="item in personList"
+                             :key="item.id"
+                             :label="item.staffName"
+                             :value="item.id" />
                 </el-select>
               </el-form-item>
             </el-col>
@@ -39,21 +41,11 @@
                 {{ currentStaffRecord.sex || '-' }}
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="鎴风睄浣忓潃锛�">
-                {{ currentStaffRecord.nativePlace || '-' }}
-              </el-form-item>
-            </el-col>
           </el-row>
           <el-row :gutter="30">
             <el-col :span="12">
               <el-form-item label="宀椾綅锛�">
                 {{ currentStaffRecord.postName || '-' }}
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="鐜颁綇鍧�锛�">
-                {{ currentStaffRecord.adress || '-' }}
               </el-form-item>
             </el-col>
           </el-row>
@@ -97,74 +89,74 @@
           </el-row>
           <el-row :gutter="30">
             <el-col :span="12">
-              <el-form-item label="绂昏亴鏃ユ湡锛�" prop="leaveDate">
-                <el-date-picker
-                    v-model="form.leaveDate"
-                    type="date"
-                    :disabled="operationType === 'edit'"
-                    :disabled-date="disabledFutureDate"
-                    placeholder="璇烽�夋嫨绂昏亴鏃ユ湡"
-                    value-format="YYYY-MM-DD"
-                    format="YYYY-MM-DD"
-                    style="width: 100%"
-                />
+              <el-form-item label="绂昏亴鏃ユ湡锛�"
+                            prop="leaveDate">
+                <el-date-picker v-model="form.leaveDate"
+                                type="date"
+                                :disabled="operationType === 'edit'"
+                                :disabled-date="disabledFutureDate"
+                                placeholder="璇烽�夋嫨绂昏亴鏃ユ湡"
+                                value-format="YYYY-MM-DD"
+                                format="YYYY-MM-DD"
+                                style="width: 100%" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="绂昏亴鍘熷洜锛�" prop="reason">
-                <el-select v-model="form.reason" placeholder="璇烽�夋嫨绂昏亴鍘熷洜" style="width: 100%" @change="handleSelectDimissionReason">
-                  <el-option
-                      v-for="(item, index) in dimissionReasonOptions"
-                      :key="index"
-                      :label="item.label"
-                      :value="item.value"
-                  />
+              <el-form-item label="绂昏亴鍘熷洜锛�"
+                            prop="reason">
+                <el-select v-model="form.reason"
+                           placeholder="璇烽�夋嫨绂昏亴鍘熷洜"
+                           style="width: 100%"
+                           @change="handleSelectDimissionReason">
+                  <el-option v-for="(item, index) in dimissionReasonOptions"
+                             :key="index"
+                             :label="item.label"
+                             :value="item.value" />
                 </el-select>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="30">
             <el-col :span="12">
-              <el-form-item label="澶囨敞锛�" prop="remark" v-if="form.reason === 'other'">
-                <el-input
-                    v-model="form.remark"
-                    type="textarea"
-                    :rows="3"
-                    placeholder="澶囨敞"
-                    maxlength="500"
-                    show-word-limit
-                />
+              <el-form-item label="澶囨敞锛�"
+                            prop="remark"
+                            v-if="form.reason === 'other'">
+                <el-input v-model="form.remark"
+                          type="textarea"
+                          :rows="3"
+                          placeholder="澶囨敞"
+                          maxlength="500"
+                          show-word-limit />
               </el-form-item>
             </el-col>
           </el-row>
         </el-form>
-
-<!--        <el-row :gutter="30">-->
-<!--          <el-col :span="12">-->
-<!--            <div class="info-item">-->
-<!--              <span class="info-label">绂昏亴鍘熷洜锛�</span>-->
-<!--              <el-select v-model="form.reason" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">-->
-<!--                <el-option-->
-<!--                    v-for="(item, index) in dimissionReasonOptions"-->
-<!--                    :key="index"-->
-<!--                    :label="item.label"-->
-<!--                    :value="item.value"-->
-<!--                />-->
-<!--              </el-select>-->
-<!--            </div>-->
-<!--          </el-col>-->
-<!--          <el-col :span="12">-->
-<!--            <div class="info-item">-->
-<!--              <span class="info-label">鍛樺伐缂栧彿锛�</span>-->
-<!--              <span class="info-value">{{ form.staffNo || '-' }}</span>-->
-<!--            </div>-->
-<!--          </el-col>-->
-<!--        </el-row>-->
+        <!--        <el-row :gutter="30">-->
+        <!--          <el-col :span="12">-->
+        <!--            <div class="info-item">-->
+        <!--              <span class="info-label">绂昏亴鍘熷洜锛�</span>-->
+        <!--              <el-select v-model="form.reason" placeholder="璇烽�夋嫨浜哄憳" style="width: 100%" @change="handleSelect">-->
+        <!--                <el-option-->
+        <!--                    v-for="(item, index) in dimissionReasonOptions"-->
+        <!--                    :key="index"-->
+        <!--                    :label="item.label"-->
+        <!--                    :value="item.value"-->
+        <!--                />-->
+        <!--              </el-select>-->
+        <!--            </div>-->
+        <!--          </el-col>-->
+        <!--          <el-col :span="12">-->
+        <!--            <div class="info-item">-->
+        <!--              <span class="info-label">鍛樺伐缂栧彿锛�</span>-->
+        <!--              <span class="info-value">{{ form.staffNo || '-' }}</span>-->
+        <!--            </div>-->
+        <!--          </el-col>-->
+        <!--        </el-row>-->
       </div>
-
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="submitForm">纭</el-button>
+          <el-button type="primary"
+                     @click="submitForm">纭</el-button>
           <el-button @click="closeDia">鍙栨秷</el-button>
         </div>
       </template>
@@ -173,175 +165,180 @@
 </template>
 
 <script setup>
-import {ref, reactive, toRefs, getCurrentInstance} from "vue";
-import {staffOnJobListPage} from "@/api/personnelManagement/staffOnJob.js";
-import {createStaffLeave, updateStaffLeave} from "@/api/personnelManagement/staffLeave.js";
-const { proxy } = getCurrentInstance()
-const emit = defineEmits(['close'])
+  import { ref, reactive, toRefs, getCurrentInstance } from "vue";
+  import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js";
+  import {
+    createStaffLeave,
+    updateStaffLeave,
+  } from "@/api/personnelManagement/staffLeave.js";
+  const { proxy } = getCurrentInstance();
+  const emit = defineEmits(["close"]);
 
-const dialogFormVisible = ref(false);
-const operationType = ref('')
-const getTodayDate = () => {
-  const now = new Date();
-  const year = now.getFullYear();
-  const month = `${now.getMonth() + 1}`.padStart(2, '0');
-  const day = `${now.getDate()}`.padStart(2, '0');
-  return `${year}-${month}-${day}`;
-};
-
-const disabledFutureDate = (time) => {
-  const todayEnd = new Date();
-  todayEnd.setHours(23, 59, 59, 999);
-  return time.getTime() > todayEnd.getTime();
-};
-const data = reactive({
-  form: {
-    staffOnJobId: undefined,
-    leaveDate: "",
-    reason: "",
-    remark: "",
-  },
-  rules: {
-    staffName: [{ required: true, message: "璇烽�夋嫨浜哄憳" }],
-    leaveDate: [{ required: true, message: "璇烽�夋嫨绂昏亴鏃ユ湡", trigger: "change" }],
-    reason: [{ required: true, message: "璇烽�夋嫨绂昏亴鍘熷洜"}],
-  },
-  dimissionReasonOptions: [
-      {label: '钖祫寰呴亣', value: 'salary'},
-      {label: '鑱屼笟鍙戝睍', value: 'career_development'},
-      {label: '宸ヤ綔鐜', value: 'work_environment'},
-      {label: '涓汉鍘熷洜', value: 'personal_reason'},
-      {label: '鍏朵粬', value: 'other'},
-  ],
-  currentStaffRecord: {},
-});
-const { form, rules, dimissionReasonOptions, currentStaffRecord } = toRefs(data);
-
-// 鎵撳紑寮规
-const openDialog = (type, row) => {
-  operationType.value = type;
-  dialogFormVisible.value = true;
-  if (operationType.value === 'edit') {
-    currentStaffRecord.value = row
-    form.value.staffOnJobId = row.staffOnJobId
-    form.value.leaveDate = row.leaveDate
-    form.value.reason = row.reason
-    form.value.remark = row.remark
-    personList.value = [
-      {
-        staffName: row.staffName,
-        id: row.staffOnJobId,
-      }
-    ]
-  } else {
-    form.value.leaveDate = getTodayDate()
-    getList()
-  }
-}
-
-const handleSelectDimissionReason = (val) => {
-  if (val === 'other') {
-    form.value.remark = ''
-  }
-}
-// 鎻愪氦浜у搧琛ㄥ崟
-const submitForm = () => {
-  form.value.staffState = 0
-  if (form.value.reason !== 'other') {
-    form.value.remark = ''
-  }
-  proxy.$refs["formRef"].validate(valid => {
-    if (valid) {
-      if (operationType.value === "add") {
-        createStaffLeave(form.value).then(res => {
-          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-          closeDia();
-        })
-      } else {
-        updateStaffLeave(currentStaffRecord.value.id, form.value).then(res => {
-          proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-          closeDia();
-        })
-      }
-    }
-  })
-
-}
-// 鍏抽棴寮规
-const closeDia = () => {
-  // 琛ㄥ崟宸叉敞閲婏紝鎵嬪姩閲嶇疆琛ㄥ崟鏁版嵁
-  form.value = {
-    staffOnJobId: undefined,
-    leaveDate: "",
-    reason: "",
-    remark: "",
+  const dialogFormVisible = ref(false);
+  const operationType = ref("");
+  const getTodayDate = () => {
+    const now = new Date();
+    const year = now.getFullYear();
+    const month = `${now.getMonth() + 1}`.padStart(2, "0");
+    const day = `${now.getDate()}`.padStart(2, "0");
+    return `${year}-${month}-${day}`;
   };
-  dialogFormVisible.value = false;
-  emit('close')
-};
 
-const personList = ref([]);
+  const disabledFutureDate = time => {
+    const todayEnd = new Date();
+    todayEnd.setHours(23, 59, 59, 999);
+    return time.getTime() > todayEnd.getTime();
+  };
+  const data = reactive({
+    form: {
+      staffOnJobId: undefined,
+      leaveDate: "",
+      reason: "",
+      remark: "",
+    },
+    rules: {
+      staffName: [{ required: true, message: "璇烽�夋嫨浜哄憳" }],
+      leaveDate: [
+        { required: true, message: "璇烽�夋嫨绂昏亴鏃ユ湡", trigger: "change" },
+      ],
+      reason: [{ required: true, message: "璇烽�夋嫨绂昏亴鍘熷洜" }],
+    },
+    dimissionReasonOptions: [
+      { label: "钖祫寰呴亣", value: "salary" },
+      { label: "鑱屼笟鍙戝睍", value: "career_development" },
+      { label: "宸ヤ綔鐜", value: "work_environment" },
+      { label: "涓汉鍘熷洜", value: "personal_reason" },
+      { label: "鍏朵粬", value: "other" },
+    ],
+    currentStaffRecord: {},
+  });
+  const { form, rules, dimissionReasonOptions, currentStaffRecord } =
+    toRefs(data);
 
-/**
- * 鑾峰彇褰撳墠鍦ㄨ亴浜哄憳鍒楄〃
- */
-const getList = () => {
-  staffOnJobListPage({
-    current: -1,
-    size: -1,
-		staffState: 1
-  }).then(res => {
-    personList.value = res.data.records || []
-  })
-};
+  // 鎵撳紑寮规
+  const openDialog = (type, row) => {
+    operationType.value = type;
+    dialogFormVisible.value = true;
+    if (operationType.value === "edit") {
+      currentStaffRecord.value = row;
+      form.value.staffOnJobId = row.staffOnJobId;
+      form.value.leaveDate = row.leaveDate;
+      form.value.reason = row.reason;
+      form.value.remark = row.remark;
+      personList.value = [
+        {
+          staffName: row.staffName,
+          id: row.staffOnJobId,
+        },
+      ];
+    } else {
+      form.value.leaveDate = getTodayDate();
+      getList();
+    }
+  };
 
-const handleSelect = (val) => {
-  let obj = personList.value.find(item => item.id === val)
-  currentStaffRecord.value = {}
-  if (obj) {
-    // 淇濈暀绂昏亴鏃ユ湡鍜岀鑱屽師鍥狅紝鍙洿鏂板憳宸ヤ俊鎭�
-    currentStaffRecord.value = obj
-  }
-}
-defineExpose({
-  openDialog,
-});
+  const handleSelectDimissionReason = val => {
+    if (val === "other") {
+      form.value.remark = "";
+    }
+  };
+  // 鎻愪氦浜у搧琛ㄥ崟
+  const submitForm = () => {
+    form.value.staffState = 0;
+    if (form.value.reason !== "other") {
+      form.value.remark = "";
+    }
+    proxy.$refs["formRef"].validate(valid => {
+      if (valid) {
+        if (operationType.value === "add") {
+          createStaffLeave(form.value).then(res => {
+            proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+            closeDia();
+          });
+        } else {
+          updateStaffLeave(currentStaffRecord.value.id, form.value).then(res => {
+            proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+            closeDia();
+          });
+        }
+      }
+    });
+  };
+  // 鍏抽棴寮规
+  const closeDia = () => {
+    // 琛ㄥ崟宸叉敞閲婏紝鎵嬪姩閲嶇疆琛ㄥ崟鏁版嵁
+    form.value = {
+      staffOnJobId: undefined,
+      leaveDate: "",
+      reason: "",
+      remark: "",
+    };
+    dialogFormVisible.value = false;
+    emit("close");
+  };
+
+  const personList = ref([]);
+
+  /**
+   * 鑾峰彇褰撳墠鍦ㄨ亴浜哄憳鍒楄〃
+   */
+  const getList = () => {
+    staffOnJobListPage({
+      current: -1,
+      size: -1,
+      staffState: 1,
+    }).then(res => {
+      personList.value = res.data.records || [];
+    });
+  };
+
+  const handleSelect = val => {
+    let obj = personList.value.find(item => item.id === val);
+    currentStaffRecord.value = {};
+    if (obj) {
+      // 淇濈暀绂昏亴鏃ユ湡鍜岀鑱屽師鍥狅紝鍙洿鏂板憳宸ヤ俊鎭�
+      currentStaffRecord.value = obj;
+    }
+  };
+  defineExpose({
+    openDialog,
+  });
 </script>
 
 <style scoped>
-.info-section {
-  background: #f5f7fa;
-  padding: 20px;
-  border-radius: 8px;
-  margin-bottom: 20px;
-}
+  .info-section {
+    background: #f5f7fa;
+    padding: 20px;
+    border-radius: 8px;
+    margin-bottom: 20px;
+  }
 
-.info-title {
-  font-size: 16px;
-  font-weight: 600;
-  color: #303133;
-  margin-bottom: 20px;
-  padding-bottom: 10px;
-  border-bottom: 1px solid #e4e7ed;
-}
+  .info-title {
+    font-size: 16px;
+    font-weight: 600;
+    color: #303133;
+    margin-bottom: 20px;
+    padding-bottom: 10px;
+    border-bottom: 1px solid #e4e7ed;
+  }
 
-.info-item {
-  display: flex;
-  align-items: center;
-  margin-bottom: 16px;
-  min-height: 32px;
-}
+  .info-item {
+    display: flex;
+    align-items: center;
+    margin-bottom: 16px;
+    min-height: 32px;
+  }
 
-.info-label {
-  min-width: 140px;
-  color: #606266;
-  font-size: 14px;
-  font-weight: 500;
-}
+  .info-label {
+    min-width: 140px;
+    color: #606266;
+    font-size: 14px;
+    font-weight: 500;
+  }
 
-.info-value {
-  flex: 1;
-  color: #303133;
-  font-size: 14px;
-}
+  .info-value {
+    flex: 1;
+    color: #303133;
+    font-size: 14px;
+  }
 </style>
diff --git a/src/views/personnelManagement/dimission/index.vue b/src/views/personnelManagement/dimission/index.vue
index c2b8c3e..4a37ae3 100644
--- a/src/views/personnelManagement/dimission/index.vue
+++ b/src/views/personnelManagement/dimission/index.vue
@@ -3,216 +3,209 @@
     <div class="search_form mb20">
       <div>
         <span class="search_title">濮撳悕锛�</span>
-        <el-input
-            v-model="searchForm.staffName"
-            style="width: 240px"
-            placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
-            @change="handleQuery"
-            clearable
-            :prefix-icon="Search"
-        />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-        >鎼滅储</el-button
-        >
+        <el-input v-model="searchForm.staffName"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ュ鍚嶆悳绱�"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div>
-        <el-button type="primary" @click="openForm('add')">鏂板绂昏亴</el-button>
+        <el-button type="primary"
+                   @click="openForm('add')">鏂板绂昏亴</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <!-- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button> -->
       </div>
     </div>
     <div class="table_list">
-      <PIMTable
-          rowKey="id"
-          :column="tableColumn"
-          :tableData="tableData"
-          :page="page"
-          :isSelection="true"
-          @selection-change="handleSelectionChange"
-          :tableLoading="tableLoading"
-          @pagination="pagination"
-          :total="page.total"
-      ></PIMTable>
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total"></PIMTable>
     </div>
-    <form-dia ref="formDia" @close="handleQuery"></form-dia>
+    <form-dia ref="formDia"
+              @close="handleQuery"></form-dia>
   </div>
 </template>
 
 <script setup>
-import { Search } from "@element-plus/icons-vue";
-import {onMounted, ref} from "vue";
-import FormDia from "@/views/personnelManagement/dimission/components/formDia.vue";
-import {findStaffLeaveListPage, batchDeleteStaffLeaves} from "@/api/personnelManagement/staffLeave.js";
-import {ElMessageBox} from "element-plus";
+  import { Search } from "@element-plus/icons-vue";
+  import { onMounted, ref } from "vue";
+  import FormDia from "@/views/personnelManagement/dimission/components/formDia.vue";
+  import {
+    findStaffLeaveListPage,
+    batchDeleteStaffLeaves,
+  } from "@/api/personnelManagement/staffLeave.js";
+  import { ElMessageBox } from "element-plus";
 
-const data = reactive({
-  searchForm: {
-    staffName: "",
-  },
-});
-const { searchForm } = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "鐘舵��",
-    prop: "staffState",
-    dataType: "tag",
-    formatData: (params) => {
-      if (params == 0) {
-        return "绂昏亴";
-      } else if (params == 1) {
-        return "鍦ㄨ亴";
-      } else {
-        return null;
-      }
+  const data = reactive({
+    searchForm: {
+      staffName: "",
     },
-    formatType: (params) => {
-      if (params == 0) {
-        return "danger";
-      } else if (params == 1) {
-        return "primary";
-      } else {
-        return null;
-      }
-    },
-  },
-  {
-    label: "绂昏亴鏃ユ湡",
-    prop: "leaveDate",
-  },
-  {
-    label: "鍛樺伐缂栧彿",
-    prop: "staffNo",
-  },
-  {
-    label: "濮撳悕",
-    prop: "staffName",
-  },
-  {
-    label: "鎬у埆",
-    prop: "sex",
-  },
-  {
-    label: "鎴风睄浣忓潃",
-    prop: "nativePlace",
-  },
-  {
-    label: "閮ㄩ棬",
-    prop: "deptName",
-  },
-  {
-    label: "宀椾綅",
-    prop: "postName",
-  },
-  {
-    label: "鐜颁綇鍧�",
-    prop: "adress",
-    width:200
-  },
-  {
-    label: "绗竴瀛﹀巻",
-    prop: "firstStudy",
-  },
-  {
-    label: "涓撲笟",
-    prop: "profession",
-    width:100
-  },
-  {
-    label: "骞撮緞",
-    prop: "age",
-  },
-  {
-    label: "鑱旂郴鐢佃瘽",
-    prop: "phone",
-    width:150
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉",
-    prop: "emergencyContact",
-    width: 120
-  },
-  {
-    label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
-    prop: "emergencyContactPhone",
-    width:150
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: 'right',
-    operation: [
-      {
-        name: "缂栬緫",
-        type: "text",
-        clickFun: (row) => {
-          openForm("edit", row);
-        },
+  });
+  const { searchForm } = toRefs(data);
+  const tableColumn = ref([
+    {
+      label: "鐘舵��",
+      prop: "staffState",
+      dataType: "tag",
+      formatData: params => {
+        if (params == 0) {
+          return "绂昏亴";
+        } else if (params == 1) {
+          return "鍦ㄨ亴";
+        } else {
+          return null;
+        }
       },
-    ],
-  },
-]);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0,
-});
-const formDia = ref()
-const { proxy } = getCurrentInstance()
+      formatType: params => {
+        if (params == 0) {
+          return "danger";
+        } else if (params == 1) {
+          return "primary";
+        } else {
+          return null;
+        }
+      },
+    },
+    {
+      label: "绂昏亴鏃ユ湡",
+      prop: "leaveDate",
+    },
+    {
+      label: "鍛樺伐缂栧彿",
+      prop: "staffNo",
+    },
+    {
+      label: "濮撳悕",
+      prop: "staffName",
+    },
+    {
+      label: "鎬у埆",
+      prop: "sex",
+    },
+    {
+      label: "閮ㄩ棬",
+      prop: "deptName",
+    },
+    {
+      label: "宀椾綅",
+      prop: "postName",
+    },
+    {
+      label: "绗竴瀛﹀巻",
+      prop: "firstStudy",
+    },
+    {
+      label: "涓撲笟",
+      prop: "profession",
+      width: 100,
+    },
+    {
+      label: "骞撮緞",
+      prop: "age",
+    },
+    {
+      label: "鑱旂郴鐢佃瘽",
+      prop: "phone",
+      width: 150,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉",
+      prop: "emergencyContact",
+      width: 120,
+    },
+    {
+      label: "绱ф�ヨ仈绯讳汉鐢佃瘽",
+      prop: "emergencyContactPhone",
+      width: 150,
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      operation: [
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            openForm("edit", row);
+          },
+        },
+      ],
+    },
+  ]);
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const formDia = ref();
+  const { proxy } = getCurrentInstance();
 
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const pagination = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    findStaffLeaveListPage({ ...page, ...searchForm.value })
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
 
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const pagination = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  findStaffLeaveListPage({...page, ...searchForm.value}).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
 
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
-
-// 鍒犻櫎
-const handleDelete = () => {
-  let ids = [];
-  if (selectedRows.value.length > 0) {
-    ids = selectedRows.value.map((item) => item.id);
-  } else {
-    proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-    return;
-  }
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  // 鍒犻櫎
+  const handleDelete = () => {
+    let ids = [];
+    if (selectedRows.value.length > 0) {
+      ids = selectedRows.value.map(item => item.id);
+    } else {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
-        batchDeleteStaffLeaves(ids).then((res) => {
+        batchDeleteStaffLeaves(ids).then(res => {
           proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
           getList();
         });
@@ -220,24 +213,24 @@
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  };
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         proxy.download("/staff/staffLeave/export", {}, "浜哄憳绂昏亴.xlsx");
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
-onMounted(() => {
-  getList();
-});
+  };
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped></style>
diff --git a/src/views/procurementManagement/paymentLedger/index.vue b/src/views/procurementManagement/paymentLedger/index.vue
index 99b4b39..7fba9cb 100644
--- a/src/views/procurementManagement/paymentLedger/index.vue
+++ b/src/views/procurementManagement/paymentLedger/index.vue
@@ -46,6 +46,10 @@
                              prop="paymentAmount"
                              show-overflow-tooltip
                              :formatter="formattedNumber" />
+            <el-table-column label="閫�璐ч噾棰�(鍏�)"
+                             prop="returnAmount"
+                             show-overflow-tooltip
+                             :formatter="formattedNumber" />
             <el-table-column label="搴斾粯閲戦(鍏�)"
                              prop="payableAmount"
                              show-overflow-tooltip>
@@ -153,6 +157,14 @@
       },
     },
     {
+      label: "閫�璐ч噾棰�(鍏�)",
+      prop: "returnAmount",
+      width: 200,
+      formatData: params => {
+        return params ? parseFloat(params).toFixed(2) : 0;
+      },
+    },
+    {
       label: "搴斾粯閲戦(鍏�)",
       dataType: "slot",
       width: 200,
@@ -170,7 +182,7 @@
   const summarizeMainTable = param => {
     return proxy.summarizeTable(
       param,
-      ["contractAmounts", "paymentAmount", "payableAmount"],
+      ["contractAmounts", "paymentAmount", "returnAmount", "payableAmount"],
       {
         ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
         futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
@@ -181,7 +193,7 @@
   const summarizeMainTable1 = param => {
     let summarizeTable = proxy.summarizeTable(
       param,
-      ["contractAmount", "invoiceAmount", "paymentAmount"],
+      ["contractAmount", "invoiceAmount", "paymentAmount", "returnAmount"],
       {
         ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
         futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 6d9cae6..7e1576b 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -121,6 +121,8 @@
               </el-table-column>
               <el-table-column label="鏁伴噺"
                                prop="quantity" />
+              <el-table-column label="閿�鍞彂璐ф暟閲�"
+                               prop="shippedQuantity" />
               <el-table-column label="鍙敤鏁伴噺"
                                prop="availableQuality" />
               <el-table-column label="閫�璐ф暟閲�"
diff --git a/src/views/procurementManagement/purchaseReturnOrder/New.vue b/src/views/procurementManagement/purchaseReturnOrder/New.vue
index f4771d3..186a552 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/New.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/New.vue
@@ -58,6 +58,63 @@
         </el-form-item>
 
         <el-form-item
+            label="鍙戣揣绫诲瀷"
+            prop="shippingType"
+            :rules="[
+                {
+                  required: true,
+                  message: '璇烽�夋嫨鍙戣揣绫诲瀷',
+                  trigger: 'change',
+                }
+              ]"
+        >
+          <el-select
+              v-model="formState.shippingType"
+              placeholder="璇烽�夋嫨鍙戣揣绫诲瀷"
+              style="width: 240px"
+              @change="handleShippingTypeChange"
+          >
+            <el-option label="璐ц溅" :value="1" />
+            <el-option label="蹇��" :value="2" />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+            v-if="formState.shippingType === 1"
+            label="鍙戣揣杞︾墝鍙�"
+            prop="truckPlateNo"
+        >
+          <el-input
+              v-model="formState.truckPlateNo"
+              placeholder="璇疯緭鍏ュ彂璐ц溅鐗屽彿"
+              style="width: 240px"
+          />
+        </el-form-item>
+
+        <template v-else-if="formState.shippingType === 2">
+          <el-form-item
+              label="蹇�掑叕鍙�"
+              prop="expressCompany"
+          >
+            <el-input
+                v-model="formState.expressCompany"
+                placeholder="璇疯緭鍏ュ揩閫掑叕鍙�"
+                style="width: 240px"
+            />
+          </el-form-item>
+          <el-form-item
+              label="蹇�掑崟鍙�"
+              prop="expressNo"
+          >
+            <el-input
+                v-model="formState.expressNo"
+                placeholder="璇疯緭鍏ュ揩閫掑崟鍙�"
+                style="width: 240px"
+            />
+          </el-form-item>
+        </template>
+
+        <el-form-item
             label="渚涘簲鍟嗗悕绉�"
             prop="supplierId"
             :rules="[
@@ -259,13 +316,16 @@
               <el-table-column label="鏁伴噺"
                                prop="stockInNum"
                                width="100" />
+              <el-table-column label="閿�鍞彂璐ф暟閲�"
+                               prop="saleOutQuantity"
+                               width="120" />
                                <el-table-column label="鍙��璐ф暟閲�"
                                prop="unQuantity"
                                width="130" />
               <el-table-column label="宸查��璐ф暟閲�"
                                width="130">
                 <template #default="scope">
-                  {{ calcAlreadyReturned(scope.row) }}
+                  {{ formattedNumber(scope.row, null, scope.row.totalReturnNum || 0) }}
                 </template>
               </el-table-column>
               <el-table-column label="閫�璐ф暟閲�"
@@ -455,6 +515,10 @@
   no: '',
   isDefaultNo: true,
   returnType: 0,
+  shippingType: undefined,
+  truckPlateNo: '',
+  expressCompany: '',
+  expressNo: '',
   incomeType: undefined,
   remark: '',
   supplierId: undefined,
@@ -501,6 +565,19 @@
 // 鏄惁灞曠ず浜у搧鍒楄〃鏁版嵁
 const isShowProductsModal = ref(false)
 
+const handleShippingTypeChange = (val) => {
+  if (val === 1) {
+    formState.value.expressCompany = '';
+    formState.value.expressNo = '';
+  } else if (val === 2) {
+    formState.value.truckPlateNo = '';
+  } else {
+    formState.value.truckPlateNo = '';
+    formState.value.expressCompany = '';
+    formState.value.expressNo = '';
+  }
+};
+
 const isShow = computed({
   get() {
     return props.visible;
@@ -528,14 +605,6 @@
 const toNumber = (val) => {
   const num = Number(val)
   return Number.isNaN(num) ? 0 : num
-}
-
-/** 宸查��璐ф暟閲� = 鍏ュ簱琛屾�绘暟閲� 鈭� 褰撳墠鍙��璐ф暟閲忥紙鍓╀綑锛� */
-const calcAlreadyReturned = (row) => {
-  const total = Number(row?.stockInNum ?? row?.totalQuantity ?? row?.quantity ?? 0)
-  const un = Number(row?.unQuantity ?? 0)
-  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0
-  return Math.max(total - un, 0)
 }
 
 const getReturnTotal = (row) => {
@@ -581,6 +650,10 @@
 }
 
 const closeModal = () => {
+  formState.value.shippingType = undefined;
+  formState.value.truckPlateNo = '';
+  formState.value.expressCompany = '';
+  formState.value.expressNo = '';
   isShow.value = false;
 };
 
diff --git a/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue b/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
index 27fae4a..9b3e6f7 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
@@ -34,13 +34,16 @@
           <el-table-column label="鏁伴噺"
                            prop="stockInNum"
                            width="70" />
+          <el-table-column label="閿�鍞彂璐ф暟閲�"
+                           prop="saleOutQuantity"
+                           width="120" />
           <el-table-column label="鍙��璐ф暟閲�"
                            prop="unQuantity"
                            width="130" />
           <el-table-column label="宸查��璐ф暟閲�"
                            width="130">
             <template #default="scope">
-              {{ calcAlreadyReturned(scope.row) }}
+              {{ formattedNumber(scope.row, null, scope.row.totalReturnNum || 0) }}
             </template>
           </el-table-column>
           <!-- <el-table-column label="搴撳瓨棰勮鏁伴噺"
@@ -118,14 +121,6 @@
 const formattedNumber = (row, column, cellValue) => {
   return parseFloat(cellValue).toFixed(2);
 };
-
-/** 宸查��璐ф暟閲� = 鍏ュ簱琛屾�绘暟閲� 鈭� 褰撳墠鍙��璐ф暟閲忥紙鍓╀綑锛� */
-const calcAlreadyReturned = (row) => {
-  const total = Number(row?.stockInNum ?? row?.totalQuantity ?? row?.quantity ?? 0)
-  const un = Number(row?.unQuantity ?? 0)
-  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0
-  return Math.max(total - un, 0)
-}
 
 const handleChangeSelection = (val) => {
   selectedRows.value = val;
diff --git a/src/views/procurementManagement/purchaseReturnOrder/index.vue b/src/views/procurementManagement/purchaseReturnOrder/index.vue
index f8866e1..2b73253 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/index.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/index.vue
@@ -45,8 +45,13 @@
             @click="handleDetail(row)"
             >璇︽儏</el-button
           >
-          <el-button link size="small" @click="handleDelete(row)"
-            >鍒犻櫎</el-button
+          <el-button
+            link
+            size="small"
+            :disabled="row.stockOutApproved"
+            :style="{ color: row.stockOutApproved ? '#c0c4cc' : undefined }"
+            @click="handleDelete(row)"
+            >{{ row.stockOutApproved }}</el-button
           >
         </template>
       </PIMTable>
@@ -89,6 +94,20 @@
           <el-descriptions-item label="閫�鏂欎汉">{{
             detailData.returnUserName || "--"
           }}</el-descriptions-item>
+          <el-descriptions-item label="鍙戣揣绫诲瀷">{{
+            getShippingTypeLabel(detailData.shippingType)
+          }}</el-descriptions-item>
+          <el-descriptions-item v-if="String(detailData.shippingType) === '1'" label="鍙戣揣杞︾墝鍙�">{{
+            detailData.truckPlateNo || "--"
+          }}</el-descriptions-item>
+          <template v-else-if="String(detailData.shippingType) === '2'">
+            <el-descriptions-item label="蹇�掑叕鍙�">{{
+              detailData.expressCompany || "--"
+            }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑崟鍙�">{{
+              detailData.expressNo || "--"
+            }}</el-descriptions-item>
+          </template>
           <el-descriptions-item label="鏁村崟鎶樻墸棰�">{{
             formatAmount(detailData.totalDiscountAmount)
           }}</el-descriptions-item>
@@ -142,13 +161,14 @@
           />
           <el-table-column label="鍗曚綅" prop="unit" width="80" />
           <el-table-column label="鏁伴噺" prop="stockInNum" width="80" />
+          <el-table-column label="閿�鍞彂璐ф暟閲�" prop="saleOutQuantity" width="110" />
           <el-table-column label="鍙��璐ф暟閲�"
                            prop="unQuantity"
                            width="100" />
           <el-table-column label="宸查��璐ф暟閲�"
                            width="100">
             <template #default="scope">
-              {{ calcAlreadyReturned(scope.row) }}
+              {{ formatAmount(scope.row.totalReturnNum || 0) }}
             </template>
           </el-table-column>
           <!-- <el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" width="120" /> -->
@@ -289,6 +309,15 @@
     prop: "returnUserName",
     width: 110,
   },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    width: 100,
+    formatData: (val) => getShippingTypeLabel(val),
+  },
+  { label: "鍙戣揣杞︾墝鍙�", prop: "truckPlateDisplay", width: 140 },
+  { label: "蹇�掑叕鍙�", prop: "expressCompanyDisplay", width: 140 },
+  { label: "蹇�掑崟鍙�", prop: "expressNoDisplay", width: 150 },
 
   {
     label: "鏁村崟鎶樻墸棰�",
@@ -341,6 +370,7 @@
       },
       {
         name: "鍒犻櫎",
+        disabled: (row) => !!row.stockOutApproved,
         clickFun: (row) => {
           handleDelete(row);
         },
@@ -422,7 +452,12 @@
   findPurchaseReturnOrderListPage({ ...searchForm.value, ...page })
     .then((res) => {
       tableLoading.value = false;
-      tableData.value = res.data.records;
+      tableData.value = (res.data.records || []).map((row) => ({
+        ...row,
+        truckPlateDisplay: String(row?.shippingType) === "1" ? (row?.truckPlateNo || "--") : "--",
+        expressCompanyDisplay: String(row?.shippingType) === "2" ? (row?.expressCompany || "--") : "--",
+        expressNoDisplay: String(row?.shippingType) === "2" ? (row?.expressNo || "--") : "--",
+      }));
       page.total = res.data.total;
     })
     .catch(() => {
@@ -450,6 +485,14 @@
   );
 };
 
+const getShippingTypeLabel = (value) => {
+  const shippingTypeMap = {
+    1: "璐ц溅",
+    2: "蹇��",
+  };
+  return shippingTypeMap[String(value)] || shippingTypeMap[value] || "--";
+};
+
 const formatAmount = (value) => {
   if (value === null || value === undefined || value === "") {
     return "--";
@@ -461,14 +504,6 @@
   return num.toFixed(2);
 };
 
-/** 宸查��璐ф暟閲� = 鍏ュ簱琛屾�绘暟閲� 鈭� 褰撳墠鍙��璐ф暟閲忥紙鍓╀綑锛� */
-const calcAlreadyReturned = (row) => {
-  const total = Number(row?.stockInNum ?? row?.totalQuantity ?? row?.quantity ?? 0);
-  const un = Number(row?.unQuantity ?? 0);
-  if (!Number.isFinite(total) || !Number.isFinite(un)) return 0;
-  return Math.max(total - un, 0);
-};
-
 onMounted(() => {
   getList();
 });
@@ -478,4 +513,3 @@
   margin-top: unset;
 }
 </style>
-
diff --git a/src/views/salesManagement/indicatorStats/index.vue b/src/views/salesManagement/indicatorStats/index.vue
index 8ae15ed..52f1e6b 100644
--- a/src/views/salesManagement/indicatorStats/index.vue
+++ b/src/views/salesManagement/indicatorStats/index.vue
@@ -2,7 +2,7 @@
   <div class="app-container indicator-stats">
     <!-- KPI 姹囨�� -->
     <el-row :gutter="20" class="stats-row">
-      <el-col :xs="24" :sm="12" :md="8">
+      <el-col :xs="24" :sm="12" :md="12">
         <div class="stat-card stat-card-blue">
           <div class="stat-icon-wrapper">
             <div class="stat-icon">
@@ -16,7 +16,7 @@
           <div class="stat-bg-decoration"></div>
         </div>
       </el-col>
-      <el-col :xs="24" :sm="12" :md="8">
+      <el-col :xs="24" :sm="12" :md="12">
         <div class="stat-card stat-card-green">
           <div class="stat-icon-wrapper">
             <div class="stat-icon">
@@ -26,20 +26,6 @@
           <div class="stat-content">
             <div class="stat-value">楼{{ indicatorKpis.salesAmount.toLocaleString() }}</div>
             <div class="stat-label">閿�鍞</div>
-          </div>
-          <div class="stat-bg-decoration"></div>
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="12" :md="8">
-        <div class="stat-card stat-card-orange">
-          <div class="stat-icon-wrapper">
-            <div class="stat-icon">
-              <el-icon :size="32"><Van /></el-icon>
-            </div>
-          </div>
-          <div class="stat-content">
-            <div class="stat-value">{{ indicatorKpis.shipRate }}</div>
-            <div class="stat-label">鍙戣揣鐜�</div>
           </div>
           <div class="stat-bg-decoration"></div>
         </div>
@@ -132,7 +118,7 @@
 
 <script setup>
 import { ref, reactive, onMounted, onUnmounted, nextTick } from 'vue'
-import { Document, Van, Tickets, Search, Refresh } from '@element-plus/icons-vue'
+import { Document, Tickets, Search, Refresh } from '@element-plus/icons-vue'
 import * as echarts from 'echarts'
 import { getTotalStatistics, getStatisticsTable } from '@/api/salesManagement/indicatorStats'
 import { productTreeList } from '@/api/basicData/product.js'
diff --git a/src/views/salesManagement/receiptPaymentLedger/index.vue b/src/views/salesManagement/receiptPaymentLedger/index.vue
index f5a9d8f..c5e3415 100644
--- a/src/views/salesManagement/receiptPaymentLedger/index.vue
+++ b/src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -46,6 +46,11 @@
                              show-overflow-tooltip
                              :formatter="formattedNumber"
                              width="200" />
+            <el-table-column label="閫�璐ч噾棰�(鍏�)"
+                             prop="returnAmount"
+                             show-overflow-tooltip
+                             :formatter="formattedNumber"
+                             width="200" />
             <el-table-column label="搴旀敹閲戦(鍏�)"
                              prop="receiptableAmount"
                              show-overflow-tooltip
@@ -93,6 +98,11 @@
                              width="200" />
             <el-table-column label="鍥炴閲戦(鍏�)"
                              prop="receiptPaymentAmount"
+                             show-overflow-tooltip
+                             :formatter="formattedNumber"
+                             width="200" />
+            <el-table-column label="閫�璐ч噾棰�(鍏�)"
+                             prop="returnAmount"
                              show-overflow-tooltip
                              :formatter="formattedNumber"
                              width="200" />
@@ -180,7 +190,12 @@
   const summarizeMainTable = param => {
     return proxy.summarizeTable(
       param,
-      ["invoiceTotal", "receiptPaymentAmount", "unReceiptPaymentAmount"],
+      [
+        "contractAmounts",
+        "receiptPaymentAmount",
+        "returnAmount",
+        "receiptableAmount",
+      ],
       {
         ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
         futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
@@ -191,7 +206,12 @@
   const summarizeMainTable1 = param => {
     var summarizeTable = proxy.summarizeTable(
       param,
-      ["contractAmount", "receiptPaymentAmount", "receiptableAmount"],
+      [
+        "contractAmount",
+        "receiptPaymentAmount",
+        "returnAmount",
+        "receiptableAmount",
+      ],
       {
         ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
         futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
diff --git a/src/views/salesManagement/returnOrder/components/detailDia.vue b/src/views/salesManagement/returnOrder/components/detailDia.vue
index 60b485b..a09149f 100644
--- a/src/views/salesManagement/returnOrder/components/detailDia.vue
+++ b/src/views/salesManagement/returnOrder/components/detailDia.vue
@@ -11,6 +11,12 @@
         <el-descriptions-item label="閿�鍞崟鍙�">{{ detail.salesContractNo }}</el-descriptions-item>
         <el-descriptions-item label="涓氬姟鍛�">{{ detail.salesman }}</el-descriptions-item>
         <el-descriptions-item label="鍏宠仈鍙戣揣鍗曞彿">{{ detail.shippingNo }}</el-descriptions-item>
+        <el-descriptions-item label="鍙戣揣绫诲瀷">{{ getShippingTypeText(detail.shippingType) }}</el-descriptions-item>
+        <el-descriptions-item v-if="String(detail.shippingType) === '1'" label="鍙戣揣杞︾墝鍙�">{{ detail.truckPlateNo || "--" }}</el-descriptions-item>
+        <template v-else-if="String(detail.shippingType) === '2'">
+          <el-descriptions-item label="蹇�掑叕鍙�">{{ detail.expressCompany || "--" }}</el-descriptions-item>
+          <el-descriptions-item label="蹇�掑崟鍙�">{{ detail.expressNo || "--" }}</el-descriptions-item>
+        </template>
         <!-- <el-descriptions-item label="椤圭洰鍚嶇О">{{ detail.projectName }}</el-descriptions-item> -->
         <el-descriptions-item label="鍒跺崟浜�">{{ detail.maker }}</el-descriptions-item>
         <el-descriptions-item label="鍒跺崟鏃堕棿">{{ detail.makeTime }}</el-descriptions-item>
@@ -41,6 +47,10 @@
 const detail = ref({});
 const tableData = ref([]);
 const availableProducts = ref([]);
+const shippingTypeMap = {
+  1: "璐ц溅",
+  2: "蹇��",
+};
 
 const sameKey = (a, b) => a != null && b != null && String(a) === String(b);
 
@@ -111,6 +121,8 @@
   return Math.max(total - un, 0);
 };
 
+const getShippingTypeText = (value) => shippingTypeMap[String(value)] || shippingTypeMap[value] || "--";
+
 /** 璇︽儏琛ㄧ敤 productName / model锛涘悎骞舵椂鍕胯绌轰覆鐩栨帀鍑哄簱琛屽瓧娈� */
 const mergeDetailProductRow = (product, normalized) => {
   const row = { ...product, ...normalized };
diff --git a/src/views/salesManagement/returnOrder/components/formDia.vue b/src/views/salesManagement/returnOrder/components/formDia.vue
index 40c98dc..4fc0859 100644
--- a/src/views/salesManagement/returnOrder/components/formDia.vue
+++ b/src/views/salesManagement/returnOrder/components/formDia.vue
@@ -69,6 +69,31 @@
               </el-form-item>
             </el-col>
             <el-col :span="4">
+              <el-form-item label="鍙戣揣绫诲瀷锛�" prop="shippingType">
+                <el-select v-model="form.shippingType" placeholder="璇烽�夋嫨鍙戣揣绫诲瀷" @change="handleShippingTypeChange">
+                  <el-option label="璐ц溅" :value="1" />
+                  <el-option label="蹇��" :value="2" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="4" v-if="form.shippingType === 1">
+              <el-form-item label="鍙戣揣杞︾墝鍙凤細" prop="truckPlateNo">
+                <el-input v-model="form.truckPlateNo" placeholder="璇疯緭鍏ュ彂璐ц溅鐗屽彿" />
+              </el-form-item>
+            </el-col>
+            <template v-else-if="form.shippingType === 2">
+              <el-col :span="4">
+                <el-form-item label="蹇�掑叕鍙革細" prop="expressCompany">
+                  <el-input v-model="form.expressCompany" placeholder="璇疯緭鍏ュ揩閫掑叕鍙�" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="4">
+                <el-form-item label="蹇�掑崟鍙凤細" prop="expressNo">
+                  <el-input v-model="form.expressNo" placeholder="璇疯緭鍏ュ揩閫掑崟鍙�" />
+                </el-form-item>
+              </el-col>
+            </template>
+            <el-col :span="4">
               <el-form-item label="閫�娆炬�婚锛�" prop="refundAmount">
                 <el-input v-model="form.refundAmount" disabled placeholder="鑷姩璁$畻" />
               </el-form-item>
@@ -186,6 +211,10 @@
     returnNo: "",
     customerId: "",
     shippingId: "",
+    shippingType: "",
+    truckPlateNo: "",
+    expressCompany: "",
+    expressNo: "",
     projectId: "",
     maker: "",
     makeTime: "",
@@ -203,6 +232,7 @@
     }],
     customerId: [{ required: true, message: "璇烽�夋嫨瀹㈡埛", trigger: "change" }],
     shippingId: [{ required: true, message: "璇烽�夋嫨鍏宠仈鍑哄簱鍗曞彿", trigger: "change" }],
+    shippingType: [{ required: true, message: "璇烽�夋嫨鍙戣揣绫诲瀷", trigger: "change" }],
   }
 });
 const { form, rules } = toRefs(data);
@@ -491,6 +521,10 @@
       returnNo: "",
       customerId: "",
       shippingId: "",
+      shippingType: "",
+      truckPlateNo: "",
+      expressCompany: "",
+      expressNo: "",
       projectId: "",
       maker: "",
       makeTime: "",
@@ -537,6 +571,11 @@
     const payload = { ...form.value, returnSaleProducts };
     delete payload.returnNoCheckbox;
     if (operationType.value === "add" && form.value.returnNoCheckbox) delete payload.returnNo;
+    if (payload.shippingType !== 1) payload.truckPlateNo = "";
+    if (payload.shippingType !== 2) {
+      payload.expressCompany = "";
+      payload.expressNo = "";
+    }
     if (operationType.value === "add") {
       returnManagementAdd(payload).then(() => {
         proxy.$modal.msgSuccess("鏂板鎴愬姛");
@@ -560,6 +599,10 @@
         returnNo: "",
         customerId: "",
         shippingId: "",
+        shippingType: "",
+        truckPlateNo: "",
+        expressCompany: "",
+        expressNo: "",
         projectId: "",
         maker: "",
         makeTime: "",
@@ -603,6 +646,19 @@
   formRef.value?.validateField('returnNo');
 };
 
+const handleShippingTypeChange = (val) => {
+  if (val === 1) {
+    form.value.expressCompany = "";
+    form.value.expressNo = "";
+  } else if (val === 2) {
+    form.value.truckPlateNo = "";
+  } else {
+    form.value.truckPlateNo = "";
+    form.value.expressCompany = "";
+    form.value.expressNo = "";
+  }
+};
+
 const customerNameChange = async (val, clearDownstream = true) => {
   // val is customerId now
   if (clearDownstream) {
diff --git a/src/views/salesManagement/returnOrder/index.vue b/src/views/salesManagement/returnOrder/index.vue
index e190901..1bcda4d 100644
--- a/src/views/salesManagement/returnOrder/index.vue
+++ b/src/views/salesManagement/returnOrder/index.vue
@@ -123,6 +123,15 @@
   { label: "閿�鍞崟鍙�", prop: "salesContractNo", minWidth: 160 },
   { label: "涓氬姟鍛�", prop: "salesman", minWidth: 120 },
   { label: "鍏宠仈鍙戣揣鍗曞彿", prop: "shippingNo", minWidth: 170 },
+  {
+    label: "鍙戣揣绫诲瀷",
+    prop: "shippingType",
+    minWidth: 100,
+    formatData: (val) => ({ 1: "璐ц溅", 2: "蹇��" }[String(val)] || "--"),
+  },
+  { label: "鍙戣揣杞︾墝鍙�", prop: "truckPlateDisplay", minWidth: 140 },
+  { label: "蹇�掑叕鍙�", prop: "expressCompanyDisplay", minWidth: 140 },
+  { label: "蹇�掑崟鍙�", prop: "expressNoDisplay", minWidth: 150 },
   { label: "椤圭洰鍚嶇О", prop: "projectName", minWidth: 180 },
   { label: "鍒跺崟浜�", prop: "maker", minWidth: 120 },
   {
@@ -168,7 +177,12 @@
   tableLoading.value = true;
   returnManagementList({ ...searchForm.value, ...page }).then(res => {
     tableLoading.value = false;
-    tableData.value = res?.data?.records || [];
+    tableData.value = (res?.data?.records || []).map((row) => ({
+      ...row,
+      truckPlateDisplay: String(row?.shippingType) === "1" ? (row?.truckPlateNo || "--") : "--",
+      expressCompanyDisplay: String(row?.shippingType) === "2" ? (row?.expressCompany || "--") : "--",
+      expressNoDisplay: String(row?.shippingType) === "2" ? (row?.expressNo || "--") : "--",
+    }));
     page.total = res?.data?.total || 0;
   }).finally(() => tableLoading.value = false);
 };

--
Gitblit v1.9.3