<template> <el-dialog :visible.sync="dialogFormVisible" :title="textMap[dialogStatus]" append-to-body width="1000px" @close="cancel"> <!--查询结果Table显示--> <el-form ref="dataForm" :rules="rules" :model="row" label-width="110px" label-position="left"> <el-row :gutter="20" style="height: 40px"> <el-col :span="20" style="height: 40px"> <el-form-item label="人员组别名称" prop="groupName"> <el-input v-model.trim="row.groupName" type="text" maxlength="20" show-word-limit placeholder="人员组别名称" size="small"/> </el-form-item> </el-col> </el-row> </el-form> <el-form ref="selectForm" :inline="true" :model="listQuery" class="form-container"> <!--员工筛选--> <el-row style="height: 40px;margin-top: 20px"> <el-col :span="8" style="height: 40px"> <el-form-item class="selectForm-container-item" label="员工选择"> <el-input v-model.trim="listQuery.keywords" size="small" placeholder="姓名/员工编号关键字" clearable/> </el-form-item> </el-col> <el-col :span="6" style="height: 40px"> <el-form-item class="selectForm-container-item"> <dept-select v-model="listQuery.deptId" :need-top="false" :dept-show="true" size="small" placeholder="单位/部门"/> </el-form-item> </el-col> <el-col :span="4" style="height: 40px"> <el-form-item class="selectForm-container-item"> <el-select v-model="listQuery.cardType" placeholder="卡类型" size="small" clearable> <el-option label="A" value="A"/> <el-option label="B" value="B"/> <el-option label="C" value="C"/> <el-option label="D" value="D"/> </el-select> </el-form-item> </el-col> <el-col :span="2" style="height: 40px"> <el-button style="margin-top: 3px" class="filter-item" type="primary" icon="el-icon-search" size="small" @click="fetchData" >搜索</el-button> </el-col> </el-row> <!--时间筛选--> <el-row style="height: 40px"> <el-col :span="10" style="height: 40px"> <el-form-item class="selectForm-container-item" > <el-date-picker v-model="timeRange" size="small" type="datetimerange" range-separator="至" value-format="yyyy-MM-dd HH:mm:ss" start-placeholder="创建开始时间" end-placeholder="创建结束时间"/> </el-form-item></el-col> <el-col :span="10" style="height: 40px"> <el-form-item class="selectForm-container-item"> <el-date-picker v-model="updateTimeRange" size="small" type="datetimerange" range-separator="至" value-format="yyyy-MM-dd HH:mm:ss" start-placeholder="建卡开始时间" end-placeholder="建卡结束时间"/> </el-form-item> </el-col> </el-row> <!--员工多选框--> <div class="edit_dev"> <transfer v-loading="transLoading" v-model="stafflist" :data="staffList" :titles="['待选员工', '已选员工']" /> </div> <!--访客筛选--> <el-row style="height: 40px;margin-top: 10px"> <el-col :span="8" style="height: 40px"> <el-form-item class="selectForm-container-item" label="访客选择"> <el-input v-model.trim="listQuery1.keywords" size="small" placeholder="姓名/访客编号关键字" clearable/> </el-form-item> </el-col> <!--<el-col :span="6" style="height: 40px">--> <!--<el-form-item class="selectForm-container-item">--> <!--<el-select v-model="listQuery1.sex" placeholder="性别" size="small" clearable>--> <!--<el-option v-for="item in sexList" :key="item.value" :label="item.name" :value="item.value"/>--> <!--</el-select>--> <!--</el-form-item>--> <!--</el-col>--> <el-col :span="2" style="height: 40px"> <el-button style="margin-top: 3px" class="filter-item" type="primary" icon="el-icon-search" size="small" @click="fetchData1" >搜索</el-button> </el-col> </el-row> <el-row style="height: 40px"> <el-col :span="10" style="height: 40px"> <el-form-item class="selectForm-container-item" > <el-date-picker v-model="timeRange1" size="small" type="datetimerange" range-separator="至" value-format="yyyy-MM-dd HH:mm:ss" start-placeholder="创建开始时间" end-placeholder="创建结束时间"/> </el-form-item> </el-col> <el-col :span="10" style="height: 40px"> <el-form-item class="selectForm-container-item"> <el-date-picker v-model="updateTimeRange1" size="small" type="datetimerange" range-separator="至" value-format="yyyy-MM-dd HH:mm:ss" start-placeholder="建卡开始时间" end-placeholder="建卡结束时间"/> </el-form-item> </el-col> </el-row> <!--访客多选框--> <div class="edit_dev"> <transfer v-loading="transLoading1" v-model="visitorlist" :data="visitorList" :titles="['待选访客', '已选访客']" /> </div> </el-form> <!--描述--> <el-form label-width="60px" label-position="left" style="margin-top: 10px"> <el-row :gutter="20"> <el-col :span="20" style="height: 40px"> <el-form-item label="描述"> <el-input v-model.trim="row.description" type="text" placeholder="描述" maxlength="500" show-word-limit size="small"/> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button :disabled="!canEdit" type="primary" @click="saveData">保存</el-button> <el-button @click="cancel">取消</el-button> </div> </el-dialog> </template> <script> import { groupList, getSexType, personGroupAdd, personGroupUpdate } from '@/api/person' import DeptSelect from '../../components/DeptSelect/index' import { getPerson } from '@/api/person' import Transfer from '../../components/transfer/src/main' export default { name: 'EditGroup', components: { DeptSelect, Transfer }, data() { return { textMap: { update: '编辑', create: '新增', detail: '详情' }, // 表头显示标题 dialogStatus: '', dialogFormVisible: false, // 对话框是否显示 row: { id: '', groupName: '', description: '' }, transLoading: false, transLoading1: false, rules: { groupName: [{ required: true, message: '分组名称必填', trigger: ['blur', 'change'] }] }, listQuery: { keywords: '', // 关键字(姓名/身份证号) deptId: '', // 部门 sex: '', // 性别 personType: '1', startTime: '', endTime: '', updateStartTime: '', updateEndTime: '' }, // 员工查询条件 listQuery1: { keywords: '', // 关键字(姓名/身份证号) deptId: '', // 部门 sex: '', // 性别 personType: '0', startTime: '', endTime: '', updateStartTime: '', updateEndTime: '' }, // 员工查询条件 list: [], // 搜索结果 sexList: [], // 性别列表 personlist: [], // 搜索结果 stafflist: [], visitorlist: [], staffList: [], visitorList: [], timeRange: [], // 时间范围 updateTimeRange: [], // 时间范围 timeRange1: [], // 时间范围 updateTimeRange1: [], // 时间范围 personForm: { id: '', personList: [] // strategyId: '' }, // 提交表单 multipleSelection: [], // 多选选中项 strategyList: [], // 策略列表 listLoading: true, total: 0, // 数据总数 canEdit: true } }, watch: { timeRange(val) { if (val && val.length > 0) { this.listQuery.startTime = val[0] this.listQuery.endTime = val[1] } else { this.listQuery.startTime = '' this.listQuery.endTime = '' } }, updateTimeRange(val) { if (val && val.length > 0) { this.listQuery.updateStartTime = val[0] this.listQuery.updateEndTime = val[1] } else { this.listQuery.updateStartTime = '' this.listQuery.updateEndTime = '' } }, timeRange1(val) { if (val && val.length > 0) { this.listQuery1.startTime = val[0] this.listQuery1.endTime = val[1] } else { this.listQuery1.startTime = '' this.listQuery1.endTime = '' } }, updateTimeRange1(val) { if (val && val.length > 0) { this.listQuery1.updateStartTime = val[0] this.listQuery1.updateEndTime = val[1] } else { this.listQuery1.updateStartTime = '' this.listQuery1.updateEndTime = '' } } }, mounted() { getSexType().then(response => { this.sexList = response.data }) }, methods: { // 初始化对话框 initDialog: function(dialogStatus, dialogFormVisible, row = null) { this.stafflist = [] this.staffList = [] this.visitorlist = [] this.visitorList = [] this.dialogStatus = dialogStatus this.dialogFormVisible = true this.row = { id: '', groupName: '', description: '' } this.listQuery = { keywords: '', // 关键字(姓名/身份证号) deptId: '', // 部门 sex: '', // 性别 personType: '1', startTime: '', endTime: '', updateStartTime: '', updateEndTime: '' } // 员工查询条件 this.listQuery1 = { keywords: '', // 关键字(姓名/身份证号) deptId: '', // 部门 sex: '', // 性别 personType: '0', startTime: '', endTime: '', updateStartTime: '', updateEndTime: '' } // 员工查询条件 this.$nextTick(() => { this.$refs['dataForm'].clearValidate() }) if (dialogStatus === 'update') { this.row = row this.canEdit = true this.fetchPersonData() } else if (dialogStatus === 'create') { this.canEdit = true this.fetchData() this.fetchData1() } }, // 保存数据 saveData: function() { this.$refs['dataForm'].validate((valid) => { if (valid) { this.canEdit = false const arr = this.stafflist.concat(this.visitorlist) if (this.dialogStatus === 'create') { personGroupAdd(this.row.groupName, this.row.description, arr).then(response => { if (response.code === 200) { this.$message.success('新增人员分组成功') this.canEdit = true this.cancel() } else { this.canEdit = true } }).catch(() => { this.$emit('watchChild') this.canEdit = true }) } else if (this.dialogStatus === 'update') { personGroupUpdate(this.row.id, this.row.groupName, this.row.description, arr).then(response => { if (response.code === 200) { this.$message.success('编辑人员分组成功') this.canEdit = true this.cancel() } else { this.canEdit = true } }).catch(() => { this.$emit('watchChild') this.canEdit = true }) } } }) }, // 验证表单 validateForm(personForm) { if (this.multipleSelection.length <= 0) { this.$message.warning('请选中人员再进行授权') return false } return true }, // 获取查询数据 fetchPersonData() { this.transLoading = true this.transLoading1 = true var listQuery = { groupId: this.row.id } groupList(listQuery).then(response => { this.personlist = response.data this.stafflist = response.data.filter(item => item.personType === '1') .map(function(item) { return item.id }) this.visitorlist = response.data.filter(item => item.personType === '0') .map(function(item) { return item.id }) getPerson(this.listQuery).then(response => { this.staffList = response.data.map(function(item) { return { key: item.id, label: item.name } }) this.transLoading = false }) getPerson(this.listQuery1).then(response => { this.visitorList = response.data.map(function(item) { return { key: item.id, label: item.name } }) this.transLoading1 = false }) }) }, fetchData() { this.transLoading = true let arr = [] if (this.stafflist.length !== 0) { arr = this.staffList.filter(item => this.stafflist.indexOf(item.key) > -1) } getPerson(this.listQuery).then(response => { this.staffList = response.data.map(function(item) { return { key: item.id, label: item.name } }) const tmp = this.staffList.filter(item => this.stafflist.indexOf(item.key) === -1) this.staffList = tmp.concat(arr) this.transLoading = false }) }, fetchData1() { this.transLoading1 = true let arr = [] if (this.visitorlist.length !== 0) { arr = this.visitorList.filter(item => this.visitorlist.indexOf(item.key) > -1) } getPerson(this.listQuery1).then(response => { this.visitorList = response.data.map(function(item) { return { key: item.id, label: item.name } }) const tmp = this.visitorList.filter(item => this.visitorlist.indexOf(item.key) === -1) this.visitorList = tmp.concat(arr) this.transLoading1 = false }) }, // 取消 cancel: function() { console.log('cancel') this.dialogFormVisible = false this.$emit('watchChild') }, // 身份证号加密 encrypIdCardNo(idCardNo) { if (idCardNo) { return idCardNo.substr(0, 6) + '********' + idCardNo.substr(14, 18) } else { return '' } } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> $tableTitleHeight:42px; /deep/ .edit_dev .el-transfer-panel { width:350px !important; } .menu-content{ margin:10px 0px;overflow-y: scroll;height: 150px;border: 1px solid #eee;padding: 10px; border-radius: 10px; } .tablediv{ margin-bottom: 20px; } .table-title{ background-color:rgba(243, 243, 243, 1); .title-header{ line-height:$tableTitleHeight; color: #606266; font-size: 14px; i{ margin-left: 5px; margin-right: 5px; } } .edit_btns{ .edit_btn{ float:right; margin:7px 3px;//为了需要居中显示margin-top和bottom要用$tableTitleHeight减去按钮原高度除以2 } } } .el-select{ width: 100%; } .el-date-editor{ width: 100%; } .strategy-title{ line-height: 30px; } .strategy-body{ line-height:30px !important; } .el-table td { padding: 2px 0px !important; } /deep/ .el-dialog__body { padding: 0px 20px !important; } </style>