mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	
							parent
							
								
									0b9fcaca4a
								
							
						
					
					
						commit
						e6302b0f38
					
				@ -7,10 +7,14 @@
 | 
				
			|||||||
    "prettier --cache --write--parser json"
 | 
					    "prettier --cache --write--parser json"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "package.json": ["prettier --cache --write"],
 | 
					  "package.json": ["prettier --cache --write"],
 | 
				
			||||||
  "*.vue": ["prettier --write", "eslint --cache --fix", "stylelint --fix"],
 | 
					  "*.vue": [
 | 
				
			||||||
 | 
					    "prettier --write",
 | 
				
			||||||
 | 
					    "eslint --cache --fix",
 | 
				
			||||||
 | 
					    "stylelint --fix --allow-empty-input"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
  "*.{css,scss,html}": [
 | 
					  "*.{css,scss,html}": [
 | 
				
			||||||
    "prettier --cache --ignore-unknown --write",
 | 
					    "prettier --cache --ignore-unknown --write",
 | 
				
			||||||
    "stylelint --fix"
 | 
					    "stylelint --fix --allow-empty-input"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "*.md": ["prettier --cache --ignore-unknown --write"]
 | 
					  "*.md": ["prettier --cache --ignore-unknown --write"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										217
									
								
								mock/system.ts
									
									
									
									
									
								
							
							
						
						
									
										217
									
								
								mock/system.ts
									
									
									
									
									
								
							@ -74,7 +74,7 @@ export default defineFakeRoute([
 | 
				
			|||||||
      };
 | 
					      };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  // 用户管理-根据userId,获取对应角色id列表(userId:用户id)
 | 
					  // 用户管理-根据 userId 获取对应角色 id 列表(userId:用户id)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    url: "/list-role-ids",
 | 
					    url: "/list-role-ids",
 | 
				
			||||||
    method: "post",
 | 
					    method: "post",
 | 
				
			||||||
@ -1196,5 +1196,220 @@ export default defineFakeRoute([
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  // 系统日志-根据 id 查日志详情
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    url: "/system-logs-detail",
 | 
				
			||||||
 | 
					    method: "post",
 | 
				
			||||||
 | 
					    response: ({ body }) => {
 | 
				
			||||||
 | 
					      if (body.id == 1) {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          id: 1,
 | 
				
			||||||
 | 
					          level: 1,
 | 
				
			||||||
 | 
					          module: "菜单管理",
 | 
				
			||||||
 | 
					          url: "/menu",
 | 
				
			||||||
 | 
					          method: "post",
 | 
				
			||||||
 | 
					          ip: faker.internet.ipv4(),
 | 
				
			||||||
 | 
					          address: "中国河南省信阳市",
 | 
				
			||||||
 | 
					          system: "macOS",
 | 
				
			||||||
 | 
					          browser: "Chrome",
 | 
				
			||||||
 | 
					          takesTime: 10,
 | 
				
			||||||
 | 
					          responseHeaders: {
 | 
				
			||||||
 | 
					            traceId: "1495502411171032",
 | 
				
			||||||
 | 
					            "Content-Type": "application/json",
 | 
				
			||||||
 | 
					            Connection: "keep-alive",
 | 
				
			||||||
 | 
					            "Keep-Alive": "timeout=5",
 | 
				
			||||||
 | 
					            "Content-Length": 17019
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          responseBody: {
 | 
				
			||||||
 | 
					            success: true,
 | 
				
			||||||
 | 
					            data: [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                parentId: 0,
 | 
				
			||||||
 | 
					                id: 400,
 | 
				
			||||||
 | 
					                menuType: 0,
 | 
				
			||||||
 | 
					                title: "menus.hssysMonitor",
 | 
				
			||||||
 | 
					                name: "PureMonitor",
 | 
				
			||||||
 | 
					                path: "/monitor",
 | 
				
			||||||
 | 
					                component: "",
 | 
				
			||||||
 | 
					                rank: 11,
 | 
				
			||||||
 | 
					                redirect: "",
 | 
				
			||||||
 | 
					                icon: "ep:monitor",
 | 
				
			||||||
 | 
					                extraIcon: "",
 | 
				
			||||||
 | 
					                enterTransition: "",
 | 
				
			||||||
 | 
					                leaveTransition: "",
 | 
				
			||||||
 | 
					                activePath: "",
 | 
				
			||||||
 | 
					                auths: "",
 | 
				
			||||||
 | 
					                frameSrc: "",
 | 
				
			||||||
 | 
					                frameLoading: true,
 | 
				
			||||||
 | 
					                keepAlive: false,
 | 
				
			||||||
 | 
					                hiddenTag: false,
 | 
				
			||||||
 | 
					                showLink: true,
 | 
				
			||||||
 | 
					                showParent: false
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                parentId: 400,
 | 
				
			||||||
 | 
					                id: 401,
 | 
				
			||||||
 | 
					                menuType: 0,
 | 
				
			||||||
 | 
					                title: "menus.hsOnlineUser",
 | 
				
			||||||
 | 
					                name: "OnlineUser",
 | 
				
			||||||
 | 
					                path: "/monitor/online-user",
 | 
				
			||||||
 | 
					                component: "monitor/online/index",
 | 
				
			||||||
 | 
					                rank: null,
 | 
				
			||||||
 | 
					                redirect: "",
 | 
				
			||||||
 | 
					                icon: "ri:user-voice-line",
 | 
				
			||||||
 | 
					                extraIcon: "",
 | 
				
			||||||
 | 
					                enterTransition: "",
 | 
				
			||||||
 | 
					                leaveTransition: "",
 | 
				
			||||||
 | 
					                activePath: "",
 | 
				
			||||||
 | 
					                auths: "",
 | 
				
			||||||
 | 
					                frameSrc: "",
 | 
				
			||||||
 | 
					                frameLoading: true,
 | 
				
			||||||
 | 
					                keepAlive: false,
 | 
				
			||||||
 | 
					                hiddenTag: false,
 | 
				
			||||||
 | 
					                showLink: true,
 | 
				
			||||||
 | 
					                showParent: false
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                parentId: 400,
 | 
				
			||||||
 | 
					                id: 402,
 | 
				
			||||||
 | 
					                menuType: 0,
 | 
				
			||||||
 | 
					                title: "menus.hsLoginLog",
 | 
				
			||||||
 | 
					                name: "LoginLog",
 | 
				
			||||||
 | 
					                path: "/monitor/login-logs",
 | 
				
			||||||
 | 
					                component: "monitor/logs/login/index",
 | 
				
			||||||
 | 
					                rank: null,
 | 
				
			||||||
 | 
					                redirect: "",
 | 
				
			||||||
 | 
					                icon: "ri:window-line",
 | 
				
			||||||
 | 
					                extraIcon: "",
 | 
				
			||||||
 | 
					                enterTransition: "",
 | 
				
			||||||
 | 
					                leaveTransition: "",
 | 
				
			||||||
 | 
					                activePath: "",
 | 
				
			||||||
 | 
					                auths: "",
 | 
				
			||||||
 | 
					                frameSrc: "",
 | 
				
			||||||
 | 
					                frameLoading: true,
 | 
				
			||||||
 | 
					                keepAlive: false,
 | 
				
			||||||
 | 
					                hiddenTag: false,
 | 
				
			||||||
 | 
					                showLink: true,
 | 
				
			||||||
 | 
					                showParent: false
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                parentId: 400,
 | 
				
			||||||
 | 
					                id: 403,
 | 
				
			||||||
 | 
					                menuType: 0,
 | 
				
			||||||
 | 
					                title: "menus.hsOperationLog",
 | 
				
			||||||
 | 
					                name: "OperationLog",
 | 
				
			||||||
 | 
					                path: "/monitor/operation-logs",
 | 
				
			||||||
 | 
					                component: "monitor/logs/operation/index",
 | 
				
			||||||
 | 
					                rank: null,
 | 
				
			||||||
 | 
					                redirect: "",
 | 
				
			||||||
 | 
					                icon: "ri:history-fill",
 | 
				
			||||||
 | 
					                extraIcon: "",
 | 
				
			||||||
 | 
					                enterTransition: "",
 | 
				
			||||||
 | 
					                leaveTransition: "",
 | 
				
			||||||
 | 
					                activePath: "",
 | 
				
			||||||
 | 
					                auths: "",
 | 
				
			||||||
 | 
					                frameSrc: "",
 | 
				
			||||||
 | 
					                frameLoading: true,
 | 
				
			||||||
 | 
					                keepAlive: false,
 | 
				
			||||||
 | 
					                hiddenTag: false,
 | 
				
			||||||
 | 
					                showLink: true,
 | 
				
			||||||
 | 
					                showParent: false
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                parentId: 400,
 | 
				
			||||||
 | 
					                id: 404,
 | 
				
			||||||
 | 
					                menuType: 0,
 | 
				
			||||||
 | 
					                title: "menus.hsSystemLog",
 | 
				
			||||||
 | 
					                name: "SystemLog",
 | 
				
			||||||
 | 
					                path: "/monitor/system-logs",
 | 
				
			||||||
 | 
					                component: "monitor/logs/system/index",
 | 
				
			||||||
 | 
					                rank: null,
 | 
				
			||||||
 | 
					                redirect: "",
 | 
				
			||||||
 | 
					                icon: "ri:file-search-line",
 | 
				
			||||||
 | 
					                extraIcon: "",
 | 
				
			||||||
 | 
					                enterTransition: "",
 | 
				
			||||||
 | 
					                leaveTransition: "",
 | 
				
			||||||
 | 
					                activePath: "",
 | 
				
			||||||
 | 
					                auths: "",
 | 
				
			||||||
 | 
					                frameSrc: "",
 | 
				
			||||||
 | 
					                frameLoading: true,
 | 
				
			||||||
 | 
					                keepAlive: false,
 | 
				
			||||||
 | 
					                hiddenTag: false,
 | 
				
			||||||
 | 
					                showLink: true,
 | 
				
			||||||
 | 
					                showParent: false
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          requestHeaders: {
 | 
				
			||||||
 | 
					            Accept: "application/json, text/plain, */*",
 | 
				
			||||||
 | 
					            "Accept-Encoding": "gzip, deflate",
 | 
				
			||||||
 | 
					            "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,eo;q=0.7",
 | 
				
			||||||
 | 
					            Authorization: "Bearer eyJhbGciOiJIUzUxMiJ9.admin",
 | 
				
			||||||
 | 
					            Connection: "keep-alive",
 | 
				
			||||||
 | 
					            "Content-Length": 0,
 | 
				
			||||||
 | 
					            Cookie:
 | 
				
			||||||
 | 
					              "_ga=GA1.1.231800979.1704562367; _ga_M74ZHEQ1M1=GS1.1.1709299375.7.1.1709299476.0.0.0; Hm_lvt_6a7dac00248d3b6ad8479d7249bb29c5=1709032753,1709359575; Hm_lvt_23a157b7d0d9867f7a51e42628f052f5=1708960489,1709485849,1709879672; authorized-token={%22accessToken%22:%22eyJhbGciOiJIUzUxMiJ9.admin%22%2C%22expires%22:1919520000000}; multiple-tabs=true",
 | 
				
			||||||
 | 
					            Host: "192.168.2.121:8848",
 | 
				
			||||||
 | 
					            Origin: "http://192.168.2.121:8848",
 | 
				
			||||||
 | 
					            Referer: "http://192.168.2.121:8848/",
 | 
				
			||||||
 | 
					            "User-Agent":
 | 
				
			||||||
 | 
					              "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
 | 
				
			||||||
 | 
					            "X-Requested-With": "XMLHttpRequest"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          requestBody: {
 | 
				
			||||||
 | 
					            title: "系统监控"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          traceId: "1495502411171032",
 | 
				
			||||||
 | 
					          requestTime: new Date()
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      } else if (body.id == 2) {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          id: 2,
 | 
				
			||||||
 | 
					          level: 0,
 | 
				
			||||||
 | 
					          module: "地图",
 | 
				
			||||||
 | 
					          url: "/get-map-info?plateNumber=豫A59778U",
 | 
				
			||||||
 | 
					          method: "get",
 | 
				
			||||||
 | 
					          ip: faker.internet.ipv4(),
 | 
				
			||||||
 | 
					          address: "中国广东省深圳市",
 | 
				
			||||||
 | 
					          system: "Windows",
 | 
				
			||||||
 | 
					          browser: "Firefox",
 | 
				
			||||||
 | 
					          takesTime: 1200,
 | 
				
			||||||
 | 
					          responseHeaders: {
 | 
				
			||||||
 | 
					            traceId: "2280443117103208",
 | 
				
			||||||
 | 
					            "Content-Type": "application/json",
 | 
				
			||||||
 | 
					            Connection: "keep-alive",
 | 
				
			||||||
 | 
					            "Keep-Alive": "timeout=5",
 | 
				
			||||||
 | 
					            "Content-Length": 28693
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          responseBody: {
 | 
				
			||||||
 | 
					            plateNumber: "豫A59778U",
 | 
				
			||||||
 | 
					            driver: "子骞",
 | 
				
			||||||
 | 
					            orientation: 289,
 | 
				
			||||||
 | 
					            lng: 113.8564,
 | 
				
			||||||
 | 
					            lat: 34.373
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          requestHeaders: {
 | 
				
			||||||
 | 
					            Accept: "application/json, text/plain, */*",
 | 
				
			||||||
 | 
					            "Accept-Encoding": "gzip, deflate",
 | 
				
			||||||
 | 
					            "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,eo;q=0.7",
 | 
				
			||||||
 | 
					            Authorization: "Bearer eyJhbGciOiJIUzUxMiJ9.admin",
 | 
				
			||||||
 | 
					            Connection: "keep-alive",
 | 
				
			||||||
 | 
					            "Content-Length": 0,
 | 
				
			||||||
 | 
					            Cookie:
 | 
				
			||||||
 | 
					              "_ga=GA1.1.231800979.1704562367; _ga_M74ZHEQ1M1=GS1.1.1709299375.7.1.1709299476.0.0.0; Hm_lvt_6a7dac00248d3b6ad8479d7249bb29c5=1709032753,1709359575; Hm_lvt_23a157b7d0d9867f7a51e42628f052f5=1708960489,1709485849,1709879672; authorized-token={%22accessToken%22:%22eyJhbGciOiJIUzUxMiJ9.admin%22%2C%22expires%22:1919520000000}; multiple-tabs=true",
 | 
				
			||||||
 | 
					            Host: "192.168.2.121:8848",
 | 
				
			||||||
 | 
					            Origin: "http://192.168.2.121:8848",
 | 
				
			||||||
 | 
					            Referer: "http://192.168.2.121:8848/",
 | 
				
			||||||
 | 
					            "User-Agent":
 | 
				
			||||||
 | 
					              "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
 | 
				
			||||||
 | 
					            "X-Requested-With": "XMLHttpRequest"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          requestBody: null,
 | 
				
			||||||
 | 
					          traceId: "2280443117103208",
 | 
				
			||||||
 | 
					          requestTime: new Date()
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
]);
 | 
					]);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										14
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								package.json
									
									
									
									
									
								
							@ -52,7 +52,7 @@
 | 
				
			|||||||
    "@howdyjs/mouse-menu": "^2.1.3",
 | 
					    "@howdyjs/mouse-menu": "^2.1.3",
 | 
				
			||||||
    "@logicflow/core": "^1.2.22",
 | 
					    "@logicflow/core": "^1.2.22",
 | 
				
			||||||
    "@logicflow/extension": "^1.2.22",
 | 
					    "@logicflow/extension": "^1.2.22",
 | 
				
			||||||
    "@pureadmin/descriptions": "^1.2.0",
 | 
					    "@pureadmin/descriptions": "^1.2.1",
 | 
				
			||||||
    "@pureadmin/table": "^3.1.2",
 | 
					    "@pureadmin/table": "^3.1.2",
 | 
				
			||||||
    "@pureadmin/utils": "^2.4.5",
 | 
					    "@pureadmin/utils": "^2.4.5",
 | 
				
			||||||
    "@vueuse/core": "^10.9.0",
 | 
					    "@vueuse/core": "^10.9.0",
 | 
				
			||||||
@ -67,7 +67,7 @@
 | 
				
			|||||||
    "dayjs": "^1.11.10",
 | 
					    "dayjs": "^1.11.10",
 | 
				
			||||||
    "echarts": "^5.5.0",
 | 
					    "echarts": "^5.5.0",
 | 
				
			||||||
    "el-table-infinite-scroll": "^3.0.3",
 | 
					    "el-table-infinite-scroll": "^3.0.3",
 | 
				
			||||||
    "element-plus": "^2.6.0",
 | 
					    "element-plus": "^2.6.1",
 | 
				
			||||||
    "intro.js": "^7.2.0",
 | 
					    "intro.js": "^7.2.0",
 | 
				
			||||||
    "js-cookie": "^3.0.5",
 | 
					    "js-cookie": "^3.0.5",
 | 
				
			||||||
    "jsbarcode": "^3.11.6",
 | 
					    "jsbarcode": "^3.11.6",
 | 
				
			||||||
@ -104,9 +104,9 @@
 | 
				
			|||||||
    "xlsx": "^0.18.5"
 | 
					    "xlsx": "^0.18.5"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@commitlint/cli": "^18.6.1",
 | 
					    "@commitlint/cli": "^19.1.0",
 | 
				
			||||||
    "@commitlint/config-conventional": "^18.6.2",
 | 
					    "@commitlint/config-conventional": "^19.1.0",
 | 
				
			||||||
    "@commitlint/types": "^18.6.1",
 | 
					    "@commitlint/types": "^19.0.3",
 | 
				
			||||||
    "@eslint/js": "^8.57.0",
 | 
					    "@eslint/js": "^8.57.0",
 | 
				
			||||||
    "@faker-js/faker": "^8.4.1",
 | 
					    "@faker-js/faker": "^8.4.1",
 | 
				
			||||||
    "@iconify-icons/ep": "^1.2.12",
 | 
					    "@iconify-icons/ep": "^1.2.12",
 | 
				
			||||||
@ -117,7 +117,7 @@
 | 
				
			|||||||
    "@types/gradient-string": "^1.1.5",
 | 
					    "@types/gradient-string": "^1.1.5",
 | 
				
			||||||
    "@types/intro.js": "^5.1.5",
 | 
					    "@types/intro.js": "^5.1.5",
 | 
				
			||||||
    "@types/js-cookie": "^3.0.6",
 | 
					    "@types/js-cookie": "^3.0.6",
 | 
				
			||||||
    "@types/node": "^20.11.24",
 | 
					    "@types/node": "^20.11.26",
 | 
				
			||||||
    "@types/nprogress": "^0.2.3",
 | 
					    "@types/nprogress": "^0.2.3",
 | 
				
			||||||
    "@types/qrcode": "^1.5.5",
 | 
					    "@types/qrcode": "^1.5.5",
 | 
				
			||||||
    "@types/qs": "^6.9.12",
 | 
					    "@types/qs": "^6.9.12",
 | 
				
			||||||
@ -129,7 +129,7 @@
 | 
				
			|||||||
    "autoprefixer": "^10.4.18",
 | 
					    "autoprefixer": "^10.4.18",
 | 
				
			||||||
    "boxen": "^7.1.1",
 | 
					    "boxen": "^7.1.1",
 | 
				
			||||||
    "cloc": "^2.11.0",
 | 
					    "cloc": "^2.11.0",
 | 
				
			||||||
    "cssnano": "^6.0.5",
 | 
					    "cssnano": "^6.1.0",
 | 
				
			||||||
    "eslint": "^8.57.0",
 | 
					    "eslint": "^8.57.0",
 | 
				
			||||||
    "eslint-config-prettier": "^9.1.0",
 | 
					    "eslint-config-prettier": "^9.1.0",
 | 
				
			||||||
    "eslint-define-config": "^2.1.0",
 | 
					    "eslint-define-config": "^2.1.0",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										956
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										956
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -68,3 +68,8 @@ export const getOperationLogsList = (data?: object) => {
 | 
				
			|||||||
export const getSystemLogsList = (data?: object) => {
 | 
					export const getSystemLogsList = (data?: object) => {
 | 
				
			||||||
  return http.request<ResultTable>("post", "/system-logs", { data });
 | 
					  return http.request<ResultTable>("post", "/system-logs", { data });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 获取系统监控-系统日志-根据 id 查日志详情 */
 | 
				
			||||||
 | 
					export const getSystemLogsDetail = (data?: object) => {
 | 
				
			||||||
 | 
					  return http.request<Result>("post", "/system-logs-detail", { data });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -37,9 +37,9 @@ const layout = computed(() => {
 | 
				
			|||||||
const getSectionStyle = computed(() => {
 | 
					const getSectionStyle = computed(() => {
 | 
				
			||||||
  return [
 | 
					  return [
 | 
				
			||||||
    hideTabs.value && layout ? "padding-top: 48px;" : "",
 | 
					    hideTabs.value && layout ? "padding-top: 48px;" : "",
 | 
				
			||||||
    !hideTabs.value && layout ? "padding-top: 85px;" : "",
 | 
					    !hideTabs.value && layout ? "padding-top: 81px;" : "",
 | 
				
			||||||
    hideTabs.value && !layout.value ? "padding-top: 48px;" : "",
 | 
					    hideTabs.value && !layout.value ? "padding-top: 48px;" : "",
 | 
				
			||||||
    !hideTabs.value && !layout.value ? "padding-top: 85px;" : "",
 | 
					    !hideTabs.value && !layout.value ? "padding-top: 81px;" : "",
 | 
				
			||||||
    props.fixedHeader
 | 
					    props.fixedHeader
 | 
				
			||||||
      ? ""
 | 
					      ? ""
 | 
				
			||||||
      : `padding-top: 0;${
 | 
					      : `padding-top: 0;${
 | 
				
			||||||
 | 
				
			|||||||
@ -194,7 +194,6 @@ button,
 | 
				
			|||||||
  cursor: default;
 | 
					  cursor: default;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
img,
 | 
					 | 
				
			||||||
svg,
 | 
					svg,
 | 
				
			||||||
video,
 | 
					video,
 | 
				
			||||||
canvas,
 | 
					canvas,
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ export function useColumns() {
 | 
				
			|||||||
  const columns = [
 | 
					  const columns = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "当前版本",
 | 
					      label: "当前版本",
 | 
				
			||||||
 | 
					      minWidth: 100,
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
          <el-tag size="large" class="!text-base">
 | 
					          <el-tag size="large" class="!text-base">
 | 
				
			||||||
@ -14,6 +15,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "最后编译时间",
 | 
					      label: "最后编译时间",
 | 
				
			||||||
 | 
					      minWidth: 120,
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
          <el-tag size="large" class="!text-base">
 | 
					          <el-tag size="large" class="!text-base">
 | 
				
			||||||
@ -24,6 +26,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "推荐 node 版本",
 | 
					      label: "推荐 node 版本",
 | 
				
			||||||
 | 
					      minWidth: 140,
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
          <el-tag size="large" class="!text-base">
 | 
					          <el-tag size="large" class="!text-base">
 | 
				
			||||||
@ -34,6 +37,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "推荐 pnpm 版本",
 | 
					      label: "推荐 pnpm 版本",
 | 
				
			||||||
 | 
					      minWidth: 140,
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
          <el-tag size="large" class="!text-base">
 | 
					          <el-tag size="large" class="!text-base">
 | 
				
			||||||
@ -44,6 +48,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "完整版代码地址",
 | 
					      label: "完整版代码地址",
 | 
				
			||||||
 | 
					      minWidth: 140,
 | 
				
			||||||
      className: "pure-version",
 | 
					      className: "pure-version",
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
@ -58,6 +63,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "精简版代码地址",
 | 
					      label: "精简版代码地址",
 | 
				
			||||||
 | 
					      minWidth: 140,
 | 
				
			||||||
      className: "pure-version",
 | 
					      className: "pure-version",
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
@ -72,6 +78,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "文档地址",
 | 
					      label: "文档地址",
 | 
				
			||||||
 | 
					      minWidth: 100,
 | 
				
			||||||
      className: "pure-version",
 | 
					      className: "pure-version",
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
@ -86,6 +93,7 @@ export function useColumns() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      label: "预览地址",
 | 
					      label: "预览地址",
 | 
				
			||||||
 | 
					      minWidth: 100,
 | 
				
			||||||
      className: "pure-version",
 | 
					      className: "pure-version",
 | 
				
			||||||
      cellRenderer: () => {
 | 
					      cellRenderer: () => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
 | 
				
			|||||||
@ -82,8 +82,11 @@ Object.keys(devDependencies).forEach(key => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <el-card class="m-4 box-card" shadow="never">
 | 
					    <el-card class="m-4 box-card" shadow="never">
 | 
				
			||||||
      <template #header>
 | 
					      <template #header>
 | 
				
			||||||
        <div class="card-header">
 | 
					        <div class="card-header flex items-center">
 | 
				
			||||||
          <span class="font-medium">生产环境依赖</span>
 | 
					          <span class="font-medium">生产环境依赖</span>
 | 
				
			||||||
 | 
					          <el-tag type="primary" effect="dark" size="small" round class="ml-1">
 | 
				
			||||||
 | 
					            {{ schema.length }}
 | 
				
			||||||
 | 
					          </el-tag>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </template>
 | 
					      </template>
 | 
				
			||||||
      <el-scrollbar>
 | 
					      <el-scrollbar>
 | 
				
			||||||
@ -114,8 +117,11 @@ Object.keys(devDependencies).forEach(key => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <el-card class="m-4 box-card" shadow="never">
 | 
					    <el-card class="m-4 box-card" shadow="never">
 | 
				
			||||||
      <template #header>
 | 
					      <template #header>
 | 
				
			||||||
        <div class="card-header">
 | 
					        <div class="card-header flex items-center">
 | 
				
			||||||
          <span class="font-medium">开发环境依赖</span>
 | 
					          <span class="font-medium">开发环境依赖</span>
 | 
				
			||||||
 | 
					          <el-tag type="primary" effect="dark" size="small" round class="ml-1">
 | 
				
			||||||
 | 
					            {{ devSchema.length }}
 | 
				
			||||||
 | 
					          </el-tag>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </template>
 | 
					      </template>
 | 
				
			||||||
      <el-scrollbar>
 | 
					      <el-scrollbar>
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,8 @@
 | 
				
			|||||||
import { useRouter } from "vue-router";
 | 
					import { useRouter } from "vue-router";
 | 
				
			||||||
import { h, createVNode, ref } from "vue";
 | 
					import { h, createVNode, ref } from "vue";
 | 
				
			||||||
import { message } from "@/utils/message";
 | 
					import { message } from "@/utils/message";
 | 
				
			||||||
import forms, { type FormProps } from "./form.vue";
 | 
					 | 
				
			||||||
import formPrimitive from "./formPrimitive.vue";
 | 
					import formPrimitive from "./formPrimitive.vue";
 | 
				
			||||||
 | 
					import forms, { type FormProps } from "./form.vue";
 | 
				
			||||||
import { cloneDeep, debounce } from "@pureadmin/utils";
 | 
					import { cloneDeep, debounce } from "@pureadmin/utils";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  addDialog,
 | 
					  addDialog,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { reactive, watch } from "vue";
 | 
					import { reactive, watch } from "vue";
 | 
				
			||||||
import VueJsonPretty from "vue-json-pretty";
 | 
					 | 
				
			||||||
import "vue-json-pretty/lib/styles.css";
 | 
					import "vue-json-pretty/lib/styles.css";
 | 
				
			||||||
 | 
					import VueJsonPretty from "vue-json-pretty";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defineOptions({
 | 
					defineOptions({
 | 
				
			||||||
  name: "JsonEditor"
 | 
					  name: "JsonEditor"
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										105
									
								
								src/views/monitor/logs/system/detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								src/views/monitor/logs/system/detail.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					<script setup lang="tsx">
 | 
				
			||||||
 | 
					import { ref } from "vue";
 | 
				
			||||||
 | 
					import "vue-json-pretty/lib/styles.css";
 | 
				
			||||||
 | 
					import VueJsonPretty from "vue-json-pretty";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const props = defineProps({
 | 
				
			||||||
 | 
					  data: {
 | 
				
			||||||
 | 
					    type: Array,
 | 
				
			||||||
 | 
					    default: () => []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const columns = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "IP 地址",
 | 
				
			||||||
 | 
					    prop: "ip"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "地点",
 | 
				
			||||||
 | 
					    prop: "address"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "操作系统",
 | 
				
			||||||
 | 
					    prop: "system"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "浏览器类型",
 | 
				
			||||||
 | 
					    prop: "browser"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "所属模块",
 | 
				
			||||||
 | 
					    prop: "module"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "请求时间",
 | 
				
			||||||
 | 
					    prop: "requestTime"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "请求方法",
 | 
				
			||||||
 | 
					    prop: "method"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "请求耗时",
 | 
				
			||||||
 | 
					    prop: "takesTime"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "请求接口",
 | 
				
			||||||
 | 
					    prop: "url",
 | 
				
			||||||
 | 
					    copy: true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "TraceId",
 | 
				
			||||||
 | 
					    prop: "traceId",
 | 
				
			||||||
 | 
					    copy: true
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const dataList = ref([
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    title: "响应头",
 | 
				
			||||||
 | 
					    name: "responseHeaders",
 | 
				
			||||||
 | 
					    data: (props.data[0] as any).responseHeaders
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    title: "响应体",
 | 
				
			||||||
 | 
					    name: "responseBody",
 | 
				
			||||||
 | 
					    data: (props.data[0] as any).responseBody
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    title: "请求头",
 | 
				
			||||||
 | 
					    name: "requestHeaders",
 | 
				
			||||||
 | 
					    data: (props.data[0] as any).requestHeaders
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    title: "请求体",
 | 
				
			||||||
 | 
					    name: "requestBody",
 | 
				
			||||||
 | 
					    data: (props.data[0] as any).requestBody
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]);
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <el-scrollbar>
 | 
				
			||||||
 | 
					      <PureDescriptions
 | 
				
			||||||
 | 
					        border
 | 
				
			||||||
 | 
					        :data="props.data"
 | 
				
			||||||
 | 
					        :columns="columns"
 | 
				
			||||||
 | 
					        :column="5"
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </el-scrollbar>
 | 
				
			||||||
 | 
					    <el-tabs :modelValue="'responseBody'" type="border-card" class="mt-4">
 | 
				
			||||||
 | 
					      <el-tab-pane
 | 
				
			||||||
 | 
					        v-for="(item, index) in dataList"
 | 
				
			||||||
 | 
					        :key="index"
 | 
				
			||||||
 | 
					        :name="item.name"
 | 
				
			||||||
 | 
					        :label="item.title"
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <el-scrollbar max-height="calc(100vh - 240px)">
 | 
				
			||||||
 | 
					          <vue-json-pretty v-model:data="item.data" />
 | 
				
			||||||
 | 
					        </el-scrollbar>
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					    </el-tabs>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
@ -1,9 +1,11 @@
 | 
				
			|||||||
import dayjs from "dayjs";
 | 
					import dayjs from "dayjs";
 | 
				
			||||||
 | 
					import Detail from "./detail.vue";
 | 
				
			||||||
import { message } from "@/utils/message";
 | 
					import { message } from "@/utils/message";
 | 
				
			||||||
import { getSystemLogsList } from "@/api/system";
 | 
					import { addDialog } from "@/components/ReDialog";
 | 
				
			||||||
import type { PaginationProps } from "@pureadmin/table";
 | 
					import type { PaginationProps } from "@pureadmin/table";
 | 
				
			||||||
import { type Ref, reactive, ref, onMounted, toRaw } from "vue";
 | 
					import { type Ref, reactive, ref, onMounted, toRaw } from "vue";
 | 
				
			||||||
import { getKeyList, useCopyToClipboard } from "@pureadmin/utils";
 | 
					import { getKeyList, useCopyToClipboard } from "@pureadmin/utils";
 | 
				
			||||||
 | 
					import { getSystemLogsList, getSystemLogsDetail } from "@/api/system";
 | 
				
			||||||
import Info from "@iconify-icons/ri/question-line";
 | 
					import Info from "@iconify-icons/ri/question-line";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function useRole(tableRef: Ref) {
 | 
					export function useRole(tableRef: Ref) {
 | 
				
			||||||
@ -126,12 +128,12 @@ export function useRole(tableRef: Ref) {
 | 
				
			|||||||
      minWidth: 180,
 | 
					      minWidth: 180,
 | 
				
			||||||
      formatter: ({ requestTime }) =>
 | 
					      formatter: ({ requestTime }) =>
 | 
				
			||||||
        dayjs(requestTime).format("YYYY-MM-DD HH:mm:ss")
 | 
					        dayjs(requestTime).format("YYYY-MM-DD HH:mm:ss")
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "操作",
 | 
				
			||||||
 | 
					      fixed: "right",
 | 
				
			||||||
 | 
					      slot: "operation"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // {
 | 
					 | 
				
			||||||
    //   label: "操作",
 | 
					 | 
				
			||||||
    //   fixed: "right",
 | 
					 | 
				
			||||||
    //   slot: "operation"
 | 
					 | 
				
			||||||
    // }
 | 
					 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function handleSizeChange(val: number) {
 | 
					  function handleSizeChange(val: number) {
 | 
				
			||||||
@ -157,7 +159,8 @@ export function useRole(tableRef: Ref) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /** 拷贝请求接口,表格单元格被双击时触发 */
 | 
					  /** 拷贝请求接口,表格单元格被双击时触发 */
 | 
				
			||||||
  function handleCellDblclick({ url }) {
 | 
					  function handleCellDblclick({ url }, { property }) {
 | 
				
			||||||
 | 
					    if (property !== "url") return;
 | 
				
			||||||
    update(url);
 | 
					    update(url);
 | 
				
			||||||
    copied.value
 | 
					    copied.value
 | 
				
			||||||
      ? message(`${url} 已拷贝`, { type: "success" })
 | 
					      ? message(`${url} 已拷贝`, { type: "success" })
 | 
				
			||||||
@ -185,6 +188,20 @@ export function useRole(tableRef: Ref) {
 | 
				
			|||||||
    onSearch();
 | 
					    onSearch();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function onDetail(row) {
 | 
				
			||||||
 | 
					    getSystemLogsDetail({ id: row.id }).then(res => {
 | 
				
			||||||
 | 
					      addDialog({
 | 
				
			||||||
 | 
					        title: "系统日志详情",
 | 
				
			||||||
 | 
					        fullscreen: true,
 | 
				
			||||||
 | 
					        hideFooter: true,
 | 
				
			||||||
 | 
					        contentRenderer: () => Detail,
 | 
				
			||||||
 | 
					        props: {
 | 
				
			||||||
 | 
					          data: [res]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function onSearch() {
 | 
					  async function onSearch() {
 | 
				
			||||||
    loading.value = true;
 | 
					    loading.value = true;
 | 
				
			||||||
    const { data } = await getSystemLogsList(toRaw(form));
 | 
					    const { data } = await getSystemLogsList(toRaw(form));
 | 
				
			||||||
@ -216,6 +233,7 @@ export function useRole(tableRef: Ref) {
 | 
				
			|||||||
    pagination,
 | 
					    pagination,
 | 
				
			||||||
    selectedNum,
 | 
					    selectedNum,
 | 
				
			||||||
    onSearch,
 | 
					    onSearch,
 | 
				
			||||||
 | 
					    onDetail,
 | 
				
			||||||
    clearAll,
 | 
					    clearAll,
 | 
				
			||||||
    resetForm,
 | 
					    resetForm,
 | 
				
			||||||
    onbatchDel,
 | 
					    onbatchDel,
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import { getPickerShortcuts } from "../../utils";
 | 
				
			|||||||
import { PureTableBar } from "@/components/RePureTableBar";
 | 
					import { PureTableBar } from "@/components/RePureTableBar";
 | 
				
			||||||
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
 | 
					import { useRenderIcon } from "@/components/ReIcon/src/hooks";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import View from "@iconify-icons/ep/view";
 | 
				
			||||||
import Delete from "@iconify-icons/ep/delete";
 | 
					import Delete from "@iconify-icons/ep/delete";
 | 
				
			||||||
import Refresh from "@iconify-icons/ep/refresh";
 | 
					import Refresh from "@iconify-icons/ep/refresh";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -23,6 +24,7 @@ const {
 | 
				
			|||||||
  pagination,
 | 
					  pagination,
 | 
				
			||||||
  selectedNum,
 | 
					  selectedNum,
 | 
				
			||||||
  onSearch,
 | 
					  onSearch,
 | 
				
			||||||
 | 
					  onDetail,
 | 
				
			||||||
  clearAll,
 | 
					  clearAll,
 | 
				
			||||||
  resetForm,
 | 
					  resetForm,
 | 
				
			||||||
  onbatchDel,
 | 
					  onbatchDel,
 | 
				
			||||||
@ -133,7 +135,20 @@ const {
 | 
				
			|||||||
          @page-size-change="handleSizeChange"
 | 
					          @page-size-change="handleSizeChange"
 | 
				
			||||||
          @page-current-change="handleCurrentChange"
 | 
					          @page-current-change="handleCurrentChange"
 | 
				
			||||||
          @cell-dblclick="handleCellDblclick"
 | 
					          @cell-dblclick="handleCellDblclick"
 | 
				
			||||||
        />
 | 
					        >
 | 
				
			||||||
 | 
					          <template #operation="{ row }">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              class="reset-margin !outline-none"
 | 
				
			||||||
 | 
					              link
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              :size="size"
 | 
				
			||||||
 | 
					              :icon="useRenderIcon(View)"
 | 
				
			||||||
 | 
					              @click="onDetail(row)"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              详情
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </pure-table>
 | 
				
			||||||
      </template>
 | 
					      </template>
 | 
				
			||||||
    </PureTableBar>
 | 
					    </PureTableBar>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user