From 2dfc8dc4bcd3d3cd4aed1b6054e073e140eba9c8 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 19 May 2025 16:05:50 +0800
Subject: [PATCH] Merge branch 'master' into jiangwu

---
 src/views/device/airport.vue |   84 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 73 insertions(+), 11 deletions(-)

diff --git a/src/views/device/airport.vue b/src/views/device/airport.vue
index d5d189c..e751aec 100644
--- a/src/views/device/airport.vue
+++ b/src/views/device/airport.vue
@@ -134,6 +134,10 @@
           >远程调试
         </el-button>
       </template>
+      <!-- 添加行政区划显示模板 -->
+      <template #area_code="{ row }">
+        <span>{{ row.area_name }}</span>
+      </template>
     </avue-crud>
 
     <el-dialog title="固件升级" append-to-body v-model="firmwareBox" width="455px">
@@ -457,34 +461,56 @@
             props: {
               label: 'title',
               value: 'value',
+              emitPath: false,
+              checkStrictly: true,
+              multiple: false,
+              expandTrigger: 'hover',
             },
             dataType: 'string',
             rules: [
               {
                 required: true,
-                message: '请选择所在省份',
-                trigger: 'blur',
+                message: '请选择行政区划',
+                trigger: 'change',
               },
             ],
+            change: ({ value }) => {
+              if (!value) {
+                this.form.area_code = null;
+              } else {
+                if (typeof value === 'string' && value.includes(',')) {
+                  const codes = value.split(',');
+                  this.form.area_code = codes[codes.length - 1];
+                } else {
+                  this.form.area_code = value;
+                }
+              }
+            },
             lazy: true,
             lazyLoad(node, resolve) {
               let level = node.level;
               let list = [];
               let callback = () => {
                 resolve(
-                  (list || []).map(ele => {
-                    return Object.assign(ele, {
-                      leaf: !ele.hasChildren,
-                    });
-                  })
+                  (list || []).map(ele => ({
+                    ...ele,
+                    value: ele.value,
+                    leaf: level >= 2,
+                  }))
                 );
               };
-              if (level == 0) {
+
+              if (level === 0) {
                 getLazyTree('000000000000').then(res => {
                   list = res.data.data;
                   callback();
                 });
-              } else if (level > 0 && level < 5) {
+              } else if (level === 1) {
+                getLazyTree(node.value).then(res => {
+                  list = res.data.data;
+                  callback();
+                });
+              } else if (level === 2) {
                 getLazyTree(node.value).then(res => {
                   list = res.data.data;
                   callback();
@@ -939,6 +965,15 @@
       this.ossSetBox = false;
     },
     rowSave(row, done, loading) {
+      let areaCode = row.area_code;
+      if (Array.isArray(areaCode)) {
+        areaCode = areaCode[areaCode.length - 1];
+      } else if (typeof areaCode === 'string' && areaCode.includes(',')) {
+        const codes = areaCode.split(',');
+        areaCode = codes[codes.length - 1];
+      }
+      row.area_code = areaCode || null;
+
       add(row).then(
         () => {
           this.onLoad(this.page);
@@ -955,7 +990,12 @@
       );
     },
     rowUpdate(row, index, done, loading) {
-      update(row).then(
+      const submitData = {
+        ...row,
+        area_code: row.area_code.split(',').pop(),
+      };
+
+      update(submitData).then(
         () => {
           this.onLoad(this.page);
           this.$message({
@@ -1026,10 +1066,32 @@
           this.$refs.crud.toggleSelection();
         });
     },
+    getFullAreaCode(areaCode) {
+      if (!areaCode) return '';
+
+      const code = areaCode.toString();
+
+      if (code.includes(',')) return code;
+
+      if (code.endsWith('0000000000')) {
+        return code;
+      } else if (code.endsWith('00000000') && !code.endsWith('0000000000')) {
+        const provinceCode = code.substring(0, 2) + '0000000000';
+        return `${provinceCode},${code}`;
+      } else {
+        const provinceCode = code.substring(0, 2) + '0000000000';
+        const cityCode = code.substring(0, 4) + '00000000';
+        return `${provinceCode},${cityCode},${code}`;
+      }
+    },
     beforeOpen(done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
+          const data = res.data.data;
+          this.form = {
+            ...data,
+            area_code: this.getFullAreaCode(data.area_code),
+          };
         });
       }
       done();

--
Gitblit v1.9.3