项目对接完毕

This commit is contained in:
13218645326 2023-12-04 19:10:26 +08:00
parent dcb91bcbb0
commit 87a6a908eb
31 changed files with 1832 additions and 78 deletions

16
components.d.ts vendored
View File

@ -8,15 +8,30 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
ComNav: typeof import('./src/components/comNav/index.vue')['default']
EditorWang: typeof import('./src/components/com/editorWang.vue')['default']
ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElForm: typeof import('element-plus/es')['ElForm']
'ElForm-': typeof import('element-plus/es')['ElForm-']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
ElOption: typeof import('element-plus/es')['ElOption']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTag: typeof import('element-plus/es')['ElTag']
ElUpload: typeof import('element-plus/es')['ElUpload']
Header: typeof import('./src/components/header.vue')['default']
HeaderNav: typeof import('./src/components/headerCom/headerNav.vue')['default']
HeaderTop: typeof import('./src/components/headerCom/headerTop.vue')['default']
@ -24,5 +39,6 @@ declare module 'vue' {
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SubMenu: typeof import('./src/components/comNav/sideBar/subMenu.vue')['default']
UploadCom: typeof import('./src/components/com/uploadCom.vue')['default']
}
}

4
env.d.ts vendored
View File

@ -1,2 +1,4 @@
/// <reference types="vite/client" />
declare module "nprogress"
declare module "nprogress"
declare module "@wangeditor/editor-for-vue"

View File

@ -14,9 +14,13 @@
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@jsdawn/vue3-tinymce": "^2.0.4",
"@vueuse/core": "^10.6.1",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.6.2",
"element-plus": "^2.4.3",
"js-base64": "^3.7.5",
"mitt": "^3.0.1",
"moment": "^2.29.4",
"nprogress": "^0.2.0",

View File

