From d294abb765e4ed349907c92ce313689c6299ba7d Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 02 十二月 2025 00:17:00 +0800
Subject: [PATCH] feat:地图都改为天地图的接口

---
 ruoyi-ui/src/views/system/dept/index.vue |  259 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 256 insertions(+), 3 deletions(-)

diff --git a/ruoyi-ui/src/views/system/dept/index.vue b/ruoyi-ui/src/views/system/dept/index.vue
index e502b4e..e2693e2 100644
--- a/ruoyi-ui/src/views/system/dept/index.vue
+++ b/ruoyi-ui/src/views/system/dept/index.vue
@@ -53,11 +53,30 @@
       v-loading="loading"
       :data="deptList"
       row-key="deptId"
-      :default-expand-all="isExpandAll"
+      :default-expand-all="false"
+      :expand-row-keys="expandRowKeys"
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
       <el-table-column prop="deptName" label="閮ㄩ棬鍚嶇О" width="260"></el-table-column>
-      <el-table-column prop="orderNum" label="鎺掑簭" width="200"></el-table-column>
+      <el-table-column prop="departmentId" label="SQL Server閮ㄩ棬ID" width="150" align="center">
+        <template slot-scope="scope">
+          <span v-if="scope.row.departmentId">{{ scope.row.departmentId }}</span>
+          <span v-else style="color: #909399;">-</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="serviceOrderClass" label="鏈嶅姟鍗曠紪鐮�" width="120" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.serviceOrderClass" type="success" size="mini">{{ scope.row.serviceOrderClass }}</el-tag>
+          <span v-else style="color: #909399;">-</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="dispatchOrderClass" label="璋冨害鍗曠紪鐮�" width="120" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.dispatchOrderClass" type="warning" size="mini">{{ scope.row.dispatchOrderClass }}</el-tag>
+          <span v-else style="color: #909399;">-</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="orderNum" label="鎺掑簭" width="150"></el-table-column>
       <el-table-column prop="status" label="鐘舵��" width="100">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
@@ -85,6 +104,13 @@
             v-hasPermi="['system:dept:add']"
           >鏂板</el-button>
           <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-location"
+            @click="handleManageRegion(scope.row)"
+            v-hasPermi="['system:dept:edit']"
+          >绠$悊鍖哄煙</el-button>
+          <el-button
             v-if="scope.row.parentId != 0"
             size="mini"
             type="text"
@@ -95,6 +121,92 @@
         </template>
       </el-table-column>
     </el-table>
