You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
16 KiB
1 lines
16 KiB
{"remainingRequest":"F:\\money\\system\\springboot\\vue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!F:\\money\\system\\springboot\\vue\\src\\views\\Role.vue?vue&type=script&lang=js","dependencies":[{"path":"F:\\money\\system\\springboot\\vue\\src\\views\\Role.vue","mtime":1645626474017},{"path":"F:\\money\\system\\springboot\\vue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1713785856543},{"path":"F:\\money\\system\\springboot\\vue\\node_modules\\babel-loader\\lib\\index.js","mtime":1713785857863},{"path":"F:\\money\\system\\springboot\\vue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1713785856543},{"path":"F:\\money\\system\\springboot\\vue\\node_modules\\vue-loader\\lib\\index.js","mtime":1713785858382}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJSb2xlIiwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgdGFibGVEYXRhOiBbXSwNCiAgICAgIHRvdGFsOiAwLA0KICAgICAgcGFnZU51bTogMSwNCiAgICAgIHBhZ2VTaXplOiAxMCwNCiAgICAgIG5hbWU6ICIiLA0KICAgICAgZm9ybToge30sDQogICAgICBkaWFsb2dGb3JtVmlzaWJsZTogZmFsc2UsDQogICAgICBtZW51RGlhbG9nVmlzOiBmYWxzZSwNCiAgICAgIG11bHRpcGxlU2VsZWN0aW9uOiBbXSwNCiAgICAgIG1lbnVEYXRhOiBbXSwNCiAgICAgIHByb3BzOiB7DQogICAgICAgIGxhYmVsOiAnbmFtZScsDQogICAgICB9LA0KICAgICAgZXhwZW5kczogW10sDQogICAgICBjaGVja3M6IFtdLA0KICAgICAgcm9sZUlkOiAwLA0KICAgICAgcm9sZUZsYWc6ICcnLA0KICAgICAgaWRzOiBbXQ0KICAgIH0NCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICB0aGlzLmxvYWQoKQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgbG9hZCgpIHsNCiAgICAgIHRoaXMucmVxdWVzdC5nZXQoIi9yb2xlL3BhZ2UiLCB7DQogICAgICAgIHBhcmFtczogew0KICAgICAgICAgIHBhZ2VOdW06IHRoaXMucGFnZU51bSwNCiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwNCiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsDQogICAgICAgIH0NCiAgICAgIH0pLnRoZW4ocmVzID0+IHsNCiAgICAgICAgdGhpcy50YWJsZURhdGEgPSByZXMuZGF0YS5yZWNvcmRzDQogICAgICAgIHRoaXMudG90YWwgPSByZXMuZGF0YS50b3RhbA0KICAgICAgfSkNCg0KICAgICAgdGhpcy5yZXF1ZXN0LmdldCgiL21lbnUvaWRzIikudGhlbihyID0+IHsNCiAgICAgICAgdGhpcy5pZHMgPSByLmRhdGENCiAgICAgIH0pDQoNCiAgICB9LA0KICAgIHNhdmUoKSB7DQogICAgICB0aGlzLnJlcXVlc3QucG9zdCgiL3JvbGUiLCB0aGlzLmZvcm0pLnRoZW4ocmVzID0+IHsNCiAgICAgICAgaWYgKHJlcy5jb2RlID09PSAnMjAwJykgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygi5L+d5a2Y5oiQ5YqfIikNCiAgICAgICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gZmFsc2UNCiAgICAgICAgICB0aGlzLmxvYWQoKQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoIuS/neWtmOWksei0pSIpDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfSwNCiAgICBzYXZlUm9sZU1lbnUoKSB7DQogICAgICB0aGlzLnJlcXVlc3QucG9zdCgiL3JvbGUvcm9sZU1lbnUvIiArIHRoaXMucm9sZUlkLCB0aGlzLiRyZWZzLnRyZWUuZ2V0Q2hlY2tlZEtleXMoKSkudGhlbihyZXMgPT4gew0KICAgICAgICBpZiAocmVzLmNvZGUgPT09ICcyMDAnKSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCLnu5HlrprmiJDlip8iKQ0KICAgICAgICAgIHRoaXMubWVudURpYWxvZ1ZpcyA9IGZhbHNlDQoNCiAgICAgICAgICAvLyDmk43kvZznrqHnkIblkZjop5LoibLlkI7pnIDopoHph43mlrDnmbvlvZUNCiAgICAgICAgICBpZiAodGhpcy5yb2xlRmxhZyA9PT0gJ1JPTEVfQURNSU4nKSB7DQogICAgICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoImxvZ291dCIpDQogICAgICAgICAgfQ0KDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0sDQogICAgaGFuZGxlQWRkKCkgew0KICAgICAgdGhpcy5kaWFsb2dGb3JtVmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMuZm9ybSA9IHt9DQogICAgfSwNCiAgICBoYW5kbGVFZGl0KHJvdykgew0KICAgICAgdGhpcy5mb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3cpKQ0KICAgICAgdGhpcy5kaWFsb2dGb3JtVmlzaWJsZSA9IHRydWUNCiAgICB9LA0KICAgIGRlbChpZCkgew0KICAgICAgdGhpcy5yZXF1ZXN0LmRlbGV0ZSgiL3JvbGUvIiArIGlkKS50aGVuKHJlcyA9PiB7DQogICAgICAgIGlmIChyZXMuY29kZSA9PT0gJzIwMCcpIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoIuWIoOmZpOaIkOWKnyIpDQogICAgICAgICAgdGhpcy5sb2FkKCkNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCLliKDpmaTlpLHotKUiKQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0sDQogICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHZhbCkgew0KICAgICAgY29uc29sZS5sb2codmFsKQ0KICAgICAgdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA9IHZhbA0KICAgIH0sDQogICAgZGVsQmF0Y2goKSB7DQogICAgICBsZXQgaWRzID0gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbi5tYXAodiA9PiB2LmlkKSAgLy8gW3t9LCB7fSwge31dID0+IFsxLDIsM10NCiAgICAgIHRoaXMucmVxdWVzdC5wb3N0KCIvcm9sZS9kZWwvYmF0Y2giLCBpZHMpLnRoZW4ocmVzID0+IHsNCiAgICAgICAgaWYgKHJlcy5jb2RlID09PSAnMjAwJykgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygi5om56YeP5Yig6Zmk5oiQ5YqfIikNCiAgICAgICAgICB0aGlzLmxvYWQoKQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoIuaJuemHj+WIoOmZpOWksei0pSIpDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfSwNCiAgICByZXNldCgpIHsNCiAgICAgIHRoaXMubmFtZSA9ICIiDQogICAgICB0aGlzLmxvYWQoKQ0KICAgIH0sDQogICAgaGFuZGxlU2l6ZUNoYW5nZShwYWdlU2l6ZSkgew0KICAgICAgY29uc29sZS5sb2cocGFnZVNpemUpDQogICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemUNCiAgICAgIHRoaXMubG9hZCgpDQogICAgfSwNCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlKHBhZ2VOdW0pIHsNCiAgICAgIGNvbnNvbGUubG9nKHBhZ2VOdW0pDQogICAgICB0aGlzLnBhZ2VOdW0gPSBwYWdlTnVtDQogICAgICB0aGlzLmxvYWQoKQ0KICAgIH0sDQogICAgYXN5bmMgc2VsZWN0TWVudShyb2xlKSB7DQogICAgICB0aGlzLnJvbGVJZCA9IHJvbGUuaWQNCiAgICAgIHRoaXMucm9sZUZsYWcgPSByb2xlLmZsYWcNCg0KICAgICAgLy8g6K+35rGC6I+c5Y2V5pWw5o2uDQogICAgICB0aGlzLnJlcXVlc3QuZ2V0KCIvbWVudSIpLnRoZW4ocmVzID0+IHsNCiAgICAgICAgdGhpcy5tZW51RGF0YSA9IHJlcy5kYXRhDQoNCiAgICAgICAgLy8g5oqK5ZCO5Y+w6L+U5Zue55qE6I+c5Y2V5pWw5o2u5aSE55CG5oiQIGlk5pWw57uEDQogICAgICAgIHRoaXMuZXhwZW5kcyA9IHRoaXMubWVudURhdGEubWFwKHYgPT4gdi5pZCkNCiAgICAgIH0pDQoNCiAgICAgIHRoaXMubWVudURpYWxvZ1ZpcyA9IHRydWUNCiAgICAgIHRoaXMucmVxdWVzdC5nZXQoIi9yb2xlL3JvbGVNZW51LyIgKyB0aGlzLnJvbGVJZCkudGhlbihyZXMgPT4gew0KICAgICAgICB0aGlzLmNoZWNrcyA9IHJlcy5kYXRhDQogICAgICAgIHRoaXMuJHJlZnMudHJlZS5zZXRDaGVja2VkS2V5cyhyZXMuZGF0YSkNCiAgICAgICAgdGhpcy5pZHMuZm9yRWFjaChpZCA9PiB7DQogICAgICAgICAgaWYgKCF0aGlzLmNoZWNrcy5pbmNsdWRlcyhpZCkpIHsNCiAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZS5zZXRDaGVja2VkKGlkLCBmYWxzZSkNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgICB9KQ0KICAgIH0sDQogIH0NCn0NCg=="},{"version":3,"sources":["Role.vue"],"names":[],"mappings":";AAyGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"Role.vue","sourceRoot":"src/views","sourcesContent":["<template>\r\n <div>\r\n <div style=\"margin: 10px 0\">\r\n <el-input style=\"width: 200px\" placeholder=\"请输入名称\" suffix-icon=\"el-icon-search\" v-model=\"name\"></el-input>\r\n<!-- <el-input style=\"width: 200px\" placeholder=\"请输入邮箱\" suffix-icon=\"el-icon-message\" class=\"ml-5\" v-model=\"email\"></el-input>-->\r\n<!-- <el-input style=\"width: 200px\" placeholder=\"请输入地址\" suffix-icon=\"el-icon-position\" class=\"ml-5\" v-model=\"address\"></el-input>-->\r\n <el-button class=\"ml-5\" type=\"primary\" @click=\"load\">搜索</el-button>\r\n <el-button type=\"warning\" @click=\"reset\">重置</el-button>\r\n </div>\r\n\r\n <div style=\"margin: 10px 0\">\r\n <el-button type=\"primary\" @click=\"handleAdd\">新增 <i class=\"el-icon-circle-plus-outline\"></i></el-button>\r\n <el-popconfirm\r\n class=\"ml-5\"\r\n confirm-button-text='确定'\r\n cancel-button-text='我再想想'\r\n icon=\"el-icon-info\"\r\n icon-color=\"red\"\r\n title=\"您确定批量删除这些数据吗?\"\r\n @confirm=\"delBatch\"\r\n >\r\n <el-button type=\"danger\" slot=\"reference\">批量删除 <i class=\"el-icon-remove-outline\"></i></el-button>\r\n </el-popconfirm>\r\n<!-- <el-upload action=\"http://localhost:9090/user/import\" :show-file-list=\"false\" accept=\"xlsx\" :on-success=\"handleExcelImportSuccess\" style=\"display: inline-block\">-->\r\n<!-- <el-button type=\"primary\" class=\"ml-5\">导入 <i class=\"el-icon-bottom\"></i></el-button>-->\r\n<!-- </el-upload>-->\r\n<!-- <el-button type=\"primary\" @click=\"exp\" class=\"ml-5\">导出 <i class=\"el-icon-top\"></i></el-button>-->\r\n </div>\r\n\r\n <el-table :data=\"tableData\" border stripe :header-cell-class-name=\"'headerBg'\" @selection-change=\"handleSelectionChange\">\r\n <el-table-column type=\"selection\" width=\"55\"></el-table-column>\r\n <el-table-column prop=\"id\" label=\"ID\" width=\"80\"></el-table-column>\r\n <el-table-column prop=\"name\" label=\"名称\"></el-table-column>\r\n <el-table-column prop=\"flag\" label=\"唯一标识\"></el-table-column>\r\n <el-table-column prop=\"description\" label=\"描述\"></el-table-column>\r\n <el-table-column label=\"操作\" width=\"280\" align=\"center\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"info\" @click=\"selectMenu(scope.row)\">分配菜单 <i class=\"el-icon-menu\"></i></el-button>\r\n <el-button type=\"success\" @click=\"handleEdit(scope.row)\">编辑 <i class=\"el-icon-edit\"></i></el-button>\r\n <el-popconfirm\r\n class=\"ml-5\"\r\n confirm-button-text='确定'\r\n cancel-button-text='我再想想'\r\n icon=\"el-icon-info\"\r\n icon-color=\"red\"\r\n title=\"您确定删除吗?\"\r\n @confirm=\"del(scope.row.id)\"\r\n >\r\n <el-button type=\"danger\" slot=\"reference\">删除 <i class=\"el-icon-remove-outline\"></i></el-button>\r\n </el-popconfirm>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div style=\"padding: 10px 0\">\r\n <el-pagination\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :current-page=\"pageNum\"\r\n :page-sizes=\"[2, 5, 10, 20]\"\r\n :page-size=\"pageSize\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"total\">\r\n </el-pagination>\r\n </div>\r\n\r\n <el-dialog title=\"角色信息\" :visible.sync=\"dialogFormVisible\" width=\"30%\" >\r\n <el-form label-width=\"80px\" size=\"small\">\r\n <el-form-item label=\"名称\">\r\n <el-input v-model=\"form.name\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"唯一标识\">\r\n <el-input v-model=\"form.flag\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"描述\">\r\n <el-input v-model=\"form.description\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"dialogFormVisible = false\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"save\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <el-dialog title=\"菜单分配\" :visible.sync=\"menuDialogVis\" width=\"30%\">\r\n <el-tree\r\n :props=\"props\"\r\n :data=\"menuData\"\r\n show-checkbox\r\n node-key=\"id\"\r\n ref=\"tree\"\r\n :default-expanded-keys=\"expends\"\r\n :default-checked-keys=\"checks\">\r\n <span class=\"custom-tree-node\" slot-scope=\"{ node, data }\">\r\n <span><i :class=\"data.icon\"></i> {{ data.name }}</span>\r\n </span>\r\n </el-tree>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"menuDialogVis = false\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"saveRoleMenu\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"Role\",\r\n data() {\r\n return {\r\n tableData: [],\r\n total: 0,\r\n pageNum: 1,\r\n pageSize: 10,\r\n name: \"\",\r\n form: {},\r\n dialogFormVisible: false,\r\n menuDialogVis: false,\r\n multipleSelection: [],\r\n menuData: [],\r\n props: {\r\n label: 'name',\r\n },\r\n expends: [],\r\n checks: [],\r\n roleId: 0,\r\n roleFlag: '',\r\n ids: []\r\n }\r\n },\r\n created() {\r\n this.load()\r\n },\r\n methods: {\r\n load() {\r\n this.request.get(\"/role/page\", {\r\n params: {\r\n pageNum: this.pageNum,\r\n pageSize: this.pageSize,\r\n name: this.name,\r\n }\r\n }).then(res => {\r\n this.tableData = res.data.records\r\n this.total = res.data.total\r\n })\r\n\r\n this.request.get(\"/menu/ids\").then(r => {\r\n this.ids = r.data\r\n })\r\n\r\n },\r\n save() {\r\n this.request.post(\"/role\", this.form).then(res => {\r\n if (res.code === '200') {\r\n this.$message.success(\"保存成功\")\r\n this.dialogFormVisible = false\r\n this.load()\r\n } else {\r\n this.$message.error(\"保存失败\")\r\n }\r\n })\r\n },\r\n saveRoleMenu() {\r\n this.request.post(\"/role/roleMenu/\" + this.roleId, this.$refs.tree.getCheckedKeys()).then(res => {\r\n if (res.code === '200') {\r\n this.$message.success(\"绑定成功\")\r\n this.menuDialogVis = false\r\n\r\n // 操作管理员角色后需要重新登录\r\n if (this.roleFlag === 'ROLE_ADMIN') {\r\n this.$store.commit(\"logout\")\r\n }\r\n\r\n } else {\r\n this.$message.error(res.msg)\r\n }\r\n })\r\n },\r\n handleAdd() {\r\n this.dialogFormVisible = true\r\n this.form = {}\r\n },\r\n handleEdit(row) {\r\n this.form = JSON.parse(JSON.stringify(row))\r\n this.dialogFormVisible = true\r\n },\r\n del(id) {\r\n this.request.delete(\"/role/\" + id).then(res => {\r\n if (res.code === '200') {\r\n this.$message.success(\"删除成功\")\r\n this.load()\r\n } else {\r\n this.$message.error(\"删除失败\")\r\n }\r\n })\r\n },\r\n handleSelectionChange(val) {\r\n console.log(val)\r\n this.multipleSelection = val\r\n },\r\n delBatch() {\r\n let ids = this.multipleSelection.map(v => v.id) // [{}, {}, {}] => [1,2,3]\r\n this.request.post(\"/role/del/batch\", ids).then(res => {\r\n if (res.code === '200') {\r\n this.$message.success(\"批量删除成功\")\r\n this.load()\r\n } else {\r\n this.$message.error(\"批量删除失败\")\r\n }\r\n })\r\n },\r\n reset() {\r\n this.name = \"\"\r\n this.load()\r\n },\r\n handleSizeChange(pageSize) {\r\n console.log(pageSize)\r\n this.pageSize = pageSize\r\n this.load()\r\n },\r\n handleCurrentChange(pageNum) {\r\n console.log(pageNum)\r\n this.pageNum = pageNum\r\n this.load()\r\n },\r\n async selectMenu(role) {\r\n this.roleId = role.id\r\n this.roleFlag = role.flag\r\n\r\n // 请求菜单数据\r\n this.request.get(\"/menu\").then(res => {\r\n this.menuData = res.data\r\n\r\n // 把后台返回的菜单数据处理成 id数组\r\n this.expends = this.menuData.map(v => v.id)\r\n })\r\n\r\n this.menuDialogVis = true\r\n this.request.get(\"/role/roleMenu/\" + this.roleId).then(res => {\r\n this.checks = res.data\r\n this.$refs.tree.setCheckedKeys(res.data)\r\n this.ids.forEach(id => {\r\n if (!this.checks.includes(id)) {\r\n this.$refs.tree.setChecked(id, false)\r\n }\r\n })\r\n })\r\n },\r\n }\r\n}\r\n</script>\r\n\r\n\r\n<style>\r\n.headerBg {\r\n background: #eee!important;\r\n}\r\n</style>\r\n"]}]} |