@ -8,15 +8,27 @@ dependencies:
'@element-plus/icons-vue':
specifier: ^2.3.1
version: 2.3.1(vue@3.3.4)
'@jsdawn/vue3-tinymce':
specifier: ^2.0.4
version: 2.0.4(vue@3.3.4)
'@vueuse/core':
specifier: ^10.6.1
version: 10.6.1(vue@3.3.4)
'@wangeditor/editor':
specifier: ^5.1.23
version: 5.1.23
'@wangeditor/editor-for-vue':
specifier: ^5.1.12
version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.3.4)
axios:
specifier: ^1.6.2
version: 1.6.2
element-plus:
specifier: ^2.4.3
version: 2.4.3(vue@3.3.4)
js-base64:
specifier: ^3.7.5
version: 3.7.5
mitt:
specifier: ^3.0.1
version: 3.0.1
@ -363,6 +375,13 @@ packages:
'@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5)
dev: true
/@babel/runtime@7.23.5:
resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
dev: false
/@babel/template@7.22.15:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'}
@ -653,6 +672,16 @@ packages:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
/@jsdawn/vue3-tinymce@2.0.4(vue@3.3.4):
resolution: {integrity: sha512-2s9RdeivIIrJQ4pDbS8DgpnL2Nmiojzjuj1AQKWERd891JULSlJbf8HAxY8OIVXIrQYh9vBvPG4orwFxswZCjw==}
engines: {node: '>14.0.0'}
peerDependencies:
vue: ^3.2.6
dependencies:
vue: 3.3.4
vue-router: 4.2.5(vue@3.3.4)
dev: false
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@ -697,6 +726,10 @@ packages:
resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
dev: false
/@transloadit/prettier-bytes@0.0.7:
resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
dev: false
/@tsconfig/node18@18.2.2:
resolution: {integrity: sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==}
dev: true
@ -705,6 +738,10 @@ packages:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
dev: true
/@types/event-emitter@0.3.5:
resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==}
dev: false
/@types/lodash-es@4.17.12:
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
dependencies:
@ -733,6 +770,47 @@ packages:
/@types/web-bluetooth@0.0.20:
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
/@uppy/companion-client@2.2.2:
resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==}
dependencies:
'@uppy/utils': 4.1.3
namespace-emitter: 2.0.1
dev: false
/@uppy/core@2.3.4:
resolution: {integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==}
dependencies:
'@transloadit/prettier-bytes': 0.0.7
'@uppy/store-default': 2.1.1
'@uppy/utils': 4.1.3
lodash.throttle: 4.1.1
mime-match: 1.0.2
namespace-emitter: 2.0.1
nanoid: 3.3.7
preact: 10.19.2
dev: false
/@uppy/store-default@2.1.1:
resolution: {integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==}
dev: false
/@uppy/utils@4.1.3:
resolution: {integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==}
dependencies:
lodash.throttle: 4.1.1
dev: false
/@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4):
resolution: {integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==}
peerDependencies:
'@uppy/core': ^2.3.3
dependencies:
'@uppy/companion-client': 2.2.2
'@uppy/core': 2.3.4
'@uppy/utils': 4.1.3
nanoid: 3.3.7
dev: false
/@vitejs/plugin-vue-jsx@3.0.2(vite@4.4.11)(vue@3.3.4):
resolution: {integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -984,6 +1062,192 @@ packages:
- vue
dev: false
/@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==}
peerDependencies:
'@wangeditor/core': 1.x
dom7: ^3.0.0
lodash.throttle: ^4.1.1
nanoid: ^3.2.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
is-url: 1.2.4
lodash.throttle: 4.1.1
nanoid: 3.3.7
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==}
peerDependencies:
'@wangeditor/core': 1.x
dom7: ^3.0.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
prismjs: 1.29.0
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==}
peerDependencies:
'@uppy/core': ^2.1.1
'@uppy/xhr-upload': ^2.0.3
dom7: ^3.0.0
is-hotkey: ^0.2.0
lodash.camelcase: ^4.3.0
lodash.clonedeep: ^4.5.0
lodash.debounce: ^4.0.8
lodash.foreach: ^4.5.0
lodash.isequal: ^4.5.0
lodash.throttle: ^4.1.1
lodash.toarray: ^4.4.0
nanoid: ^3.2.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@types/event-emitter': 0.3.5
'@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
dom7: 3.0.0
event-emitter: 0.3.5
html-void-elements: 2.0.1
i18next: 20.6.1
is-hotkey: 0.2.0
lodash.camelcase: 4.3.0
lodash.clonedeep: 4.5.0
lodash.debounce: 4.0.8
lodash.foreach: 4.5.0
lodash.isequal: 4.5.0
lodash.throttle: 4.1.1
lodash.toarray: 4.4.0
nanoid: 3.3.7
scroll-into-view-if-needed: 2.2.31
slate: 0.72.8
slate-history: 0.66.0(slate@0.72.8)
snabbdom: 3.5.1
dev: false
/@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.3.4):
resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==}
peerDependencies:
'@wangeditor/editor': '>=5.1.0'
vue: ^3.0.5
dependencies:
'@wangeditor/editor': 5.1.23
vue: 3.3.4
dev: false
/@wangeditor/editor@5.1.23:
resolution: {integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==}
dependencies:
'@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
'@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/basic-modules@1.1.7)(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/core@1.1.19)(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
is-hotkey: 0.2.0
lodash.camelcase: 4.3.0
lodash.clonedeep: 4.5.0
lodash.debounce: 4.0.8
lodash.foreach: 4.5.0
lodash.isequal: 4.5.0
lodash.throttle: 4.1.1
lodash.toarray: 4.4.0
nanoid: 3.3.7
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19)(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==}
peerDependencies:
'@wangeditor/core': 1.x
dom7: ^3.0.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==}
peerDependencies:
'@wangeditor/core': 1.x
dom7: ^3.0.0
lodash.isequal: ^4.5.0
lodash.throttle: ^4.1.1
nanoid: ^3.2.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
lodash.isequal: 4.5.0
lodash.throttle: 4.1.1
nanoid: 3.3.7
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/basic-modules@1.1.7)(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==}
peerDependencies:
'@uppy/core': ^2.0.3
'@uppy/xhr-upload': ^2.0.3
'@wangeditor/basic-modules': 1.x
'@wangeditor/core': 1.x
dom7: ^3.0.0
lodash.foreach: ^4.5.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
'@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19)(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
lodash.foreach: 4.5.0
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(@wangeditor/core@1.1.19)(dom7@3.0.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1):
resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==}
peerDependencies:
'@uppy/core': ^2.1.4
'@uppy/xhr-upload': ^2.0.7
'@wangeditor/core': 1.x
dom7: ^3.0.0
nanoid: ^3.2.0
slate: ^0.72.0
snabbdom: ^3.1.0
dependencies:
'@uppy/core': 2.3.4
'@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4)
'@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3)(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.7)(slate@0.72.8)(snabbdom@3.5.1)
dom7: 3.0.0
nanoid: 3.3.7
slate: 0.72.8
snabbdom: 3.5.1
dev: false
/acorn@8.11.2:
resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
engines: {node: '>=0.4.0'}
@ -1176,6 +1440,10 @@ packages:
engines: {node: '>= 12'}
dev: false
/compute-scroll-into-view@1.0.20:
resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
dev: false
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: false
@ -1223,6 +1491,13 @@ packages:
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
/d@1.0.1:
resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
dependencies:
es5-ext: 0.10.62
type: 1.2.0
dev: false
/dayjs@1.11.10:
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
dev: false
@ -1255,6 +1530,12 @@ packages:
entities: 2.2.0
dev: false
/dom7@3.0.0:
resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==}
dependencies:
ssr-window: 3.0.0
dev: false
/domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
dev: false
@ -1338,6 +1619,31 @@ packages:
is-arrayish: 0.2.1
dev: true
/es5-ext@0.10.62:
resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==}
engines: {node: '>=0.10'}
requiresBuild: true
dependencies:
es6-iterator: 2.0.3
es6-symbol: 3.1.3
next-tick: 1.1.0
dev: false
/es6-iterator@2.0.3:
resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
dependencies:
d: 1.0.1
es5-ext: 0.10.62
es6-symbol: 3.1.3
dev: false
/es6-symbol@3.1.3:
resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==}
dependencies:
d: 1.0.1
ext: 1.7.0
dev: false
/esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
@ -1389,6 +1695,13 @@ packages:
/estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
/event-emitter@0.3.5:
resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
dependencies:
d: 1.0.1
es5-ext: 0.10.62
dev: false
/execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@ -1419,6 +1732,12 @@ packages:
strip-final-newline: 3.0.0
dev: false
/ext@1.7.0:
resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
dependencies:
type: 2.7.2
dev: false
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
@ -1570,6 +1889,10 @@ packages:
engines: {node: '>=8'}
dev: true
/html-void-elements@2.0.1:
resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
dev: false
/human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
@ -1580,10 +1903,20 @@ packages:
engines: {node: '>=16.17.0'}
dev: false
/i18next@20.6.1:
resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==}
dependencies:
'@babel/runtime': 7.23.5
dev: false
/immediate@3.0.6:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
dev: false
/immer@9.0.21:
resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
dev: false
/immutable@4.3.4:
resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==}
@ -1617,10 +1950,19 @@ packages:
dependencies:
is-extglob: 2.1.1
/is-hotkey@0.2.0:
resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
dev: false
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
/is-plain-object@5.0.0:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
dev: false
/is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
@ -1631,6 +1973,10 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: false
/is-url@1.2.4:
resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
dev: false
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
dev: false
@ -1649,6 +1995,10 @@ packages:
minimatch: 3.1.2
dev: false
/js-base64@3.7.5:
resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==}
dev: false
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
@ -1739,6 +2089,34 @@ packages:
lodash-es: 4.17.21
dev: false
/lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
dev: false
/lodash.clonedeep@4.5.0:
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
dev: false
/lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
dev: false
/lodash.foreach@4.5.0:
resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
dev: false
/lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
dev: false
/lodash.throttle@4.1.1:
resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
dev: false
/lodash.toarray@4.4.0:
resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==}
dev: false
/lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: false
@ -1802,6 +2180,12 @@ packages:
engines: {node: '>= 0.6'}
dev: false
/mime-match@1.0.2:
resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==}
dependencies:
wildcard: 1.1.2
dev: false
/mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
@ -1862,11 +2246,19 @@ packages:
resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
dev: true
/namespace-emitter@2.0.1:
resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==}
dev: false
/nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
/next-tick@1.1.0:
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
dev: false
/no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
@ -2088,6 +2480,15 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/preact@10.19.2:
resolution: {integrity: sha512-UA9DX/OJwv6YwP9Vn7Ti/vF80XL+YA5H2l7BpCtUr3ya8LWHFzpiO5R+N7dN16ujpIxhekRFuOOF82bXX7K/lg==}
dev: false
/prismjs@1.29.0:
resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
engines: {node: '>=6'}
dev: false
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
dev: false
@ -2127,6 +2528,10 @@ packages:
dependencies:
picomatch: 2.3.1
/regenerator-runtime@0.14.0:
resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
dev: false
/relateurl@0.2.7:
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
engines: {node: '>= 0.10'}
@ -2170,6 +2575,12 @@ packages:
immutable: 4.3.4
source-map-js: 1.0.2
/scroll-into-view-if-needed@2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
dependencies:
compute-scroll-into-view: 1.0.20
dev: false
/scule@1.1.0:
resolution: {integrity: sha512-vRUjqhyM/YWYzT+jsMk6tnl3NkY4A4soJ8uyh3O6Um+JXEQL9ozUCe7pqrxn3CSKokw0hw3nFStfskzpgYwR0g==}
dev: true
@ -2214,6 +2625,28 @@ packages:
engines: {node: '>=14'}
dev: false
/slate-history@0.66.0(slate@0.72.8):
resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==}
peerDependencies:
slate: '>=0.65.3'
dependencies:
is-plain-object: 5.0.0
slate: 0.72.8
dev: false
/slate@0.72.8:
resolution: {integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==}
dependencies:
immer: 9.0.21
is-plain-object: 5.0.0
tiny-warning: 1.0.3
dev: false
/snabbdom@3.5.1:
resolution: {integrity: sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==}
engines: {node: '>=8.3.0'}
dev: false
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
@ -2252,6 +2685,10 @@ packages:
resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
dev: true
/ssr-window@3.0.0:
resolution: {integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==}
dev: false
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
@ -2308,6 +2745,10 @@ packages:
source-map-support: 0.5.21
dev: false
/tiny-warning@1.0.3:
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
dev: false
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@ -2332,6 +2773,14 @@ packages:
engines: {node: '>=16'}
dev: true
/type@1.2.0:
resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
dev: false
/type@2.7.2:
resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
dev: false
/typescript@5.2.2:
resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
engines: {node: '>=14.17'}
@ -2620,6 +3069,10 @@ packages:
dependencies:
isexe: 2.0.0
/wildcard@1.1.2:
resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==}
dev: false
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
dev: true

