Ver código fonte

feat(web-admin): prefill quote submit approvers from tenant setting

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 3 meses atrás
pai
commit
98f33644f1

+ 17 - 3
web-admin/src/views/crm/quote/components/ApproverSelector.vue

@@ -84,6 +84,7 @@ import { ref, reactive } from 'vue'
 import type { FormInstance, FormRules } from 'element-plus'
 import { Check, Close } from '@element-plus/icons-vue'
 import { fetchUserOptions } from '@/api/admin'
+import { getQuoteApproverSetting } from '@/api/crm/quote'
 
 const emit = defineEmits(['submit', 'close'])
 
@@ -94,7 +95,7 @@ const formRef = ref<FormInstance>()
 const userList = ref<any[]>([])
 
 const form = reactive({
-  approverIds: [] as number[],
+  approverIds: [] as string[],
   remark: ''
 })
 
@@ -103,9 +104,22 @@ const rules = reactive<FormRules>({
   remark: [{ required: true, message: '请输入审批说明', trigger: 'blur' }]
 })
 
-const open = () => {
+async function resolvePrefillApproverIds(userList: { userId: string | number }[]) {
+  try {
+    const { data } = await getQuoteApproverSetting()
+    if (!data || String(data.status) !== '0') return [] as string[]
+    const valid = new Set(userList.map((u) => String(u.userId)))
+    return (data.approverIds || []).map(String).filter((id) => valid.has(id))
+  } catch {
+    return []
+  }
+}
+
+const open = async () => {
   dialogVisible.value = true
-  loadUsers()
+  await loadUsers()
+  form.approverIds = await resolvePrefillApproverIds(userList.value)
+  form.remark = ''
 }
 
 const handleClose = () => {

+ 25 - 6
web-admin/src/views/crm/quote/components/QuoteFormPanel.vue

@@ -463,6 +463,14 @@
         scroll-to-error
         :scroll-into-view-options="{ behavior: 'smooth', block: 'center' }"
       >
+        <el-alert
+          v-if="submitPrefillTip"
+          type="success"
+          :closable="false"
+          show-icon
+          title="已按「报价单审批人设置」预填审批人,可修改后提交"
+          style="margin-bottom: 12px"
+        />
         <div class="form-grid-2">
           <el-form-item prop="approverIds" class="form-col-span-2">
             <template #label>
@@ -495,7 +503,7 @@
 import { useDictStore } from '@/store/modules/dict'
 import { $modal } from '@/utils/modal'
 import { ref, computed, onMounted, type ComponentInternalInstance } from 'vue';
-import { getQuote, addQuote, updateQuote, submitQuote } from '@/api/crm/quote';
+import { getQuote, addQuote, updateQuote, submitQuote, getQuoteApproverSetting } from '@/api/crm/quote';
 import type { QuoteForm, QuoteProductForm } from '@/api/crm/quote';
 import type { FormInstance } from 'element-plus';
 import { useRouter, useRoute } from 'vue-router';
@@ -689,6 +697,7 @@ const submitForm = ref({
 const submitRules = ref({
   approverIds: [{ required: true, message: '请选择审批人', trigger: 'change' }]
 });
+const submitPrefillTip = ref(false);
 const submitFormRef = ref<FormInstance>();
 
 // 用户列表(负责人 + 审批人候选)
@@ -1099,6 +1108,17 @@ const loadUserList = async () => {
   }
 };
 
+async function resolvePrefillApproverIds(userList: { userId: string | number }[]) {
+  try {
+    const { data } = await getQuoteApproverSetting();
+    if (!data || String(data.status) !== '0') return [] as string[];
+    const valid = new Set(userList.map((u) => String(u.userId)));
+    return (data.approverIds || []).map(String).filter((id) => valid.has(id));
+  } catch {
+    return [];
+  }
+}
+
 /** 加载供方信息列表 */
 const loadSupplierList = async () => {
   try {
@@ -1692,15 +1712,14 @@ const handleSubmit = async () => {
     }
   }
 
-  // 重置提交表单
+  await loadUserList();
+  const prefillIds = await resolvePrefillApproverIds(userList.value);
   submitForm.value = {
     id: form.value.id,
-    approverIds: [],
+    approverIds: prefillIds,
     remark: ''
   };
-
-  // 加载用户列表
-  await loadUserList();
+  submitPrefillTip.value = prefillIds.length > 0;
 
   // 打开审批对话框
   submitDialog.value.visible = true;

+ 29 - 5
web-admin/src/views/crm/quote/index.vue

@@ -415,6 +415,14 @@
         scroll-to-error
         :scroll-into-view-options="{ behavior: 'smooth', block: 'center' }"
       >
+        <el-alert
+          v-if="submitPrefillTip"
+          type="success"
+          :closable="false"
+          show-icon
+          title="已按「报价单审批人设置」预填审批人,可修改后提交"
+          style="margin-bottom: 12px"
+        />
         <div class="form-grid-2">
           <el-form-item prop="approverIds" class="form-col-span-2">
             <template #label>
@@ -732,6 +740,7 @@ import {
   delQuote,
   exportQuote,
   submitQuote,
+  getQuoteApproverSetting,
   generatePdf,
   generateShare,
   createNewVersion,
@@ -1034,6 +1043,7 @@ const submitForm = ref({
 const submitRules = ref({
   approverIds: [{ required: true, message: '请选择审批人', trigger: 'change' }]
 });
+const submitPrefillTip = ref(false);
 
 // 用户列表(审批人候选)
 const userList = ref<UserVO[]>([]);
@@ -1289,12 +1299,14 @@ const handleView = (row?: QuoteVO) => {
 
 /** 详情弹窗内提交审批 */
 const handleQuoteDetailSubmit = async (quote: QuoteVO) => {
+  await loadUserList();
+  const prefillIds = await resolvePrefillApproverIds(userList.value);
   submitForm.value = {
     id: quote.id,
-    approverIds: [],
+    approverIds: prefillIds,
     remark: ''
   };
-  await loadUserList();
+  submitPrefillTip.value = prefillIds.length > 0;
   submitDialog.visible = true;
 };
 
@@ -1385,6 +1397,17 @@ const loadUserList = async () => {
   }
 };
 
+async function resolvePrefillApproverIds(userList: { userId: string | number }[]) {
+  try {
+    const { data } = await getQuoteApproverSetting();
+    if (!data || String(data.status) !== '0') return [] as string[];
+    const valid = new Set(userList.map((u) => String(u.userId)));
+    return (data.approverIds || []).map(String).filter((id) => valid.has(id));
+  } catch {
+    return [];
+  }
+}
+
 /** 提交审批 */
 const handleSubmit = async (row?: QuoteVO) => {
   if (!row && ids.value.length !== 1) {
@@ -1397,13 +1420,14 @@ const handleSubmit = async (row?: QuoteVO) => {
     $modal.msgWarning('只能提交草稿状态的报价单');
     return;
   }
+  await loadUserList();
+  const prefillIds = await resolvePrefillApproverIds(userList.value);
   submitForm.value = {
     id: id,
-    approverIds: [],
+    approverIds: prefillIds,
     remark: ''
   };
-  // 加载用户列表
-  await loadUserList();
+  submitPrefillTip.value = prefillIds.length > 0;
   submitDialog.visible = true;
 };