From 364adbc9a93a396b74e154f910c2a0a72bfb1a0f Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 29 十一月 2025 22:10:41 +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