From 5ce0cecd476a5c034f7ae12309a6c65078c3f44e Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期三, 17 十二月 2025 17:21:40 +0800
Subject: [PATCH] 新增应收账单管理和明细

---
 ui/admin-ui3/src/views/tms/tmsVehicleDocument/index.vue |  655 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 440 insertions(+), 215 deletions(-)

diff --git a/ui/admin-ui3/src/views/tms/tmsVehicleDocument/index.vue b/ui/admin-ui3/src/views/tms/tmsVehicleDocument/index.vue
index 3974ac9..2cdb968 100644
--- a/ui/admin-ui3/src/views/tms/tmsVehicleDocument/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsVehicleDocument/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <basicContainer >
+  <basicContainer>
     <avue-crud
         :option="option"
         :table-loading="pageF.loading"
@@ -50,228 +50,453 @@
 </template>
 
 <script setup name="tmsVehicleDocument" lang="ts">
-  import {TmsVehicleDocumentI,addTmsVehicleDocument, delTmsVehicleDocument, exportTmsVehicleDocument, getTmsVehicleDocument, listTmsVehicleDocument, updateTmsVehicleDocument} from "@/api/tms/tmsVehicleDocument";
-  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 {
+  TmsVehicleDocumentI,
+  addTmsVehicleDocument,
+  delTmsVehicleDocument,
+  exportTmsVehicleDocument,
+  getTmsVehicleDocument,
+  listTmsVehicleDocument,
+  updateTmsVehicleDocument
+} from "@/api/tms/tmsVehicleDocument";
+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 {getTmsVehicle, listTmsVehicle} from "@/api/tms/tmsVehicle";
 
-  const { proxy } = useCurrentInstance();
-  const crudRef = ref();
+const {proxy} = useCurrentInstance();
+const crudRef = ref();
 
-  const permissionList = computed(()=>{
-    return {
-      addBtn: hasPermission(["tms:tmsVehicleDocument:add"]),
-      delBtn: hasPermission(["tms:tmsVehicleDocument:remove"]),
-      editBtn: hasPermission(["tms:tmsVehicleDocument:edit"]),
-      viewBtn: hasPermission(["tms:tmsVehicleDocument:query"]),
-    }
-  })
+const permissionList = computed(() => {
+  return {
+    addBtn: hasPermission(["tms:tmsVehicleDocument:add"]),
+    delBtn: hasPermission(["tms:tmsVehicleDocument:remove"]),
+    editBtn: hasPermission(["tms:tmsVehicleDocument:edit"]),
+    viewBtn: hasPermission(["tms:tmsVehicleDocument:query"]),
+  }
+})
 
