From 3dbaccac83e648d4b87da72a243848ad1926f7bb Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期二, 23 十二月 2025 14:43:17 +0800
Subject: [PATCH] 新增日志

---
 ui/admin-ui3/src/views/tms/tmsProject/index.vue |  487 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 342 insertions(+), 145 deletions(-)

diff --git a/ui/admin-ui3/src/views/tms/tmsProject/index.vue b/ui/admin-ui3/src/views/tms/tmsProject/index.vue
index c99556e..e582100 100644
--- a/ui/admin-ui3/src/views/tms/tmsProject/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsProject/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <basicContainer >
+  <basicContainer>
     <avue-crud
         :option="option"
         :table-loading="pageF.loading"
@@ -50,159 +50,356 @@
 </template>
 
 <script setup name="tmsProject" lang="ts">
-  import {TmsProjectI,addTmsProject, delTmsProject, exportTmsProject, getTmsProject, listTmsProject, updateTmsProject} from "@/api/tms/tmsProject";
-  import useCurrentInstance from "@/utils/useCurrentInstance";
-  import {computed,reactive, ref, toRefs} from "vue";
-  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
-  import {usePagePlus} from "@/hooks/usePagePlus";
-  import {hasPermission} from "@/utils/permissionUtils";
+import {
+  TmsProjectI,
+  addTmsProject,
+  delTmsProject,
+  exportTmsProject,
+  getTmsProject,
+  listTmsProject,
+  updateTmsProject
+} from "@/api/tms/tmsProject";
+import useCurrentInstance from "@/utils/useCurrentInstance";
+import {computed, onMounted, reactive, ref, toRefs, watch} from "vue";
+import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
+import {usePagePlus} from "@/hooks/usePagePlus";
+import {hasPermission} from "@/utils/permissionUtils";
+import {getTmsCustomerInfo, listTmsCustomerInfo} from "@/api/tms/tmsCustomerInfo";
+import {getTmsContract, listTmsContract} from "@/api/tms/tmsContract";
 
-  const { proxy } = useCurrentInstance();
-  const crudRef = ref();
+const {proxy} = useCurrentInstance();
+const crudRef = ref();
 
-  const permissionList = computed(()=>{
-    return {
-      addBtn: hasPermission(["tms:tmsProject:add"]),
-      delBtn: hasPermission(["tms:tmsProject:remove"]),
-      editBtn: hasPermission(["tms:tmsProject:edit"]),
-      viewBtn: hasPermission(["tms:tmsProject:query"]),
-    }
-  })
+const permissionList = computed(() => {
+  return {
+    addBtn: hasPermission(["tms:tmsProject:add"]),
+    delBtn: hasPermission(["tms:tmsProject:remove"]),
+    editBtn: hasPermission(["tms:tmsProject:edit"]),
+    viewBtn: hasPermission(["tms:tmsProject:query"]),
+  }
+})
 
