| 1 |
- {"remainingRequest":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/vue-loader/lib/index.js??vue-loader-options!/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/src/views/system/loginlog/index.vue?vue&type=script&lang=js&","dependencies":[{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/src/views/system/loginlog/index.vue","mtime":1618041492000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/babel-loader/lib/index.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/usr/local/develop/php/www/waibao/NN2024071001/NN2024071001/addons/admin/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgWExTWCBmcm9tICd4bHN4Jw0KaW1wb3J0IHsgbWFwR2V0dGVycyB9IGZyb20gInZ1ZXgiOw0KZXhwb3J0IGRlZmF1bHQgew0KICBuYW1lOiAiU3lzTG9naW5SZWNvcmQiLA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICB0YWJsZToge3VybDogJy9sb2dpbmxvZy9pbmRleCcsIHdoZXJlOiB7fX0sICAvLyDooajmoLzphY3nva4NCiAgICAgIGRhdGVyYW5nZTogJycsICAvLyDnrZvpgInml6XmnJ/ojIPlm7QNCiAgICAgIHBpY2tlck9wdGlvbnM6IHsgIC8vIOaXpeacn+aXtumXtOmAieaLqeWZqOW/q+aNt+mhuQ0KICAgICAgICBzaG9ydGN1dHM6IFt7DQogICAgICAgICAgdGV4dDogJ+acgOi/keS4gOWRqCcsDQogICAgICAgICAgb25DbGljayhwaWNrZXIpIHsNCiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICBzdGFydC5zZXRUaW1lKHN0YXJ0LmdldFRpbWUoKSAtIDM2MDAgKiAxMDAwICogMjQgKiA3KTsNCiAgICAgICAgICAgIHBpY2tlci4kZW1pdCgncGljaycsIFtzdGFydCwgZW5kXSk7DQogICAgICAgICAgfQ0KICAgICAgICB9LCB7DQogICAgICAgICAgdGV4dDogJ+acgOi/keS4gOS4quaciCcsDQogICAgICAgICAgb25DbGljayhwaWNrZXIpIHsNCiAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICBzdGFydC5zZXRUaW1lKHN0YXJ0LmdldFRpbWUoKSAtIDM2MDAgKiAxMDAwICogMjQgKiAzMCk7DQogICAgICAgICAgICBwaWNrZXIuJGVtaXQoJ3BpY2snLCBbc3RhcnQsIGVuZF0pOw0KICAgICAgICAgIH0NCiAgICAgICAgfSwgew0KICAgICAgICAgIHRleHQ6ICfmnIDov5HkuInkuKrmnIgnLA0KICAgICAgICAgIG9uQ2xpY2socGlja2VyKSB7DQogICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgc3RhcnQuc2V0VGltZShzdGFydC5nZXRUaW1lKCkgLSAzNjAwICogMTAwMCAqIDI0ICogOTApOw0KICAgICAgICAgICAgcGlja2VyLiRlbWl0KCdwaWNrJywgW3N0YXJ0LCBlbmRdKTsNCiAgICAgICAgICB9DQogICAgICAgIH1dDQogICAgICB9DQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC4uLm1hcEdldHRlcnMoWyJwZXJtaXNzaW9uIl0pLA0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLyog5pel5pyf6YCJ5oup5pS55Y+Y5Zue6LCDICovDQogICAgb25EYXRlUmFuZ2VDaG9vc2UoKSB7DQogICAgICBpZiAodGhpcy5kYXRlcmFuZ2UpIHsNCiAgICAgICAgdGhpcy50YWJsZS53aGVyZS5jcmVhdGVUaW1lU3RhcnQgPSB0aGlzLmRhdGVyYW5nZVswXTsNCiAgICAgICAgdGhpcy50YWJsZS53aGVyZS5jcmVhdGVUaW1lRW5kID0gdGhpcy5kYXRlcmFuZ2VbMV07DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLnRhYmxlLndoZXJlLmNyZWF0ZVRpbWVTdGFydCA9IG51bGw7DQogICAgICAgIHRoaXMudGFibGUud2hlcmUuY3JlYXRlVGltZUVuZCA9IG51bGw7DQogICAgICB9DQogICAgfSwNCiAgICAvKiDlr7zlh7rmlbDmja4gKi8NCiAgICBleHBvcnREYXRhKCkgew0KICAgICAgbGV0IGFycmF5ID0gW1sn5pel5b+X5qCH6aKYJywn55m75b2V6LSm5Y+3JywgJ+ivt+axguaWueW8jycsICfmk43kvZzmqKHlnZcnLCAn5pON5L2c5pa55rOVJywgJ+aTjeS9nFVSTCcsICfor7fmsYLlj4LmlbAnLCAn5pON5L2cSVAnLCAn5pON5L2c57G75Z6LJywgJ+eZu+W9leaXtumXtCddXTsNCiAgICAgIC8vIOivt+axguafpeivouWFqOmDqCjkuI3liIbpobUp55qE5o6l5Y+jDQogICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOw0KICAgICAgdGhpcy4kaHR0cC5nZXQoJy9sb2dpbmxvZy9pbmRleD9wYWdlPTEmbGltaXQ9MjAwMCcpLnRoZW4ocmVzID0+IHsNCiAgICAgICAgbG9hZGluZy5jbG9zZSgpOw0KICAgICAgICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMCkgew0KICAgICAgICAgIHJlcy5kYXRhLmRhdGEuZm9yRWFjaChkID0+IHsNCiAgICAgICAgICAgIGFycmF5LnB1c2goWw0KICAgICAgICAgICAgICBkLnRpdGxlLCBkLnVzZXJuYW1lLCBkLm1ldGhvZCwNCiAgICAgICAgICAgICAgZC5tb2R1bGUsIGQuYWN0aW9uLCBkLnVybCxkLnBhcmFtLGQuaXAsDQogICAgICAgICAgICAgIFsn55m75b2V57O757ufJywgJ+azqOmUgOezu+e7nyddW2QudHlwZV0sDQogICAgICAgICAgICAgIHRoaXMuJHV0aWwudG9EYXRlU3RyaW5nKGQuY3JlYXRlX3RpbWUpDQogICAgICAgICAgICBdKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICBsZXQgc2hlZXQgPSBYTFNYLnV0aWxzLmFvYV90b19zaGVldChhcnJheSk7DQogICAgICAgICAgdGhpcy4kdXRpbC5leHBvcnRTaGVldChYTFNYLCBzaGVldCwgJ+eZu+W9leaXpeW/lycpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLmRhdGEubXNnKTsNCiAgICAgICAgfQ0KICAgICAgfSkuY2F0Y2goZSA9PiB7DQogICAgICAgIGxvYWRpbmcuY2xvc2UoKTsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlLm1lc3NhZ2UpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvKiDliKDpmaQgKi8NCiAgICByZW1vdmUocm93KSB7DQogICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh7bG9jazogdHJ1ZX0pOw0KICAgICAgdGhpcy4kaHR0cC5wb3N0KCcvbG9naW5sb2cvZGVsZXRlJywge2lkOnJvdy5pZH0pLnRoZW4ocmVzID0+IHsNCiAgICAgICAgbG9hZGluZy5jbG9zZSgpOw0KICAgICAgICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMCkgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe3R5cGU6ICdzdWNjZXNzJywgbWVzc2FnZTogcmVzLmRhdGEubXNnfSk7DQogICAgICAgICAgdGhpcy4kcmVmcy50YWJsZS5yZWxvYWQoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhLm1zZyk7DQogICAgICAgIH0NCiAgICAgIH0pLmNhdGNoKGUgPT4gew0KICAgICAgICBsb2FkaW5nLmNsb3NlKCk7DQogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZS5tZXNzYWdlKTsNCiAgICAgIH0pOw0KICAgIH0sDQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA;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;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","file":"index.vue","sourceRoot":"src/views/system/loginlog","sourcesContent":["<template>\r\n <div class=\"ele-body\">\r\n <el-card shadow=\"never\">\r\n <!-- 搜索表单 -->\r\n <el-form :model=\"table.where\" label-width=\"77px\" class=\"ele-form-search\"\r\n @keyup.enter.native=\"$refs.table.reload()\" @submit.native.prevent>\r\n <el-row :gutter=\"15\">\r\n <el-col :md=\"6\" :sm=\"12\">\r\n <el-form-item label=\"用户账号:\">\r\n <el-input v-model=\"table.where.username\" placeholder=\"请输入用户账号\" clearable/>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :md=\"6\" :sm=\"12\">\r\n <div class=\"ele-form-actions\">\r\n <el-button type=\"primary\" @click=\"$refs.table.reload()\" icon=\"el-icon-search\" class=\"ele-btn-icon\">查询\r\n </el-button>\r\n <el-button @click=\"exportData\" icon=\"el-icon-download\" type=\"success\" class=\"ele-btn-icon\" v-if=\"permission.includes('sys:loginlog:export')\">导出日志</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <!-- 数据表格 -->\r\n <ele-data-table ref=\"table\" :config=\"table\" height=\"calc(100vh - 260px)\" highlight-current-row>\r\n <template slot-scope=\"{index}\">\r\n <el-table-column type=\"index\" :index=\"index\" label=\"编号\" width=\"60\" align=\"center\" fixed=\"left\" show-overflow-tooltip/>\r\n <el-table-column prop=\"title\" label=\"日志标题\" align=\"center\" show-overflow-tooltip min-width=\"100\"/>\r\n <el-table-column prop=\"username\" label=\"登录账号\" align=\"center\" show-overflow-tooltip min-width=\"100\"/>\r\n <el-table-column prop=\"method\" label=\"请求方式\" align=\"center\" show-overflow-tooltip min-width=\"100\"/>\r\n <el-table-column prop=\"module\" label=\"操作模块\" align=\"center\" show-overflow-tooltip min-width=\"100\"/>\r\n <el-table-column prop=\"action\" label=\"操作方法\" align=\"center\" show-overflow-tooltip min-width=\"150\"/>\r\n <el-table-column prop=\"url\" label=\"操作URL\" align=\"center\" show-overflow-tooltip min-width=\"200\"/>\r\n <el-table-column prop=\"param\" label=\"请求参数\" align=\"center\" show-overflow-tooltip min-width=\"200\"/>\r\n <el-table-column prop=\"ip\" label=\"操作IP\" align=\"center\" show-overflow-tooltip min-width=\"130\"/>\r\n <el-table-column prop=\"type\" label=\"操作类型\" align=\"center\" min-width=\"110\" show-overflow-tooltip>\r\n <template slot-scope=\"{row}\">\r\n <ele-dot :type=\"['', 'success', 'warning'][row.type-1]\" :ripple=\"row.type===0\"\r\n :text=\"['登录系统','注销系统', '操作日志'][row.type-1]\"/>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"create_time\" label=\"操作时间\" align=\"center\" min-width=\"160\" show-overflow-tooltip>\r\n <template slot-scope=\"{row}\">{{ row.create_time | toDateString }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"100px\" align=\"center\" :resizable=\"false\" fixed=\"right\">\r\n <template slot-scope=\"{row}\">\r\n <el-popconfirm title=\"确定要删除此登录日志吗?\" @confirm=\"remove(row)\" class=\"ele-action\">\r\n <el-link slot=\"reference\" icon=\"el-icon-delete\" type=\"danger\" :underline=\"false\" v-if=\"permission.includes('sys:loginlog:delete')\">删除</el-link>\r\n </el-popconfirm>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n </ele-data-table>\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport XLSX from 'xlsx'\r\nimport { mapGetters } from \"vuex\";\r\nexport default {\r\n name: \"SysLoginRecord\",\r\n data() {\r\n return {\r\n table: {url: '/loginlog/index', where: {}}, // 表格配置\r\n daterange: '', // 筛选日期范围\r\n pickerOptions: { // 日期时间选择器快捷项\r\n shortcuts: [{\r\n text: '最近一周',\r\n onClick(picker) {\r\n const end = new Date();\r\n const start = new Date();\r\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);\r\n picker.$emit('pick', [start, end]);\r\n }\r\n }, {\r\n text: '最近一个月',\r\n onClick(picker) {\r\n const end = new Date();\r\n const start = new Date();\r\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);\r\n picker.$emit('pick', [start, end]);\r\n }\r\n }, {\r\n text: '最近三个月',\r\n onClick(picker) {\r\n const end = new Date();\r\n const start = new Date();\r\n start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);\r\n picker.$emit('pick', [start, end]);\r\n }\r\n }]\r\n }\r\n }\r\n },\r\n computed: {\r\n ...mapGetters([\"permission\"]),\r\n },\r\n methods: {\r\n /* 日期选择改变回调 */\r\n onDateRangeChoose() {\r\n if (this.daterange) {\r\n this.table.where.createTimeStart = this.daterange[0];\r\n this.table.where.createTimeEnd = this.daterange[1];\r\n } else {\r\n this.table.where.createTimeStart = null;\r\n this.table.where.createTimeEnd = null;\r\n }\r\n },\r\n /* 导出数据 */\r\n exportData() {\r\n let array = [['日志标题','登录账号', '请求方式', '操作模块', '操作方法', '操作URL', '请求参数', '操作IP', '操作类型', '登录时间']];\r\n // 请求查询全部(不分页)的接口\r\n const loading = this.$loading({lock: true});\r\n this.$http.get('/loginlog/index?page=1&limit=2000').then(res => {\r\n loading.close();\r\n if (res.data.code === 0) {\r\n res.data.data.forEach(d => {\r\n array.push([\r\n d.title, d.username, d.method,\r\n d.module, d.action, d.url,d.param,d.ip,\r\n ['登录系统', '注销系统'][d.type],\r\n this.$util.toDateString(d.create_time)\r\n ]);\r\n });\r\n let sheet = XLSX.utils.aoa_to_sheet(array);\r\n this.$util.exportSheet(XLSX, sheet, '登录日志');\r\n } else {\r\n this.$message.error(res.data.msg);\r\n }\r\n }).catch(e => {\r\n loading.close();\r\n this.$message.error(e.message);\r\n });\r\n },\r\n /* 删除 */\r\n remove(row) {\r\n const loading = this.$loading({lock: true});\r\n this.$http.post('/loginlog/delete', {id:row.id}).then(res => {\r\n loading.close();\r\n if (res.data.code === 0) {\r\n this.$message({type: 'success', message: res.data.msg});\r\n this.$refs.table.reload();\r\n } else {\r\n this.$message.error(res.data.msg);\r\n }\r\n }).catch(e => {\r\n loading.close();\r\n this.$message.error(e.message);\r\n });\r\n },\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>"]}]}
|