+
+    <!-- 绠$悊鍖哄煙瀵硅瘽妗� -->
+    <el-dialog title="绠$悊鍖哄煙" :visible.sync="regionDialogVisible" width="900px" append-to-body>
+      <div style="margin-bottom: 10px;">
+        <el-button type="primary" icon="el-icon-plus" size="small" @click="handleAddRegion">鏂板鍖哄煙</el-button>
+      </div>
+      
+      <el-table :data="regionList" border>
+        <el-table-column label="鍖哄煙绫诲瀷" align="center" width="120">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.regionType === 'AREA'" type="success">鍦板煙鑼冨洿</el-tag>
+            <el-tag v-else-if="scope.row.regionType === 'HOSPITAL'" type="primary">鎸囧畾鍖婚櫌</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐪佷唤" prop="province" align="center" width="100" />
+        <el-table-column label="鍩庡競" prop="city" align="center" width="100" />
+        <el-table-column label="鍘�/鍖�" prop="area" align="center" width="100" />
+        <el-table-column label="璇︾粏鍦板潃" prop="address" align="center" show-overflow-tooltip />
+        <el-table-column label="鎸囧畾鍖婚櫌" prop="hospitalName" align="center" show-overflow-tooltip />
+        <el-table-column label="鐘舵��" align="center" width="80">
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" align="center" width="150">
+          <template slot-scope="scope">
+            <el-button size="mini" type="text" icon="el-icon-edit" @click="handleEditRegion(scope.row)">缂栬緫</el-button>
+            <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDeleteRegion(scope.row)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="regionDialogVisible = false">鍏� 闂�</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 娣诲姞鎴栦慨鏀瑰尯鍩熷璇濇 -->
+    <el-dialog :title="regionFormTitle" :visible.sync="regionFormVisible" width="600px" append-to-body>
+      <el-form ref="regionForm" :model="regionForm" :rules="regionRules" label-width="100px">
+        <el-form-item label="鍖哄煙绫诲瀷" prop="regionType">
+          <el-radio-group v-model="regionForm.regionType" @change="handleRegionTypeChange">
+            <el-radio label="AREA">鍦板煙鑼冨洿</el-radio>
+            <el-radio label="HOSPITAL">鎸囧畾鍖婚櫌</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        
+        <!-- 鍦板煙鑼冨洿閰嶇疆 -->
+        <div v-if="regionForm.regionType === 'AREA'">
+          <el-form-item label="鐪佷唤" prop="province">
+            <el-input v-model="regionForm.province" placeholder="璇疯緭鍏ョ渷浠斤紝濡傦細骞夸笢鐪�" />
+          </el-form-item>
+          <el-form-item label="鍩庡競" prop="city">
+            <el-input v-model="regionForm.city" placeholder="璇疯緭鍏ュ煄甯傦紝濡傦細娣卞湷甯�" />
+          </el-form-item>
+          <el-form-item label="鍘�/鍖�" prop="area">
+            <el-input v-model="regionForm.area" placeholder="璇疯緭鍏ュ幙/鍖猴紝濡傦細鍗楀北鍖�" />
+          </el-form-item>
+          <el-form-item label="璇︾粏鍦板潃" prop="address">
+            <el-input v-model="regionForm.address" type="textarea" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�鎴栧叧閿瘝" :rows="3" />
+          </el-form-item>
+        </div>
+        
+        <!-- 鎸囧畾鍖婚櫌閰嶇疆 -->
+        <div v-if="regionForm.regionType === 'HOSPITAL'">
+          <el-form-item label="鍖婚櫌鍚嶇О" prop="hospitalName">
+            <el-input v-model="regionForm.hospitalName" placeholder="璇疯緭鍏ュ尰闄㈠悕绉版垨鍏抽敭璇�" />
+          </el-form-item>
+        </div>
+        
+        <el-form-item label="鐘舵��" prop="status">
+          <el-radio-group v-model="regionForm.status">
+            <el-radio label="0">姝e父</el-radio>
+            <el-radio label="1">鍋滅敤</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="regionForm.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�" :rows="2" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitRegionForm">纭� 瀹�</el-button>
+        <el-button @click="regionFormVisible = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
 
     <!-- 娣诲姞鎴栦慨鏀归儴闂ㄥ璇濇 -->
     <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
@@ -115,6 +227,25 @@
           <el-col :span="12">
             <el-form-item label="鏄剧ず鎺掑簭" prop="orderNum">
               <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="SQL Server閮ㄩ棬ID" prop="departmentId">
+              <el-input v-model="form.departmentId" placeholder="SQL Server涓殑閮ㄩ棬ID" :disabled="true" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鏈嶅姟鍗曠紪鐮�" prop="serviceOrderClass">
+              <el-input v-model="form.serviceOrderClass" placeholder="璇疯緭鍏ユ湇鍔″崟缂栫爜" maxlength="20" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璋冨害鍗曠紪鐮�" prop="dispatchOrderClass">
+              <el-input v-model="form.dispatchOrderClass" placeholder="璇疯緭鍏ヨ皟搴﹀崟缂栫爜" maxlength="20" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -159,6 +290,7 @@
 
 <script>
 import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
+import { listDeptRegion, addDeptRegion, updateDeptRegion, delDeptRegion } from "@/api/system/deptRegion";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
@@ -181,7 +313,9 @@
       // 鏄惁鏄剧ず寮瑰嚭灞�
       open: false,
       // 鏄惁灞曞紑锛岄粯璁ゅ叏閮ㄥ睍寮�
-      isExpandAll: true,
+      isExpandAll: false,
+      // 榛樿灞曞紑鐨勮
+      expandRowKeys: [],
       // 閲嶆柊娓叉煋琛ㄦ牸鐘舵��
       refreshTable: true,
       // 鏌ヨ鍙傛暟
@@ -191,6 +325,21 @@
       },
       // 琛ㄥ崟鍙傛暟
       form: {},