View File

@ -1,10 +1,13 @@
<template>
<RouterView />
<el-config-provider :size="size" :z-index="zIndex">
<RouterView />
</el-config-provider>
</template>
<script setup lang="ts">
const zIndex = ref(3000)
const size = ref("medium")
</script>
<style lang="scss">
@import url("./style/css/reset.css");
</style>

View File

@ -0,0 +1,75 @@
<template>
<div style="border: 1px solid #ccc">
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
<Editor style="height: 500px; overflow-y: hidden;" v-model="valueHtml" :defaultConfig="editorConfig" :mode="mode"
@onCreated="handleCreated" />
</div>
</template>
<script lang="ts" setup>
import '@wangeditor/editor/dist/css/style.css' // css
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
// shallowRef
const editorRef = shallowRef()
// HTML
const valueHtml = ref()
// ajax
onMounted(() => {
setTimeout(() => {
valueHtml.value = ''
}, 1500)
})
const toolbarConfig = {
excludeKeys: [//toolbarKey,
// "group-more-style",
'group-video',//
// 'redo',
// 'undo',
// 'group-image',
]
}
const editorConfig = {
placeholder: '请输入内容...',
readOnly:false
}
//
onBeforeUnmount(() => {
const editor = editorRef.value
if (editor == null) return
editor.destroy()
})
const handleCreated = (editor: any) => {
editorRef.value = editor // editor
}
const getHtmlByFather =()=>{//html
return editorRef.value.getHtml()
}
const setHtmlByFather =(val:any)=>{
editorRef.value.setHtml(val)
}
const editorIsEmpty =()=>{
return editorRef.value.isEmpty()
}
const editorClear =()=>{
return editorRef.value.clear()
}
defineExpose({
getHtmlByFather,
setHtmlByFather,
editorIsEmpty,
editorClear
})
</script>

View File

