From a29cb267e67d4cc4d29438e5e3a4bbbb403a1f8b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 07 七月 2026 14:32:18 +0800
Subject: [PATCH] 转正申请,调岗申请,工作交接申请,申请人可以根据配置得选项来源,选择数据

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue |   45 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue
index 6cdc627..817a007 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/FormPayloadFields.vue
@@ -17,12 +17,17 @@
       </el-descriptions-item>
     </el-descriptions>
 
-    <el-form v-else label-width="120px" class="form-payload-edit">
+    <div
+      v-else
+      class="form-payload-edit"
+      v-loading="optionSourceLoading"
+    >
       <el-form-item
         v-for="field in fields"
         :key="field.key"
         :label="field.label"
         :prop="`formPayload.${field.key}`"
+        :required="Boolean(field.required)"
       >
         <el-input
           v-if="field.type === 'text'"
@@ -73,27 +78,59 @@
           :placeholder="`璇烽�夋嫨${field.label}`"
           style="width: 100%"
           clearable
+          filterable
         >
-          <el-option v-for="o in field.options" :key="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>
-    </el-form>
+    </div>
   </template>
   <el-empty v-else description="鏆傛棤濉姤椤�" :image-size="48" />
 </template>
 
 <script setup>
+import { onMounted, watch } from "vue";
+import { useSelectOptionSources } from "../../approve-template/useSelectOptionSources.js";
 import { formatFieldDisplayValue } from "../approveListConstants.js";
 
 const props = defineProps({
   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, { moduleKey: props.moduleKey });
+}
+
+onMounted(() => {
+  loadOptionCaches();
+});
+
+watch(
+  () => props.fields,
+  () => {
+    loadOptionCaches();
+  },
+  { deep: true }
+);
+
 function displayValue(field) {
-  return formatFieldDisplayValue(field, props.formPayload?.[field.key]);
+  const val = props.formPayload?.[field.key];
+  if (field.type === "select" && field.optionSource && field.optionSource !== "static") {
+    return getDisplayLabel(field, val, { moduleKey: props.moduleKey });
+  }
+  return formatFieldDisplayValue(field, val);
 }
 </script>
 

--
Gitblit v1.9.3