提交 6e6de54a authored 作者: 王鹏飞's avatar 王鹏飞

feat: 新增知识日历

上级 53f9703c
......@@ -15,31 +15,31 @@
"dependencies": {
"@element-plus/icons-vue": "^1.1.4",
"@tinymce/tinymce-vue": "^5.0.0",
"axios": "^0.27.1",
"axios": "^0.27.2",
"blueimp-md5": "^2.19.0",
"element-plus": "^2.1.11",
"pinia": "^2.0.13",
"element-plus": "^2.2.0",
"pinia": "^2.0.14",
"qs": "^6.10.3",
"sass": "^1.51.0",
"vue": "^3.2.33",
"vue-router": "^4.0.14"
"vue-router": "^4.0.15"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.1.3",
"@types/blueimp-md5": "^2.18.0",
"@types/node": "^17.0.29",
"@types/node": "^17.0.33",
"@types/qs": "^6.9.7",
"@vitejs/plugin-vue": "^2.3.1",
"@vitejs/plugin-vue": "^2.3.3",
"@vue/eslint-config-typescript": "^10.0.0",
"@vue/tsconfig": "^0.1.3",
"ali-oss": "^6.17.1",
"chalk": "^5.0.1",
"eslint": "^8.14.0",
"eslint-plugin-vue": "^8.7.1",
"typescript": "~4.6.3",
"typescript": "~4.6.4",
"unplugin-auto-import": "^0.7.1",
"vite": "^2.9.6",
"vite": "^2.9.9",
"vite-plugin-checker": "^0.4.6",
"vue-tsc": "^0.34.10"
"vue-tsc": "^0.34.13"
}
}
lockfileVersion: 5.3
lockfileVersion: 5.4
specifiers:
'@element-plus/icons-vue': ^1.1.4
'@rushstack/eslint-patch': ^1.1.3
'@tinymce/tinymce-vue': ^5.0.0
'@types/blueimp-md5': ^2.18.0
'@types/node': ^17.0.29
'@types/node': ^17.0.33
'@types/qs': ^6.9.7
'@vitejs/plugin-vue': ^2.3.1
'@vitejs/plugin-vue': ^2.3.3
'@vue/eslint-config-typescript': ^10.0.0
'@vue/tsconfig': ^0.1.3
ali-oss: ^6.17.1
axios: ^0.27.1
axios: ^0.27.2
blueimp-md5: ^2.19.0
chalk: ^5.0.1
element-plus: ^2.1.11
element-plus: ^2.2.0
eslint: ^8.14.0
eslint-plugin-vue: ^8.7.1
pinia: ^2.0.13
pinia: ^2.0.14
qs: ^6.10.3
sass: ^1.51.0
typescript: ~4.6.3
typescript: ~4.6.4
unplugin-auto-import: ^0.7.1
vite: ^2.9.6
vite: ^2.9.9
vite-plugin-checker: ^0.4.6
vue: ^3.2.33
vue-router: ^4.0.14
vue-tsc: ^0.34.10
vue-router: ^4.0.15
vue-tsc: ^0.34.13
dependencies:
'@element-plus/icons-vue': 1.1.4_vue@3.2.33
'@tinymce/tinymce-vue': 5.0.0_vue@3.2.33
axios: 0.27.1
axios: 0.27.2
blueimp-md5: 2.19.0
element-plus: 2.1.11_vue@3.2.33
pinia: 2.0.13_typescript@4.6.3+vue@3.2.33
element-plus: 2.2.0_vue@3.2.33
pinia: 2.0.14_ytvqwwdyss532bvoq2clv4ed5m
qs: 6.10.3
sass: 1.51.0
vue: 3.2.33
vue-router: 4.0.14_vue@3.2.33
vue-router: 4.0.15_vue@3.2.33
devDependencies:
'@rushstack/eslint-patch': 1.1.3
'@types/blueimp-md5': 2.18.0
'@types/node': 17.0.29
'@types/node': 17.0.33
'@types/qs': 6.9.7
'@vitejs/plugin-vue': 2.3.1_vite@2.9.6+vue@3.2.33
'@vue/eslint-config-typescript': 10.0.0_f5d04023b0e9c1203fb3ac493367e3ca
'@vue/tsconfig': 0.1.3_@types+node@17.0.29
'@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.33
'@vue/eslint-config-typescript': 10.0.0_ywt6hnycbgkkmd3ofvn7w5wgkm
'@vue/tsconfig': 0.1.3_@types+node@17.0.33
ali-oss: 6.17.1
chalk: 5.0.1
eslint: 8.14.0
eslint-plugin-vue: 8.7.1_eslint@8.14.0
typescript: 4.6.3
unplugin-auto-import: 0.7.1_vite@2.9.6
vite: 2.9.6_sass@1.51.0
vite-plugin-checker: 0.4.6_vite@2.9.6
vue-tsc: 0.34.10_typescript@4.6.3
typescript: 4.6.4
unplugin-auto-import: 0.7.1_vite@2.9.9
vite: 2.9.9_sass@1.51.0
vite-plugin-checker: 0.4.6_vite@2.9.9
vue-tsc: 0.34.13_typescript@4.6.4
packages:
......@@ -74,7 +74,6 @@ packages:
/@babel/helper-validator-identifier/7.16.7:
resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/highlight/7.17.9:
resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==}
......@@ -89,6 +88,15 @@ packages:
resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.17.10
/@babel/types/7.17.10:
resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.16.7
to-fast-properties: 2.0.0
/@ctrl/tinycolor/3.4.1:
resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==}
......@@ -214,15 +222,15 @@ packages:
resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==}
dev: false
/@types/node/17.0.29:
resolution: {integrity: sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA==}
/@types/node/17.0.33:
resolution: {integrity: sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==}
dev: true
/@types/qs/6.9.7:
resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
dev: true
/@typescript-eslint/eslint-plugin/5.19.0_851e4194b2dcd49c3bd3bab657985903:
/@typescript-eslint/eslint-plugin/5.19.0_gc5msd4pmqm2gy2gcaxbbh2wfa:
resolution: {integrity: sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -233,23 +241,23 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': 5.19.0_eslint@8.14.0+typescript@4.6.3
'@typescript-eslint/parser': 5.19.0_t725usgvqspm5woeqpaxbfp2qu
'@typescript-eslint/scope-manager': 5.19.0
'@typescript-eslint/type-utils': 5.19.0_eslint@8.14.0+typescript@4.6.3
'@typescript-eslint/utils': 5.19.0_eslint@8.14.0+typescript@4.6.3
'@typescript-eslint/type-utils': 5.19.0_t725usgvqspm5woeqpaxbfp2qu
'@typescript-eslint/utils': 5.19.0_t725usgvqspm5woeqpaxbfp2qu
debug: 4.3.4
eslint: 8.14.0
functional-red-black-tree: 1.0.1
ignore: 5.2.0
regexpp: 3.2.0
semver: 7.3.7
tsutils: 3.21.0_typescript@4.6.3
typescript: 4.6.3
tsutils: 3.21.0_typescript@4.6.4
typescript: 4.6.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser/5.19.0_eslint@8.14.0+typescript@4.6.3:
/@typescript-eslint/parser/5.19.0_t725usgvqspm5woeqpaxbfp2qu:
resolution: {integrity: sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -261,10 +269,10 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.19.0
'@typescript-eslint/types': 5.19.0
'@typescript-eslint/typescript-estree': 5.19.0_typescript@4.6.3
'@typescript-eslint/typescript-estree': 5.19.0_typescript@4.6.4
debug: 4.3.4
eslint: 8.14.0
typescript: 4.6.3
typescript: 4.6.4
transitivePeerDependencies:
- supports-color
dev: true
......@@ -277,7 +285,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.19.0
dev: true
/@typescript-eslint/type-utils/5.19.0_eslint@8.14.0+typescript@4.6.3:
/@typescript-eslint/type-utils/5.19.0_t725usgvqspm5woeqpaxbfp2qu:
resolution: {integrity: sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -287,11 +295,11 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/utils': 5.19.0_eslint@8.14.0+typescript@4.6.3
'@typescript-eslint/utils': 5.19.0_t725usgvqspm5woeqpaxbfp2qu
debug: 4.3.4
eslint: 8.14.0
tsutils: 3.21.0_typescript@4.6.3
typescript: 4.6.3
tsutils: 3.21.0_typescript@4.6.4
typescript: 4.6.4
transitivePeerDependencies:
- supports-color
dev: true
......@@ -301,7 +309,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/typescript-estree/5.19.0_typescript@4.6.3:
/@typescript-eslint/typescript-estree/5.19.0_typescript@4.6.4:
resolution: {integrity: sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -316,13 +324,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.7
tsutils: 3.21.0_typescript@4.6.3
typescript: 4.6.3
tsutils: 3.21.0_typescript@4.6.4
typescript: 4.6.4
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils/5.19.0_eslint@8.14.0+typescript@4.6.3:
/@typescript-eslint/utils/5.19.0_t725usgvqspm5woeqpaxbfp2qu:
resolution: {integrity: sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -331,7 +339,7 @@ packages:
'@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 5.19.0
'@typescript-eslint/types': 5.19.0
'@typescript-eslint/typescript-estree': 5.19.0_typescript@4.6.3
'@typescript-eslint/typescript-estree': 5.19.0_typescript@4.6.4
eslint: 8.14.0
eslint-scope: 5.1.1
eslint-utils: 3.0.0_eslint@8.14.0
......@@ -348,43 +356,43 @@ packages:
eslint-visitor-keys: 3.3.0
dev: true
/@vitejs/plugin-vue/2.3.1_vite@2.9.6+vue@3.2.33:
resolution: {integrity: sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==}
/@vitejs/plugin-vue/2.3.3_vite@2.9.9+vue@3.2.33:
resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==}
engines: {node: '>=12.0.0'}
peerDependencies:
vite: ^2.5.10
vue: ^3.2.25
dependencies:
vite: 2.9.6_sass@1.51.0
vite: 2.9.9_sass@1.51.0
vue: 3.2.33
dev: true
/@volar/code-gen/0.34.10:
resolution: {integrity: sha512-Pygl26uA4CuQcDgNndeTSNOYF+NbShcV+rwWRy/nRNv1JB++1EbaQ60/ti8c5zTRoL4a8OtipKMq9Sw8LzpRIw==}
/@volar/code-gen/0.34.13:
resolution: {integrity: sha512-FO1jC3aB514Ydg0yX3Usx+s/hwnKhDI9yfcEuCyJvWLZtcc+DOrWJu4G0MMLG6AdRvn5UbSyec/g5TnevYfY1g==}
dependencies:
'@volar/source-map': 0.34.10
'@volar/source-map': 0.34.13
dev: true
/@volar/source-map/0.34.10:
resolution: {integrity: sha512-DBSUGNJB2B08U6Ut14ZJSEOcBS7eV/aiinhoLbMrEe/HJtZRcnPuyE8f0c2BvmRM2LK8WQx77V54/lw/Ra8WDA==}
/@volar/source-map/0.34.13:
resolution: {integrity: sha512-Cb9rqhA00Q1tgqr2XjckMqlOJlozaBd6R4PndsvTRkGHTwdlv63CvunJGdAh6dXOIDZRKvhplfIJDKS9nDiIIA==}
dev: true
/@volar/vue-code-gen/0.34.10:
resolution: {integrity: sha512-oK5gat5AHllSMJzY+UMbttJvAjoUGzicXxLHoIwb6DTHpfcf2pADYUndiw5kSYHo+2Xd/+U1c9D8FUOJ+JHAFw==}
/@volar/vue-code-gen/0.34.13:
resolution: {integrity: sha512-rNuxyKmv+NW+SbQx6Hx6oQrkAtk7LWc47fiKKt0LZhNPQaNGj7/zhTvpe+aLFCDZw+a6rrH622qi+eovOOAnBA==}
dependencies:
'@volar/code-gen': 0.34.10
'@volar/source-map': 0.34.10
'@volar/code-gen': 0.34.13
'@volar/source-map': 0.34.13
'@vue/compiler-core': 3.2.33
'@vue/compiler-dom': 3.2.33
'@vue/shared': 3.2.33
dev: true
/@volar/vue-typescript/0.34.10:
resolution: {integrity: sha512-FCGSqLC+T/AcBUFXoFniPKLa/fLslBuHsepUmId8dG5ROXZhQaJ5h4fkA87247SWb7z4o9mI6v86xevXEjRVKw==}
/@volar/vue-typescript/0.34.13:
resolution: {integrity: sha512-vfZngBr0fkZSA5BajA8VLTsao7ZES7j5pHch6xV5vjjcuK6GIbxytQjKPq20Q34DMUrvgI6g30yULAc6zSB4rQ==}
dependencies:
'@volar/code-gen': 0.34.10
'@volar/source-map': 0.34.10
'@volar/vue-code-gen': 0.34.10
'@volar/code-gen': 0.34.13
'@volar/source-map': 0.34.13
'@volar/vue-code-gen': 0.34.13
'@vue/compiler-sfc': 3.2.33
'@vue/reactivity': 3.2.33
dev: true
......@@ -427,21 +435,25 @@ packages:
resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==}
dev: false
/@vue/eslint-config-typescript/10.0.0_f5d04023b0e9c1203fb3ac493367e3ca:
/@vue/eslint-config-typescript/10.0.0_ywt6hnycbgkkmd3ofvn7w5wgkm:
resolution: {integrity: sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
eslint-plugin-vue: ^8.0.1
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 5.19.0_851e4194b2dcd49c3bd3bab657985903
'@typescript-eslint/parser': 5.19.0_eslint@8.14.0+typescript@4.6.3
'@typescript-eslint/eslint-plugin': 5.19.0_gc5msd4pmqm2gy2gcaxbbh2wfa
'@typescript-eslint/parser': 5.19.0_t725usgvqspm5woeqpaxbfp2qu
eslint: 8.14.0
eslint-plugin-vue: 8.7.1_eslint@8.14.0
typescript: 4.6.4
vue-eslint-parser: 8.3.0_eslint@8.14.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@vue/reactivity-transform/3.2.33:
......@@ -486,7 +498,7 @@ packages:
/@vue/shared/3.2.33:
resolution: {integrity: sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==}
/@vue/tsconfig/0.1.3_@types+node@17.0.29:
/@vue/tsconfig/0.1.3_@types+node@17.0.33:
resolution: {integrity: sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==}
peerDependencies:
'@types/node': '*'
......@@ -494,7 +506,7 @@ packages:
'@types/node':
optional: true
dependencies:
'@types/node': 17.0.29
'@types/node': 17.0.33
dev: true
/@vueuse/core/8.2.6_vue@3.2.33:
......@@ -675,8 +687,8 @@ packages:
resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=}
dev: false
/axios/0.27.1:
resolution: {integrity: sha512-ePNMai55xo5GsXajb/k756AqZqpqeDaGwGcdvbZLSSELbbYwsIn2jNmGfUPEwd8j/yu4OoMstLLIVa4t0MneEA==}
/axios/0.27.2:
resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
dependencies:
follow-redirects: 1.14.9
form-data: 4.0.0
......@@ -857,6 +869,11 @@ packages:
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies:
ms: 2.0.0
dev: true
......@@ -934,8 +951,8 @@ packages:
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
dev: true
/element-plus/2.1.11_vue@3.2.33:
resolution: {integrity: sha512-s4X0I8s787tv+9UdekBC1g7v42Fj4bucPAmu03EjbgrGrV7BJvkoBGuK52lNfu4yC76bl6Uyjesd5Fu8CMakSw==}
/element-plus/2.2.0_vue@3.2.33:
resolution: {integrity: sha512-zxmAFEAa1T/n09rR+NozXcWl5CjaFtqoaxhFSafag0dgc90tgEHitDXfegdFAl4ahugdNTqu9aLzngx3VhDAtA==}
peerDependencies:
vue: ^3.2.0
dependencies:
......@@ -951,7 +968,7 @@ packages:
escape-html: 1.0.3
lodash: 4.17.21
lodash-es: 4.17.21
lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd
lodash-unified: 1.0.2_3ib2ivapxullxkx3xftsimdk7u
memoize-one: 6.0.0
normalize-wheel-es: 1.1.2
vue: 3.2.33
......@@ -1773,7 +1790,7 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
/lodash-unified/1.0.2_da03a4540fbd16bbaafbb96724306afd:
/lodash-unified/1.0.2_3ib2ivapxullxkx3xftsimdk7u:
resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==}
peerDependencies:
'@types/lodash-es': '*'
......@@ -1913,6 +1930,12 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
/nanoid/3.3.4:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
/natural-compare/1.4.0:
resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
dev: true
......@@ -2063,8 +2086,8 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
/pinia/2.0.13_typescript@4.6.3+vue@3.2.33:
resolution: {integrity: sha512-B7rSqm1xNpwcPMnqns8/gVBfbbi7lWTByzS6aPZ4JOXSJD4Y531rZHDCoYWBwLyHY/8hWnXljgiXp6rRyrofcw==}
/pinia/2.0.14_ytvqwwdyss532bvoq2clv4ed5m:
resolution: {integrity: sha512-0nPuZR4TetT/WcLN+feMSjWJku3SQU7dBbXC6uw+R6FLQJCsg+/0pzXyD82T1FmAYe0lsx+jnEDQ1BLgkRKlxA==}
peerDependencies:
'@vue/composition-api': ^1.4.0
typescript: '>=4.4.4'
......@@ -2076,7 +2099,7 @@ packages:
optional: true
dependencies:
'@vue/devtools-api': 6.1.4
typescript: 4.6.3
typescript: 4.6.4
vue: 3.2.33
vue-demi: 0.12.5_vue@3.2.33
dev: false
......@@ -2101,6 +2124,15 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/postcss/8.4.13:
resolution: {integrity: sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.4
picocolors: 1.0.0
source-map-js: 1.0.2
dev: true
/prelude-ls/1.1.2:
resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=}
engines: {node: '>= 0.8.0'}
......@@ -2449,6 +2481,10 @@ packages:
resolution: {integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=}
dev: true
/to-fast-properties/2.0.0:
resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
engines: {node: '>=4'}
/to-regex-range/5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
......@@ -2468,14 +2504,14 @@ packages:
resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==}
dev: true
/tsutils/3.21.0_typescript@4.6.3:
/tsutils/3.21.0_typescript@4.6.4:
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies:
tslib: 1.14.1
typescript: 4.6.3
typescript: 4.6.4
dev: true
/type-check/0.3.2:
......@@ -2502,8 +2538,8 @@ packages:
engines: {node: '>=10'}
dev: true
/typescript/4.6.3:
resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==}
/typescript/4.6.4:
resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==}
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
......@@ -2525,7 +2561,7 @@ packages:
engines: {node: '>= 0.8'}
dev: true
/unplugin-auto-import/0.7.1_vite@2.9.6:
/unplugin-auto-import/0.7.1_vite@2.9.9:
resolution: {integrity: sha512-9865OV9eP99PNxHR2mtTDExeN01m4M9boT5U2BtIwsU1wDRsaFIYWLwcCBEjvXzXfTTC2NNMskhHGVAMfL2WgA==}
engines: {node: '>=14'}
peerDependencies:
......@@ -2539,7 +2575,7 @@ packages:
local-pkg: 0.4.1
magic-string: 0.26.1
resolve: 1.22.0
unplugin: 0.6.2_vite@2.9.6
unplugin: 0.6.2_vite@2.9.9
transitivePeerDependencies:
- esbuild
- rollup
......@@ -2547,7 +2583,7 @@ packages:
- webpack
dev: true
/unplugin/0.6.2_vite@2.9.6:
/unplugin/0.6.2_vite@2.9.9:
resolution: {integrity: sha512-+QONc2uBFQbeo4x5mlJHjTKjR6pmuchMpGVrWhwdGFFMb4ttFZ4E9KqhOOrNcm3Q8NNyB1vJ4s5e36IZC7UWYw==}
peerDependencies:
esbuild: '>=0.13'
......@@ -2565,7 +2601,7 @@ packages:
optional: true
dependencies:
chokidar: 3.5.3
vite: 2.9.6_sass@1.51.0
vite: 2.9.9_sass@1.51.0
webpack-sources: 3.2.3
webpack-virtual-modules: 0.4.3
dev: true
......@@ -2625,7 +2661,7 @@ packages:
resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
dev: true
/vite-plugin-checker/0.4.6_vite@2.9.6:
/vite-plugin-checker/0.4.6_vite@2.9.9:
resolution: {integrity: sha512-oFel33hlsc8aUspfq0ThQRpWsfrG772fmZ5qPHKUhmew6ieejd2viITlwXHIRBY6hE3U0kirXoTWwft3DdbK+g==}
hasBin: true
peerDependencies:
......@@ -2642,15 +2678,15 @@ packages:
npm-run-path: 4.0.1
strip-ansi: 6.0.1
tiny-invariant: 1.2.0
vite: 2.9.6_sass@1.51.0
vite: 2.9.9_sass@1.51.0
vscode-languageclient: 7.0.0
vscode-languageserver: 7.0.0
vscode-languageserver-textdocument: 1.0.4
vscode-uri: 3.0.3
dev: true
/vite/2.9.6_sass@1.51.0:
resolution: {integrity: sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==}
/vite/2.9.9_sass@1.51.0:
resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==}
engines: {node: '>=12.2.0'}
hasBin: true
peerDependencies:
......@@ -2666,7 +2702,7 @@ packages:
optional: true
dependencies:
esbuild: 0.14.36
postcss: 8.4.12
postcss: 8.4.13
resolve: 1.22.0
rollup: 2.70.2
sass: 1.51.0
......@@ -2756,8 +2792,8 @@ packages:
- supports-color
dev: true
/vue-router/4.0.14_vue@3.2.33:
resolution: {integrity: sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==}
/vue-router/4.0.15_vue@3.2.33:
resolution: {integrity: sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg==}
peerDependencies:
vue: ^3.2.0
dependencies:
......@@ -2765,14 +2801,14 @@ packages:
vue: 3.2.33
dev: false
/vue-tsc/0.34.10_typescript@4.6.3:
resolution: {integrity: sha512-rWU4SjDqk9ylQN2hbnyP+rEu8W2a712DWUmciX6rDnId1m8sN/cuypTKjWjHHjaBLWNKULoEakRTOvrQ4ainhw==}
/vue-tsc/0.34.13_typescript@4.6.4:
resolution: {integrity: sha512-xvmUq03dFpLfYSfE8jl2lwDPcbrmh81TB+OsVkkp+Em3Ar4ff2XgMKuUgoFXpWTv5tLLoYYpggFWwYADa2zgQg==}
hasBin: true
peerDependencies:
typescript: '*'
dependencies:
'@volar/vue-typescript': 0.34.10
typescript: 4.6.3
'@volar/vue-typescript': 0.34.13
typescript: 4.6.4
dev: true
/vue/3.2.33:
......
......@@ -6,7 +6,17 @@ export default {
<script setup lang="ts">
import type { Component } from 'vue'
import { User, Picture, Files, VideoCamera, Notebook, DishDot, QuestionFilled, Stamp } from '@element-plus/icons-vue'
import {
User,
Picture,
Files,
VideoCamera,
Notebook,
DishDot,
QuestionFilled,
Stamp,
Calendar
} from '@element-plus/icons-vue'
const route = useRoute()
interface IMenuItem {
name: string
......@@ -23,7 +33,8 @@ const menuList: IMenuItem[] = [
{ name: '课程管理', path: '/course', icon: Notebook },
{ name: '团队管理', path: '/team', icon: DishDot },
{ name: '问答管理', path: '/qa', icon: QuestionFilled },
{ name: '审核管理', path: '/audit', icon: Stamp }
{ name: '审核管理', path: '/audit', icon: Stamp },
{ name: '知识日历', path: '/share', icon: Calendar }
]
const defaultActive = computed(() => {
// 扁平菜单
......
......@@ -50,7 +50,7 @@ function update() {
</el-form-item>
</el-form>
<template #footer>
<el-button type="text" @click="$emit('update:modelValue', false)">取消</el-button>&nbsp;&nbsp;
<el-button text @click="$emit('update:modelValue', false)">取消</el-button>
<el-button type="primary" @click="onSubmit">保存</el-button>
</template>
</el-dialog>
......
import httpRequest from '@/utils/axios'
// 获取资料消息列表
// 类型(1:入学指南,2:学习地图,3:考试攻略,4:消息)
export function getShareList(params?: { title?: string; page?: number; page_size?: number }) {
return httpRequest.get('/api/psp/backend/share/index', { params })
}
// 创建资料
export function createShare(data: { title: string; content: string[]; weight?: string }) {
return httpRequest.post('/api/psp/backend/share/create', data)
}
// 更新资料
export function updateShare(data: { id: string; title: string; content: string[]; weight?: string }) {
return httpRequest.post('/api/psp/backend/share/update', data)
}
// 获取资料详情
export function getShare(params: { id: string }) {
return httpRequest.get('/api/psp/backend/share/view', { params })
}
// 删除资料
export function deleteShare(data: { id: string }) {
return httpRequest.post('/api/psp/backend/share/delete', data)
}
import type { RouteRecordRaw } from 'vue-router'
import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [
{
path: '/share',
component: AppLayout,
children: [
{ path: '', component: () => import('./views/List.vue') },
{ path: 'create', component: () => import('./views/Update.vue') },
{ path: 'update/:id', component: () => import('./views/Update.vue'), props: true }
]
}
]
<script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import { getShareList, deleteShare } from '../api'
const appList = ref()
const listOptions = {
remote: {
httpRequest: getShareList,
params: { title: '' }
},
filters: [{ type: 'input', prop: 'title', placeholder: '标题' }],
columns: [
{ label: '标题', prop: 'title' },
{ label: '权重', prop: 'weight' },
{ label: '创建时间', prop: 'created_time' },
{ label: '操作', slots: 'table-operate', width: 160, align: 'right' }
]
}
const onRemove = (row: any) => {
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
deleteShare({ id: row.id }).then(() => {
ElMessage({ type: 'success', message: '删除成功' })
appList.value?.refetch()
})
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList">
<template #header-aside>
<router-link to="/share/create">
<el-button type="primary">创建</el-button>
</router-link>
</template>
<template #table-cover="{ row }">
<el-image
:src="row.cover_page + '?x-oss-process=image/resize,m_fill,h_100,w_200'"
:preview-src-list="[row.cover_page]"
preview-teleported
lazy
fit="cover"
style="width: 200px; height: 100px"
/>
</template>
<template #table-operate="{ row }">
<el-space>
<router-link :to="`/share/update/${row.id}`">
<el-button plain>编辑</el-button>
</router-link>
<el-button type="danger" plain @click="onRemove(row)">删除</el-button>
</el-space>
</template>
</AppList>
</AppCard>
</template>
<script setup lang="ts">
import { ElMessage } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { CirclePlus, Delete } from '@element-plus/icons-vue'
import { createShare, updateShare, getShare } from '../api'
const props = defineProps<{ id?: string }>()
const router = useRouter()
const formRef = ref<FormInstance>()
const form = reactive<{ title: string; content: string[]; weight: string }>({ title: '', content: [], weight: '0' })
const rules = {
title: [{ required: true, message: '请输入标题', trigger: 'blur' }]
}
// 提交
const onSubmit = () => {
if (!formRef.value) return
formRef.value.validate().then(() => {
props.id ? update() : create()
})
}
// 取消
const onCancel = () => {
router.replace('/share')
}
// 创建
const create = () => {
createShare(form).then(() => {
ElMessage({ message: '创建成功', type: 'success' })
router.push('/share')
})
}
// 修改
const update = () => {
const params = { ...form, id: props.id as string }
updateShare(params).then(() => {
ElMessage({ message: '修改成功', type: 'success' })
router.push('/share')
})
}
// 添加金句
const onAddText = () => {
form.content = [...form.content, '']
}
// 删除金句
const onRemoveText = (index: number) => {
form.content.splice(index, 1)
}
onMounted(() => {
props.id &&
getShare({ id: props.id }).then(res => {
Object.assign(form, res.data)
})
})
</script>
<template>
<AppCard>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" />
</el-form-item>
<el-form-item label="权重" prop="weight">
<el-input type="number" v-model="form.weight" />
</el-form-item>
<el-form-item label="金句" prop="content">
<div class="text-wrapper">
<div class="text-item" v-for="(item, index) in form.content" :key="index">
<el-input type="textarea" v-model="form.content[index]" />
<el-button :icon="Delete" @click="onRemoveText(index)"></el-button>
</div>
<el-button :icon="CirclePlus" @click="onAddText">添加金句</el-button>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" auto-insert-space @click="onSubmit">保存</el-button>
<el-button auto-insert-space @click="onCancel">取消</el-button>
</el-form-item>
</el-form>
</AppCard>
</template>
<style lang="scss" scoped>
.text-wrapper {
width: 100%;
background-color: #f9f9f9;
padding: 10px;
border-radius: 8px;
}
.text-item {
display: flex;
align-items: center;
margin-bottom: 20px;
.el-button {
margin-left: 20px;
}
}
</style>
......@@ -15,7 +15,7 @@ const httpRequest = axios.create({
httpRequest.interceptors.request.use(
function (config) {
if (config.headers?.['Content-Type'] === 'application/x-www-form-urlencoded') {
config.data = qs.stringify(config.data)
config.data = qs.stringify(config.data, { skipNulls: true })
}
if (config.headers?.['Content-Type'] === 'multipart/form-data') {
const formData = new window.FormData()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论