-  const data = reactive({
-    form:<TmsProjectI>{},
-    queryParams:<TmsProjectI&PageQueryInterface>{},
-    page: <PagesInterface>{
-      pageSize: 10,
-      total: 0,
-      currentPage: 1,
-    },
-    selectionList:[],
-  })
-  const {queryParams,form,page,selectionList} = toRefs(data);
-  const option = ref({
-    pageKey: 'TmsProject',
-    rowKey: 'id',
-    column: {
-                                id: {
-          label: '涓婚敭ID',
-                  addDisplay :true,
-        editDisplay : false,
-        viewDisplay : false,
-        hide : true,
-        search : false,
-                  },
-                                projectName: {
+const data = reactive({
+  form: <TmsProjectI>{},
+  queryParams: <TmsProjectI & PageQueryInterface>{},
+  page: <PagesInterface>{
+    pageSize: 10,
+    total: 0,
+    currentPage: 1,
+  },
+  selectionList: [],
+})
+const {queryParams, form, page, selectionList} = toRefs(data);
+const option = ref({
+  pageKey: 'TmsProject',
+  rowKey: 'id',
+  group:[
+    {
+      label: '鍩虹淇℃伅',
+      prop: 'jcxx',
+      column:{
+        projectName: {
           label: '椤圭洰鍚嶇О',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "椤圭洰鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                projectCode: {
+          display: true,
+          rules: [
+            {
+              required: true,
+              message: "椤圭洰鍚嶇О涓嶈兘涓虹┖", trigger: "blur"
+            }
+          ],
+        },
+        projectCode: {
           label: '椤圭洰缂栧彿',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "椤圭洰缂栧彿涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                relatedContract: {
-          label: '鍏宠仈鍚堝悓',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                  },
-                                relatedCustomer: {
+          display: true,
+
+        },
+        relatedCustomerId: {
           label: '鍏宠仈瀹㈡埛',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                  },
-                                status: {
-          label: '鐘舵��',
-                      type: 'radio', dicUrl: '/system/dict/data/type/data_status',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                createTime: {
-          label: '鍒涘缓鏃堕棿',
-                      type: 'date', valueFormat: 'YYYY-MM-DD',
-                  addDisplay : false,
-        editDisplay : false,
-        viewDisplay : false,
-        hide : true,
-        search : false,
-                  },
-                                updateBy: {
-          label: '鏇存柊浜�',
-                  addDisplay : false,
-        editDisplay : false,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                updateTime: {
-          label: '鏇存柊鏃堕棿',
-                      type: 'date', valueFormat: 'YYYY-MM-DD',
-                  addDisplay : false,
-        editDisplay : false,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                remark: {
-          label: '澶囨敞',
-                      type: 'textarea', minRows: 3, maxRows: 5,
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay : false,
-        hide : true,
-        search : false,
-                  },
-          }
-  })
+          display: true,minWidth: 150,
+          type: 'table',suffixIcon:'search',dataType:'string',
+          rules: [
+            {
+              required: true,
+              message: "鍏宠仈瀹㈡埛涓嶈兘涓虹┖", trigger: "change"
+            }
+          ],
+          children:{
+            border: true,
+            searchMenuSpan: 5,
+            column:{
+              customerType: {
+                label: '瀹㈡埛绫诲瀷', minWidth: 120,
+                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/customer_type',
+                search: true,
+              },
+              customerShortName: {
+                label: '瀹㈡埛绠�绉�', minWidth: 130,
+                search: true,
+              },
+              customerCode: {
+                label: '瀹㈡埛缂栧彿',minWidth: 120,
+                search: true,
+              },
+              contactName: {
+                label: '鑱旂郴浜哄鍚�',minWidth: 120,
+              },
+              signCompanyName: {
+                label: '绛剧害鍏徃', minWidth: 150,
+              },
+            },
 
-  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
-    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
-    form:form,
-    option:option,
-    queryParams:queryParams,
-    idKey:'id',
-    page:page.value,
-    getListApi:listTmsProject,
-    getDetailApi:getTmsProject,
-    exportApi:exportTmsProject,
-    deleteApi:delTmsProject,
-    addApi:addTmsProject,
-    updateApi:updateTmsProject,
-    handleUpdateFunc:()=>{
-      crudRef.value.rowEdit(selectionList.value[0]);
+          },
+          props:{
+            label: 'customerShortName',
+            value: 'id'
+          },
+          onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback:any) => {
+            if (value){
+              let id = value;
+              if (Array.isArray(value)){
+                id = value[0]
+              }
+              getTmsCustomerInfo(id).then(res=>{
+                return callback(res.data||{})
+              })
+            }else{
+              listTmsCustomerInfo({pageSize:page.pageSize,pageNum:page.currentPage,...data}).then(res=>{
+                return callback({
+                  total: res.total,
+                  data: res.rows||[],
+                })
+              })
+            }
+
+          },
+          change: (val: any) => {
+            const table = crudRef.value?.getPropRef?.('relatedCustomerId')?.$refs?.temp;
+            if (!table) return;
+            let active = table.active;
+            if (Array.isArray(active)) active = active[0];
+            if (active) {
+              Object.assign(form.value, {
+                relatedCustomerId: active.id,
+                relatedCustomerName: active.customerShortName,
+              });
+              form.value.relatedContractId = undefined;
+              form.value.relatedContractName = undefined;
+            }
+          },
+        },
+        relatedContractId: {
+          label: '鍏宠仈鍚堝悓',
+          display: true,minWidth: 150,dataType:'string',
+          type: 'table',suffixIcon:'search',
+          rules: [
+            {
+              required: true,
+              message: "鍏宠仈鍚堝悓涓嶈兘涓虹┖", trigger: "change"
+            }
+          ],
+          children:{
+            border: true,
+            searchMenuSpan: 5,
+            column:{
+              contractCode: {
+                label: '鍚堝悓缂栧彿', minWidth: 130,
+                search: true,
+              },
+              contractName: {
+                label: '鍚堝悓鍚嶇О',minWidth: 120,
+                search: true,
+              },
+              contractType: {
+                label: '鍚堝悓绫诲瀷',minWidth: 120,
+                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/contract_type',
+                search: true,
+              },
+              signDate: {
+                label: '绛剧害鏃ユ湡', minWidth: 150,
+              },
+              contractDate: {
+                label: '鍚堝悓鏈熼檺',
+                display: false,
+                hide: false,
+                search: false,minWidth:300,
+                formatter: (row:any, column:any) => {
+                  if (row.contractStartDate && row.contractEndDate) {
+                    return row.contractStartDate + '~' + row.contractEndDate
+                  }
+                  return ''
+                },
+              },
+            },
+
+          },
+          props:{
+            label: 'contractName',
+            value: 'id'
+          },
+          onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback:any) => {
+            if (value){
+              let id = value;
+              if (Array.isArray(value)){
+                id = value[0]
+              }
+              getTmsContract(id).then(res=>{
+                return callback(res.data||{})
+              })
+            }else{
+              listTmsContract({partyAId:form.value.relatedCustomerId,pageSize:page.pageSize,pageNum:page.currentPage,...data}).then(res=>{
+                return callback({
+                  total: res.total,
+                  data: res.rows||[],
+                })
+              })
+            }
+
+          },
+          change: (val: any) => {
+            const table = crudRef.value?.getPropRef?.('relatedContractId')?.$refs?.temp;
+            if (!table) return;
+            let active = table.active;
+            if (Array.isArray(active)) active = active[0];
+            if (active) {
+              Object.assign(form.value, {
+                relatedContractId: active.id,
+                relatedContractName: active.contractName,
+              });
+            }
+          },
+        },
+
+
+      }
     },
-    handleSelectionChangeFunc:(selection:any)=>{
-      selectionList.value = selection;
+    {
+      label: '鍏朵粬淇℃伅',
+      prop: 'qtxx',
+      column:{
+        status: {
+          label: '鐘舵��',dataType: 'string',
+          type: 'radio', dicUrl: '/system/dict/data/type/project_status',
+          addDisplay: false,minWidth: 150,
+          editDisplay: false,
+          viewDisplay: true,
+          hide: false,
+          search: true,
+        },
+        createTime: {
+          label: '鍒涘缓鏃堕棿',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+          hide: true,
+          search: false,
+        },
+        createBy: {
+          label: '鍒涘缓浜�',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+        },
+        updateBy: {
+          label: '鏇存柊浜�',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+        },
+        updateTime: {
+          label: '鏇存柊鏃堕棿',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+        },
+        remark: {
+          label: '澶囨敞',
+          type: 'textarea', minRows: 3, maxRows: 5,
+          addDisplay: true,span: 24,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: true,
+          search: false,
+        },
+      }
     }
-  })
+  ],
 
+  column: {
+    projectName: {
+      label: '椤圭洰鍚嶇О',
+      display: false,minWidth: 150,
+      search: true,
+    },
+    projectCode: {
+      label: '椤圭洰缂栧彿',
+      display: false,minWidth: 150,
+      search: true,
+    },
+    relatedContractName: {
+      label: '鍏宠仈鍚堝悓',
+      display: false,minWidth: 150,
+      search: true,
+    },
+
+    relatedCustomerName: {
+      label: '鍏宠仈瀹㈡埛',
+      display: false,minWidth: 150,
+      search: true,
+    },
+    status: {
+      label: '鐘舵��',dataType: 'string',
+      type: 'radio', dicUrl: '/system/dict/data/type/project_status',
+      display: false,minWidth: 150,
+      search: true,
+    },
+    updateBy: {
+      label: '鏇存柊浜�',
+      display: false,minWidth: 150,
+      search: false,
+    },
+    updateTime: {
+      label: '鏇存柊鏃堕棿',
+      display: false,minWidth: 180,
+      search: false,
+    },
+  }
+})
+
+const {
+  tableData,
+  pageF,
+  rowSave,
+  rowUpdate,
+  rowDel,
+  beforeOpen,
+  searchChange,
+  searchReset,
+  selectionChange,
+  onLoad,
+  currentChange,
+  sizeChange,
+  handleDelete,
+  handleExport,
+  handleUpdate,
+  refreshChange
+} = usePagePlus({
+  form: form,
+  option: option,
+  queryParams: queryParams,
+  idKey: 'id',
+  page: page.value,
+  getListApi: listTmsProject,
+  getDetailApi: getTmsProject,
+  exportApi: exportTmsProject,
+  deleteApi: delTmsProject,
+  addApi: addTmsProject,
+  updateApi: updateTmsProject,
+  handleUpdateFunc: () => {
+    crudRef.value.rowEdit(selectionList.value[0]);
+  },
+  handleSelectionChangeFunc: (selection: any) => {
+    selectionList.value = selection;
+  }
+})
 
 </script>

--
Gitblit v1.8.0