From 56155226f104f98e8085b03a723e6102b60c1f5d Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期二, 16 四月 2024 14:19:34 +0800 Subject: [PATCH] 完成人员明细页面 --- src/components/tool/value-table.vue | 56 +++++++++++++++++++++++++--- src/components/view/a6-personnel-detail.vue | 26 ++++++++---- src/components/view/person-manage.vue | 25 +++++++++++- src/assets/api/controller.js | 1 4 files changed, 90 insertions(+), 18 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index a4c5979..4e431c5 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -209,4 +209,5 @@ selectDepartment: "/department/selectDepartment", //浜哄憳鏋舵瀯鏍� addDepartment: "/department/addDepartment", //娣诲姞閮ㄩ棬 delDepartment: "/department/delDepartment", //鍒犻櫎閮ㄩ棬 + showUserById: "/department/showUserById", //鏍规嵁閫夋嫨鐨勬爲灞曠ず鐩稿叧鐨勪汉鍛� } diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue index 44aa439..418d4e2 100644 --- a/src/components/tool/value-table.vue +++ b/src/components/tool/value-table.vue @@ -131,6 +131,7 @@ <span v-else-if="data.linkEvent&&showLink(a.label, data.linkEvent)" style="color:#409EFF;cursor: pointer;" @click="handleLinkEvent(scope.row,data.linkEvent[a.label])">{{scope.row[a.label]}}</span> <img style="width: 40px;height: 40px;margin-top: 10px;" :src="javaApi+'/img/'+scope.row[a.label]" v-else-if="showUpload(a.label)&&scope.row[a.label]" alt=""> + <span v-else-if="showCascader(a.label)&&scope.row[a.label]">{{handleTree(data.cascaderField[a.label].tree,scope.row[a.label].split(',')[scope.row[a.label].split(',').length-1])}}</span> <span v-else>{{scope.row[a.label]}}</span> </template> </el-table-column> @@ -198,7 +199,16 @@ <img v-if="upData[a.label]" :src="javaApi+'/img/'+upData[a.label]" class="avatar" style="width: 80px;height: 80px;border-radius: 6px;"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> - <el-cascader v-model="upData[a.label]" :options="data.cascaderField[a.label].tree" :show-all-levels="false" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props"></el-cascader> + <el-cascader + :value="upData[a.label]" + :options="data.cascaderField[a.label].tree" + v-if="showCascader(a.label)" + :show-all-levels="false" + clearable + :props="data.cascaderField.props" + size="small" + style="width: 100%;" + @change="m=>handleCascader(m,a.label)"></el-cascader> </el-col> </div> </div> @@ -232,7 +242,7 @@ <img v-if="upData[a.label]" :src="javaApi+'/img/'+upData[a.label]" class="avatar" style="width: 80px;height: 80px;border-radius: 6px;"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> - <el-cascader v-model="upData[a.label]" :options="data.cascaderField[a.label].tree" :show-all-levels="false" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props"></el-cascader> + <el-cascader :value="upData[a.label]" :options="data.cascaderField[a.label].tree" :show-all-levels="false" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props" size="small" style="width: 100%;" @change="m=>handleCascader(m,a.label)"></el-cascader> </el-col> </el-row> </div> @@ -273,7 +283,7 @@ <img v-if="upData[a.label]" :src="javaApi+'/img/'+upData[a.label]" class="avatar" style="width: 80px;height: 80px;border-radius: 6px;"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> - <el-cascader v-model="upData[a.label]" :options="data.cascaderField[a.label].tree" :show-all-levels="false" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props"></el-cascader> + <el-cascader :options="data.cascaderField[a.label].tree" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props" size="small" style="width: 100%;" :show-all-levels="false" @change="m=>handleCascader(m,a.label)"></el-cascader> </el-col> </div> </div> @@ -305,7 +315,7 @@ <img v-if="upData[a.label]" :src="javaApi+'/img/'+upData[a.label]" class="avatar" style="width: 80px;height: 80px;border-radius: 6px;"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> - <el-cascader v-model="upData[a.label]" :options="data.cascaderField[a.label].tree" :show-all-levels="false" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props"></el-cascader> + <el-cascader :options="data.cascaderField[a.label].tree" v-if="showCascader(a.label)" clearable :props="data.cascaderField.props" size="small" style="width: 100%;" :show-all-levels="false" @change="m=>handleCascader(m,a.label)"></el-cascader> </el-col> </el-row> </div> @@ -481,7 +491,7 @@ this.$refs.eltable.doLayout() }) } - } + }, }, mounted() { this.data = this.componentData @@ -701,13 +711,34 @@ return false; } }, + handleTree(arr,value){ + let label = '' + for (let i = 0; i < arr.length; i++) { + if(arr[i].id==value){ + label = arr[i].name + return label + }else if(arr[i].children){ + label = this.handleTree(arr[i].children,value) + } + } + return label + }, main(row, val) { if (val.method == undefined) return else if (val.method == 'doDiy') { if (val.id == 'update') { this.upDia = true, - this.upData = this.HaveJson(row) + this.upData = this.HaveJson(row) this.upHead = this.HaveJson(this.tableHead) + this.upHead.forEach((item,index)=>{ + if(this.data.cascaderField&&this.data.cascaderField[item.label]){ + if(this.upData[item.label]){ + this.upData[item.label] = this.upData[item.label].split(',').map(m=>Number(m)); + }else{ + this.upData[item.label] = [] + } + } + }) this.upHead = this.upHead.filter(a => a.label != 'createTime' && a.label != 'updateTime') delete this.upData.orderBy delete this.upData.createTime @@ -780,6 +811,15 @@ this.upData[a] = JSON.stringify(this.upData[a]) } } + this.upHead.forEach((item,index)=>{ + if(this.data.cascaderField&&this.data.cascaderField[item.label]){ + if(this.upData[item.label]){ + this.upData[item.label] = this.upData[item.label].join(','); + }else{ + this.upData[item.label] = '' + } + } + }) this.$axios.post(this.upUrl, this.upData, { headers: { 'Content-Type': 'application/json' @@ -792,6 +832,7 @@ this.$message.success('淇敼鎴愬姛') this.upDia = false this.selectList() + this.$refs.eltable.doLayout(); this.upLoad = false }).catch(e => { this.$message.error('淇敼澶辫触') @@ -1019,6 +1060,9 @@ this.selectList() } } + }, + handleCascader(e,label){ + this.upData[label] = e; } } } diff --git a/src/components/view/a6-personnel-detail.vue b/src/components/view/a6-personnel-detail.vue index b96ad20..d4ffde8 100644 --- a/src/components/view/a6-personnel-detail.vue +++ b/src/components/view/a6-personnel-detail.vue @@ -112,15 +112,16 @@ <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'name' }" node-key="id" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" - :default-expanded-keys="expandedKeys"> + :default-expanded-keys="expandedKeys" + :default-checked-keys="[1]"> <div class="custom-tree-node" slot-scope="{ node, data }"> <el-row style="width: 100%;"> <el-col :span="21" :class="{sort:node.level>3}"> <span><i :class="`node_i ${data.children != undefined&&data.children.length>0 ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> - [{{ node.level-1 }}] {{ data.name }}</span> + {{ data.name }}</span> </el-col> - <el-col :span="2" style="text-align: right;" v-if="delStandardTree"> + <el-col :span="2" style="text-align: right;" v-if="delStandardTree&&node.level>1"> <el-button type="text" size="mini" @click.stop="remove(node, data)"> <i class="el-icon-delete"></i> </el-button> @@ -146,7 +147,7 @@ </el-col> </el-row> <el-row class="standard_table" v-loading="tableLoad"> - <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData" /> + <ValueTable ref="ValueTable" :url="$api.department.showUserById" :componentData="componentData" /> </el-row> </div> <el-dialog title="鏋舵瀯鏂板" :visible.sync="addDia" width="400px"> @@ -192,6 +193,8 @@ addStandardProduct: false, componentData: { entity: { + name:'', + departId:'', orderBy: { field: 'id', order: 'asc' @@ -199,8 +202,8 @@ }, init:false, isIndex: true, - showSelect: true, - select: true, + showSelect: false, + select: false, do: [], isPage: false, tagField: { @@ -226,7 +229,8 @@ this.$refs.ValueTable.selectList() }, refresh() { - this.upIndex++ + this.upIndex++; + this.componentData.entity.departId = this.list[0].id; this.refreshTable() }, handleNodeClick(val, node, el) { //鏍戠殑鍊� @@ -240,6 +244,8 @@ } this.selectTree = data2.replace(' - ', '') this.addOb.fatherId = val.id; + this.componentData.entity.departId = val.id; + this.refreshTable() }, getNodeParent(val) { if (val.parent != null) { @@ -274,12 +280,14 @@ this.list.forEach(a => { a.children.forEach(b => { b.children.forEach(c => { - this.expandedKeys.push(c.name) + this.expandedKeys.push(c.id) }) - // this.expandedKeys.push(b.label) }) }) this.treeLoad = false + this.componentData.entity.departId = this.list[0].id; + this.selectTree = '鍏ㄩ儴' + this.refreshTable() }) }, addStandardTree() { diff --git a/src/components/view/person-manage.vue b/src/components/view/person-manage.vue index 3668eb0..4bb927d 100644 --- a/src/components/view/person-manage.vue +++ b/src/components/view/person-manage.vue @@ -100,6 +100,7 @@ isIndex: true, showSelect: false, select: false, + init:false, do: [{ id: 'update', font: '缂栬緫', @@ -137,22 +138,23 @@ } }, cascaderField:{ - name:{ + departId:{ tree:[] }, // 瀛楁閰嶇疆 props:{ value:'id', label:'name', + checkStrictly: true } }, - requiredAdd:['account','name','state','roleId','password'], + requiredAdd:['account','name','state','roleId','password','departId'], + requiredUp:['account','name','state','roleId','departId'], addUpload:['pictureUrl','signatureUrl'], addUploadConfig:{ accept:'.png, .jpg, .jpeg, .gif', url:this.$api.deviceScope.uploadFile }, - requiredUp:['account','name','state','roleId'] }, entityCopy: {}, upIndex: 0, @@ -161,6 +163,7 @@ } }, mounted() { + this.selectTreeList() this.selectRole() this.entityCopy = this.HaveJson(this.componentData.entity) this.getPower() @@ -191,6 +194,22 @@ opeaAdd(){ this.$refs.ValueTable.openAddDia(this.$api.user.addUser); }, + selectTreeList(){ + this.$axios.get(this.$api.department.selectDepartment).then(res => { + this.componentData.cascaderField.departId.tree = this.handleTree(res.data[0].children) + this.$refs.ValueTable.selectList() + }) + }, + handleTree(arr){ + arr.forEach(a => { + if(a.children.length==0){ + a.children = null; + }else{ + this.handleTree(a.children) + } + }) + return arr + }, // 鏉冮檺鍒嗛厤 getPower(){ let power = JSON.parse(sessionStorage.getItem('power')) -- Gitblit v1.9.3