+      // 鍖哄煙绠$悊鐩稿叧
+      regionDialogVisible: false,
+      currentDept: null,
+      regionList: [],
+      regionFormVisible: false,
+      regionFormTitle: '',
+      regionForm: {},
+      regionRules: {
+        regionType: [
+          { required: true, message: "鍖哄煙绫诲瀷涓嶈兘涓虹┖", trigger: "change" }
+        ],
+        status: [
+          { required: true, message: "鐘舵�佷笉鑳戒负绌�", trigger: "change" }
+        ]
+      },
       // 琛ㄥ崟鏍¢獙
       rules: {
         parentId: [
@@ -228,6 +377,8 @@
       this.loading = true;
       listDept(this.queryParams).then(response => {
         this.deptList = this.handleTree(response.data, "deptId");
+        // 榛樿鍙睍寮�绗竴灞傦紙鎬诲叕鍙稿強鍏剁洿鎺ュ瓙閮ㄩ棬锛�
+        this.expandRowKeys = this.deptList.map(item => item.deptId);
         this.loading = false;
       });
     },
@@ -253,6 +404,9 @@
         deptId: undefined,
         parentId: undefined,
         deptName: undefined,
+        departmentId: undefined,
+        serviceOrderClass: undefined,
+        dispatchOrderClass: undefined,
         orderNum: undefined,
         leader: undefined,
         phone: undefined,
@@ -286,9 +440,27 @@
     toggleExpandAll() {
       this.refreshTable = false;
       this.isExpandAll = !this.isExpandAll;
+      if (this.isExpandAll) {
+        // 灞曞紑鍏ㄩ儴锛氭敹闆嗘墍鏈夐儴闂↖D
+        this.expandRowKeys = this.getAllDeptIds(this.deptList);
+      } else {
+        // 鏀惰捣锛氬彧灞曞紑绗竴灞�
+        this.expandRowKeys = this.deptList.map(item => item.deptId);
+      }
       this.$nextTick(() => {
         this.refreshTable = true;
       });
+    },
+    /** 鑾峰彇鎵�鏈夐儴闂↖D锛堥�掑綊锛� */
+    getAllDeptIds(depts) {
+      let ids = [];
+      depts.forEach(dept => {
+        ids.push(dept.deptId);
+        if (dept.children && dept.children.length > 0) {
+          ids = ids.concat(this.getAllDeptIds(dept.children));
+        }
+      });
+      return ids;
     },
     /** 淇敼鎸夐挳鎿嶄綔 */
     handleUpdate(row) {
@@ -334,6 +506,87 @@
         this.getList();
         this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       }).catch(() => {});
+    },
+    /** 绠$悊鍖哄煙鎸夐挳鎿嶄綔 */
+    handleManageRegion(row) {
+      this.currentDept = row;
+      this.regionDialogVisible = true;
+      this.loadRegionList();
+    },
+    /** 鍔犺浇鍖哄煙鍒楄〃 */
+    loadRegionList() {
+      if (!this.currentDept) return;
+      listDeptRegion(this.currentDept.deptId).then(response => {
+        this.regionList = response.data;
+      });
+    },
+    /** 鏂板鍖哄煙 */
+    handleAddRegion() {
+      this.resetRegionForm();
+      this.regionFormTitle = "鏂板鍖哄煙";
+      this.regionFormVisible = true;
+    },
+    /** 缂栬緫鍖哄煙 */
+    handleEditRegion(row) {
+      this.regionForm = { ...row };
+      this.regionFormTitle = "缂栬緫鍖哄煙";
+      this.regionFormVisible = true;
+    },
+    /** 鍒犻櫎鍖哄煙 */
+    handleDeleteRegion(row) {
+      this.$modal.confirm('鏄惁纭鍒犻櫎璇ュ尯鍩熼厤缃紵').then(() => {
+        return delDeptRegion(row.regionId);
+      }).then(() => {
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        this.loadRegionList();
+      }).catch(() => {});
+    },
+    /** 閲嶇疆鍖哄煙琛ㄥ崟 */
+    resetRegionForm() {
+      this.regionForm = {
+        regionId: undefined,
+        deptId: this.currentDept.deptId,
+        regionType: 'AREA',
+        province: '',
+        city: '',
+        area: '',
+        address: '',
+        hospitalName: '',
+        status: '0',
+        remark: ''
+      };
+      this.resetForm("regionForm");
+    },
+    /** 鍖哄煙绫诲瀷鍒囨崲 */
+    handleRegionTypeChange(value) {
+      if (value === 'AREA') {
+        this.regionForm.hospitalName = '';
+      } else if (value === 'HOSPITAL') {
+        this.regionForm.province = '';
+        this.regionForm.city = '';
+        this.regionForm.area = '';
+        this.regionForm.address = '';
+      }
+    },
+    /** 鎻愪氦鍖哄煙琛ㄥ崟 */
+    submitRegionForm() {
+      this.$refs["regionForm"].validate(valid => {
+        if (valid) {
+          if (this.regionForm.regionId) {
+            updateDeptRegion(this.regionForm).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.regionFormVisible = false;
+              this.loadRegionList();
+            });
+          } else {
+            addDeptRegion(this.regionForm).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.regionFormVisible = false;
+              this.loadRegionList();
+            });
+          }
+        }
+      });
     }
   }
 };

--
Gitblit v1.9.1