xsh_1997 1 week geleden
bovenliggende
commit
e7e195f26e

+ 13 - 0
ruoyi-ui/src/api/system/dept.js

@@ -58,4 +58,17 @@ export function delDept(deptId) {
58 58
     url: '/system/dept/' + deptId,
59 59
     method: 'delete'
60 60
   })
61
+}
62
+
63
+/**
64
+ * 校验部门名称是否唯一
65
+ * @param {Object} query deptName、parentId、deptId(编辑时传自身 id)
66
+ * @returns {Promise} data 为 true 表示唯一,false 表示重复
67
+ */
68
+export function checkDeptNameUnique(query) {
69
+  return request({
70
+    url: '/system/dept/checkDeptNameUnique',
71
+    method: 'get',
72
+    params: query
73
+  })
61 74
 }

+ 50 - 3
ruoyi-ui/src/views/system/dept/index.vue

@@ -116,7 +116,13 @@
116 116
         <el-row>
117 117
           <el-col :span="24" v-if="form.parentId !== 0">
118 118
             <el-form-item label="上级部门" prop="parentId">
119
-              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
119
+              <treeselect
120
+                v-model="form.parentId"
121
+                :options="deptOptions"
122
+                :normalizer="normalizer"
123
+                placeholder="选择上级部门"
124
+                @input="onParentIdChange"
125
+              />
120 126
             </el-form-item>
121 127
           </el-col>
122 128
         </el-row>
@@ -172,7 +178,7 @@
172 178
 </template>
173 179
 
174 180
 <script>
175
-import { listDept, getDept, delDept, addDept, updateDept, updateDeptSort, listDeptExcludeChild } from "@/api/system/dept"
181
+import { listDept, getDept, delDept, addDept, updateDept, updateDeptSort, listDeptExcludeChild, checkDeptNameUnique } from "@/api/system/dept"
176 182
 import Treeselect from "@riophae/vue-treeselect"
177 183
 import "@riophae/vue-treeselect/dist/vue-treeselect.css"
178 184
 
@@ -213,7 +219,8 @@ export default {
213 219
           { required: true, message: "上级部门不能为空", trigger: "blur" }
214 220
         ],
215 221
         deptName: [
216
-          { required: true, message: "部门名称不能为空", trigger: "blur" }
222
+          { required: true, message: "部门名称不能为空", trigger: "blur" },
223
+          { validator: null, trigger: "blur" }
217 224
         ],
218 225
         orderNum: [
219 226
           { required: true, message: "显示排序不能为空", trigger: "blur" }
@@ -236,9 +243,49 @@ export default {
236 243
     }
237 244
   },
238 245
   created() {
246
+    this.rules.deptName[1].validator = this.validateDeptNameUnique
239 247
     this.getList()
240 248
   },
241 249
   methods: {
250
+    /** 上级部门变更后,重新校验部门名称唯一性 */
251
+    onParentIdChange() {
252
+      if (this.form.deptName) {
253
+        this.$nextTick(() => {
254
+          if (this.$refs.form) {
255
+            this.$refs.form.validateField("deptName")
256
+          }
257
+        })
258
+      }
259
+    },
260
+    /**
261
+     * 调用 /system/dept/checkDeptNameUnique
262
+     * data === true 唯一;false 同名已存在(编辑时排除自身 deptId)
263
+     */
264
+    validateDeptNameUnique(rule, value, callback) {
265
+      const name = value != null ? String(value).trim() : ""
266
+      if (!name) {
267
+        callback()
268
+        return
269
+      }
270
+      const params = {
271
+        deptName: name,
272
+        parentId: this.form.parentId
273
+      }
274
+      if (this.form.deptId != null && this.form.deptId !== "") {
275
+        params.deptId = this.form.deptId
276
+      }
277
+      checkDeptNameUnique(params)
278
+        .then((res) => {
279
+          if (res.data === true || res.data === "true") {
280
+            callback()
281
+          } else {
282
+            callback(new Error("部门名称已存在"))
283
+          }
284
+        })
285
+        .catch(() => {
286
+          callback(new Error("部门名称校验失败,请稍后重试"))
287
+        })
288
+    },
242 289
     /** 查询部门列表 */
243 290
     getList() {
244 291
       this.loading = true

+ 4 - 4
ruoyi-ui/src/views/system/user/index.vue

@@ -52,7 +52,7 @@
52 52
             </template>
53 53
           </el-table-column>
54 54
           <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns.nickName.visible" :show-overflow-tooltip="true" />
55
-          <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns.deptName.visible" :show-overflow-tooltip="true" />
55
+          <el-table-column label="所属乡镇村" align="center" key="deptName" prop="dept.deptName" v-if="columns.deptName.visible" :show-overflow-tooltip="true" />
56 56
           <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns.phonenumber.visible" width="120" />
57 57
           <el-table-column label="状态" align="center" key="status" v-if="columns.status.visible">
58 58
             <template slot-scope="scope">
@@ -83,8 +83,8 @@
83 83
     </div>
84 84
 
85 85
     <!-- 添加或修改用户配置对话框 -->
86
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
87
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
86
+    <el-dialog :title="title" :visible.sync="open" width="650px" append-to-body>
87
+      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
88 88
         <el-row>
89 89
           <el-col :span="12">
90 90
             <el-form-item label="用户昵称" prop="nickName">
@@ -92,7 +92,7 @@
92 92
             </el-form-item>
93 93
           </el-col>
94 94
           <el-col :span="12">
95
-            <el-form-item label="归属部门" prop="deptId">
95
+            <el-form-item label="所属乡镇村" prop="deptId">
96 96
               <treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="请选择归属部门" />
97 97
             </el-form-item>
98 98
           </el-col>