From 9ccde974b85157aee21943ca8aa718f7093985bc Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期一, 09 一月 2023 17:25:50 +0800 Subject: [PATCH] 网格管理 --- src/views/systemSetting/device/grid/components/main/index.vue | 632 +++++++++++++++++++++++++++------------------------------ 1 files changed, 297 insertions(+), 335 deletions(-) diff --git a/src/views/systemSetting/device/grid/components/main/index.vue b/src/views/systemSetting/device/grid/components/main/index.vue index 91d7c26..6bcbe6e 100644 --- a/src/views/systemSetting/device/grid/components/main/index.vue +++ b/src/views/systemSetting/device/grid/components/main/index.vue @@ -1,351 +1,232 @@ <template> - <div class="mainContent"> - <!-- <div class="aside"> - <department-aside /> - </div> --> - <div class="grid-content"> - <!-- 鏁版嵁灞曠ず --> - <el-table ref="multipleTable" - :header-cell-style="{'font-weight':'650','line-height':'45px'}" - :data="tableData" style="width: 100%" :row-class-name="tableRowClassName" - @selection-change="tableChange"> - <el-table-column type="selection" min-width="5"> - </el-table-column> - <el-table-column label="鐢ㄦ埛ID" min-width="6"> - <template slot-scope="scope">{{ scope.row.id }}</template> - </el-table-column> - <el-table-column prop="nickName" label="鐢ㄦ埛鍚嶇О" min-width="10"> - </el-table-column> - <el-table-column prop="username" label="鎵�灞炲鍚�" min-width="8"> - </el-table-column> - <el-table-column prop="mobile" label="鑱旂郴鏂瑰紡" min-width="7"> - </el-table-column> - <el-table-column prop="note" label="鎵�灞炶鑹�" min-width="8"> - <template slot-scope="scope"> - <span>{{filterRole(scope.row.roles)}}</span> - </template> - </el-table-column> - <el-table-column prop="jobTitle" label="鎵�灞炶亴鍔�" min-width="8"> - </el-table-column> - <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="10"> - <template slot-scope="scope"> - <span>{{changeTime(scope.row)}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="鍚敤" min-width="5"> - <template slot-scope="scope"> - <!-- @change="handleChangeStatus(scope.row)" --> - <el-switch class="switchStyle" v-model="scope.row.status" - active-color="#3fef9a" inactive-color="#000212" disabled> - </el-switch> - </template> - </el-table-column> - <el-table-column prop="operation" label="鎿嶄綔" min-width="20"> - </el-table-column> - </el-table> - <!-- 鏌ョ湅椤甸潰 --> - <el-dialog :visible.sync="dialogView" width="45%" v-if="dialogView" - title="鏌ョ湅鐢ㄦ埛淇℃伅"> - <MyView :userInfo=userInfo></MyView> - </el-dialog> - <!-- 淇敼椤甸潰 --> - <el-dialog :visible.sync="dialogUpdate" width="45%" v-if="dialogUpdate" - :title="updateFlag ? flag.role ? '淇敼鐢ㄦ埛瑙掕壊淇℃伅' : flag.depart ? '淇敼鐢ㄦ埛閮ㄩ棬淇℃伅': '淇敼鐢ㄦ埛瀵嗙爜' :''" - :before-close="handleClose"> - <updateUser :updateFlag="updateFlag" :userInfo=userInfo :flag=flag @closeDialog="closeDialog" - :getUserList="getUserList" v-if="!flag.password" /> - <MyPwd v-else :userInfo=userInfo @closeDialog="closeDialog"></MyPwd> - </el-dialog> - <!-- tools --> - <div class="tools"> - <div class="funs"> - <el-checkbox v-model="all" @change="selectAll()">鍏ㄩ��</el-checkbox> - <el-checkbox v-model="unsame" @change="disSame(tableData)">鍙嶉��</el-checkbox> - <el-select v-model="myIdx" placeholder="鎵归噺鎿嶄綔" @change="selectChange"> - <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" - :disabled="item.disabled"> - </el-option> - </el-select> + <div class="mainContent"> + <!-- <div class="aside"> + <department-aside /> + </div> --> + <div class="grid-content"> + <header> + <div class="headerContent"> + <div class="search"> + <span>绛涢�夋潯浠�:</span> + <el-input v-model="context" placeholder="璇疯緭鍏ュ唴瀹�"></el-input> + <div class="findBtn"> + <el-button type="primary" @click="getList()">鏌ヨ</el-button> + </div> </div> - <el-pagination class="pagination" background :current-page="currentPage" layout="prev, pager, next" :total="totalNum" - :page-size="pageSize" @current-change="changeCurrentPage" @prev-click="handlePrev" - @next-click="handleNext"> + </div> + <div class="main-title"> + <el-button + class="el-icon-plus button-addition" + type="primary" + @click="handleAdd()" + >娣诲姞</el-button + > + </div> + </header> + <!-- 鏁版嵁灞曠ず --> + <el-table + ref="multipleTable" + :header-cell-style="{ 'font-weight': '650', 'line-height': '45px' }" + :data="tableData" + style="width: 100%" + :row-class-name="tableRowClassName" + @selection-change="tableChange" + > + <el-table-column type="selection" min-width="5"> </el-table-column> + + <el-table-column prop="name" label="鍖哄煙鍚嶇О" min-width="10"> + </el-table-column> + <el-table-column prop="worker" label="鎵�灞炵綉鏍煎憳" min-width="8"> + </el-table-column> + <el-table-column prop="contact" label="鑱旂郴鏂瑰紡" min-width="7"> + </el-table-column> + <el-table-column prop="area" label="璐d换鍖哄煙" min-width="8"> + </el-table-column> + <el-table-column prop="description" label="鎻忚堪" min-width="20"> + </el-table-column> + <el-table-column prop="operation" label="鎿嶄綔" min-width="5"> + <template slot-scope="scope"> + <div class="operation"> + <span @click="handleEdit(scope.row)">缂栬緫</span> + <span class="line">|</span> + <span @click="handleDelete(scope.row)">鍒犻櫎</span> + </div> + </template> + </el-table-column> + </el-table> + + <el-dialog + :visible.sync="dialogUpdate" + width="45%" + v-if="dialogUpdate" + title="缃戞牸淇℃伅" + :before-close="handleClose" + > + <MyView :info="handheldGrid" @closeDialog="handleCallBack"></MyView> + </el-dialog> + + <!-- tools --> + <div class="tools"> + <div class="funs"></div> + <div class="pagination"> + <el-pagination + background + :current-page="currentPage" + layout="prev, pager, next" + :total="totalNum" + :page-size="pageSize" + @current-change="changeCurrentPage" + @prev-click="handlePrev" + @next-click="handleNext" + > </el-pagination> </div> </div> </div> + </div> </template> <script> -import helper from '@/utils/mydate' +import helper from "@/utils/mydate"; +import { createNamespacedHelpers } from "vuex"; import departmentAside from "@/views/operate/fivepack/threepack/components/aside"; +import MyView from "../components/dialogForm.vue"; +const { mapActions } = createNamespacedHelpers("orgGrid"); export default { - components: { departmentAside }, - data() { - return { - tableData: [], - search: "", - dialogUpdate: false, - dialogView:false, - updateFlag: false, - userInfo: '', - totalNum: 0, - pageSize: 10, - currentPage: 1, - renderFlag: false, - flag: { - role: false, - password: false, - depart: false, - }, - all: false, - unsame: false, - myIdx: 0, - preMyIdx: 0, - options: [ - { - value: 0, - label: '鎵归噺鎿嶄綔', - disabled: true, - }, - { - value: 1, - label: '鎵归噺鍚敤', - }, - { - value: 2, - label: '鎵归噺绂佺敤', - }, - { - value: 3, - label: '鎵归噺鍒犻櫎', - } - ], - tempList: [] - } + components: { departmentAside, MyView }, + data() { + return { + tableData: [], + context: "", + dialogUpdate: false, + dialogView: false, + updateFlag: false, + userInfo: "", + totalNum: 0, + pageSize: 10, + currentPage: 1, + renderFlag: false, + flag: { + role: false, + password: false, + depart: false, + }, + all: false, + unsame: false, + myIdx: 0, + preMyIdx: 0, + tempList: [], + handheldGrid: {}, + }; + }, + created() { + this.getList(); + }, + methods: { + ...mapActions(["getOrgGridList", "deleteOrgGrid"]), + tableChange(list) { + this.tempList = []; + list.forEach((item) => { + this.tempList.push(item.id); + }); + this.all = list.length === this.tableData.length; }, - created() { - this.getUserList(); + changeTime({ createTime }) { + return helper(createTime); }, - methods: { - async selectChange(list) { - if (this.tempList.length !== 0) { - this.preMyIdx = list; - if (list === 3) { - await this.mulDelte(this.tempList); - } else if (list === 2) { - await this.mulUpdateStatus(this.tempList, 0); - } else { - await this.mulUpdateStatus(this.tempList, 1); - } - this.myIdx = 0; - } else { - this.myIdx = this.preMyIdx; - this.$message({ - type: 'warning', - message: '鎮ㄨ繕娌¢�変腑浠讳綍鏁版嵁', - }) - } - }, - tableChange(list) { - this.tempList = []; - list.forEach(item => { - this.tempList.push(item.id); - }) - this.all = list.length === this.tableData.length; - }, - // 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 - mulDelte(idArr) { - this.$confirm("鎮ㄧ‘瀹氳杩涜鎵归噺鍒犻櫎鐢ㄦ埛鍚�?") - .then(_ => { - this.$axios({ - method: 'post', - url: 'sccg/admin/deleteBatch?ids=' + idArr, - }) - .then(res => { - if (res.code === 200) { - this.$message({ - type: 'success', - message: '鍒犻櫎鐢ㄦ埛淇℃伅鎴愬姛', - }) - this.getUserList(); - } else { - this.$message({ - type: 'error', - message: res.message - }) - } - }) - }) - .catch(err => { }) - }, - // 鎵归噺淇敼璐﹀彿 - mulUpdateStatus(idArr, flag) { - this.$confirm(flag === 1 ? "鎮ㄧ‘瀹氳杩涜鎵归噺鍚敤鐢ㄦ埛鍚�?" : '鎮ㄧ‘瀹氳杩涜鎵归噺绂佺敤鐢ㄦ埛鍚�?') - .then(_ => { - this.$axios({ - method: 'post', - url: 'sccg/admin/updateStatusBatch?ids=' + idArr + '&status=' + flag, - }) - .then(res => { - if (res.code === 200) { - this.$message({ - type: 'success', - message: '鏇存敼鐢ㄦ埛鐘舵�佹垚鍔�', - }) - this.getUserList(); - } else { - this.$message({ - type: 'error', - message: res.message - }) - } - }) - }) - .catch(err => { }) - }, - changeTime({ createTime }) { - return helper(createTime); - }, - selectAll() { - this.$refs.multipleTable.toggleAllSelection(); - }, - disSame(list) { - list.forEach(row => { - this.$refs.multipleTable.toggleRowSelection(row) - }) - }, - // 鍒犻櫎鐢ㄦ埛 - handleDelete({ id }) { - this.$confirm('纭鍒犻櫎锛�').then(_ => { - this.$axios({ - method: 'post', - url: 'sccg/admin/delete/' + id, - }).then(res => { - this.$message({ - message: res.message, - type: 'success' - }) - this.getUserList(); - }) - }).catch(_ => { }) - }, - closeDialog({ flag }) { - this.dialogUpdate = flag; - this.getUserList(); - }, - handleClose(done) { - if (this.updateFlag) { - this.$confirm('纭鍏抽棴锛�') - .then(_ => { - this.dialogUpdate = false; - this.updateFlag = false; - done(); - }) - .catch(_ => { }); - }else{ - done(); - } - }, - // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠� - changeCurrentPage(page) { - this.currentPage = page; - this.getUserList(); - }, - // 涓婁竴椤电偣鍑讳簨浠� - handlePrev(page) { - this.currentPage = page; - this.getUserList(); - }, - // 涓嬩竴椤电偣鍑讳簨浠� - handleNext(page) { - this.currentPage = page; - this.getUserList(); - }, - // 淇敼瑙掕壊 - handleChangeRole(obj, mykey) { - this.dialogUpdate = true; - this.updateFlag = true; - for (let key in this.flag) { - if (key === mykey) { - this.flag[key] = true; - } else { - this.flag[key] = false; - } - } - this.userInfo = obj; - }, - // 淇敼鐢ㄦ埛鐘舵�� - handleChangeStatus(obj) { - let { id, status } = obj; - status === true ? status = 1 : status = 0; - this.$axios.post(`sccg/admin/updateStatus/` + id + '?status=' + status).then(res => { - }) - }, - // 鑾峰彇鐢ㄦ埛鍒楄〃 - getUserList() { - const that = this; - const { currentPage, pageSize, search } = this; - // 鑾峰彇鎵�鏈夌敤鎴蜂俊鎭�佺敤鎴锋煡璇�(鏆傛椂鏀寔鐢佃瘽鍙风爜) - this.$axios.get(`sccg/admin/list?keyword=${search}¤t=${currentPage}&pageSize=${pageSize}`).then(res => { - if (res.code === 200) { - res.data.records.forEach(item => { - item.status === 1 ? item.status = true : item.status = false; - }) - that.totalNum = res.data.total; - that.tableData = res.data.records; - this.renderFlag = true; - } - }) - }, - // 鏌ョ湅鐢ㄦ埛淇℃伅(涓嶅彲淇敼) - handleFind(rowData) { - this.dialogView = true; - this.userInfo = rowData; - }, - // 璁剧疆琛ㄦ牸鏂戦┈绾� - tableRowClassName({ row, rowIndex }) { - if ((rowIndex + 1) % 2 === 0) { - return 'warning-row'; - } else { - return 'success-row'; - } - }, - // 澶勭悊鐢ㄦ埛鎵�灞炶鑹� - filterRole(arr){ - let str = ''; - if(arr.length === 0){ - return; - } - arr.forEach((item,index)=>{ - if(item!==null){ - if(index<arr.length-1){ - str+=item.name +','; - }else{ - str+=item.name; - } - } - }) - return str; - } + disSame(list) { + list.forEach((row) => { + this.$refs.multipleTable.toggleRowSelection(row); + }); }, - props: ['refresh', 'keyword', 'resetFresh'], - watch: { - refresh: { - handler(newValue, oldValue) { - if (newValue) { - this.search = ''; - if (this.keyword !== '') { - this.search = this.keyword; - } - this.currentPage = 1; - this.getUserList(); - this.$emit('resetFresh', { flag: false }) - } - }, - immediate: true - } - } -} + handleCallBack({ flag }) { + this.dialogUpdate = false; + this.getList(); + }, + handleClose(done) { + if (this.updateFlag) { + this.$confirm("纭鍏抽棴锛�") + .then((_) => { + this.dialogUpdate = false; + this.updateFlag = false; + done(); + }) + .catch((_) => {}); + } else { + done(); + } + }, + // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠� + changeCurrentPage(page) { + this.currentPage = page; + this.getList(); + }, + // 涓婁竴椤电偣鍑讳簨浠� + handlePrev(page) { + this.currentPage = page; + this.getList(); + }, + // 涓嬩竴椤电偣鍑讳簨浠� + handleNext(page) { + this.currentPage = page; + this.getList(); + }, + // 鑾峰彇鍒楄〃 + getList() { + const that = this; + const { currentPage, pageSize, context } = this; + this.getOrgGridList({ + currentPage, + pageSize, + name: context, + }) + .then((res) => { + if (res.code === 200) { + res.data.records.forEach((item) => { + item.status === 1 ? (item.status = true) : (item.status = false); + }); + that.totalNum = res.data.total; + that.tableData = res.data.records; + this.renderFlag = true; + } + }); + }, + handleAdd() { + this.handheldGrid = { + id: 0, + name: "", + worker: "", + contact: "", + area: "", + description: "", + region: "", + }; + this.dialogUpdate = true; + }, + handleEdit(row) { + this.handheldGrid = row; + this.dialogUpdate = true; + }, + handleDelete(row) { + this.$confirm("纭鍒犻櫎锛�").then((_) => { + this.deleteOrgGrid(row.id).then((res) => { + this.$message({ + type: "success", + message: "鍒犻櫎鎴愬姛锛�", + }); + this.getList(); + }); + }); + }, + // 璁剧疆琛ㄦ牸鏂戦┈绾� + tableRowClassName({ row, rowIndex }) { + if ((rowIndex + 1) % 2 === 0) { + return "warning-row"; + } else { + return "success-row"; + } + }, + }, +}; </script> <style lang="scss" scoped> .mainContent { @@ -381,4 +262,85 @@ } } } + +header { + background-color: white; + display: flex; + .headerContent { + padding: 10px; + display: flex; + justify-content: space-between; + align-items: center; + + .search { + display: flex; + justify-content: flex-start; + line-height: 2; + + span { + flex: 1; + } + + .el-input { + flex: 2; + color: #1d3f57; + } + .el-select { + flex: 1; + } + .el-date-editor { + flex: 1; + } + } + + .findBtn { + line-height: 100px; + margin-left: 15px; + display: flex; + align-items: center; + margin-top: -2px; + + .el-button { + padding: 12px 25px; + border-radius: 20px; + } + } + ::v-deep .el-form { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + .el-form-item { + width: 30%; + } + + .el-form-item__label { + color: #4b9bb7; + } + } + } +} + +.operation { + display: flex; + + .line { + padding: 0 5px; + } + + span:hover { + cursor: pointer; + } +} + +.main-title { + line-height: 20px; + padding: 10px 20px; + margin-left: auto; + border-radius: 20px; + .el-button { + padding: 12px 25px; + border-radius: 20px; + } +} </style> \ No newline at end of file -- Gitblit v1.8.0