|
|
@@ -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
|