335fe558997b165f15f238bb69f03e42.json 36 KB

1
  1. {"remainingRequest":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/src/views/system/user/index.vue?vue&type=style&index=0&id=1930a3c4&lang=scss&scoped=true","dependencies":[{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/src/views/system/user/index.vue","mtime":1708395041892},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/css-loader/dist/cjs.js","mtime":1708395146948},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/vue-loader/lib/loaders/stylePostLoader.js","mtime":1708395147772},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/postcss-loader/src/index.js","mtime":1708395147225},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/sass-loader/dist/cjs.js","mtime":1708395146389},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/cache-loader/dist/cjs.js","mtime":1708395146433},{"path":"/Users/caoge/Desktop/地质现场/VehicleMonitor-WEB/node_modules/vue-loader/lib/index.js","mtime":1708395147382}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKDQouZGFzaGJvYXJkIHsNCiAgJi1jb250YWluZXIgew0KICAgIG1hcmdpbjogMzBweDsNCiAgfQ0KDQogICYtdGV4dCB7DQogICAgZm9udC1zaXplOiAzMHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA0NnB4Ow0KICB9DQp9DQoNCi5kYXNoYm9hcmQtY29udGFpbmVyIHsNCiAgLnNlYXJjaC1jb250ZW50IHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBoZWlnaHQ6IDc0cHg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgcGFkZGluZy1sZWZ0OiAxMHB4Ow0KDQogICAgLmVsLWlucHV0IHsNCiAgICAgIG1hcmdpbjogMCAxMHB4Ow0KICAgIH0NCg0KICAgIC5lbC1zZWxlY3Qgew0KICAgICAgbWFyZ2luOiAwIDEwcHg7DQogICAgfQ0KDQogICAgLnNlYXJjaC1idG4gew0KICAgICAgLy8gZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICBtYXJnaW4tbGVmdDogMTBweDsNCg0KICAgICAgZGl2IHsNCiAgICAgICAgLy8gbWFyZ2luOiAwIDZweDsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB3aWR0aDogODBweDsNCiAgICAgICAgaGVpZ2h0OiA0MHB4Ow0KICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgIH0NCg0KICAgICAgZGl2OmhvdmVyIHsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgfQ0KDQogICAgICAuc2VhcmNoIHsNCiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4Ow0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjc2NkREOw0KICAgICAgICBjb2xvcjogI0Y3RjhGQjsNCiAgICAgIH0NCg0KICAgICAgLnNlYXJjaDpob3ZlciB7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0RDg1RjQ7DQogICAgICB9DQoNCiAgICAgIC5yZXNldCB7DQogICAgICAgIGNvbG9yOiAjMzMzMzM0Ow0KICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRDdEN0Q3Ow0KICAgICAgfQ0KDQogICAgICAucmVzZXQ6aG92ZXIgew0KICAgICAgICBjb2xvcjogIzFGOUZGRjsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzFGOUZGRjsNCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICAudGFibGUtY29udGVudCB7DQogICAgbWFyZ2luLXRvcDogMTVweDsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KDQogICAgLmxlZnRUcmVlIHsNCiAgICAgIGZsb2F0OiBsZWZ0Ow0KICAgICAgd2lkdGg6IDE0LjIlOw0KICAgICAgcGFkZGluZzogMjBweCAxMHB4IDIwcHg7DQogICAgICAvLyBoZWlnaHQ6IDEwMCU7DQogICAgICAvLyBoZWlnaHQ6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgLSAxMDAgKyAicHgiOw0KICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgICAgIG92ZXJmbG93OiBhdXRvOw0KICAgIH0NCg0KICAgIC5yaWdodFRhYmxlIHsNCiAgICAgIGZsb2F0OiByaWdodDsNCiAgICAgIHdpZHRoOiA4NSU7DQogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgICAgcGFkZGluZzogMCAyMHB4Ow0KDQogICAgICAuYnRuIHsNCiAgICAgICAgbWFyZ2luOiAxNXB4IDIwcHggMTVweCAwOw0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgIGZsb2F0OiBsZWZ0Ow0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIHdpZHRoOiA5OHB4Ow0KICAgICAgICBoZWlnaHQ6IDM0cHg7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0FCQzdGRDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDM0cHg7DQogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgY29sb3I6ICMyMjUwQzg7DQogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNFN0VFRkY7DQogICAgICB9DQoNCiAgICAgIC5idG46aG92ZXIgew0KICAgICAgICBjb2xvcjogI0ZGRkZGRjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyNTBDODsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyNTBDODsNCiAgICAgIH0NCg0KICAgICAgLmJ0bjphY3RpdmUgew0KICAgICAgICBjb2xvcjogI0ZGRkZGRjsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzE5NERBNDsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzE5NERBNDsNCiAgICAgIH0NCg0KICAgICAgLnN0YXJ0VXNpbmcgew0KICAgICAgICB3aWR0aDogNTRweDsNCiAgICAgICAgaGVpZ2h0OiAyNHB4Ow0KICAgICAgICBtYXJnaW46IDE0LjVweCBhdXRvIDA7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4Ow0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgY29sb3I6ICMwMDk3NEQ7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U3RkFGMDsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0JFRkRERDsNCiAgICAgIH0NCg0KICAgICAgLkRlYWN0aXZhdGUgew0KICAgICAgICB3aWR0aDogNTRweDsNCiAgICAgICAgaGVpZ2h0OiAyNHB4Ow0KICAgICAgICBtYXJnaW46IDE0LjVweCBhdXRvIDA7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4Ow0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgY29sb3I6ICNGRjk5MzM7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjNFODsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0ZERTZDRjsNCiAgICAgIH0NCg0KICAgICAgLm9wZXJhdGVCdG4gew0KICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICAgICAgY29sb3I6ICMyODY2REQ7DQoNCiAgICAgICAgZGl2IHsNCiAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgICAgbWFyZ2luOiAwIDVweDsNCiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgLnBhZ2luYXRpb24gew0KICAgICAgICBmbG9hdDogcmlnaHQ7DQogICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIC54em1iYSB7DQogICAgY29sb3I6ICMyNzY2REQ7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICB9DQoNCiAgLmh4aiB7DQogICAgaGVpZ2h0OiA0NnB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA0NnB4Ow0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgfQ0KDQogIC5zZWFyY2hfYnRuIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjc2NkREOw0KICAgIGNvbG9yOiAjRjdGOEZCOw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgfQ0KDQogIC5zZWFyY2hfYnRuOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEQ4NUY0Ow0KICB9DQoNCiAgLnJlc2V0X2J0biB7DQogICAgY29sb3I6ICM1NjU2NTY7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNEN0Q3RDc7DQogIH0NCg0KICAucmVzZXRfYnRuOmhvdmVyIHsNCiAgICBjb2xvcjogIzFGOUZGRjsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjMUY5RkZGOw0KICAgIGJhY2tncm91bmQ6IG5vbmU7DQogIH0NCn0NCg0KLmRpYWxvZy1mb290ZXIgew0KICBkaXYgew0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICB3aWR0aDogODBweDsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICBsaW5lLWhlaWdodDogNDBweDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIH0NCg0KICBkaXY6aG92ZXIgew0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgfQ0KDQogIC5zZWFyY2ggew0KICAgIG1hcmdpbjogMCAxMnB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNzY2REQ7DQogICAgY29sb3I6ICNmZmY7DQogIH0NCg0KICAuc2VhcmNoOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEQ4NUY0Ow0KICB9DQoNCiAgLnJlc2V0IHsNCiAgICBjb2xvcjogIzMzMzMzNDsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjRDdEN0Q3Ow0KICB9DQoNCiAgLnJlc2V0OmhvdmVyIHsNCiAgICBjb2xvcjogIzFGOUZGRjsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjMUY5RkZGOw0KICB9DQp9DQo="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8mBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/system/user","sourcesContent":["<template>\r\n <div class=\"dashboard-container\">\r\n <div class=\"search-content\">\r\n <el-input style=\"width: 220px;\" placeholder=\"请输入姓名\" v-model=\"data.nickName\" clearable></el-input>\r\n <el-input style=\"width: 220px;\" placeholder=\"请输入电话号码\" v-model=\"data.phoneNum\" clearable></el-input>\r\n <el-select style=\"width: 220px;\" v-model=\"data.status\" clearable placeholder=\"请选择状态\">\r\n <el-option v-for=\"item in statusOptions\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n <div class=\"search-btn\">\r\n <div class=\"search\" @click=\"searchUser\">查询</div>\r\n <div class=\"reset\" @click=\"reset()\">重置</div>\r\n </div>\r\n </div>\r\n <div class=\"table-content\">\r\n <div class=\"leftTree\" :style=\"styleObj\">\r\n <el-input placeholder=\"请输入部门\" v-model=\"filterText\">\r\n </el-input>\r\n <el-tree class=\"filter-tree\" :data=\"treeData\" :props=\"defaultProps\" default-expand-all\r\n @node-click=\"handleNodeClick\" :filter-node-method=\"filterNode\" ref=\"tree\">\r\n </el-tree>\r\n </div>\r\n <div class=\"rightTable\">\r\n <div class=\"btn\" @click=\"addUserBtn\">\r\n <span class=\"icon font_family\">&#xe604;</span>\r\n 新增\r\n </div>\r\n <div class=\"btn\" @click=\"batchDelUser\">\r\n <span class=\"icon font_family\">&#xe607;</span>\r\n 批量删除\r\n </div>\r\n <div class=\"btn\" @click=\"importLoadIn\">\r\n <span class=\"icon font_family\">&#xe606;</span>\r\n 导入\r\n </div>\r\n <div class=\"btn\" @click=\"expotrUser\">\r\n <span class=\"icon font_family\">&#xe605;</span>\r\n <a>导出</a>\r\n </div>\r\n <div class=\"btn\" @click=\"downExcel()\">\r\n <span class=\"icon font_family\">&#xe603;</span>\r\n <a>下载模板</a>\r\n </div>\r\n <el-dialog center :visible.sync=\"uploadDialog\" title=\"用户导入\" width=\"620px\">\r\n <el-upload ref=\"uploadFile\" class=\"upload-demo\" style=\"margin-left:110px\" drag action=\"#\"\r\n :http-request=\"uploadHttpRequest\" :auto-upload=\"false\" :file-list=\"fileList\" :on-change=\"uploadFileList\">\r\n <i class=\"el-icon-upload\" />\r\n <div class=\"el-upload__text\">将文件拖到此处,或<em>点击上传</em></div>\r\n <!-- <div class=\"el-upload__tip\">只能上传xls/xlsx文件,且不超过500kb</div> -->\r\n </el-upload>\r\n <div class=\"hxj\">支持扩展名: xls/xlsx</div>\r\n <div class=\"hxj\">请先下载模板,根据模板内容填写,再上传文件 <span class=\"xzmba\" @click=\"downExcel\">下载模板</span> </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <div class=\"search\" @click=\"httpRequest\">保 存</div>\r\n <div class=\"reset\" @click=\"uploadDialog = false\">取 消</div>\r\n </div>\r\n </el-dialog>\r\n <el-table ref=\"multipleTable\" :data=\"tableData\" @selection-change=\"handleSelectionChange\" style=\"width: 100%\">\r\n <el-table-column fixed type=\"selection\" width=\"55\">\r\n </el-table-column>\r\n <!-- <el-table-column fixed type=\"index\" label=\"序号\" width=\"70\">\r\n </el-table-column> -->\r\n <el-table-column fixed prop=\"userName\" label=\"账号\" width=\"100\">\r\n </el-table-column>\r\n <el-table-column property=\"nickName\" label=\"真实姓名\" width=\"100\">\r\n </el-table-column>\r\n <el-table-column property=\"deptName\" label=\"部门名称\" show-overflow-tooltip width=\"220\">\r\n </el-table-column>\r\n <el-table-column property=\"roleName\" label=\"所属角色\" width=\"120\" show-overflow-tooltip=\"true\">\r\n <template slot-scope=\"scope\">\r\n {{ returnRoleNames(scope.row.roleNames) }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"phoneNum\" label=\"联系电话\" width=\"120\">\r\n </el-table-column>\r\n <!-- <el-table-column property=\"email\" label=\"联系邮箱\" width=\"190\">\r\n </el-table-column> -->\r\n <el-table-column label=\"状态\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"startUsing\" v-if=\"scope.row.status == 1\">启用</div>\r\n <div class=\"Deactivate\" v-else>停用</div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"createTime\" sortable label=\"创建时间\" width=\"160\">\r\n </el-table-column>\r\n <el-table-column fixed=\"right\" label=\"操作\" width=\"250\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"operateBtn\">\r\n <div v-if=\"scope.row.id !== 1\" @click=\"updateUser(scope.row, true)\">修改</div>\r\n <div v-if=\"scope.row.id !== 1\" @click=\"delUser(scope.row)\">删除</div>\r\n <div v-if=\"scope.row.id !== 1\" @click=\"authorityBtn(scope.row)\">数据权限</div>\r\n <!-- <div @click=\"viewDetails(scope.row)\">详情查看</div> -->\r\n <div @click=\"updateUser(scope.row, false)\">详情查看</div>\r\n <div @click=\"resetPwd(scope.row)\">重置密码</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <detaileDialog class=\"detaileDialog\" :detaileData=\"detaileData\"></detaileDialog>\r\n <addUserDialog v-if=\"addUserData.dialogVisible\" :addUserData=\"addUserData\" @addUser=\"addUser\"></addUserDialog>\r\n <updateUserDialog v-if=\"updateUserData.dialogVisible\" :updateUserData=\"updateUserData\"\r\n @updateUserBtn=\"updateUserBtn\"></updateUserDialog>\r\n <authorityDialog v-if=\"authorityData.dialogVisible\" :authorityData=\"authorityData\"\r\n @updateAuthority=\"updateAuthority\"></authorityDialog>\r\n <div class=\"pagination\">\r\n <el-pagination @size-change=\"handleSizeChange\" @current-change=\"handleCurrentChange\" :page-sizes=\"[10, 15, 20]\"\r\n :page-size=\"this.data.pageSize\" layout=\"total, sizes, prev, pager, next, jumper\" :total=\"total\">\r\n </el-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mapGetters } from 'vuex'\r\nimport { getList, getDeptTree, userInformation, delUser, addUser, updateUser, getExcel, exportUserList, importUser, dictionaryList, dataPermission, resetPwd } from '@/api/sysManage'\r\nimport detaileDialog from './compontens/detaileDialog.vue'\r\nimport addUserDialog from './compontens/addUserDialog.vue'\r\nimport updateUserDialog from './compontens/updateUserDialog.vue'\r\nimport authorityDialog from './compontens/authorityDialog.vue'\r\nimport { is } from '@babel/types'\r\nexport default {\r\n name: 'home',\r\n computed: {\r\n ...mapGetters([\r\n 'name'\r\n ])\r\n },\r\n components: {\r\n detaileDialog,\r\n addUserDialog,\r\n updateUserDialog,\r\n authorityDialog\r\n },\r\n created() {\r\n this.getList(this.data)\r\n this.getDeptTree()\r\n this.getAllAuthority()\r\n },\r\n mounted() {\r\n // let height = document.getElementsByClassName('leftTree') \r\n // this.leftTreeHeight = height[0].clientHeight\r\n const height = document.documentElement.clientHeight - 200 + \"px\";\r\n this.styleObj.height = height\r\n },\r\n watch: {\r\n filterText(val) {\r\n this.$refs.tree.filter(val);\r\n }\r\n },\r\n data() {\r\n return {\r\n leftTreeHeight: 0,\r\n styleObj: {\r\n height: ''\r\n },\r\n uploadDialog: false,\r\n fileList: [],\r\n authorityData: {\r\n dialogVisible: false,\r\n id: '',\r\n dictValue: '',\r\n data: []\r\n },\r\n // 导入\r\n dataForm: {\r\n name: \"\",\r\n file: null,\r\n },\r\n filterText: '',\r\n defaultProps: {\r\n children: 'children',\r\n label: 'label'\r\n },\r\n tableData: [],\r\n data: {\r\n pageNum: 1,\r\n pageSize: 10,\r\n nickName: '',\r\n phoneNum: '',\r\n status: '',\r\n deptId: ''\r\n },\r\n total: 0,\r\n treeData: [],\r\n statusOptions: [\r\n {\r\n label: '启用',\r\n value: '1'\r\n },\r\n {\r\n label: '停用',\r\n value: '2'\r\n }\r\n ],\r\n detaileData: {\r\n dialogVisible: false,\r\n remark: '',\r\n data: {}\r\n },\r\n addUserData: {\r\n dialogVisible: false,\r\n data: {}\r\n },\r\n updateUserData: {\r\n dialogVisible: false,\r\n data: {\r\n },\r\n isEdit: null\r\n },\r\n delUserList: '',\r\n ids: []\r\n }\r\n },\r\n methods: {\r\n returnRoleNames(arr) {\r\n let roleNames = ''\r\n arr.forEach(item => {\r\n roleNames+=item+' '\r\n })\r\n return roleNames\r\n },\r\n importLoadIn: function () {\r\n this.uploadDialog = true\r\n },\r\n uploadFileList(file) {\r\n if (file.status === 'ready') {\r\n this.fileList.push(file)\r\n if (this.fileList.length > 1) {\r\n this.fileList.splice(0, 1)\r\n }\r\n }\r\n },\r\n //下载模板\r\n downExcel() {\r\n getExcel('/system/user/downloaExcel').then(res => {\r\n const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = '新增用户模板.xlsx';\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n })\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n return data.label.indexOf(value) !== -1;\r\n },\r\n getList(data) {\r\n getList(data).then(res => {\r\n if (res.code == 200) {\r\n this.tableData = res.data.records\r\n this.total = res.data.total\r\n // this.$nextTick(() => {\r\n // let heightMsg = document.getElementsByClassName('rightTable')\r\n // this.styleObj.height = heightMsg[0].clientHeight + 'px'\r\n // })\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n },\r\n handleNodeClick(v) {\r\n this.data.pageNum = 1\r\n this.data.deptId = v.id\r\n this.getList(this.data)\r\n },\r\n getDeptTree() {\r\n getDeptTree().then(res => {\r\n this.treeData = res.data\r\n })\r\n },\r\n handleSizeChange(val) {\r\n this.data.pageSize = val\r\n this.getList(this.data)\r\n },\r\n handleCurrentChange(val) {\r\n this.data.pageNum = val\r\n this.getList(this.data)\r\n },\r\n searchUser() {\r\n this.data.deptId = ''\r\n this.getList(this.data)\r\n },\r\n //查看详情\r\n viewDetails(scope) {\r\n userInformation(scope.id).then(res => {\r\n this.detaileData.data = res.data\r\n this.detaileData.remark = res.roles[0].remark\r\n })\r\n this.detaileData.dialogVisible = true\r\n },\r\n //重置\r\n reset() {\r\n this.data = {\r\n pageNum: 1,\r\n pageSize: 10,\r\n nickName: '',\r\n phoneNum: '',\r\n status: '',\r\n deptId: ''\r\n }\r\n this.getList(this.data)\r\n },\r\n //修改用户\r\n updateUserBtn(payload) {\r\n let params = {\r\n id: payload.id,\r\n userName: payload.userName,\r\n password: payload.password,\r\n nickName: payload.nickName,\r\n sex: payload.sex,\r\n deptId: payload.deptId,\r\n roleIds: payload.roleIds,\r\n phoneNum: payload.phoneNum,\r\n email: payload.email,\r\n status: payload.status ? 1 : 2\r\n }\r\n updateUser(params).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '修改成功!'\r\n });\r\n this.getList(this.data)\r\n this.updateUserData.dialogVisible = false\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n },\r\n delUser(scope) {\r\n this.$confirm('确定要删除吗?', '信息提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n delUser(scope.id).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '删除成功!'\r\n });\r\n\r\n const totalPage = Math.ceil((this.total - 1) / this.data.pageSize)\r\n const pageNum = this.data.pageNum > totalPage ? totalPage : this.data.pageNum\r\n this.data.pageNum = pageNum < 1 ? 1 : pageNum\r\n this.getList(this.data)\r\n\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n }).catch(() => {\r\n this.$message({\r\n type: 'info',\r\n message: '已取消删除'\r\n });\r\n });\r\n },\r\n //新增用户按钮\r\n addUserBtn() {\r\n this.addUserData.dialogVisible = true\r\n },\r\n updateUser(scope, isEdit) {\r\n let newScope = { ...scope }\r\n if (newScope.status == 1) {\r\n newScope.status = true\r\n } else {\r\n newScope.status = false\r\n }\r\n newScope.sex = newScope.sex.toString()\r\n this.updateUserData.isEdit = !isEdit\r\n this.updateUserData.data = newScope\r\n this.updateUserData.dialogVisible = true\r\n },\r\n addUser(payload) {\r\n if (payload.status) {\r\n payload.status = 1\r\n } else {\r\n payload.status = 2\r\n }\r\n addUser(payload).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '新增成功!'\r\n });\r\n this.addUserData.dialogVisible = false\r\n this.getList(this.data)\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n }).catch(err => {\r\n\r\n })\r\n },\r\n //多选用户\r\n handleSelectionChange(v) {\r\n let ids = []\r\n let delUserList = ''\r\n v.forEach(element => {\r\n delUserList += element.id + ','\r\n ids.push(element.id)\r\n });\r\n this.ids = ids\r\n delUserList = delUserList.slice(0, delUserList.length - 1)\r\n this.delUserList = delUserList\r\n },\r\n //批量删除用户\r\n batchDelUser() {\r\n if (this.delUserList.length == 0) {\r\n return this.$message({\r\n type: 'error',\r\n message: '请选择要删除的用户!'\r\n });\r\n }\r\n this.$confirm('确定要删除吗?', '信息提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n delUser(this.delUserList).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '删除成功!'\r\n });\r\n const totalPage = Math.ceil((this.total - 1) / this.data.pageSize)\r\n const pageNum = this.data.pageNum > totalPage ? totalPage : this.data.pageNum\r\n this.data.pageNum = pageNum < 1 ? 1 : pageNum\r\n this.getList(this.data)\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n }).catch(() => {\r\n this.$message({\r\n type: 'info',\r\n message: '已取消删除'\r\n });\r\n });\r\n },\r\n //导出用户\r\n expotrUser() {\r\n if (this.ids.length == 0) {\r\n return this.$message({\r\n type: 'error',\r\n message: '请选择要导出的用户信息!'\r\n });\r\n } else {\r\n let params = {\r\n nickName: this.data.nickName,\r\n phoneNum: this.data.phoneNum,\r\n status: this.data.status,\r\n ids: this.ids\r\n }\r\n exportUserList(params).then(res => {\r\n // const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n // const url = window.URL.createObjectURL(blob);\r\n // const a = document.createElement('a');\r\n // a.href = url;\r\n // a.download = '用户信息.xlsx';\r\n // a.click();\r\n // window.URL.revokeObjectURL(url);\r\n\r\n if (res.type == \"application/json\") {\r\n const reader = new FileReader(); \r\n reader.readAsText(res, 'utf-8'); \r\n reader.onload = function () {\r\n const msg = JSON.parse(reader.result);\r\n if(msg.code == 200){\r\n const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = '用户信息.xlsx';\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n } else{\r\n Message({\r\n type: 'error',\r\n message: msg.msg\r\n });\r\n } \r\n }\r\n }else{\r\n const blob = new Blob([res], { type: 'text/plain;charset=utf-8' });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = '用户信息.xlsx';\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n\r\n })\r\n }\r\n },\r\n // 判断文件个数\r\n handleChange(file, fileList) {\r\n if (fileList.length >= 2) {\r\n return;\r\n }\r\n if (fileList.length === 1) {\r\n this.hasFile = true;\r\n }\r\n this.dataForm.file = file;\r\n },\r\n // 导入\r\n httpRequest(param) {\r\n let formData = new FormData();\r\n // formData.append('file', this.dataForm.file.raw);\r\n formData.append('file', this.fileList[0].raw)\r\n let configHeaders = {\r\n headers: { \"Content-Type\": \"multipart/form-data\" }\r\n };\r\n let isHttpRequest = this.fileList[0].raw.name.split('.')\r\n if (isHttpRequest[isHttpRequest.length - 1] == 'xlsx' || isHttpRequest[isHttpRequest.length - 1] == 'xls') {\r\n importUser(formData).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '导入成功!'\r\n });\r\n let uid = this.fileList[0].raw.uid\r\n let idx = this.$refs.uploadFile.uploadFiles.findIndex(item => item.uid === uid)\r\n this.$refs.uploadFile.uploadFiles.splice(idx, 1)\r\n this.getList(this.data)\r\n this.uploadDialog = false\r\n }else{\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: '上传的文件只能是xls以及xlsx格式!'\r\n });\r\n let uid = this.fileList[0].raw.uid\r\n let idx = this.$refs.uploadFile.uploadFiles.findIndex(item => item.uid === uid)\r\n this.$refs.uploadFile.uploadFiles.splice(idx, 1)\r\n }\r\n },\r\n //获取全部权限信息\r\n getAllAuthority() {\r\n dictionaryList('data_permission').then(res => {\r\n if (res.code == 200) {\r\n this.authorityData.data = res.data\r\n }\r\n })\r\n },\r\n authorityBtn(scope) {\r\n this.authorityData.dictValue = scope.dataPermission.toString()\r\n this.authorityData.id = scope.id\r\n this.authorityData.dialogVisible = true\r\n },\r\n updateAuthority(payload) {\r\n dataPermission(payload.id, payload.dataPermission).then(res => {\r\n if (res.code == 200) {\r\n this.$message({\r\n type: 'success',\r\n message: '修改成功!'\r\n });\r\n this.getList(this.data)\r\n this.authorityData.dialogVisible = false\r\n }\r\n })\r\n },\r\n resetPwd(row) {\r\n this.$confirm('是否重置密码?', '信息提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n resetPwd(row.id).then(res => {\r\n if (res.code == 200) {\r\n this.getList(this.data)\r\n this.$message({\r\n type: 'success',\r\n message: '重置成功!'\r\n });\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.msg\r\n });\r\n }\r\n })\r\n }).catch(() => {\r\n this.$message({\r\n type: 'info',\r\n message: '已取消!'\r\n });\r\n });\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dashboard {\r\n &-container {\r\n margin: 30px;\r\n }\r\n\r\n &-text {\r\n font-size: 30px;\r\n line-height: 46px;\r\n }\r\n}\r\n\r\n.dashboard-container {\r\n .search-content {\r\n width: 100%;\r\n height: 74px;\r\n background-color: #fff;\r\n display: flex;\r\n align-items: center;\r\n padding-left: 10px;\r\n\r\n .el-input {\r\n margin: 0 10px;\r\n }\r\n\r\n .el-select {\r\n margin: 0 10px;\r\n }\r\n\r\n .search-btn {\r\n // display: inline-block;\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n margin-left: 10px;\r\n\r\n div {\r\n // margin: 0 6px;\r\n display: inline-block;\r\n width: 80px;\r\n height: 40px;\r\n border-radius: 2px;\r\n font-size: 14px;\r\n line-height: 40px;\r\n text-align: center;\r\n }\r\n\r\n div:hover {\r\n cursor: pointer;\r\n }\r\n\r\n .search {\r\n margin-right: 10px;\r\n background-color: #2766DD;\r\n color: #F7F8FB;\r\n }\r\n\r\n .search:hover {\r\n background-color: #4D85F4;\r\n }\r\n\r\n .reset {\r\n color: #333334;\r\n border: 1px solid #D7D7D7;\r\n }\r\n\r\n .reset:hover {\r\n color: #1F9FFF;\r\n border: 1px solid #1F9FFF;\r\n }\r\n }\r\n }\r\n\r\n .table-content {\r\n margin-top: 15px;\r\n width: 100%;\r\n background-color: #fff;\r\n\r\n .leftTree {\r\n float: left;\r\n width: 14.2%;\r\n padding: 20px 10px 20px;\r\n // height: 100%;\r\n // height: document.documentElement.clientHeight - 100 + \"px\";\r\n background-color: #fff;\r\n overflow: auto;\r\n }\r\n\r\n .rightTable {\r\n float: right;\r\n width: 85%;\r\n background-color: #fff;\r\n padding: 0 20px;\r\n\r\n .btn {\r\n margin: 15px 20px 15px 0;\r\n cursor: pointer;\r\n float: left;\r\n text-align: center;\r\n width: 98px;\r\n height: 34px;\r\n border-radius: 2px;\r\n border: 1px solid #ABC7FD;\r\n line-height: 34px;\r\n font-weight: 400;\r\n font-size: 14px;\r\n color: #2250C8;\r\n background-color: #E7EEFF;\r\n }\r\n\r\n .btn:hover {\r\n color: #FFFFFF;\r\n background-color: #2250C8;\r\n border: 1px solid #2250C8;\r\n }\r\n\r\n .btn:active {\r\n color: #FFFFFF;\r\n background-color: #194DA4;\r\n border: 1px solid #194DA4;\r\n }\r\n\r\n .startUsing {\r\n width: 54px;\r\n height: 24px;\r\n margin: 14.5px auto 0;\r\n line-height: 24px;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #00974D;\r\n border-radius: 4px;\r\n background-color: #E7FAF0;\r\n border: 1px solid #BEFDDD;\r\n }\r\n\r\n .Deactivate {\r\n width: 54px;\r\n height: 24px;\r\n margin: 14.5px auto 0;\r\n line-height: 24px;\r\n text-align: center;\r\n font-size: 12px;\r\n color: #FF9933;\r\n border-radius: 4px;\r\n background-color: #FFF3E8;\r\n border: 1px solid #FDE6CF;\r\n }\r\n\r\n .operateBtn {\r\n display: flex;\r\n justify-content: center;\r\n color: #2866DD;\r\n\r\n div {\r\n font-size: 12px;\r\n margin: 0 5px;\r\n cursor: pointer;\r\n }\r\n }\r\n\r\n .pagination {\r\n float: right;\r\n margin: 10px 0;\r\n }\r\n }\r\n }\r\n\r\n .xzmba {\r\n color: #2766DD;\r\n text-decoration: underline;\r\n cursor: pointer;\r\n }\r\n\r\n .hxj {\r\n height: 46px;\r\n line-height: 46px;\r\n text-align: center;\r\n }\r\n\r\n .search_btn {\r\n background-color: #2766DD;\r\n color: #F7F8FB;\r\n font-size: 14px;\r\n }\r\n\r\n .search_btn:hover {\r\n background-color: #4D85F4;\r\n }\r\n\r\n .reset_btn {\r\n color: #565656;\r\n font-size: 14px;\r\n border: 1px solid #D7D7D7;\r\n }\r\n\r\n .reset_btn:hover {\r\n color: #1F9FFF;\r\n border: 1px solid #1F9FFF;\r\n background: none;\r\n }\r\n}\r\n\r\n.dialog-footer {\r\n div {\r\n display: inline-block;\r\n width: 80px;\r\n height: 40px;\r\n border-radius: 2px;\r\n font-size: 14px;\r\n line-height: 40px;\r\n text-align: center;\r\n }\r\n\r\n div:hover {\r\n cursor: pointer;\r\n }\r\n\r\n .search {\r\n margin: 0 12px;\r\n background-color: #2766DD;\r\n color: #fff;\r\n }\r\n\r\n .search:hover {\r\n background-color: #4D85F4;\r\n }\r\n\r\n .reset {\r\n color: #333334;\r\n border: 1px solid #D7D7D7;\r\n }\r\n\r\n .reset:hover {\r\n color: #1F9FFF;\r\n border: 1px solid #1F9FFF;\r\n }\r\n}\r\n</style>\r\n"]}]}