@ -0,0 +1,233 @@
<template>
<div>
<!--action="/api/abk/web/v1/resource/file" -->
<el-upload :action="actionUrl" :auto-upload="autoUpload" style="width: 100%" :on-success="(response, file) => successUpload(response, file)"
:on-error="errorUpload" :accept="acceptTypeList.join(',')" :before-upload="beforeUpload" :multiple="multiple"
:limit="maxLimit" :on-exceed="handleExceed" :file-list="fileList" :disabled="disabledFlag"
:on-remove="(file, fileList) => removeFile(file, fileList)" :on-preview="(file) => preview(file)"
:on-progress="(event, file, fileList) => onProgressFn(event, file, fileList)"
list-type="picture-card"
>
<!-- 上传的按钮 或者 icon 通过具名插槽的方式 -->
<slot name="uploadBtn"></slot>
</el-upload>
<el-progress v-if="showProcessFlag && processFlag" :percentage="loadProcess"></el-progress>
</div>
</template>
<script lang="ts" setup>
import { ref ,nextTick} from "vue"
import { ElMessage } from 'element-plus'
import {Base64} from 'js-base64'
const props = defineProps({
actionUrl: {
//
type: String,
default: '',
},
autoUpload:{//
type:Boolean,
default:false
},
acceptTypeList: {
//
type: Array,
default: () => {
return ['.jpg','.jpeg','.png']
// ['doc', 'docx', 'xlsx', 'xls', 'txt', 'pdf','jpg','jpeg','png','zip,'rar']
},
},
multiple: {//
type: Boolean,
default: false,
},
maxLimit: {
//
type: Number || String,
default: 1,
},
maxSize: {
// M
type: Number || String,
default: 4,
},
disabledFlag: {
//
type: Boolean,
default: false,
},
fileList: {//
type: Array,
default: () => {
return [ ]
},
},
listType:{
type: String,//'text' | 'picture' | 'picture-card'
default: 'picture',
},
extraData: {}, // name
/*
{
name:'12321'
}
*/
dragFlag: {
type: Boolean,
default: true, // element
},
downLoadTypeList: {
//
type: Array,
default: () => {
return ['doc', 'docx', 'xlsx', 'xls', 'txt']
},
},
preveiwTypeList: {
//
type: Array,
default: () => {
return ['pdf', 'jpg', 'jpeg', 'png']
},
},
officePreviewFlag: {
//office线
type: Boolean,
default: false,
},
showProcessFlag: {
//
type: Boolean,
default: false,
},
})
// office
// https://view.officeapps.live.com/op/view.aspx?src=
// https://view.officeapps.live.com/op/view.aspx?src=
//
const officeOnlineAddress =
'https://view.officeapps.live.com/op/view.aspx?src='
const officeType = ['doc', 'docx', 'xlsx', 'xls']
let processFlag = ref(false)//
let loadProcess = ref(0)//
//
const successUpload = (response:any, file:any) => {
console.log("successUpload",response,file)
if (response.rt.status === 200) {
props.fileList.push({
url: response.data,
name: file.name,
})
} else {
ElMessage({
type: 'warning',
message: response.data
})
}
}
const errorUpload = (res: any) => {
ElMessage({
type: 'warning',
message: '上传失败请重试!'
})
}
const beforeUpload = (file) => {
const { name = '', size } = file
if (size > props.maxSize * 1024 * 1000) {
ElMessage({
type: 'warning',
message: `文件最大仅支持${props.maxSize}M`
})
return false
}
if (!props.acceptTypeList.includes(name.split('.').pop())+'.') {
ElMessage({
type: 'warning',
message: `文件格式仅支持${props.acceptTypeList.join(',')}M`
})
return false
}
}
const handleExceed = (files, fileList) => {
ElMessage({
type: 'warning',
message: `当前限制选择 10 个文件,本次选择了 ${files.length
} 个文件共选择了 ${files.length + fileList.length} 个文件`
})
}
//
const removeFile = (file, data) => {
console.log(file, data)
props.fileList = data
}
//
const preview = (data) => {
const { url, response = {} } = data || {}
let name = data.name
const downLoadTypeList = props.downLoadTypeList
const preveiwTypeList = props.preveiwTypeList
if (!name) {
name = ''
}
const suffixFileType = name.split('.').pop()
if (downLoadTypeList.includes(suffixFileType)) {
// 'doc', 'docx', 'xlsx', 'xls', 'txt'
name = name.replace(/&/g, '') // &
const target = encodeURIComponent(
Base64.encode(
`${location.origin
}/api/abk/web/v1/resource/file?fileId=${url || response.data
}&fullfilename=${name}&sid=4AC67ADB4E264AB0A8B899A671072875`
)
)
if (
props.officePreviewFlag &&
officeType.includes(suffixFileType)
) {
// office
const preveiewURL = officeOnlineAddress + target
window.open(preveiewURL)
} else {
// office
window.open(
`https://test/preview/onlinePreview?url=${target}`,
'_blank'
)
}
} else if (preveiwTypeList.includes(suffixFileType)) {
//
window.open(
'/api/abk/web/v1/resource/file?fileId=' +
(url || response.data),
'_blank'
)
}
}
const onProgressFn=(event, file, fileList)=>{
processFlag.value = true
loadProcess.value = event.percent.toFixed(2)
if (loadProcess.value >= 100) {
loadProcess.value = 100
nextTick(() => {
processFlag.value = false
})
}
}
</script>
<style lang="scss" scoped></style>

View File

@ -18,7 +18,7 @@ const navStore = comNavStore()
textColor:"",
activeTextColor:'',
defaultActive:"",
defaultOpeneds:['staticDefault_PathParent'],
defaultOpeneds:['staticDefault_PathParent&&配置管理'],
router:false,
collapseTransition:true,
menuList:list,

View File