-  const data = reactive({
-    form:<TmsVehicleDocumentI>{},
-    queryParams:<TmsVehicleDocumentI&PageQueryInterface>{},
-    page: <PagesInterface>{
-      pageSize: 10,
-      total: 0,
-      currentPage: 1,
-    },
-    selectionList:[],
-  })
-  const {queryParams,form,page,selectionList} = toRefs(data);
-  const option = ref({
-    pageKey: 'TmsVehicleDocument',
-    rowKey: 'systemId',
-    column: {
-                                systemId: {
+const data = reactive({
+  form: <TmsVehicleDocumentI>{},
+  queryParams: <TmsVehicleDocumentI & PageQueryInterface>{},
+  page: <PagesInterface>{
+    pageSize: 10,
+    total: 0,
+    currentPage: 1,
+  },
+  selectionList: [],
+})
+const {queryParams, form, page, selectionList} = toRefs(data);
+const option = ref({
+  pageKey: 'TmsVehicleDocument',
+  rowKey: 'id',
+  searchLabelWidth:100,
+  labelWidth:110,
+  group:[
+    {
+      label: '鍩烘湰淇℃伅',
+      prop: 'jbxx',
+      column:{
+        systemCode: {
           label: '绯荤粺缂栧彿',
-                  addDisplay :true,
-        editDisplay : false,
-        viewDisplay : false,
-        hide : true,
-        search : false,
-                  },
-                                plateNumber: {
+          addDisplay: false,disabled: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: true,
+          rules: [
+            {
+              required: true,
+              message: "绯荤粺缂栧彿涓嶈兘涓虹┖", trigger: "blur"
+            }
+          ],
+        },
+        vehicleId: {
           label: '杞︾墝鍙�',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "杞︾墝鍙蜂笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                id: {
-          label: '',
-                  addDisplay :true,
-        editDisplay : false,
-        viewDisplay : false,
-        hide : true,
-        search : false,
-                  },
-                                serviceProvider: {
-          label: '杞﹁締鏈嶅姟鍟�',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "杞﹁締鏈嶅姟鍟嗕笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                certificateType: {
-          label: '璇佷欢绫诲瀷',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "璇佷欢绫诲瀷涓嶈兘涓虹┖", trigger: "change"
-                 }
-            ],                  },
-                                certificateNumber: {
-          label: '璇佷欢鍙�',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "璇佷欢鍙蜂笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                registerDate: {
-          label: '娉ㄥ唽鏃ユ湡',
-                      type: 'date', valueFormat: 'YYYY-MM-DD',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                expireDate: {
-          label: '鍒版湡鏃ユ湡',
-                      type: 'date', valueFormat: 'YYYY-MM-DD',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                certificateFile: {
-          label: '璇佷欢鍑瘉',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                lastAnnualCheckDate: {
-          label: '涓婃骞村鏃ユ湡',
-                      type: 'date', valueFormat: 'YYYY-MM-DD',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                invalidDate: {
-          label: '搴熸鏃ユ湡',
-                      type: 'date', valueFormat: 'YYYY-MM-DD',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay : false,
-        hide :false,
-        search : false,
-                  },
-                                status: {
-          label: '鐘舵��',
-                      type: 'radio', dicUrl: '/system/dict/data/type/sys_normal_disable',
-                  addDisplay :true,
-        editDisplay :true,
-        viewDisplay :true,
-        hide :false,
-        search :true,
-                      rules: [
-              {
-                required: true,
-                message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                createBy: {
-          label: '鍒涘缓浜�',
-                  addDisplay : false,
-        editDisplay : false,
-        viewDisplay : false,
-        hide : true,
-        search : false,
-                  },
-                                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,
-                  },
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide:true,
+          rules: [
+            {
+              required: true,
+              message: "杞︾墝鍙蜂笉鑳戒负绌�", trigger: "change"
+            }
+          ],
+          change: (val: any) => {
+            const table = crudRef.value?.getPropRef?.('vehicleId')?.$refs?.temp;
+            if (!table) return;
+            let active = table.active;
+            if (Array.isArray(active)) active = active[0];
+            if (active) {
+              Object.assign(form.value, {
+                vehicleId: active.id,
+                plateNumber: active.licensePlate,
+                serviceProviderId: active.serviceProviderId,
+                serviceProviderName: active.serviceProviderName,
+              });
+            }
+          },
+          type: 'table',suffixIcon:'search',dataType: 'string',
+          children:{
+            border: true,
+            searchMenuSpan: 5,
+            searchLabelWidth:100,
+            column:{
+              systemCode: {
+                label: '绯荤粺缂栧彿', minWidth: 130,
+                search: true,
+              },
+              serviceProviderName: {
+                label: '杞﹁締鏈嶅姟鍟�',minWidth: 120,
+                search: true,
+              },
+              vehicleType: {
+                label: '杞﹁締绫诲瀷',minWidth: 120,
+              },
+              licensePlate: {
+                label: '杞︾墝鍙�', minWidth: 150,
+              },
+              licenseHk: {
+                label: '棣欐腐鐗岀収', minWidth: 150,
+              },
+              licenseMo: {
+                label: '婢抽棬鐗岀収', minWidth: 150,
+              },
+            },
+
+          },
+          props:{
+            label: 'licensePlate',
+            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]
+              }
+              getTmsVehicle(id).then(res=>{
+                return callback(res.data||{})
+              })
+            }else{
+              listTmsVehicle({pageSize:page.pageSize,pageNum:page.currentPage,...data}).then(res=>{
+                return callback({
+                  total: res.total,
+                  data: res.rows||[],
+                })
+              })
+            }
+
           }
-  })
 
-  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:'systemId',
-    page:page.value,
-    getListApi:listTmsVehicleDocument,
-    getDetailApi:getTmsVehicleDocument,
-    exportApi:exportTmsVehicleDocument,
-    deleteApi:delTmsVehicleDocument,
-    addApi:addTmsVehicleDocument,
-    updateApi:updateTmsVehicleDocument,
-    handleUpdateFunc:()=>{
-      crudRef.value.rowEdit(selectionList.value[0]);
+        },
+
+        plateNumber: {
+          label: '杞︾墝鍙�',
+          display: false,
+          hide: false,minWidth:150,
+          search: true,
+
+        },
+
+
+        // serviceProviderId: {
+        //   label: '杞﹁締鏈嶅姟鍟�',
+        //   addDisplay: true,disabled:true,
+        //   editDisplay: true,
+        //   viewDisplay: true,
+        //   hide: true,
+        //   rules: [
+        //     {
+        //       required: true,
+        //       message: "杞﹁締鏈嶅姟鍟嗕负绌�", trigger: "change"
+        //     }
+        //   ],
+        // },
+        serviceProviderName: {
+          label: '杞﹁締鏈嶅姟鍟�',
+          display: true,disabled:true,
+          hide: false,minWidth:150,
+          search: true,
+          rules: [
+            {
+              required: true,
+              message: "杞﹁締鏈嶅姟鍟嗕负绌�", trigger: "change"
+            }
+          ],
+
+        },
+
+        certificateType: {
+          label: '璇佷欢绫诲瀷',
+          addDisplay: true,dataType: 'string',
+          type: 'select', dicUrl: '/system/dict/data/type/license_type',
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: true,
+          rules: [
+            {
+              required: true,
+              message: "璇佷欢绫诲瀷涓嶈兘涓虹┖", trigger: "change"
+            }
+          ],
+        },
+        certificateNumber: {
+          label: '璇佷欢鍙�',
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: true,
+          rules: [
+            {
+              required: true,
+              message: "璇佷欢鍙蜂笉鑳戒负绌�", trigger: "blur"
+            }
+          ],
+        },
+
+        registerDate: {
+          label: '娉ㄥ唽鏃ユ湡',
+          type: 'date', valueFormat: 'YYYY-MM-DD',
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: false,
+        },
+        expireDate: {
+          label: '鍒版湡鏃ユ湡',
+          type: 'date', valueFormat: 'YYYY-MM-DD',
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: false,
+        },
+
+        lastAnnualCheckDate: {
+          label: '涓婃骞村鏃ユ湡',
+          type: 'date', valueFormat: 'YYYY-MM-DD',
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: false,
+        },
+        invalidDate: {
+          label: '搴熸鏃ユ湡',
+          type: 'date', valueFormat: 'YYYY-MM-DD',
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: false,
+        },
+        certificateFile: {
+          label: '璇佷欢鍑瘉',
+          addDisplay: true,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: true,minWidth:150,
+          search: false,span: 24,
+          accept:'string',dataType: 'string',
+          type: 'upload',
+          action: '/common/upload2',
+          propsHttp:{
+            home:'url',
+            name:'newFileName',
+          },
+        },
+      }
     },
-    handleSelectionChangeFunc:(selection:any)=>{
-      selectionList.value = selection;
+    {
+      label: '鍏朵粬淇℃伅',
+      prop: 'qtxx',
+      column: {
+        status: {
+          label: '鐘舵��', dataType: 'string',
+          type: 'radio', dicUrl: '/system/dict/data/type/sys_normal_disable',
+          addDisplay: false,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: true,
+          rules: [
+            {
+              required: true,
+              message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur"
+            }
+          ],
+        },
+        createBy: {
+          label: '鍒涘缓浜�',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+          hide: true,
+          search: false,
+        },
+        createTime: {
+          label: '鍒涘缓鏃堕棿',
+          type: 'date', valueFormat: 'YYYY-MM-DD',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+          hide: true,
+          search: false,
+        },
+        updateBy: {
+          label: '鏇存柊浜�',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+          hide: false,minWidth:150,
+          search: false,
+        },
+        updateTime: {
+          label: '鏇存柊鏃堕棿',
+          type: 'date', valueFormat: 'YYYY-MM-DD',
+          addDisplay: false,
+          editDisplay: false,
+          viewDisplay: true,
+          hide: false,minWidth:180,
+          search: false,
+        },
+        remark: {
+          label: '澶囨敞',
+          type: 'textarea', minRows: 3, maxRows: 5,
+          addDisplay: true,span:24,
+          editDisplay: true,
+          viewDisplay: true,
+          hide: true,
+          search: false,
+        },
+      }
     }
-  })
+  ],
+  column: {
+    systemCode: {
+      label: '绯荤粺缂栧彿',
+      display: false,
+      hide: false,minWidth:150,
+      search: true,
+    },
+
+    plateNumber: {
+      label: '杞︾墝鍙�',
+      display: false,
+      hide: false,minWidth:150,
+      search: true,
+
+    },
+    serviceProviderName: {
+      label: '杞﹁締鏈嶅姟鍟�',
+      display: false,disabled:true,
+      hide: false,minWidth:150,
+      search: true,
+    },
+    certificateType: {
+      label: '璇佷欢绫诲瀷',dataType: 'string',
+      type: 'select', dicUrl: '/system/dict/data/type/license_type',
+      display: false,
+      hide: false,minWidth:150,
+      search: true,
+    },
+    certificateNumber: {
+      label: '璇佷欢鍙�',
+      display: false,
+      hide: false,minWidth:150,
+      search: true,
+    },
+    registerDate: {
+      label: '娉ㄥ唽鏃ユ湡',
+      display: false,
+      hide: false,minWidth:150,
+      search: false,
+    },
+    expireDate: {
+      label: '鍒版湡鏃ユ湡',
+      display: false,
+      hide: false,minWidth:150,
+      search: false,
+    },
+
+    lastAnnualCheckDate: {
+      label: '涓婃骞村鏃ユ湡',
+      display: false,
+      hide: false,minWidth:150,
+      search: false,
+    },
+    invalidDate: {
+      label: '搴熸鏃ユ湡',
+      display: false,
+      hide: false,minWidth:150,
+      search: false,
+    },
+    status: {
+      label: '鐘舵��', dataType: 'string',
+      type: 'radio', dicUrl: '/system/dict/data/type/sys_normal_disable',
+      display: false,
+      hide: false,minWidth:150,
+      search: true,
+    },
+    updateBy: {
+      label: '鏇存柊浜�',
+      display: false,
+      hide: false,minWidth:150,
+      search: false,
+    },
+    updateTime: {
+      label: '鏇存柊鏃堕棿',
+      display: false,
+      hide: 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: listTmsVehicleDocument,
+  getDetailApi: getTmsVehicleDocument,
+  exportApi: exportTmsVehicleDocument,
+  deleteApi: delTmsVehicleDocument,
+  addApi: addTmsVehicleDocument,
+  updateApi: updateTmsVehicleDocument,
+  handleUpdateFunc: () => {
+    crudRef.value.rowEdit(selectionList.value[0]);
+  },
+  handleSelectionChangeFunc: (selection: any) => {
+    selectionList.value = selection;
+  }
+})
 
 
-</script>
+</script>
\ No newline at end of file

--
Gitblit v1.8.0