Files
education/frontend/node_modules/.cache/vue-loader/f926d758a8e2ec568d8890819e72a83f.json
T

1 line
14 KiB
JSON

{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\index.vue","mtime":1787567871615},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBsaXN0Tm90aWNlIH0gZnJvbSAiQC9hcGkvc3lzdGVtL25vdGljZSINCmltcG9ydCBOb3RpY2VEZXRhaWxWaWV3IGZyb20gIkAvbGF5b3V0L2NvbXBvbmVudHMvSGVhZGVyTm90aWNlL0RldGFpbFZpZXciDQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogIkluZGV4IiwNCiAgY29tcG9uZW50czogeyBOb3RpY2VEZXRhaWxWaWV3IH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIHZlcnNpb246ICIzLjkuMiIsDQogICAgICBub3RpY2VMaXN0OiBbXSwNCiAgICAgIG5vdGljZUxvYWRpbmc6IGZhbHNlLA0KICAgICAgbm90aWNlUGFnZTogew0KICAgICAgICBjdXJyZW50UGFnZTogMSwNCiAgICAgICAgcGFnZVNpemU6IDEwLA0KICAgICAgICB0b3RhbDogMA0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgbW91bnRlZCgpIHsNCiAgICB0aGlzLmxvYWROb3RpY2VMaXN0KCkNCiAgfSwNCiAgbWV0aG9kczogew0KICAgIGdvVGFyZ2V0KGhyZWYpIHsNCiAgICAgIHdpbmRvdy5vcGVuKGhyZWYsICJfYmxhbmsiKQ0KICAgIH0sDQogICAgaGFuZGxlTW9yZSh0eXBlKSB7DQogICAgICBjb25zdCB0aXRsZU1hcCA9IHsNCiAgICAgICAgbm90aWNlOiAn6YCa55+l5YWs5ZGKJw0KICAgICAgfQ0KICAgICAgY29uc3QgdGFyZ2V0VGl0bGUgPSB0aXRsZU1hcFt0eXBlXQ0KICAgICAgaWYgKHRhcmdldFRpdGxlKSB7DQogICAgICAgIGNvbnN0IHJvdXRlcyA9IHRoaXMuJHN0b3JlLmdldHRlcnMuc2lkZWJhclJvdXRlcnMgfHwgW10NCiAgICAgICAgY29uc3QgZmluZFJvdXRlQnlUaXRsZSA9IChyb3V0ZUxpc3QsIHBhcmVudFBhdGggPSAnJykgPT4gew0KICAgICAgICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVMaXN0KSB7DQogICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhcmVudFBhdGggPyBwYXJlbnRQYXRoICsgJy8nICsgcm91dGUucGF0aCA6IHJvdXRlLnBhdGgNCiAgICAgICAgICAgIGlmIChyb3V0ZS5tZXRhICYmIHJvdXRlLm1ldGEudGl0bGUgPT09IHRhcmdldFRpdGxlKSB7DQogICAgICAgICAgICAgIHJldHVybiBmdWxsUGF0aA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHJvdXRlLmNoaWxkcmVuICYmIHJvdXRlLmNoaWxkcmVuLmxlbmd0aCkgew0KICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRSb3V0ZUJ5VGl0bGUocm91dGUuY2hpbGRyZW4sIGZ1bGxQYXRoKQ0KICAgICAgICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZA0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICByZXR1cm4gbnVsbA0KICAgICAgICB9DQogICAgICAgIGNvbnN0IHRhcmdldFBhdGggPSBmaW5kUm91dGVCeVRpdGxlKHJvdXRlcykNCiAgICAgICAgaWYgKHRhcmdldFBhdGgpIHsNCiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh0YXJnZXRQYXRoKQ0KICAgICAgICAgIHJldHVybg0KICAgICAgICB9DQogICAgICB9DQogICAgICB0aGlzLiRtZXNzYWdlLmluZm8oIuabtOWkmuWKn+iDveaaguacquW8gOaUviIpDQogICAgfSwNCiAgICBsb2FkTm90aWNlTGlzdCgpIHsNCiAgICAgIHRoaXMubm90aWNlTG9hZGluZyA9IHRydWUNCiAgICAgIGxpc3ROb3RpY2Uoew0KICAgICAgICBwYWdlTnVtOiB0aGlzLm5vdGljZVBhZ2UuY3VycmVudFBhZ2UsDQogICAgICAgIHBhZ2VTaXplOiB0aGlzLm5vdGljZVBhZ2UucGFnZVNpemUNCiAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4gew0KICAgICAgICB0aGlzLm5vdGljZUxpc3QgPSByZXNwb25zZS5yb3dzIHx8IFtdDQogICAgICAgIHRoaXMubm90aWNlUGFnZS50b3RhbCA9IHJlc3BvbnNlLnRvdGFsIHx8IDANCiAgICAgICAgdGhpcy5ub3RpY2VMb2FkaW5nID0gZmFsc2UNCiAgICAgIH0pLmNhdGNoKCgpID0+IHsNCiAgICAgICAgdGhpcy5ub3RpY2VMb2FkaW5nID0gZmFsc2UNCiAgICAgIH0pDQogICAgfSwNCiAgICBoYW5kbGVWaWV3Tm90aWNlKGl0ZW0pIHsNCiAgICAgIHRoaXMuJHJlZnMubm90aWNlVmlld1JlZi5vcGVuKGl0ZW0pDQogICAgfSwNCiAgICBoYW5kbGVOb3RpY2VTaXplQ2hhbmdlKHZhbCkgew0KICAgICAgdGhpcy5ub3RpY2VQYWdlLnBhZ2VTaXplID0gdmFsDQogICAgICB0aGlzLm5vdGljZVBhZ2UuY3VycmVudFBhZ2UgPSAxDQogICAgICB0aGlzLmxvYWROb3RpY2VMaXN0KCkNCiAgICB9LA0KICAgIGhhbmRsZU5vdGljZUN1cnJlbnRDaGFuZ2UodmFsKSB7DQogICAgICB0aGlzLm5vdGljZVBhZ2UuY3VycmVudFBhZ2UgPSB2YWwNCiAgICAgIHRoaXMubG9hZE5vdGljZUxpc3QoKQ0KICAgIH0NCiAgfQ0KfQ0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA;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;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","sourcesContent":["<template>\r\n <div class=\"app-container home\">\r\n <!-- 通知公告 -->\r\n <el-row :gutter=\"20\" class=\"bottom-row\">\r\n <el-col :xs=\"24\" :sm=\"24\" :md=\"24\" :lg=\"24\">\r\n <el-card class=\"module-card notice-card\" shadow=\"hover\">\r\n <div slot=\"header\" class=\"card-header\">\r\n <span><i class=\"el-icon-bell card-icon\"></i> 通知公告</span>\r\n <el-button type=\"text\" class=\"more-btn\" @click=\"handleMore('notice')\">更多 <i class=\"el-icon-arrow-right\"></i></el-button>\r\n </div>\r\n <div class=\"card-body notice-body\" v-loading=\"noticeLoading\">\r\n <div v-if=\"noticeList.length === 0\" class=\"empty-state mini-empty\">\r\n <i class=\"el-icon-inbox empty-icon\"></i>\r\n <p>暂无公告</p>\r\n </div>\r\n <div v-else class=\"notice-list\">\r\n <div v-for=\"item in noticeList\" :key=\"item.noticeId\" class=\"notice-item\" @click=\"handleViewNotice(item)\">\r\n <div class=\"notice-main\">\r\n <el-tag size=\"mini\" :type=\"item.noticeType === '1' ? 'warning' : 'success'\" class=\"notice-tag\">\r\n {{ item.noticeType === '1' ? '通知' : '公告' }}\r\n </el-tag>\r\n <span class=\"notice-title\">{{ item.noticeTitle }}</span>\r\n </div>\r\n <div class=\"notice-meta\">\r\n <span>{{ item.createBy || '系统' }}</span>\r\n <span>{{ item.createTime }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <el-pagination\r\n @size-change=\"handleNoticeSizeChange\"\r\n @current-change=\"handleNoticeCurrentChange\"\r\n :current-page=\"noticePage.currentPage\"\r\n :page-sizes=\"[5, 10, 20, 50]\"\r\n :page-size=\"noticePage.pageSize\"\r\n :total=\"noticePage.total\"\r\n layout=\"total, prev, pager, next\"\r\n small\r\n />\r\n </div>\r\n </el-card>\r\n </el-col>\r\n </el-row>\r\n\r\n <notice-detail-view ref=\"noticeViewRef\" />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { listNotice } from \"@/api/system/notice\"\r\nimport NoticeDetailView from \"@/layout/components/HeaderNotice/DetailView\"\r\n\r\nexport default {\r\n name: \"Index\",\r\n components: { NoticeDetailView },\r\n data() {\r\n return {\r\n version: \"3.9.2\",\r\n noticeList: [],\r\n noticeLoading: false,\r\n noticePage: {\r\n currentPage: 1,\r\n pageSize: 10,\r\n total: 0\r\n }\r\n }\r\n },\r\n mounted() {\r\n this.loadNoticeList()\r\n },\r\n methods: {\r\n goTarget(href) {\r\n window.open(href, \"_blank\")\r\n },\r\n handleMore(type) {\r\n const titleMap = {\r\n notice: '通知公告'\r\n }\r\n const targetTitle = titleMap[type]\r\n if (targetTitle) {\r\n const routes = this.$store.getters.sidebarRouters || []\r\n const findRouteByTitle = (routeList, parentPath = '') => {\r\n for (const route of routeList) {\r\n const fullPath = parentPath ? parentPath + '/' + route.path : route.path\r\n if (route.meta && route.meta.title === targetTitle) {\r\n return fullPath\r\n }\r\n if (route.children && route.children.length) {\r\n const found = findRouteByTitle(route.children, fullPath)\r\n if (found) return found\r\n }\r\n }\r\n return null\r\n }\r\n const targetPath = findRouteByTitle(routes)\r\n if (targetPath) {\r\n this.$router.push(targetPath)\r\n return\r\n }\r\n }\r\n this.$message.info(\"更多功能暂未开放\")\r\n },\r\n loadNoticeList() {\r\n this.noticeLoading = true\r\n listNotice({\r\n pageNum: this.noticePage.currentPage,\r\n pageSize: this.noticePage.pageSize\r\n }).then(response => {\r\n this.noticeList = response.rows || []\r\n this.noticePage.total = response.total || 0\r\n this.noticeLoading = false\r\n }).catch(() => {\r\n this.noticeLoading = false\r\n })\r\n },\r\n handleViewNotice(item) {\r\n this.$refs.noticeViewRef.open(item)\r\n },\r\n handleNoticeSizeChange(val) {\r\n this.noticePage.pageSize = val\r\n this.noticePage.currentPage = 1\r\n this.loadNoticeList()\r\n },\r\n handleNoticeCurrentChange(val) {\r\n this.noticePage.currentPage = val\r\n this.loadNoticeList()\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.home {\r\n background: linear-gradient(135deg, #f5f7fa 0%, #eef0f8 50%, #f5f7fa 100%);\r\n min-height: calc(100vh - 84px);\r\n padding: 20px;\r\n position: relative;\r\n\r\n .bottom-row {\r\n margin-bottom: 20px;\r\n }\r\n\r\n .module-card {\r\n height: 420px;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n border-radius: 10px;\r\n border: none;\r\n transition: all 0.3s ease;\r\n background: linear-gradient(180deg, #ffffff 0%, #f8f9fd 100%);\r\n box-shadow: 0 4px 20px rgba(0, 135, 90, 0.06);\r\n\r\n &:hover {\r\n box-shadow: 0 8px 30px rgba(0, 135, 90, 0.12);\r\n }\r\n\r\n ::v-deep .el-card__header {\r\n padding: 14px 20px;\r\n border-bottom: 1px solid rgba(0, 135, 90, 0.08);\r\n background: linear-gradient(135deg, var(--edu-green-dark) 0%, var(--edu-green-primary) 100%);\r\n border-radius: 10px 10px 0 0;\r\n flex-shrink: 0;\r\n }\r\n\r\n ::v-deep .el-card__body {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n padding: 0;\r\n }\r\n }\r\n\r\n .card-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-weight: 600;\r\n font-size: 15px;\r\n color: #ffffff;\r\n\r\n .card-icon {\r\n margin-right: 6px;\r\n color: var(--edu-green-light);\r\n font-size: 16px;\r\n }\r\n\r\n .more-btn {\r\n padding: 0;\r\n font-size: 13px;\r\n color: rgba(255, 255, 255, 0.75);\r\n\r\n &:hover {\r\n color: #ffffff;\r\n }\r\n\r\n i {\r\n font-size: 12px;\r\n }\r\n }\r\n }\r\n\r\n .card-body {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n padding: 15px 20px;\r\n scrollbar-width: none;\r\n -ms-overflow-style: none;\r\n\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n\r\n .card-footer {\r\n flex-shrink: 0;\r\n padding: 10px 20px 15px;\r\n text-align: right;\r\n border-top: 1px solid rgba(0, 135, 90, 0.06);\r\n background: linear-gradient(180deg, #ffffff 0%, #f4f6fb 100%);\r\n overflow-x: auto;\r\n\r\n ::v-deep .el-pagination__total,\r\n ::v-deep .el-pagination__jump,\r\n ::v-deep .el-pager li {\r\n color: #5a5f7a;\r\n }\r\n\r\n ::v-deep .el-pager li.active,\r\n ::v-deep .el-pager li:hover {\r\n color: var(--edu-green-dark);\r\n }\r\n }\r\n\r\n .empty-state {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 160px;\r\n color: #8a90ad;\r\n\r\n .empty-icon {\r\n font-size: 48px;\r\n margin-bottom: 12px;\r\n color: #b8bed8;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n font-size: 14px;\r\n }\r\n }\r\n\r\n .notice-list {\r\n .notice-item {\r\n padding: 14px 0;\r\n border-bottom: 1px solid #f5f5f5;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n &:hover {\r\n background: rgba(0, 135, 90, 0.03);\r\n margin: 0 -20px;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n }\r\n\r\n .notice-main {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n margin-bottom: 6px;\r\n\r\n .notice-tag {\r\n flex-shrink: 0;\r\n\r\n &.el-tag--warning {\r\n background-color: rgba(0, 135, 90, 0.08);\r\n border-color: rgba(0, 135, 90, 0.15);\r\n color: var(--edu-green-dark);\r\n }\r\n\r\n &.el-tag--success {\r\n background-color: rgba(0, 135, 90, 0.06);\r\n border-color: rgba(0, 135, 90, 0.12);\r\n color: var(--edu-green-primary);\r\n }\r\n }\r\n\r\n .notice-title {\r\n flex: 1;\r\n font-size: 13px;\r\n color: #303133;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n\r\n &:hover {\r\n color: var(--edu-green-dark);\r\n }\r\n }\r\n }\r\n\r\n .notice-meta {\r\n display: flex;\r\n justify-content: space-between;\r\n font-size: 12px;\r\n color: #909399;\r\n padding-left: 42px;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"]}]}