@ -36,10 +36,7 @@ const props: any = defineProps({
type: Array,
default: []
},
uniqueOpened: {
type: Boolean,
default: false,
},
menuTrigger: {
type: String,
default: "hover"//hover / click

View File

@ -23,9 +23,11 @@ const TapNavTagFn=(tag:any)=>{
<style scoped lang="scss">
.nav_out{
height: 48px;
box-shadow: 0px 0px 12px rgba(0, 0, 0, .12);
box-shadow:$ShadowColor;
display: flex;
align-items: center;
padding-left: 12px;
background-color: #fff;
}
.navItem{
margin-right:8px;

View File

@ -15,7 +15,7 @@ const routes: Array<RouteRecordRaw> = [
{
path: 'swiperConfig',
name: 'swiperConfig',
component: () => import('views/configuration/swiperConfig.vue'),
component: () => import('views/configuration/swiperConfig/index.vue'),
meta: {
title: '轮播图配置',
keepAlive: true,
@ -25,7 +25,7 @@ const routes: Array<RouteRecordRaw> = [
{
path: 'specialInformationConfiguration',
name: 'specialInformationConfiguration',
component: () => import('views/configuration/specialInformationConfiguration.vue'),
component: () => import('views/configuration/specialInformationConfiguration/index.vue'),
meta: {
title: '专题资讯配置',
keepAlive: true,
@ -35,7 +35,7 @@ const routes: Array<RouteRecordRaw> = [
{
path: 'privacyAgreement',
name: 'privacyAgreement',
component: () => import('views/configuration/privacyAgreement.vue'),
component: () => import('views/configuration/privacyAgreement/index.vue'),
meta: {
title: '隐私协议模板管理',
keepAlive: true,
@ -43,16 +43,16 @@ const routes: Array<RouteRecordRaw> = [
}
},
{
path: 'enterpriseManagement',
name: 'enterpriseManagement',
component: () => import('views/enterpriseManagement/AppMain.vue'),
meta: {
title: '企业管理',
keepAlive: true,
AuthFlag: true
},
},
// {
// path: 'enterpriseManagement',
// name: 'enterpriseManagement',
// component: () => import('views/enterpriseManagement/AppMain.vue'),
// meta: {
// title: '企业管理',
// keepAlive: true,
// AuthFlag: true
// },
// },
{
path: 'enterpriseType',

View File

@ -21,7 +21,7 @@ export const list:any = [
{
path: 'specialInformationConfiguration',
name: 'specialInformationConfiguration',
component: 'views/configuration/specialInformationConfiguration.vue',
component: 'views/configuration/specialInformationConfiguration/index.vue',
meta: {
title: '专题资讯配置',
keepAlive: true,
@ -31,7 +31,7 @@ export const list:any = [
{
path: 'privacyAgreement',
name: 'privacyAgreement',
component: 'views/configuration/privacyAgreement.vue',
component: 'views/configuration/privacyAgreement/index.vue',
meta: {
title: '隐私协议模板管理',
keepAlive: true,
@ -44,21 +44,12 @@ export const list:any = [
name: "企业管理",
path: '',
meta: {
title: '轮播图配置',
title: '企业管理',
keepAlive: true,
AuthFlag: true
},
children: [
{
path: 'enterpriseManagement',
name: 'enterpriseManagement',
component: 'views/enterpriseManagement/AppMain.vue',
meta: {
title: '企业管理',
keepAlive: true,
AuthFlag: true
},
},
{
path: 'enterpriseType',

View File

@ -1,26 +1,29 @@
export const comNavStore = defineStore('main_com_nav', {
state: () => {
return {
topNavList: [] as any, //loading控制,
maxNavCount: 5
maxNavCount: 8
}
},
getters: {},
actions: {
addNavTarget(ev:any) {
console.log("topNavList",this.topNavList)
if(!this.topNavList.map((ele:any)=>ele.path).includes(ev.path)){
addNavTarget(ev: any) {
console.log("topNavList", this.topNavList)
if (!this.topNavList.map((ele: any) => ele.path).includes(ev.path)) {
this.topNavList.push(ev)
}
}
if (this.topNavList.length > this.maxNavCount) {
this.topNavList.splice(0,1)
}
},
deleteNavTarget(index:any) {
if(this.topNavList.length>0){
this.topNavList.splice(index,1)
}
deleteNavTarget(index: any) {
if (this.topNavList.length > 0) {
this.topNavList.splice(index, 1)
}
},
clearTarget(val: any) {
this.topNavList=[]
this.topNavList = []
}
},
persist: {

View File

@ -2,4 +2,22 @@
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
.search_header_top_row1{
.el-card__body{
display: flex;
justify-content: space-between;
.el-form-item{
margin-bottom: 0;
}
}
}
.content_body_row{
margin-top: 12px;
flex: 1;
}

View File

@ -1,5 +1,5 @@
$main-color: #3fb9f7;
$second-color: #666;
$ShadowColor:0px 0px 12px rgba(0, 0, 0, .12);
$headerTopHeight:72px;

21
src/utils/elementCom.ts Normal file
View File

@ -0,0 +1,21 @@
import { ElMessage, ElMessageBox } from 'element-plus'
export const ElConfirmBeforeOpert =(title='操作确认',text="是否确定删除数据?",callBack,confirmText='确定',cancelText='取消',row:any)=>{
ElMessageBox.confirm(
text,
title,
{
confirmButtonText:confirmText,
cancelButtonText:cancelText,
type: 'warning',
}
)
.then(() => {
callBack(row)
})
.catch(() => {
})
}

1
src/utils/reg.ts Normal file
View File

@ -0,0 +1 @@
export const linkReg = /^((http|https):\/\/)?(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+([A-Za-z]+)[/\?\:]?.*$/;

View File

@ -48,3 +48,6 @@ export const isIOS = inBrowser
export const isAndroid = inBrowser
? /android|linux/.test(navigator.userAgent.toLowerCase())
: false

View File

@ -9,7 +9,10 @@
</div>
<div class="main_content">
<headerNav></headerNav>
<RouterView />
<div class="view_out_c">
<RouterView />
</div>
</div>
</div>
</div>
@ -26,7 +29,7 @@ import headerNav from "components/headerCom/headerNav.vue"
flex-direction: column;
width: 100vw;
height: 100vh;
background-color:#f0f2f5;
.main_top {
height: $headerTopHeight;
}
@ -39,22 +42,37 @@ import headerNav from "components/headerCom/headerNav.vue"
.main_nav {
width: 240px;
border-right: 1px solid $second-color;
background-color:#d3e6f3;
}
.main_content {
border-left: 1px solid $second-color;
width: 100%;
overflow-y: auto;
height: calc(100% - var($headerTopHeight) - 48px);
height: calc(100% - 4px);
margin-left: 8px;
display: flex;
flex-direction: column;
&::-webkit-scrollbar {
w &::-webkit-scrollbar {
width: 2px;
}
&::-webkit-scrollbar-thumb{
&::-webkit-scrollbar-thumb {
height: 6px;
width: 2px;
background-color: $main-color;
}
}
.view_out_c {
width:calc(100% - 24px) ;
flex: 1;
margin: 12px;
display:flex;
flex-direction: column;
}
}
}
}

View File

@ -1,9 +1,9 @@
<template>
<div>
</div>
</template>
<script setup lang="ts"></script>
<script lang="ts" setup>
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss"></style>

View File

@ -1,9 +0,0 @@
<template>
<div>
</div>
</template>
<script setup lang="ts"></script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,117 @@
<template>
<el-dialog v-model="addShow" :title="title" width="1200px" draggable :close-on-click-modal="false" >
<el-form :model="form" ref="ruleFormRef" label-width="102px" :rules="formRules" style="padding: 0 80px 0px 0;">
<el-form-item label="模版编号:" prop="title">
<el-input v-model.trim="form.title" placeholder="请输入模版编号" clearable maxlength="30" />
</el-form-item>
<el-form-item label="应用模块" prop="applyModel">
<el-select v-model="form.applyModel" placeholder="Select" clearable filterable style="width: 100%;">
<el-option v-for="item in applyModelList.list" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="协议附件:" prop="fileUrl">
<uploadCom :maxLimit="3" listType="picture-card" :acceptTypeList="['.jpg','.jpeg','.png']">
<template v-slot:uploadBtn>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</uploadCom>
</el-form-item>
<el-form-item label="协议内容:" style="width:1000px;" prop="editHtml">
<editorWang ref="editorWangRef"></editorWang>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="cancelFn">取消</el-button>
<el-button type="primary" @click="publishFn">
确认发布
</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus'
import editorWang from "components/com/editorWang.vue"
const emits = defineEmits(['send'])
const addShow = ref(false)
let title = ref("新增")
const editorWangRef = ref()
const ruleFormRef: any = ref()
const form = reactive({
code: '',
applyModel: '',
fileUrl: '',
editHtml:""
})
const applyModelList = reactive({
list: [{
value: 'Option1',
label: 'Option1',
},
{
value: 'Option2',
label: 'Option2',
}]
})
const formRules = reactive<FormRules<any>>({
applyModel: [
{ required: true, message: '请选择应用模块', trigger: 'blur' },
],
fileUrl: [
{ required: true, message: '请上传协议附件', trigger: 'change' },
],
editHtml: [
{ required: true, message: '请编辑协议内容', trigger: 'blur' },
]
})
const publishFn = () => {
if (!ruleFormRef) return
ruleFormRef.value.validate((valid: any) => {
if (valid) {
const editVal= editorWangRef.value.getHtmlByFather()
console.log("editVal",editVal)
console.log('submit!')
} else {
console.log('error submit!')
return false
}
})
}
const cancelFn = (formEl: FormInstance | undefined) => {
if (!ruleFormRef) return
ruleFormRef.value.resetFields()
editorWangRef.value.editorClear()
addShow.value = false
}
const open = (val: any) => {
title.value = "新增"
addShow.value = true
}
const edit = () => {
title.value = "编辑"
addShow.value = true
editorWangRef.value.setHtmlByFather("<p>head</p><p>hello <strong>word</strong></p>")
}
defineExpose({
open,
edit
})
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,63 @@
<template>
<el-card shadow="always" class="search_header_top_row1">
<el-form :inline="true" :model="filterForm" class="demo-form-inline">
<el-form-item label="是否启用">
<el-select v-model="filterForm.isEnable" placeholder="请选择是否启用" clearable filterable >
<el-option v-for="item in isEnableList.list" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="模版编号">
<el-input v-model.trim="filterForm.code" placeholder="请输入模版编号" clearable />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="serachFn">查询</el-button>
<el-button type="plain" @click="resetFn">重置</el-button>
</el-form-item>
</el-form>
<div>
<el-button type="primary" @click="addFn">新增</el-button>
<el-button type="primary" @click="exportFn">导出</el-button>
</div>
</el-card>
</template>
<script lang="ts" setup>
const emits = defineEmits(['search', 'reset', 'export', 'add'])
const isEnableList = reactive({
list: [{
value: 'Option1',
label: 'Option1',
},
{
value: 'Option2',
label: 'Option2',
}]
})
const filterForm = reactive({
isEnable:'',
code: '',
})
const serachFn = () => {
emits('search', filterForm)
}
const resetFn = () => {
emits('reset')
}
const exportFn = () => {
emits('export')
}
const addFn = () => {
emits('add')
}
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,137 @@
<template>
<headerTop
@search="searchFn"
@reset="resetFn"
@export="exportFn"
@add="addFn"
></headerTop>
<addCom ref="addComRef"></addCom>
<el-card shadow="always" class="content_body_row">
<el-table :data="tableListInfo.list" style="width: 100%" border
:max-height="'calc(100vh - 72px - 48px - 65px - 12px - 60px)'">
<el-table-column type="index" width="72" label="序号" />
<el-table-column prop="v_title" label="标题" min-width="100" />
<el-table-column prop="v_category" label="分类" min-width="120" />
<el-table-column prop="v_publisher" label="发布人" min-width="120" />
<el-table-column prop="v_showCount" label="查看人数" min-width="220" />
<el-table-column label="操作" width="210" align="center">
<template #default="scope">
<el-button type="primary" size="small" @click.prevent="showRowFn(scope.row)">
查看
</el-button>
<el-button type="primary" size="small" @click.prevent="editRowFn(scope.row)">
编辑
</el-button>
<el-button type="danger" size="small" @click.prevent="deleteRowFn(scope.row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<script lang="ts" setup>
import headerTop from "./com/headerTop.vue"
import addCom from "./com/addCom.vue"
import {ElConfirmBeforeOpert} from "utils/elementCom"
const addComRef = ref()
const tableData = [
{
v_id:'1',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'2',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'3',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'4',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'5',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
]
let tableListInfo = reactive({
list: tableData
})
const showRowFn=(row:any)=>{
}
const editRowFn =(row:any)=>{
addComRef.value.open({
a:"111"
})
}
const deleteItem = (row:any)=>{
const itemID =row.v_id
console.log("ITEMid",row)
}
const deleteRowFn =(row:any)=>{
ElConfirmBeforeOpert(
'操作确认',
'是否确定删除数据?',
deleteItem,
'确定',
'取消',
row
)
}
const searchFn =()=>{
}
const resetFn =()=>{
}
const exportFn =()=>{
}
const addFn =()=>{
addComRef.value.open({
a:"111"
})
}
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,106 @@
<template>
<el-dialog v-model="addShow" :title="title" width="1200px" draggable :close-on-click-modal="false" >
<el-form :model="form" ref="ruleFormRef" label-width="88px" :rules="formRules" style="padding: 0 80px 0px 0;">
<el-form-item label="标题:" prop="title">
<el-input v-model.trim="form.title" placeholder="请输入标题" clearable maxlength="30" />
</el-form-item>
<el-form-item label="分类" prop="category">
<el-select v-model="form.category" placeholder="Select" clearable filterable>
<el-option v-for="item in categoryList.list" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
<editorWang ref="editorWangRef"></editorWang>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="cancelFn">取消</el-button>
<el-button type="primary" @click="publishFn">
确认发布
</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus'
import editorWang from "components/com/editorWang.vue"
const emits = defineEmits(['send'])
const addShow = ref(false)
let title = ref("新增")
const editorWangRef = ref()
const ruleFormRef: any = ref()
const form = reactive({
title: '',
category: '',
editorText: ''
})
const categoryList = reactive({
list: [{
value: 'Option1',
label: 'Option1',
},
{
value: 'Option2',
label: 'Option2',
}]
})
const formRules = reactive<FormRules<any>>({
title: [
{ required: true, message: '请输入标题', trigger: 'blur' },
],
category: [
{ required: true, message: '请选择分类', trigger: 'change' },
]
})
const publishFn = () => {
if (!ruleFormRef) return
ruleFormRef.value.validate((valid: any) => {
if (valid) {
const editVal= editorWangRef.value.getHtmlByFather()
console.log("editVal",editVal)
console.log('submit!')
} else {
console.log('error submit!')
return false
}
})
}
const cancelFn = (formEl: FormInstance | undefined) => {
if (!ruleFormRef) return
ruleFormRef.value.resetFields()
editorWangRef.value.editorClear()
addShow.value = false
}
const open = (val: any) => {
title.value = "新增"
addShow.value = true
}
const edit = () => {
title.value = "编辑"
addShow.value = true
editorWangRef.value.setHtmlByFather("<p>head</p><p>hello <strong>word</strong></p>")
}
defineExpose({
open,
edit
})
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,68 @@
<template>
<el-card shadow="always" class="search_header_top_row1">
<el-form :inline="true" :model="filterForm" class="demo-form-inline">
<el-form-item label="分类">
<el-select v-model="filterForm.category" placeholder="Select" clearable filterable >
<el-option v-for="item in categoryList.list" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="关键字">
<el-input v-model="filterForm.keyword" placeholder="请输入关键字" clearable />
</el-form-item>
<el-form-item label="时间范围">
<el-date-picker v-model="filterForm.dataRange" type="daterange" range-separator="To"
start-placeholder="Start date" end-placeholder="End date" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="serachFn">查询</el-button>
<el-button type="primary" @click="resetFn">重置</el-button>
</el-form-item>
</el-form>
<div>
<el-button type="primary" @click="addFn">新增</el-button>
<el-button type="primary" @click="exportFn">导出</el-button>
</div>
</el-card>
</template>
<script lang="ts" setup>
const emits = defineEmits(['search', 'reset', 'export', 'add'])
const categoryList = reactive({
list: [{
value: 'Option1',
label: 'Option1',
},
{
value: 'Option2',
label: 'Option2',
}]
})
const filterForm = reactive({
category:'',
keyword: '',
dataRange: ''
})
const serachFn = () => {
emits('search', filterForm)
}
const resetFn = () => {
emits('reset')
}
const exportFn = () => {
emits('export')
}
const addFn = () => {
emits('add')
}
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,137 @@
<template>
<headerTop
@search="searchFn"
@reset="resetFn"
@export="exportFn"
@add="addFn"
></headerTop>
<addCom ref="addComRef"></addCom>
<el-card shadow="always" class="content_body_row">
<el-table :data="tableListInfo.list" style="width: 100%" border
:max-height="'calc(100vh - 72px - 48px - 65px - 12px - 60px)'">
<el-table-column type="index" width="72" label="序号" />
<el-table-column prop="v_title" label="标题" min-width="100" />
<el-table-column prop="v_category" label="分类" min-width="120" />
<el-table-column prop="v_publisher" label="发布人" min-width="120" />
<el-table-column prop="v_showCount" label="查看人数" min-width="220" />
<el-table-column label="操作" width="210" align="center">
<template #default="scope">
<el-button type="primary" size="small" @click.prevent="showRowFn(scope.row)">
查看
</el-button>
<el-button type="primary" size="small" @click.prevent="editRowFn(scope.row)">
编辑
</el-button>
<el-button type="danger" size="small" @click.prevent="deleteRowFn(scope.row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<script lang="ts" setup>
import headerTop from "./com/headerTop.vue"
import addCom from "./com/addCom.vue"
import {ElConfirmBeforeOpert} from "utils/elementCom"
const addComRef = ref()
const tableData = [
{
v_id:'1',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'2',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'3',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'4',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
{
v_id:'5',
v_title: '2016-05-03',
v_category: 'Tom',
v_publisher: 'California',
v_showCount: 'Los Angeles',
},
]
let tableListInfo = reactive({
list: tableData
})
const showRowFn=(row:any)=>{
}
const editRowFn =(row:any)=>{
addComRef.value.open({
a:"111"
})
}
const deleteItem = (row:any)=>{
const itemID =row.v_id
console.log("ITEMid",row)
}
const deleteRowFn =(row:any)=>{
ElConfirmBeforeOpert(
'操作确认',
'是否确定删除数据?',
deleteItem,
'确定',
'取消',
row
)
}
const searchFn =()=>{
}
const resetFn =()=>{
}
const exportFn =()=>{
}
const addFn =()=>{
addComRef.value.open({
a:"111"
})
}
</script>
<style scoped lang="scss"></style>

View File

@ -1,9 +0,0 @@
<template>
<div style="width: 100%;height: 520vh;">
</div>
</template>
<script setup lang="ts"></script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,113 @@
<template>
<el-dialog v-model="addShow" :title="title" width="30%" draggable :close-on-click-modal="false" >
<el-form :model="form" ref="ruleFormRef" label-width="88px" :rules="formRules" style="padding: 0 80px 0px 0;" >
<el-form-item label="标题:" prop="title">
<el-input v-model.trim="form.title" placeholder="请输入标题" clearable maxlength="30" />
</el-form-item>
<el-form-item label="图片:" prop="picture">
<uploadCom :maxLimit="3" listType="picture-card" :acceptTypeList="['.jpg','.jpeg','.png']">
<template v-slot:uploadBtn>
<el-icon size="48" color="#aaa"><Plus /></el-icon>
</template>
</uploadCom>
</el-form-item>
<el-form-item label="跳转链接:" prop="linkUrl">
<el-input v-model.trim="form.linkUrl" clearable />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="cancelFn">取消</el-button>
<el-button type="primary" @click="publishFn">
发布
</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import uploadCom from "components/com/uploadCom.vue"
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage } from 'element-plus'
import { linkReg } from "utils/reg"
const emits = defineEmits(['send'])
const addShow = ref(false)
let title = ref("新增")
const ruleFormRef: any = ref()
const form = reactive({
title: '',
picture: '',
linkUrl: ''
})
// const validatorLink = (rule: any, value: any, callback: any) => {
// if (linkReg.test(value)) {
// callback()
// } else {
// callback(new Error(""))
// }
// }
const formRules = reactive<FormRules<any>>({
title: [
{ required: true, message: '请输入标题', trigger: 'blur' },
],
picture: [
{ required: true, message: '请上传图片', trigger: 'blur' },
],
// linkUrl: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// {
// validator: validatorLink,
// trigger: 'blur'
// }
// ],
})
const publishFn = () => {
if (!ruleFormRef) return
ruleFormRef.value.validate((valid: any) => {
if (valid) {
if (form.linkUrl&&linkReg.test(form.linkUrl)) {
ElMessage({
type:'warning',
message:"请输入正确格式的跳转链接"
})
}
console.log('submit!')
} else {
console.log('error submit!')
return false
}
})
}
const cancelFn = (formEl: FormInstance | undefined) => {
if (!ruleFormRef) return
ruleFormRef.value.resetFields()
addShow.value =false
}
const open = (val:any) => {
title.value = "新增"
addShow.value = true
}
const edit = () => {
title.value = "编辑"
addShow.value = true
}
defineExpose({
open,
edit
})
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,51 @@
<template>
<el-card shadow="always" class="search_header_top_row1">
<el-form :inline="true" :model="filterForm" class="demo-form-inline">
<el-form-item label="关键字">
<el-input v-model="filterForm.keyword" placeholder="请输入关键字" clearable />
</el-form-item>
<el-form-item label="时间范围">
<el-date-picker v-model="filterForm.dataRange" type="daterange" range-separator="To" start-placeholder="Start date"
end-placeholder="End date" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="serachFn">查询</el-button>
<el-button type="plain" @click="resetFn">重置</el-button>
</el-form-item>
</el-form>
<div>
<el-button type="primary" @click="sortFn">编辑排序</el-button>
<el-button type="primary" @click="addFn">新增</el-button>
</div>
</el-card>
</template>
<script lang="ts" setup>
const emits = defineEmits(['search','reset','sort','add'])
const filterForm = reactive({
keyword: '',
dataRange:''
})
const serachFn = () => {
emits('search',filterForm)
}
const resetFn=()=>{
emits('reset')
}
const sortFn =()=>{
emits('sort')
}
const addFn =()=>{
emits('add')
}
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,140 @@
<template>
<headerTop
@search="searchFn"
@reset="resetFn"
@sort="sortFn"
@add="addFn"
></headerTop>
<addCom ref="addComRef"></addCom>
<el-card shadow="always" class="content_body_row">
<el-table :data="tableListInfo.list" border style="width: 100%"
:max-height="'calc(100vh - 72px - 48px - 65px - 12px - 60px)'">
<el-table-column type="index" width="72" label="序号" />
<el-table-column prop="date" label="标题" min-width="150" />
<el-table-column prop="name" label="轮播图" min-width="120" />
<el-table-column prop="state" label="跳转页面" min-width="120" />
<el-table-column prop="city" label="是否启用" min-width="320" />
<el-table-column prop="address" label="创建人" min-width="400" />
<el-table-column prop="zip" label="创建日期" min-width="120" />
<el-table-column prop="zip" label="操作" align="center" min-width="180">
<template #default="scope">
<el-button type="primary" size="small" @click.prevent="editRowFn(scope.row)">
编辑
</el-button>
<el-button type="danger" size="small" @click.prevent="deleteRowFn(scope.row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<script lang="ts" setup>
import headerTop from "./com/headerTop.vue"
import addCom from "./com/addCom.vue"
import {ElConfirmBeforeOpert} from "utils/elementCom"
const addComRef = ref()
const tableData = [
{
v_id:'1',
date: '2016-05-03',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
},
{
v_id:'2',
date: '2016-05-02',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
},
{
v_id:'3',
date: '2016-05-04',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
},
{
v_id:'4',
date: '2016-05-01',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
},
{
v_id:'5',
date: '2016-05-08',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
},
]
let tableListInfo = reactive({
list: tableData
})
const editRowFn =(row:any)=>{
addComRef.value.open({
a:"111"
})
}
const deleteItem = (row:any)=>{
const itemID =row.v_id
console.log("ITEMid",row)
}
const deleteRowFn =(row:any)=>{
ElConfirmBeforeOpert(
'操作确认',
'是否确定删除数据?',
deleteItem,
'确定',
'取消',
row
)
}
const searchFn =()=>{
}
const resetFn =()=>{
}
const sortFn =()=>{
}
const addFn =()=>{
addComRef.value.open({
a:"111"
})
}
</script>
<style scoped lang="scss"></style>