<template> <div class="ct"> <el-dialog title="创建子部门" :visible.sync="addDialog" width="58%" :show-close="false" :close-on-click-modal="false" > <el-form :model="addForm" label-width="auto" ref="addStore" :rules="rules" v-loading="formLoading" :element-loading-text="loadText" > <el-form-item label="部门名称:" prop="label"> <el-input size="small" v-model="addForm.label" placeholder="请输入部门名称" style="width: 50%;" /> </el-form-item> <el-form-item label="上级部门:" prop="parentId"> <el-cascader v-model="addForm.parentId" :options="orgTree" :props="deptOption" :show-all-levels="false" clearable style="width: 50%;" @change="handleDpetChange" ></el-cascader> </el-form-item> <el-form-item label="门店名称:" prop="oyStallName"> <el-input size="small" v-model="addForm.oyStallName" placeholder="请输入门店名称" style="width: 50%;" /> </el-form-item> <el-form-item label="门店Id:" prop="oyStallCode"> <el-input size="small" v-model="addForm.oyStallCode" placeholder="请输入门店Id" style="width: 50%;" /> </el-form-item> <el-form-item label="门店会员id:" prop="oyStallMemberId"> <el-input size="small" v-model="addForm.oyStallMemberId" placeholder="门店会员id" style="width: 50%;" /> </el-form-item> <el-form-item label="设置主管:" prop="clerkIds"> <el-cascader :props="props" ref="direcRef" v-model="deptId" :disabled="ifDisabled" :options="parentDeptList" :show-all-levels="false" filterable style="width: 30%;margin-right:15px;" @change="handleParentChange" ></el-cascader> <el-select v-model="addForm.clerkIds" filterable multiple placeholder="请选择" style="width: 30%;" clearble @change="handleMemberChange" :loading="optionLoading" loading-text="数据加载中" > <el-option v-for="item in peopleList" :key="item.id" :label="item.userName" :value="item.id" ></el-option> </el-select> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="handleAddCancel" size="small">取 消</el-button> <el-button type="primary" @click="handleAddFinish('addStore')" size="small">确 定</el-button> </span> </el-dialog> <div></div> </div> </template> <script> import { addGroup, getWxAllDeptList, getAllMemberList, getGroupById, getAllPeopleList, getOrgTree } from "@/api/in/mail"; import { log } from "util"; export default { props: { addDialog: { type: Boolean, default: false } }, data() { // 检查名称 const checkLabel = (rule, value, callback) => { let labelReg = /^[\u4e00-\u9fa5A-Za-z0-9\-\_]*$/; if (value == "") { callback(new Error("请输入部门名称")); } else if (!labelReg.test(value)) { //引入methods中封装的检查手机格式的方法 callback(new Error("只可以输入中文、字母、数字和减号!")); } else { callback(); } }; // 限制id const idNumber = (rule, value, callback) => { let idReg = /^\+?(0|[1-9][0-9]*)$/; if (!idReg.test(value)) { callback(new Error("只可以输入正整数")); } else { callback(); } }; const memberNumber = (rule, value, callback) => { let idReg = /^\+?(0|[1-9][0-9]*)$/; if (!idReg.test(value) && value != "") { callback(new Error("只可以输入正整数")); } else { callback(); } }; return { clerkIds: [], loadText: "加载中", treeData: [], group_name: "", shop_code: "", showTree: false, formLoading: false, params: { d_name: "", d_parentId: "", code: "" }, checked: false, //// addForm: { label: "", parentId: "", oyStallName: "", oyStallMemberId: "", oyStallCode: "", clerkIds: [], oydeptId: "" }, detail: 2, ifDisabled: false, deptId: "", // 上级部门 parentDeptList: [], peopleList: [], orgTree: [], optionLoading: false, rules: { label: [ { required: true, message: "请输入部门名称", trigger: "blur" }, { max: 50, message: "长度在50个字符以内", trigger: "blur" } ], parentId: [ { required: true, message: "请选择上级部门", trigger: "change" } ], oyStallCode: [{ required: true, validator: idNumber, trigger: "blur" }], oyStallMemberId: [ { required: false, validator: memberNumber, trigger: "blur" } ], clerkIds: [ { required: true, message: "主管不能为空", trigger: "change" } ] }, deptOption: { value: "id", children: "children", lazy: true, emitPath: false, checkStrictly: true, lazyLoad(node, resolve) { const { level } = node; setTimeout(() => { const nodes = Array.from(level).map(item => ({ value: level.id, label: level.label, leaf: level >= 2 })); // 通过调用resolve将子节点数据返回,通知组件数据加载完成 resolve(nodes); }, 1000); } }, props: { value: "id", children: "children", lazy: true, emitPath: false, checkStrictly: true, lazyLoad(node, resolve) { const { level } = node; setTimeout(() => { const nodes = Array.from(level).map(item => ({ value: level.id, label: level.label, leaf: level >= 2 })); // 通过调用resolve将子节点数据返回,通知组件数据加载完成 resolve(nodes); }, 1000); } } }; }, created() { this.formLoading = true; this.getOrgTree(); this.getDeptList(); }, methods: { handleDpetChange(val) { console.log(val, "val"); }, getOrgTree() { getOrgTree().then(res => { this.orgTree = [res.data.organizations]; this.formLoading = false; }); }, handleParentChange(val) { this.addForm.oydeptId = val; this.optionLoading = true; this.clerkIds = []; this.addForm.clerkIds = []; this.getGroupMember(val); }, getDeptList() { getWxAllDeptList() .then(res => { console.log(res, "全部部门"); this.parentDeptList = res.data; }) .catch(err => { console.log(err); }); }, handleAddCancel() { this.$emit("handleAddCancel"); }, handleAddFinish(formName) { this.$refs[formName].validate(valid => { if (valid) { this.formLoading = true; this.loadText = "处理中"; this.addForm.clerkIds = this.addForm.clerkIds + ""; // let data = Object.assign(this.addForm,{ clerkIdss }) // delete data.clerkIds addGroup(this.addForm).then(res => { if (res.result == "success") { if (res.data.isSuccessful == 0) { this.addForm.clerkIds = this.clerkIds; this.$message.error("门店id不能重复"); this.formLoading = false; } else { this.$emit("handleAddFinish"); this.formLoading = false; } } else { this.addForm.clerkIds = this.clerkIds; this.$message.error(res.errorMsg); this.formLoading = false; } }); } else { return false; } }); }, // 获取所有人员 getGroupMember(id) { this.ifDisabled = true; getAllPeopleList({ id }).then(res => { this.peopleList = res.data; this.optionLoading = false; this.ifDisabled = false; }); }, handleMemberChange(val) { this.clerkIds = val; // if(val.length == 0) { // this.addForm.clerkIds = '' // }else { // this.addForm.clerkIds = '验证用' // } } }, watch: { deptId() { if (this.$refs.direcRef) { this.$refs.direcRef.dropDownVisible = false; //监听值发生变化就关闭它 } } } }; </script> <style scoped> .tree >>> .is-leaf + .el-checkbox .el-checkbox__inner { display: inline-block; } .tree >>> .el-checkbox .el-checkbox__inner { display: none; } .choose { padding: 16px; font-size: 16px; font-weight: bold; color: rgba(56, 56, 56, 1); box-sizing: border-box; } .title { display: flex; align-items: center; justify-content: space-between; /* border-bottom: 1px solid #f8f8f8; */ padding-bottom: 10px; } .transfer-footer { margin-left: 20px; padding: 6px 5px; } .ct >>> .el-dialog__header { border-bottom: 1px solid #f8f8f8; } .ct >>> .el-dialog__body { padding: 20px 40px; } .ct >>> .el-transfer-panel { width: 250px; } .circle { width: 30px; height: 30px; line-height: 30px; border-radius: 50%; border: 1px solid rgba(208, 2, 27, 1); position: relative; } .circle >>> .icon { width: 28px; height: 28px; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } .br { border-top: 1px solid #f8f8f8; border-bottom: 1px solid #f8f8f8; padding: 24px 0; } .config_item { display: flex; flex-direction: row; align-items: center; } .config_name:before { content: "* "; color: red; } .config_name { width: 80px; text-align: center; margin-right: 10px; } .config_value { width: 230px; } .father_group { margin: 10px 0; width: 228px; height: 38px; border-radius: 4px; border: 1px solid #dcdfe6; position: relative; } .arrow_down { width: 0; height: 0; border-width: 5px; border-style: solid; border-color: #ccc transparent transparent transparent; position: absolute; right: 10px; top: 20px; } .arrow_up { width: 0; height: 0; border-width: 5px; border-style: solid; border-color: transparent transparent #ccc transparent; position: absolute; right: 10px; top: 15px; } .tree_data { margin-left: 90px; } .father_name_text { line-height: 38px; padding-left: 15px; } .tips { width: 100%; text-align: center; color: red; margin: 5px 0; } </style>