Merge branch 'dev' of https://gitee.com/MTrun/go-view
This commit is contained in:
commit
524cd162b3
@ -22,6 +22,7 @@ module.exports = {
|
|||||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||||
'no-unused-vars': 'off',
|
'no-unused-vars': 'off',
|
||||||
|
'vue/no-unused-vars': 'off',
|
||||||
'vue/multi-word-component-names': 'off',
|
'vue/multi-word-component-names': 'off',
|
||||||
'vue/valid-template-root': 'off',
|
'vue/valid-template-root': 'off',
|
||||||
'vue/no-mutating-props': 'off'
|
'vue/no-mutating-props': 'off'
|
||||||
|
21
index.css
21
index.css
@ -83,24 +83,3 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 小屏处理 0~1000*/
|
|
||||||
.mobile-terminal {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
@media (max-width: 1000px) {
|
|
||||||
#app {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.mobile-terminal {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
width: 100vw;
|
|
||||||
height: 100vh;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: 200;
|
|
||||||
background-image: linear-gradient(to top, #fff1eb 0%, #ace0f9 100%);
|
|
||||||
}
|
|
||||||
}
|
|
@ -24,9 +24,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mobile-terminal">
|
|
||||||
<p>请使用 Web 端进行查看</p>
|
|
||||||
</div>
|
|
||||||
<script type="module" src="/src/main.ts"></script>
|
<script type="module" src="/src/main.ts"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
"html2canvas": "^1.4.1",
|
"html2canvas": "^1.4.1",
|
||||||
"keymaster": "^1.6.2",
|
"keymaster": "^1.6.2",
|
||||||
"monaco-editor": "^0.33.0",
|
"monaco-editor": "^0.33.0",
|
||||||
"naive-ui": "2.30.3",
|
"naive-ui": "2.33.3",
|
||||||
"pinia": "^2.0.13",
|
"pinia": "^2.0.13",
|
||||||
"screenfull": "^6.0.1",
|
"screenfull": "^6.0.1",
|
||||||
"vue": "^3.2.31",
|
"vue": "^3.2.31",
|
||||||
|
440
pnpm-lock.yaml
generated
440
pnpm-lock.yaml
generated
@ -38,7 +38,7 @@ specifiers:
|
|||||||
lodash: ~4.17.21
|
lodash: ~4.17.21
|
||||||
mockjs: ^1.1.0
|
mockjs: ^1.1.0
|
||||||
monaco-editor: ^0.33.0
|
monaco-editor: ^0.33.0
|
||||||
naive-ui: 2.30.3
|
naive-ui: 2.33.3
|
||||||
pinia: ^2.0.13
|
pinia: ^2.0.13
|
||||||
plop: ^3.0.5
|
plop: ^3.0.5
|
||||||
prettier: ^2.6.2
|
prettier: ^2.6.2
|
||||||
@ -77,7 +77,7 @@ dependencies:
|
|||||||
html2canvas: 1.4.1
|
html2canvas: 1.4.1
|
||||||
keymaster: 1.6.2
|
keymaster: 1.6.2
|
||||||
monaco-editor: 0.33.0
|
monaco-editor: 0.33.0
|
||||||
naive-ui: 2.30.3_vue@3.2.37
|
naive-ui: registry.npmmirror.com/naive-ui/2.33.3_vue@3.2.37
|
||||||
pinia: 2.0.14_ub5l46u3nefphax5x2tezui4oq
|
pinia: 2.0.14_ub5l46u3nefphax5x2tezui4oq
|
||||||
screenfull: 6.0.1
|
screenfull: 6.0.1
|
||||||
vue: 3.2.37
|
vue: 3.2.37
|
||||||
@ -458,7 +458,7 @@ packages:
|
|||||||
engines: {node: '>=v14'}
|
engines: {node: '>=v14'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@commitlint/types': 17.0.0
|
'@commitlint/types': 17.0.0
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@commitlint/execute-rule/17.0.0:
|
/@commitlint/execute-rule/17.0.0:
|
||||||
@ -500,11 +500,11 @@ packages:
|
|||||||
'@commitlint/execute-rule': 17.0.0
|
'@commitlint/execute-rule': 17.0.0
|
||||||
'@commitlint/resolve-extends': 17.0.0
|
'@commitlint/resolve-extends': 17.0.0
|
||||||
'@commitlint/types': 17.0.0
|
'@commitlint/types': 17.0.0
|
||||||
'@types/node': 17.0.43
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
cosmiconfig: 7.0.1
|
cosmiconfig: 7.0.1
|
||||||
cosmiconfig-typescript-loader: 2.0.1_sg2ukyc6p547g74ru6fclbyzsu
|
cosmiconfig-typescript-loader: 2.0.1_sg2ukyc6p547g74ru6fclbyzsu
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
resolve-from: 5.0.0
|
resolve-from: 5.0.0
|
||||||
typescript: 4.7.3
|
typescript: 4.7.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -543,7 +543,7 @@ packages:
|
|||||||
'@commitlint/config-validator': 17.0.0
|
'@commitlint/config-validator': 17.0.0
|
||||||
'@commitlint/types': 17.0.0
|
'@commitlint/types': 17.0.0
|
||||||
import-fresh: 3.3.0
|
import-fresh: 3.3.0
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
resolve-from: 5.0.0
|
resolve-from: 5.0.0
|
||||||
resolve-global: 1.0.0
|
resolve-global: 1.0.0
|
||||||
dev: true
|
dev: true
|
||||||
@ -585,22 +585,6 @@ packages:
|
|||||||
'@jridgewell/trace-mapping': 0.3.9
|
'@jridgewell/trace-mapping': 0.3.9
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@css-render/plugin-bem/0.15.10_css-render@0.15.10:
|
|
||||||
resolution: {integrity: sha512-V7b08sM2PWJlXI7BJiVIa0Sg30H3u/jHay4AclNXfF2yRFwwb4ZJjggsMfzwj3WSihAdNf2WTqvOU5qsOD80Dg==}
|
|
||||||
peerDependencies:
|
|
||||||
css-render: ~0.15.10
|
|
||||||
dependencies:
|
|
||||||
css-render: 0.15.10
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@css-render/vue3-ssr/0.15.10_vue@3.2.37:
|
|
||||||
resolution: {integrity: sha512-keGKnkB2nyVGoA8GezMKNsmvTGXEzgLOGGlgshwOTSEzd1dsROyZ2m/khJ9jV5zbzDM4rWeAWbWF0zwHemsJcw==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: ^3.0.11
|
|
||||||
dependencies:
|
|
||||||
vue: 3.2.37
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@emmetio/abbreviation/2.2.3:
|
/@emmetio/abbreviation/2.2.3:
|
||||||
resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==}
|
resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -617,10 +601,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==}
|
resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@emotion/hash/0.8.0:
|
|
||||||
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@eslint/eslintrc/1.3.0:
|
/@eslint/eslintrc/1.3.0:
|
||||||
resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
|
resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
@ -754,10 +734,6 @@ packages:
|
|||||||
'@jridgewell/sourcemap-codec': 1.4.13
|
'@jridgewell/sourcemap-codec': 1.4.13
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@juggle/resize-observer/3.3.1:
|
|
||||||
resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@nodelib/fs.scandir/2.1.5:
|
/@nodelib/fs.scandir/2.1.5:
|
||||||
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
@ -863,13 +839,6 @@ packages:
|
|||||||
rxjs: 7.5.5
|
rxjs: 7.5.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/jest/27.5.2:
|
|
||||||
resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==}
|
|
||||||
dependencies:
|
|
||||||
jest-matcher-utils: 27.5.1
|
|
||||||
pretty-format: 27.5.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@types/json-schema/7.0.11:
|
/@types/json-schema/7.0.11:
|
||||||
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
|
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@ -886,15 +855,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
|
resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/fined': 1.1.3
|
'@types/fined': 1.1.3
|
||||||
'@types/node': 16.11.40
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/lodash-es/4.17.6:
|
|
||||||
resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==}
|
|
||||||
dependencies:
|
|
||||||
'@types/lodash': 4.14.185
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@types/lodash/4.14.185:
|
/@types/lodash/4.14.185:
|
||||||
resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==}
|
resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -911,9 +874,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-7bOWglXUO6f21NG3YDI7hIpeMX3M59GG+DzZuzX2EkFKYUnRoxq3EOg4R0KNv2hxryY9M3UUqG5akwwsifrukw==}
|
resolution: {integrity: sha512-7bOWglXUO6f21NG3YDI7hIpeMX3M59GG+DzZuzX2EkFKYUnRoxq3EOg4R0KNv2hxryY9M3UUqG5akwwsifrukw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/node/17.0.43:
|
|
||||||
resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==}
|
|
||||||
|
|
||||||
/@types/normalize-package-data/2.4.1:
|
/@types/normalize-package-data/2.4.1:
|
||||||
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
|
||||||
dev: true
|
dev: true
|
||||||
@ -925,13 +885,13 @@ packages:
|
|||||||
/@types/resolve/1.17.1:
|
/@types/resolve/1.17.1:
|
||||||
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
|
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 17.0.43
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/through/0.0.30:
|
/@types/through/0.0.30:
|
||||||
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
|
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 17.0.43
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/eslint-plugin/5.28.0_evi7yu7wunhzwb24olrfvzynny:
|
/@typescript-eslint/eslint-plugin/5.28.0_evi7yu7wunhzwb24olrfvzynny:
|
||||||
@ -1223,7 +1183,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@vue/runtime-core': 3.2.37
|
'@vue/runtime-core': 3.2.37
|
||||||
'@vue/shared': 3.2.37
|
'@vue/shared': 3.2.37
|
||||||
csstype: 2.6.20
|
csstype: registry.npmmirror.com/csstype/2.6.20
|
||||||
|
|
||||||
/@vue/server-renderer/3.2.37_vue@3.2.37:
|
/@vue/server-renderer/3.2.37_vue@3.2.37:
|
||||||
resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
|
resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
|
||||||
@ -1332,6 +1292,7 @@ packages:
|
|||||||
/ansi-regex/5.0.1:
|
/ansi-regex/5.0.1:
|
||||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/ansi-regex/6.0.1:
|
/ansi-regex/6.0.1:
|
||||||
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
||||||
@ -1350,11 +1311,7 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dependencies:
|
dependencies:
|
||||||
color-convert: 2.0.1
|
color-convert: 2.0.1
|
||||||
|
dev: true
|
||||||
/ansi-styles/5.2.0:
|
|
||||||
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/anymatch/3.1.2:
|
/anymatch/3.1.2:
|
||||||
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
|
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
|
||||||
@ -1425,10 +1382,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
|
resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/async-validator/4.1.1:
|
|
||||||
resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/asynckit/0.4.0:
|
/asynckit/0.4.0:
|
||||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -1603,6 +1556,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ansi-styles: 4.3.0
|
ansi-styles: 4.3.0
|
||||||
supports-color: 7.2.0
|
supports-color: 7.2.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/chalk/5.0.1:
|
/chalk/5.0.1:
|
||||||
resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
|
resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
|
||||||
@ -1802,7 +1756,7 @@ packages:
|
|||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
dependencies:
|
dependencies:
|
||||||
compare-func: 2.0.0
|
compare-func: 2.0.0
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
q: 1.5.1
|
q: 1.5.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@ -1813,7 +1767,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
JSONStream: 1.3.5
|
JSONStream: 1.3.5
|
||||||
is-text-path: 1.0.1
|
is-text-path: 1.0.1
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
meow: 8.1.2
|
meow: 8.1.2
|
||||||
split2: 3.2.2
|
split2: 3.2.2
|
||||||
through2: 4.0.2
|
through2: 4.0.2
|
||||||
@ -1832,7 +1786,7 @@ packages:
|
|||||||
'@types/node': '*'
|
'@types/node': '*'
|
||||||
typescript: '>=3'
|
typescript: '>=3'
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 17.0.43
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
cosmiconfig: 7.0.1
|
cosmiconfig: 7.0.1
|
||||||
ts-node: 10.8.1_sg2ukyc6p547g74ru6fclbyzsu
|
ts-node: 10.8.1_sg2ukyc6p547g74ru6fclbyzsu
|
||||||
typescript: 4.7.3
|
typescript: 4.7.3
|
||||||
@ -1875,45 +1829,17 @@ packages:
|
|||||||
utrie: 1.0.2
|
utrie: 1.0.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/css-render/0.15.10:
|
|
||||||
resolution: {integrity: sha512-6j5acvm81sXTHJiF47FNNICtDpF74YoWk1xEK3qQvdqgW6vc+OXrPqflL6m8f5GE6XuFYrbACNEd17kraCSBAQ==}
|
|
||||||
dependencies:
|
|
||||||
'@emotion/hash': 0.8.0
|
|
||||||
'@types/node': 17.0.43
|
|
||||||
csstype: 3.0.11
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/cssesc/3.0.0:
|
/cssesc/3.0.0:
|
||||||
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/csstype/2.6.20:
|
|
||||||
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
|
|
||||||
|
|
||||||
/csstype/3.0.11:
|
|
||||||
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/dargs/7.0.0:
|
/dargs/7.0.0:
|
||||||
resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
|
resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/date-fns-tz/1.3.4_date-fns@2.28.0:
|
|
||||||
resolution: {integrity: sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==}
|
|
||||||
peerDependencies:
|
|
||||||
date-fns: '>=2.0.0'
|
|
||||||
dependencies:
|
|
||||||
date-fns: 2.28.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/date-fns/2.28.0:
|
|
||||||
resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==}
|
|
||||||
engines: {node: '>=0.11'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/debug/2.6.9:
|
/debug/2.6.9:
|
||||||
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
|
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -2012,11 +1938,6 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/diff-sequences/27.5.1:
|
|
||||||
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
|
|
||||||
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/diff/4.0.2:
|
/diff/4.0.2:
|
||||||
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
|
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
|
||||||
engines: {node: '>=0.3.1'}
|
engines: {node: '>=0.3.1'}
|
||||||
@ -2476,10 +2397,6 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/evtd/0.2.3:
|
|
||||||
resolution: {integrity: sha512-tmiT1YUVqFjTY+BSBOAskL83xNx41iUfpvKP6Gcd/xMHjg3mnER98jXGXJyKnxCG19uPc6EhZiUC+MUyvoqCtw==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/execa/5.1.1:
|
/execa/5.1.1:
|
||||||
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
|
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@ -2748,7 +2665,7 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
dargs: 7.0.0
|
dargs: 7.0.0
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
meow: 8.1.2
|
meow: 8.1.2
|
||||||
split2: 3.2.2
|
split2: 3.2.2
|
||||||
through2: 4.0.2
|
through2: 4.0.2
|
||||||
@ -2875,6 +2792,7 @@ packages:
|
|||||||
/has-flag/4.0.0:
|
/has-flag/4.0.0:
|
||||||
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/has-property-descriptors/1.0.0:
|
/has-property-descriptors/1.0.0:
|
||||||
resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
|
resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
|
||||||
@ -3031,7 +2949,7 @@ packages:
|
|||||||
cli-width: 3.0.0
|
cli-width: 3.0.0
|
||||||
external-editor: 3.1.0
|
external-editor: 3.1.0
|
||||||
figures: 3.2.0
|
figures: 3.2.0
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
mute-stream: 0.0.8
|
mute-stream: 0.0.8
|
||||||
ora: 5.4.1
|
ora: 5.4.1
|
||||||
run-async: 2.4.1
|
run-async: 2.4.1
|
||||||
@ -3291,31 +3209,6 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-diff/27.5.1:
|
|
||||||
resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==}
|
|
||||||
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
|
||||||
dependencies:
|
|
||||||
chalk: 4.1.2
|
|
||||||
diff-sequences: 27.5.1
|
|
||||||
jest-get-type: 27.5.1
|
|
||||||
pretty-format: 27.5.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/jest-get-type/27.5.1:
|
|
||||||
resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==}
|
|
||||||
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/jest-matcher-utils/27.5.1:
|
|
||||||
resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==}
|
|
||||||
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
|
||||||
dependencies:
|
|
||||||
chalk: 4.1.2
|
|
||||||
jest-diff: 27.5.1
|
|
||||||
jest-get-type: 27.5.1
|
|
||||||
pretty-format: 27.5.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/js-stringify/1.0.2:
|
/js-stringify/1.0.2:
|
||||||
resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
|
resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==}
|
||||||
dev: true
|
dev: true
|
||||||
@ -3452,10 +3345,6 @@ packages:
|
|||||||
p-locate: 5.0.0
|
p-locate: 5.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/lodash-es/4.17.21:
|
|
||||||
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/lodash.get/4.4.2:
|
/lodash.get/4.4.2:
|
||||||
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
|
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@ -3466,6 +3355,7 @@ packages:
|
|||||||
|
|
||||||
/lodash/4.17.21:
|
/lodash/4.17.21:
|
||||||
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/log-symbols/4.1.0:
|
/log-symbols/4.1.0:
|
||||||
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
|
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
|
||||||
@ -3634,31 +3524,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
|
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/naive-ui/2.30.3_vue@3.2.37:
|
|
||||||
resolution: {integrity: sha512-s6iphodOfLklhgAGtzhzoE0oPi6eY72UufUDRySBbfV+r+64vw9omYUOqk3Z1M/t/Mh8KwqW6z+ex8bYftFKPA==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: ^3.0.0
|
|
||||||
dependencies:
|
|
||||||
'@css-render/plugin-bem': 0.15.10_css-render@0.15.10
|
|
||||||
'@css-render/vue3-ssr': 0.15.10_vue@3.2.37
|
|
||||||
'@types/lodash': 4.14.185
|
|
||||||
'@types/lodash-es': 4.17.6
|
|
||||||
async-validator: 4.1.1
|
|
||||||
css-render: 0.15.10
|
|
||||||
date-fns: 2.28.0
|
|
||||||
date-fns-tz: 1.3.4_date-fns@2.28.0
|
|
||||||
evtd: 0.2.3
|
|
||||||
highlight.js: 11.5.1
|
|
||||||
lodash: 4.17.21
|
|
||||||
lodash-es: 4.17.21
|
|
||||||
seemly: 0.3.4
|
|
||||||
treemate: 0.3.11
|
|
||||||
vdirs: 0.1.8_vue@3.2.37
|
|
||||||
vooks: 0.2.12_vue@3.2.37
|
|
||||||
vue: 3.2.37
|
|
||||||
vueuc: 0.4.44_vue@3.2.37
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/nanoid/3.3.4:
|
/nanoid/3.3.4:
|
||||||
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
|
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
|
||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
@ -4100,15 +3965,6 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/pretty-format/27.5.1:
|
|
||||||
resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
|
|
||||||
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
|
||||||
dependencies:
|
|
||||||
ansi-regex: 5.0.1
|
|
||||||
ansi-styles: 5.2.0
|
|
||||||
react-is: 17.0.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/promise/7.3.1:
|
/promise/7.3.1:
|
||||||
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
|
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -4225,10 +4081,6 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/react-is/17.0.2:
|
|
||||||
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/read-pkg-up/7.0.1:
|
/read-pkg-up/7.0.1:
|
||||||
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
|
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@ -4444,12 +4296,6 @@ packages:
|
|||||||
engines: {node: ^14.13.1 || >=16.0.0}
|
engines: {node: ^14.13.1 || >=16.0.0}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/seemly/0.3.4:
|
|
||||||
resolution: {integrity: sha512-/crL+UfbtYd6NdLdnf58xaABfeSRt5uKE4N1SFQAW7nIznOrJQchAaslJHxV8/iAfV0LWInrmxJBFdDb0c2/sw==}
|
|
||||||
dependencies:
|
|
||||||
'@types/jest': 27.5.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/semver/5.7.1:
|
/semver/5.7.1:
|
||||||
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
|
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@ -4650,6 +4496,7 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dependencies:
|
dependencies:
|
||||||
has-flag: 4.0.0
|
has-flag: 4.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/supports-preserve-symlinks-flag/1.0.0:
|
/supports-preserve-symlinks-flag/1.0.0:
|
||||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||||
@ -4713,10 +4560,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
|
resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/treemate/0.3.11:
|
|
||||||
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/trim-newlines/3.0.1:
|
/trim-newlines/3.0.1:
|
||||||
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@ -4741,7 +4584,7 @@ packages:
|
|||||||
'@tsconfig/node12': 1.0.10
|
'@tsconfig/node12': 1.0.10
|
||||||
'@tsconfig/node14': 1.0.2
|
'@tsconfig/node14': 1.0.2
|
||||||
'@tsconfig/node16': 1.0.3
|
'@tsconfig/node16': 1.0.3
|
||||||
'@types/node': 17.0.43
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
acorn: 8.7.1
|
acorn: 8.7.1
|
||||||
acorn-walk: 8.2.0
|
acorn-walk: 8.2.0
|
||||||
arg: 4.1.3
|
arg: 4.1.3
|
||||||
@ -4908,15 +4751,6 @@ packages:
|
|||||||
spdx-expression-parse: 3.0.1
|
spdx-expression-parse: 3.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vdirs/0.1.8_vue@3.2.37:
|
|
||||||
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: ^3.0.11
|
|
||||||
dependencies:
|
|
||||||
evtd: 0.2.3
|
|
||||||
vue: 3.2.37
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/vite-plugin-compression/0.5.1_vite@2.9.9:
|
/vite-plugin-compression/0.5.1_vite@2.9.9:
|
||||||
resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
|
resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -5001,15 +4835,6 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vooks/0.2.12_vue@3.2.37:
|
|
||||||
resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: ^3.0.0
|
|
||||||
dependencies:
|
|
||||||
evtd: 0.2.3
|
|
||||||
vue: 3.2.37
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/vscode-css-languageservice/5.4.2:
|
/vscode-css-languageservice/5.4.2:
|
||||||
resolution: {integrity: sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==}
|
resolution: {integrity: sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5183,7 +5008,7 @@ packages:
|
|||||||
eslint-visitor-keys: 3.3.0
|
eslint-visitor-keys: 3.3.0
|
||||||
espree: 9.3.2
|
espree: 9.3.2
|
||||||
esquery: 1.4.0
|
esquery: 1.4.0
|
||||||
lodash: 4.17.21
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
semver: 7.3.7
|
semver: 7.3.7
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -5266,21 +5091,6 @@ packages:
|
|||||||
vue: 3.2.37
|
vue: 3.2.37
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/vueuc/0.4.44_vue@3.2.37:
|
|
||||||
resolution: {integrity: sha512-2sLWo1Ow3DRKTDvGVlaWlf0KL+LOqeO6zlvb6nUxWxqj4VjUpg7sMtH+xtvBK+oOXH4goGt1RyLMaBVgPFpqHw==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: ^3.0.11
|
|
||||||
dependencies:
|
|
||||||
'@css-render/vue3-ssr': 0.15.10_vue@3.2.37
|
|
||||||
'@juggle/resize-observer': 3.3.1
|
|
||||||
css-render: 0.15.10
|
|
||||||
evtd: 0.2.3
|
|
||||||
seemly: 0.3.4
|
|
||||||
vdirs: 0.1.8_vue@3.2.37
|
|
||||||
vooks: 0.2.12_vue@3.2.37
|
|
||||||
vue: 3.2.37
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/wcwidth/1.0.1:
|
/wcwidth/1.0.1:
|
||||||
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
|
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5396,6 +5206,104 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.3.0
|
tslib: 2.3.0
|
||||||
|
|
||||||
|
registry.npmmirror.com/@css-render/plugin-bem/0.15.10_css-render@0.15.10:
|
||||||
|
resolution: {integrity: sha512-V7b08sM2PWJlXI7BJiVIa0Sg30H3u/jHay4AclNXfF2yRFwwb4ZJjggsMfzwj3WSihAdNf2WTqvOU5qsOD80Dg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.10.tgz}
|
||||||
|
id: registry.npmmirror.com/@css-render/plugin-bem/0.15.10
|
||||||
|
name: '@css-render/plugin-bem'
|
||||||
|
version: 0.15.10
|
||||||
|
peerDependencies:
|
||||||
|
css-render: ~0.15.10
|
||||||
|
dependencies:
|
||||||
|
css-render: registry.npmmirror.com/css-render/0.15.10
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37:
|
||||||
|
resolution: {integrity: sha512-keGKnkB2nyVGoA8GezMKNsmvTGXEzgLOGGlgshwOTSEzd1dsROyZ2m/khJ9jV5zbzDM4rWeAWbWF0zwHemsJcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.10.tgz}
|
||||||
|
id: registry.npmmirror.com/@css-render/vue3-ssr/0.15.10
|
||||||
|
name: '@css-render/vue3-ssr'
|
||||||
|
version: 0.15.10
|
||||||
|
peerDependencies:
|
||||||
|
vue: ^3.0.11
|
||||||
|
dependencies:
|
||||||
|
vue: 3.2.37
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/@emotion/hash/0.8.0:
|
||||||
|
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz}
|
||||||
|
name: '@emotion/hash'
|
||||||
|
version: 0.8.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/@juggle/resize-observer/3.3.1:
|
||||||
|
resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz}
|
||||||
|
name: '@juggle/resize-observer'
|
||||||
|
version: 3.3.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/@types/lodash-es/4.17.6:
|
||||||
|
resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz}
|
||||||
|
name: '@types/lodash-es'
|
||||||
|
version: 4.17.6
|
||||||
|
dependencies:
|
||||||
|
'@types/lodash': registry.npmmirror.com/@types/lodash/4.14.185
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/@types/lodash/4.14.185:
|
||||||
|
resolution: {integrity: sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.185.tgz}
|
||||||
|
name: '@types/lodash'
|
||||||
|
version: 4.14.185
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/@types/node/17.0.43:
|
||||||
|
resolution: {integrity: sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-17.0.43.tgz}
|
||||||
|
name: '@types/node'
|
||||||
|
version: 17.0.43
|
||||||
|
|
||||||
|
registry.npmmirror.com/async-validator/4.1.1:
|
||||||
|
resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.1.1.tgz}
|
||||||
|
name: async-validator
|
||||||
|
version: 4.1.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/css-render/0.15.10:
|
||||||
|
resolution: {integrity: sha512-6j5acvm81sXTHJiF47FNNICtDpF74YoWk1xEK3qQvdqgW6vc+OXrPqflL6m8f5GE6XuFYrbACNEd17kraCSBAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/css-render/-/css-render-0.15.10.tgz}
|
||||||
|
name: css-render
|
||||||
|
version: 0.15.10
|
||||||
|
dependencies:
|
||||||
|
'@emotion/hash': registry.npmmirror.com/@emotion/hash/0.8.0
|
||||||
|
'@types/node': registry.npmmirror.com/@types/node/17.0.43
|
||||||
|
csstype: registry.npmmirror.com/csstype/3.0.11
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/csstype/2.6.20:
|
||||||
|
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz}
|
||||||
|
name: csstype
|
||||||
|
version: 2.6.20
|
||||||
|
|
||||||
|
registry.npmmirror.com/csstype/3.0.11:
|
||||||
|
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz}
|
||||||
|
name: csstype
|
||||||
|
version: 3.0.11
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/date-fns-tz/1.3.4_date-fns@2.28.0:
|
||||||
|
resolution: {integrity: sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-1.3.4.tgz}
|
||||||
|
id: registry.npmmirror.com/date-fns-tz/1.3.4
|
||||||
|
name: date-fns-tz
|
||||||
|
version: 1.3.4
|
||||||
|
peerDependencies:
|
||||||
|
date-fns: '>=2.0.0'
|
||||||
|
dependencies:
|
||||||
|
date-fns: registry.npmmirror.com/date-fns/2.28.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/date-fns/2.28.0:
|
||||||
|
resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/date-fns/-/date-fns-2.28.0.tgz}
|
||||||
|
name: date-fns
|
||||||
|
version: 2.28.0
|
||||||
|
engines: {node: '>=0.11'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/echarts-wordcloud/2.0.0_echarts@5.3.3:
|
registry.npmmirror.com/echarts-wordcloud/2.0.0_echarts@5.3.3:
|
||||||
resolution: {integrity: sha512-K7l6pTklqdW7ZWzT/1CS0KhBSINr/cd7c5N1fVMzZMwLQHEwT7x+nivK7g5hkVh7WNcAv4Dn6/ZS5zMKRozC1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts-wordcloud/-/echarts-wordcloud-2.0.0.tgz}
|
resolution: {integrity: sha512-K7l6pTklqdW7ZWzT/1CS0KhBSINr/cd7c5N1fVMzZMwLQHEwT7x+nivK7g5hkVh7WNcAv4Dn6/ZS5zMKRozC1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts-wordcloud/-/echarts-wordcloud-2.0.0.tgz}
|
||||||
id: registry.npmmirror.com/echarts-wordcloud/2.0.0
|
id: registry.npmmirror.com/echarts-wordcloud/2.0.0
|
||||||
@ -5627,6 +5535,12 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
registry.npmmirror.com/evtd/0.2.4:
|
||||||
|
resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz}
|
||||||
|
name: evtd
|
||||||
|
version: 0.2.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/fsevents/2.3.2:
|
registry.npmmirror.com/fsevents/2.3.2:
|
||||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
|
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
|
||||||
name: fsevents
|
name: fsevents
|
||||||
@ -5645,6 +5559,64 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
registry.npmmirror.com/highlight.js/11.5.1:
|
||||||
|
resolution: {integrity: sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/highlight.js/-/highlight.js-11.5.1.tgz}
|
||||||
|
name: highlight.js
|
||||||
|
version: 11.5.1
|
||||||
|
engines: {node: '>=12.0.0'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/lodash-es/4.17.21:
|
||||||
|
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz}
|
||||||
|
name: lodash-es
|
||||||
|
version: 4.17.21
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/lodash/4.17.21:
|
||||||
|
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz}
|
||||||
|
name: lodash
|
||||||
|
version: 4.17.21
|
||||||
|
|
||||||
|
registry.npmmirror.com/naive-ui/2.33.3_vue@3.2.37:
|
||||||
|
resolution: {integrity: sha512-yz2aKdghMVadtvCSBXyjU2bAuGmwLEUcbzmXdUhSdtcbI6mT+mT8vRy43FnbJangPQ87v080q453vtnydNcnhA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/naive-ui/-/naive-ui-2.33.3.tgz}
|
||||||
|
id: registry.npmmirror.com/naive-ui/2.33.3
|
||||||
|
name: naive-ui
|
||||||
|
version: 2.33.3
|
||||||
|
peerDependencies:
|
||||||
|
vue: ^3.0.0
|
||||||
|
dependencies:
|
||||||
|
'@css-render/plugin-bem': registry.npmmirror.com/@css-render/plugin-bem/0.15.10_css-render@0.15.10
|
||||||
|
'@css-render/vue3-ssr': registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37
|
||||||
|
'@types/lodash': registry.npmmirror.com/@types/lodash/4.14.185
|
||||||
|
'@types/lodash-es': registry.npmmirror.com/@types/lodash-es/4.17.6
|
||||||
|
async-validator: registry.npmmirror.com/async-validator/4.1.1
|
||||||
|
css-render: registry.npmmirror.com/css-render/0.15.10
|
||||||
|
date-fns: registry.npmmirror.com/date-fns/2.28.0
|
||||||
|
date-fns-tz: registry.npmmirror.com/date-fns-tz/1.3.4_date-fns@2.28.0
|
||||||
|
evtd: registry.npmmirror.com/evtd/0.2.4
|
||||||
|
highlight.js: registry.npmmirror.com/highlight.js/11.5.1
|
||||||
|
lodash: registry.npmmirror.com/lodash/4.17.21
|
||||||
|
lodash-es: registry.npmmirror.com/lodash-es/4.17.21
|
||||||
|
seemly: registry.npmmirror.com/seemly/0.3.6
|
||||||
|
treemate: registry.npmmirror.com/treemate/0.3.11
|
||||||
|
vdirs: registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37
|
||||||
|
vooks: registry.npmmirror.com/vooks/0.2.12_vue@3.2.37
|
||||||
|
vue: 3.2.37
|
||||||
|
vueuc: registry.npmmirror.com/vueuc/0.4.49_vue@3.2.37
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/seemly/0.3.6:
|
||||||
|
resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/seemly/-/seemly-0.3.6.tgz}
|
||||||
|
name: seemly
|
||||||
|
version: 0.3.6
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/treemate/0.3.11:
|
||||||
|
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz}
|
||||||
|
name: treemate
|
||||||
|
version: 0.3.11
|
||||||
|
dev: false
|
||||||
|
|
||||||
registry.npmmirror.com/uglify-js/3.16.0:
|
registry.npmmirror.com/uglify-js/3.16.0:
|
||||||
resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.0.tgz}
|
resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.0.tgz}
|
||||||
name: uglify-js
|
name: uglify-js
|
||||||
@ -5654,3 +5626,45 @@ packages:
|
|||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37:
|
||||||
|
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz}
|
||||||
|
id: registry.npmmirror.com/vdirs/0.1.8
|
||||||
|
name: vdirs
|
||||||
|
version: 0.1.8
|
||||||
|
peerDependencies:
|
||||||
|
vue: ^3.0.11
|
||||||
|
dependencies:
|
||||||
|
evtd: registry.npmmirror.com/evtd/0.2.4
|
||||||
|
vue: 3.2.37
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/vooks/0.2.12_vue@3.2.37:
|
||||||
|
resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz}
|
||||||
|
id: registry.npmmirror.com/vooks/0.2.12
|
||||||
|
name: vooks
|
||||||
|
version: 0.2.12
|
||||||
|
peerDependencies:
|
||||||
|
vue: ^3.0.0
|
||||||
|
dependencies:
|
||||||
|
evtd: registry.npmmirror.com/evtd/0.2.4
|
||||||
|
vue: 3.2.37
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
registry.npmmirror.com/vueuc/0.4.49_vue@3.2.37:
|
||||||
|
resolution: {integrity: sha512-WarAC44a/Yx78CxkAgROYLq+LkAeCGA/6wHidVoFmHLbzyF3SiP2nzRNGD/8zJeJInXv18EnWK6A//eGgMMq8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vueuc/-/vueuc-0.4.49.tgz}
|
||||||
|
id: registry.npmmirror.com/vueuc/0.4.49
|
||||||
|
name: vueuc
|
||||||
|
version: 0.4.49
|
||||||
|
peerDependencies:
|
||||||
|
vue: ^3.0.11
|
||||||
|
dependencies:
|
||||||
|
'@css-render/vue3-ssr': registry.npmmirror.com/@css-render/vue3-ssr/0.15.10_vue@3.2.37
|
||||||
|
'@juggle/resize-observer': registry.npmmirror.com/@juggle/resize-observer/3.3.1
|
||||||
|
css-render: registry.npmmirror.com/css-render/0.15.10
|
||||||
|
evtd: registry.npmmirror.com/evtd/0.2.4
|
||||||
|
seemly: registry.npmmirror.com/seemly/0.3.6
|
||||||
|
vdirs: registry.npmmirror.com/vdirs/0.1.8_vue@3.2.37
|
||||||
|
vooks: registry.npmmirror.com/vooks/0.2.12_vue@3.2.37
|
||||||
|
vue: 3.2.37
|
||||||
|
dev: false
|
||||||
|
@ -27,7 +27,6 @@ axiosInstance.interceptors.response.use(
|
|||||||
return Promise.resolve(res.data)
|
return Promise.resolve(res.data)
|
||||||
},
|
},
|
||||||
(err: AxiosResponse) => {
|
(err: AxiosResponse) => {
|
||||||
window['$message'].error('接口异常,请检查!')
|
|
||||||
Promise.reject(err)
|
Promise.reject(err)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
BIN
src/assets/images/chart/decorates/countdown.png
Normal file
BIN
src/assets/images/chart/decorates/countdown.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
src/assets/images/chart/decorates/flipper-number.png
Normal file
BIN
src/assets/images/chart/decorates/flipper-number.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
4
src/components/Flipper/index.ts
Normal file
4
src/components/Flipper/index.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import Flipper from './index.vue'
|
||||||
|
type FlipType = 'up' | 'down'
|
||||||
|
|
||||||
|
export { Flipper, FlipType }
|
224
src/components/Flipper/index.vue
Normal file
224
src/components/Flipper/index.vue
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
<template>
|
||||||
|
<div class="M-Flipper" :class="[flipType, { go: isFlipping }]">
|
||||||
|
<div class="digital front" :data-front="frontTextFromData"></div>
|
||||||
|
<div class="digital back" :data-back="backTextFromData"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
export default {
|
||||||
|
name: 'Flipper'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, PropType, watch } from 'vue'
|
||||||
|
import { FlipType } from '.'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
flipType: {
|
||||||
|
type: String as PropType<FlipType>,
|
||||||
|
default: () => {
|
||||||
|
return 'down'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
count: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
duration: {
|
||||||
|
type: Number,
|
||||||
|
default: 600
|
||||||
|
},
|
||||||
|
width: {
|
||||||
|
type: Number,
|
||||||
|
default: 60
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type: Number,
|
||||||
|
default: 100
|
||||||
|
},
|
||||||
|
radius: {
|
||||||
|
type: Number,
|
||||||
|
default: 10
|
||||||
|
},
|
||||||
|
frontColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#ffffff'
|
||||||
|
},
|
||||||
|
backColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#000000'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const isFlipping = ref(false)
|
||||||
|
const frontTextFromData = ref(props.count || 0)
|
||||||
|
const backTextFromData = ref(props.count || 0)
|
||||||
|
|
||||||
|
// 翻牌
|
||||||
|
const flip = (front: string | number, back: string | number) => {
|
||||||
|
// 如果处于翻转中,则不执行
|
||||||
|
if (isFlipping.value) return
|
||||||
|
// 设置翻盘前后数据
|
||||||
|
backTextFromData.value = back
|
||||||
|
frontTextFromData.value = front
|
||||||
|
|
||||||
|
// 设置翻转状态为true
|
||||||
|
isFlipping.value = true
|
||||||
|
|
||||||
|
// 翻牌结束的行为
|
||||||
|
setTimeout(() => {
|
||||||
|
isFlipping.value = false // 设置翻转状态为false
|
||||||
|
frontTextFromData.value = back
|
||||||
|
}, props.duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.count,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
flip(oldVal as string | number, newVal as string | number)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
$frontColor: v-bind('props.frontColor');
|
||||||
|
$backColor: v-bind('props.backColor');
|
||||||
|
$radius: v-bind('`${props.radius}px`');
|
||||||
|
$width: v-bind('`${props.width}px`');
|
||||||
|
$height: v-bind('`${props.height}px`');
|
||||||
|
$perspective: v-bind('`${props.height * 2}px`');
|
||||||
|
$speed: v-bind('`${props.duration / 1000}s`');
|
||||||
|
$shadowColor: #000000;
|
||||||
|
$lineColor: #4a9ef8;
|
||||||
|
|
||||||
|
// #region 动画效果
|
||||||
|
@keyframes frontFlipDown {
|
||||||
|
0% {
|
||||||
|
transform: perspective($perspective) rotateX(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: perspective($perspective) rotateX(-180deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes backFlipDown {
|
||||||
|
0% {
|
||||||
|
transform: perspective($perspective) rotateX(180deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: perspective($perspective) rotateX(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes frontFlipUp {
|
||||||
|
0% {
|
||||||
|
transform: perspective($perspective) rotateX(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: perspective($perspective) rotateX(180deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes backFlipUp {
|
||||||
|
0% {
|
||||||
|
transform: perspective($perspective) rotateX(-180deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: perspective($perspective) rotateX(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// #endregion
|
||||||
|
|
||||||
|
.M-Flipper {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: $width;
|
||||||
|
height: $height;
|
||||||
|
line-height: $height;
|
||||||
|
border: solid 1px $backColor;
|
||||||
|
border-radius: $radius;
|
||||||
|
background: $frontColor;
|
||||||
|
font-size: $width;
|
||||||
|
color: $frontColor;
|
||||||
|
box-shadow: 0 0 6px rgba($color: $shadowColor, $alpha: 0.5); // 阴影部分
|
||||||
|
text-align: center;
|
||||||
|
// font-family: 'Helvetica Neue';
|
||||||
|
|
||||||
|
.digital:before,
|
||||||
|
.digital:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: $backColor;
|
||||||
|
overflow: hidden;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.digital.front:before,
|
||||||
|
.digital.front:after {
|
||||||
|
content: attr(data-front) !important;
|
||||||
|
}
|
||||||
|
.digital.back:before,
|
||||||
|
.digital.back:after {
|
||||||
|
content: attr(data-back) !important;
|
||||||
|
}
|
||||||
|
.digital:before {
|
||||||
|
top: 0;
|
||||||
|
bottom: 50%;
|
||||||
|
border-radius: $radius $radius 0 0;
|
||||||
|
border-bottom: solid 1px rgba($color: $lineColor, $alpha: 0.3); // 中间线颜色
|
||||||
|
}
|
||||||
|
.digital:after {
|
||||||
|
top: 50%;
|
||||||
|
bottom: 0;
|
||||||
|
border-radius: 0 0 $radius $radius;
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
/*向下翻*/
|
||||||
|
&.down .front:before {
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
&.down .back:after {
|
||||||
|
z-index: 2;
|
||||||
|
transform-origin: 50% 0%;
|
||||||
|
transform: perspective($perspective) rotateX(180deg);
|
||||||
|
}
|
||||||
|
&.down .front:after,
|
||||||
|
&.down .back:before {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
&.down.go .front:before {
|
||||||
|
transform-origin: 50% 100%;
|
||||||
|
animation: frontFlipDown $speed ease-in-out both;
|
||||||
|
box-shadow: 0 -2px 6px rgba($color: $lineColor, $alpha: 0.3);
|
||||||
|
backface-visibility: hidden;
|
||||||
|
}
|
||||||
|
&.down.go .back:after {
|
||||||
|
animation: backFlipDown $speed ease-in-out both;
|
||||||
|
}
|
||||||
|
/*向上翻*/
|
||||||
|
&.up .front:after {
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
&.up .back:before {
|
||||||
|
z-index: 2;
|
||||||
|
transform-origin: 50% 100%;
|
||||||
|
transform: perspective($perspective) rotateX(-180deg);
|
||||||
|
}
|
||||||
|
&.up .front:before,
|
||||||
|
&.up .back:after {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
&.up.go .front:after {
|
||||||
|
transform-origin: 50% 0;
|
||||||
|
animation: frontFlipUp $speed ease-in-out both;
|
||||||
|
box-shadow: 0 2px 6px rgba($color: $lineColor, $alpha: 0.3);
|
||||||
|
backface-visibility: hidden;
|
||||||
|
}
|
||||||
|
&.up.go .back:before {
|
||||||
|
animation: backFlipUp $speed ease-in-out both;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -190,11 +190,14 @@ const handleChange = (e: MouseEvent, item: ListType) => {
|
|||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
.select-min-width {
|
.select-min-width {
|
||||||
width: 110px;
|
width: 115px;
|
||||||
}
|
}
|
||||||
@include deep() {
|
@include deep() {
|
||||||
.n-list-item:not(:last-child) {
|
.n-list-item {
|
||||||
border-bottom: 0;
|
border-bottom: 0!important;
|
||||||
|
}
|
||||||
|
.n-list-item__divider {
|
||||||
|
display: none!important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-show="isGroup">
|
<div v-show="isGroup">
|
||||||
<n-divider n-divider style="margin: 10px 0"></n-divider>
|
<n-divider n-divider style="margin: 10px 0"></n-divider>
|
||||||
<n-tag type="warning"> 解散分组「 {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 」也将消失!</n-tag>
|
<n-tag type="warning"> 解散分组「 {{ isCanvas ? '滤镜' : '滤镜 / 变换' }} 」也将消失!</n-tag>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<collapse-item :name="isCanvas ? '滤镜' : '滤镜 / 变换'">
|
<collapse-item :name="isCanvas ? '滤镜' : '滤镜 / 变换'">
|
||||||
@ -69,6 +69,24 @@
|
|||||||
</setting-item>
|
</setting-item>
|
||||||
</setting-item-box>
|
</setting-item-box>
|
||||||
|
|
||||||
|
<!-- 混合模式 -->
|
||||||
|
<setting-item-box v-if="!isCanvas" :alone="true">
|
||||||
|
<template #name>
|
||||||
|
<n-text>混合</n-text>
|
||||||
|
<n-tooltip trigger="hover">
|
||||||
|
<template #trigger>
|
||||||
|
<n-icon size="21" :depth="3">
|
||||||
|
<help-outline-icon></help-outline-icon>
|
||||||
|
</n-icon>
|
||||||
|
</template>
|
||||||
|
<n-text>视频组件需要底色透明一般选中滤色</n-text>
|
||||||
|
</n-tooltip>
|
||||||
|
</template>
|
||||||
|
<setting-item>
|
||||||
|
<n-select v-model:value="chartStyles.blendMode" size="small" filterable :options="BlendModeEnumList"></n-select>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
|
||||||
<!-- 变换 -->
|
<!-- 变换 -->
|
||||||
<setting-item-box v-if="!isCanvas" name="旋转°">
|
<setting-item-box v-if="!isCanvas" name="旋转°">
|
||||||
<setting-item name="Z轴(平面) - 旋转">
|
<setting-item name="Z轴(平面) - 旋转">
|
||||||
@ -132,8 +150,9 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { PickCreateComponentType } from '@/packages/index.d'
|
import { PickCreateComponentType, BlendModeEnumList } from '@/packages/index.d'
|
||||||
import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
|
import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
|
||||||
|
import { icon } from '@/plugins'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
isGroup: {
|
isGroup: {
|
||||||
@ -150,14 +169,14 @@ const props = defineProps({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 百分比格式化persen
|
const { HelpOutlineIcon } = icon.ionicons5
|
||||||
|
|
||||||
|
// 百分比格式化 person
|
||||||
const sliderFormatTooltip = (v: string) => {
|
const sliderFormatTooltip = (v: string) => {
|
||||||
// @ts-ignore
|
|
||||||
return `${(parseFloat(v) * 100).toFixed(0)}%`
|
return `${(parseFloat(v) * 100).toFixed(0)}%`
|
||||||
}
|
}
|
||||||
// 角度格式化
|
// 角度格式化
|
||||||
const degFormatTooltip = (v: string) => {
|
const degFormatTooltip = (v: string) => {
|
||||||
// @ts-ignore
|
|
||||||
return `${v}deg`
|
return `${v}deg`
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// 鼠标点击左右键
|
// 鼠标点击左右键
|
||||||
export enum MouseEventButton {
|
export enum MouseEventButton {
|
||||||
LEFT = 1,
|
LEFT = 1,
|
||||||
RIGHT = 2,
|
RIGHT = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
// 页面拖拽键名
|
// 页面拖拽键名
|
||||||
@ -41,7 +41,15 @@ export enum MenuEnum {
|
|||||||
// 后退
|
// 后退
|
||||||
BACK = 'back',
|
BACK = 'back',
|
||||||
// 前进
|
// 前进
|
||||||
FORWORD = 'forward'
|
FORWORD = 'forward',
|
||||||
|
// 锁定
|
||||||
|
LOCK = 'lock',
|
||||||
|
// 解除锁定
|
||||||
|
UNLOCK = 'unLock',
|
||||||
|
// 隐藏
|
||||||
|
HIDE = 'hide',
|
||||||
|
// 显示
|
||||||
|
SHOW = 'show'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win 键盘枚举
|
// Win 键盘枚举
|
||||||
@ -49,9 +57,9 @@ export enum WinKeyboard {
|
|||||||
CTRL = 'ctrl',
|
CTRL = 'ctrl',
|
||||||
SHIFT = 'shift',
|
SHIFT = 'shift',
|
||||||
ALT = ' alt',
|
ALT = ' alt',
|
||||||
CTRL_SOURCE_KEY = "control",
|
CTRL_SOURCE_KEY = 'control',
|
||||||
SHIFT_SOURCE_KEY = "shift",
|
SHIFT_SOURCE_KEY = 'shift',
|
||||||
ALT_SOURCE_KEY = "alt"
|
ALT_SOURCE_KEY = 'alt'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mac 键盘枚举
|
// Mac 键盘枚举
|
||||||
@ -60,7 +68,7 @@ export enum MacKeyboard {
|
|||||||
CTRL = '⌘',
|
CTRL = '⌘',
|
||||||
SHIFT = '⇧',
|
SHIFT = '⇧',
|
||||||
ALT = '⌥',
|
ALT = '⌥',
|
||||||
CTRL_SOURCE_KEY = "⌘",
|
CTRL_SOURCE_KEY = '⌘',
|
||||||
SHIFT_SOURCE_KEY = "⇧",
|
SHIFT_SOURCE_KEY = '⇧',
|
||||||
ALT_SOURCE_KEY = "⌥"
|
ALT_SOURCE_KEY = '⌥'
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ export enum ResultEnum {
|
|||||||
SERVER_ERROR = 500,
|
SERVER_ERROR = 500,
|
||||||
SERVER_FORBIDDEN = 403,
|
SERVER_FORBIDDEN = 403,
|
||||||
NOT_FOUND = 404,
|
NOT_FOUND = 404,
|
||||||
TIMEOUT = 10042
|
TIMEOUT = 60000
|
||||||
}
|
}
|
||||||
|
|
||||||
// 数据相关
|
// 数据相关
|
||||||
|
@ -24,6 +24,7 @@ import { CreateComponentType } from '@/packages/index.d'
|
|||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { isPreview } from '@/utils'
|
import { isPreview } from '@/utils'
|
||||||
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
||||||
|
import isObject from 'lodash/isObject'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
themeSetting: {
|
themeSetting: {
|
||||||
@ -51,8 +52,9 @@ const option = computed(() => {
|
|||||||
// dataset 无法变更条数的补丁
|
// dataset 无法变更条数的补丁
|
||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
(newData, oldData) => {
|
(newData: { dimensions: any }, oldData) => {
|
||||||
if (newData.dimensions.length !== oldData.dimensions.length) {
|
if (!isObject(newData) || !('dimensions' in newData)) return
|
||||||
|
if (newData?.dimensions.length !== oldData?.dimensions.length) {
|
||||||
const seriesArr = []
|
const seriesArr = []
|
||||||
for (let i = 0; i < newData.dimensions.length - 1; i++) {
|
for (let i = 0; i < newData.dimensions.length - 1; i++) {
|
||||||
seriesArr.push(seriesItem)
|
seriesArr.push(seriesItem)
|
||||||
|
@ -23,6 +23,7 @@ import { useChartDataFetch } from '@/hooks'
|
|||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { isPreview } from '@/utils'
|
import { isPreview } from '@/utils'
|
||||||
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
||||||
|
import isObject from 'lodash/isObject'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
themeSetting: {
|
themeSetting: {
|
||||||
@ -50,7 +51,8 @@ const option = computed(() => {
|
|||||||
// dataset 无法变更条数的补丁
|
// dataset 无法变更条数的补丁
|
||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
(newData, oldData) => {
|
(newData: { dimensions: any }, oldData) => {
|
||||||
|
if (!isObject(newData) || !('dimensions' in newData)) return
|
||||||
if (newData?.dimensions.length !== oldData?.dimensions.length) {
|
if (newData?.dimensions.length !== oldData?.dimensions.length) {
|
||||||
const seriesArr = []
|
const seriesArr = []
|
||||||
for (let i = 0; i < newData.dimensions.length - 1; i++) {
|
for (let i = 0; i < newData.dimensions.length - 1; i++) {
|
||||||
|
@ -24,6 +24,7 @@ import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore
|
|||||||
import { useChartDataFetch } from '@/hooks'
|
import { useChartDataFetch } from '@/hooks'
|
||||||
import { isPreview } from '@/utils'
|
import { isPreview } from '@/utils'
|
||||||
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
||||||
|
import isObject from 'lodash/isObject'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
themeSetting: {
|
themeSetting: {
|
||||||
@ -51,7 +52,8 @@ const option = computed(() => {
|
|||||||
// dataset 无法变更条数的补丁
|
// dataset 无法变更条数的补丁
|
||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
(newData, oldData) => {
|
(newData: { dimensions: any }, oldData) => {
|
||||||
|
if (!isObject(newData) || !('dimensions' in newData)) return
|
||||||
if (newData?.dimensions.length !== oldData?.dimensions.length) {
|
if (newData?.dimensions.length !== oldData?.dimensions.length) {
|
||||||
const seriesArr = []
|
const seriesArr = []
|
||||||
for (let i = 0; i < newData.dimensions.length - 1; i++) {
|
for (let i = 0; i < newData.dimensions.length - 1; i++) {
|
||||||
|
@ -73,7 +73,7 @@ export const option = {
|
|||||||
textShadowColor: '#000',
|
textShadowColor: '#000',
|
||||||
textShadowBlur: 10,
|
textShadowBlur: 10,
|
||||||
textBorderWidth: 0,
|
textBorderWidth: 0,
|
||||||
color: '#FFF',
|
color: '#FFFFFF',
|
||||||
show: true
|
show: true
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
@ -95,19 +95,23 @@ export const option = {
|
|||||||
geoIndex: 1,
|
geoIndex: 1,
|
||||||
tooltip: {
|
tooltip: {
|
||||||
show: true,
|
show: true,
|
||||||
backgroundColor: 'rgba(0,0,0,.6)',
|
backgroundColor: '#00000060',
|
||||||
borderColor: 'rgba(147, 235, 248, .8)',
|
borderColor: 'rgba(147, 235, 248, 0.8)',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#FFF'
|
color: '#FFFFFF',
|
||||||
|
fontSize: 12,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
show: false
|
show: false,
|
||||||
|
color: '#FFFFFF',
|
||||||
|
fontSize: 12,
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
disabled: false,
|
disabled: false,
|
||||||
label: {
|
label: {
|
||||||
color: '#fffFFF'
|
color: '#FFFFFF',
|
||||||
|
fontSize: 12,
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
areaColor: '#389BB7',
|
areaColor: '#389BB7',
|
||||||
@ -126,11 +130,11 @@ export const option = {
|
|||||||
colorStops: [
|
colorStops: [
|
||||||
{
|
{
|
||||||
offset: 0,
|
offset: 0,
|
||||||
color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色
|
color: '#93ebf800' // 0% 处的颜色
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
offset: 1,
|
offset: 1,
|
||||||
color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色
|
color: '#93ebf820' // 100% 处的颜色
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
globalCoord: false
|
globalCoord: false
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
</SettingItem>
|
</SettingItem>
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
|
|
||||||
<SettingItemBox name="区域颜色" :alone="true">
|
<SettingItemBox name="区域颜色">
|
||||||
<SettingItem name="0%处颜色">
|
<SettingItem name="0%处颜色">
|
||||||
<n-color-picker
|
<n-color-picker
|
||||||
size="small"
|
size="small"
|
||||||
@ -61,12 +61,36 @@
|
|||||||
></n-input-number>
|
></n-input-number>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
<SettingItemBox name="聚焦 (预览可见)">
|
|
||||||
<setting-item name="禁用">
|
<SettingItemBox name="地理信息名称">
|
||||||
|
<SettingItem name="显示">
|
||||||
|
<n-space>
|
||||||
|
<n-switch v-model:value="seriesList[1].label.show" size="small"></n-switch>
|
||||||
|
</n-space>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="字体颜色">
|
||||||
|
<n-color-picker
|
||||||
|
size="small"
|
||||||
|
:modes="['hex']"
|
||||||
|
v-model:value="seriesList[1].label.color"
|
||||||
|
></n-color-picker>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="字体大小">
|
||||||
|
<n-input-number
|
||||||
|
v-model:value="seriesList[1].label.fontSize"
|
||||||
|
:min="1"
|
||||||
|
size="small"
|
||||||
|
placeholder="请输入字体大小"
|
||||||
|
></n-input-number>
|
||||||
|
</SettingItem>
|
||||||
|
</SettingItemBox>
|
||||||
|
|
||||||
|
<SettingItemBox name="悬浮 (预览可见)">
|
||||||
|
<SettingItem name="禁用">
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-switch v-model:value="seriesList[1].emphasis.disabled" size="small"></n-switch>
|
<n-switch v-model:value="seriesList[1].emphasis.disabled" size="small"></n-switch>
|
||||||
</n-space>
|
</n-space>
|
||||||
</setting-item>
|
</SettingItem>
|
||||||
<SettingItem name="颜色">
|
<SettingItem name="颜色">
|
||||||
<n-color-picker
|
<n-color-picker
|
||||||
size="small"
|
size="small"
|
||||||
@ -74,6 +98,14 @@
|
|||||||
v-model:value="seriesList[1].emphasis.itemStyle.areaColor"
|
v-model:value="seriesList[1].emphasis.itemStyle.areaColor"
|
||||||
></n-color-picker>
|
></n-color-picker>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
|
<SettingItem name="字体大小">
|
||||||
|
<n-input-number
|
||||||
|
v-model:value="seriesList[1].emphasis.label.fontSize"
|
||||||
|
:min="1"
|
||||||
|
size="small"
|
||||||
|
placeholder="请输入字体大小"
|
||||||
|
></n-input-number>
|
||||||
|
</SettingItem>
|
||||||
<SettingItem name="阴影">
|
<SettingItem name="阴影">
|
||||||
<n-color-picker
|
<n-color-picker
|
||||||
size="small"
|
size="small"
|
||||||
@ -97,7 +129,37 @@
|
|||||||
></n-color-picker>
|
></n-color-picker>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
<SettingItemBox name="边框">
|
|
||||||
|
<SettingItemBox name="悬浮弹窗">
|
||||||
|
<SettingItem name="显示">
|
||||||
|
<n-space>
|
||||||
|
<n-switch v-model:value="seriesList[1].tooltip.show" size="small"></n-switch>
|
||||||
|
</n-space>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="字体大小">
|
||||||
|
<n-input-number
|
||||||
|
v-model:value="seriesList[1].tooltip.textStyle.fontSize"
|
||||||
|
:min="1"
|
||||||
|
size="small"
|
||||||
|
placeholder="请输入字体大小"
|
||||||
|
></n-input-number>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="字体颜色">
|
||||||
|
<n-color-picker
|
||||||
|
size="small"
|
||||||
|
:modes="['hex']"
|
||||||
|
v-model:value="seriesList[1].tooltip.textStyle.color"
|
||||||
|
></n-color-picker>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="背景颜色">
|
||||||
|
<n-color-picker
|
||||||
|
size="small"
|
||||||
|
:modes="['hex']"
|
||||||
|
v-model:value="seriesList[1].tooltip.backgroundColor"
|
||||||
|
></n-color-picker>
|
||||||
|
</SettingItem>
|
||||||
|
</SettingItemBox>
|
||||||
|
<SettingItemBox name="区域边框">
|
||||||
<SettingItem name="颜色">
|
<SettingItem name="颜色">
|
||||||
<n-color-picker
|
<n-color-picker
|
||||||
size="small"
|
size="small"
|
||||||
@ -105,7 +167,7 @@
|
|||||||
v-model:value="seriesList[1].itemStyle.borderColor"
|
v-model:value="seriesList[1].itemStyle.borderColor"
|
||||||
></n-color-picker>
|
></n-color-picker>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem name="大小">
|
<SettingItem name="宽度大小">
|
||||||
<n-input-number
|
<n-input-number
|
||||||
v-model:value="seriesList[1].itemStyle.borderWidth"
|
v-model:value="seriesList[1].itemStyle.borderWidth"
|
||||||
:min="1"
|
:min="1"
|
||||||
@ -130,6 +192,20 @@
|
|||||||
</SettingItem>
|
</SettingItem>
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
|
|
||||||
|
<SettingItemBox name="文本">
|
||||||
|
<SettingItem name="显示">
|
||||||
|
<n-space>
|
||||||
|
<n-switch v-model:value="seriesList[0].label.show" size="small"></n-switch>
|
||||||
|
</n-space>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="字体大小">
|
||||||
|
<n-input-number v-model:value="seriesList[0].label.fontSize" size="small" :min="0"></n-input-number>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem name="字体颜色">
|
||||||
|
<n-color-picker size="small" :modes="['hex']" v-model:value="seriesList[0].label.color"></n-color-picker>
|
||||||
|
</SettingItem>
|
||||||
|
</SettingItemBox>
|
||||||
|
|
||||||
<SettingItemBox name="涟漪">
|
<SettingItemBox name="涟漪">
|
||||||
<SettingItem name="涟漪大小">
|
<SettingItem name="涟漪大小">
|
||||||
<n-input-number
|
<n-input-number
|
||||||
|
@ -61,10 +61,14 @@ const getGeojson = (regionId: string) => {
|
|||||||
//异步时先注册空的 保证初始化不报错
|
//异步时先注册空的 保证初始化不报错
|
||||||
registerMap(props.chartConfig.option.mapRegion.adcode, { geoJSON: {} as any, specialAreas: {} })
|
registerMap(props.chartConfig.option.mapRegion.adcode, { geoJSON: {} as any, specialAreas: {} })
|
||||||
|
|
||||||
// 进行更换初始化地图
|
// 进行更换初始化地图 如果为china 单独处理
|
||||||
const registerMapInitAsync = async () => {
|
const registerMapInitAsync = async () => {
|
||||||
await nextTick()
|
await nextTick()
|
||||||
await getGeojson(props.chartConfig.option.mapRegion.adcode)
|
if (props.chartConfig.option.mapRegion.adcode!="china") {
|
||||||
|
await getGeojson(props.chartConfig.option.mapRegion.adcode)
|
||||||
|
}else{
|
||||||
|
await hainanLandsHandle(props.chartConfig.option.mapRegion.showHainanIsLands)
|
||||||
|
}
|
||||||
vEchartsSetOption()
|
vEchartsSetOption()
|
||||||
}
|
}
|
||||||
registerMapInitAsync()
|
registerMapInitAsync()
|
||||||
@ -85,7 +89,14 @@ const dataSetHandle = async (dataset: any) => {
|
|||||||
|
|
||||||
isPreview() && vEchartsSetOption()
|
isPreview() && vEchartsSetOption()
|
||||||
}
|
}
|
||||||
|
// 处理海南群岛
|
||||||
|
const hainanLandsHandle=async(newData:boolean)=>{
|
||||||
|
if (newData) {
|
||||||
|
await getGeojson('china')
|
||||||
|
} else {
|
||||||
|
registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
|
||||||
|
}
|
||||||
|
}
|
||||||
//监听 dataset 数据发生变化
|
//监听 dataset 数据发生变化
|
||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
@ -102,11 +113,7 @@ watch(
|
|||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.mapRegion.showHainanIsLands,
|
() => props.chartConfig.option.mapRegion.showHainanIsLands,
|
||||||
async newData => {
|
async newData => {
|
||||||
if (newData) {
|
await hainanLandsHandle(newData)
|
||||||
await getGeojson('china')
|
|
||||||
} else {
|
|
||||||
registerMap('china', { geoJSON: mapJsonWithoutHainanIsLands as any, specialAreas: {} })
|
|
||||||
}
|
|
||||||
vEchartsSetOption()
|
vEchartsSetOption()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -14,7 +14,7 @@ import { mergeTheme } from '@/packages/public/chart'
|
|||||||
import { useChartDataFetch } from '@/hooks'
|
import { useChartDataFetch } from '@/hooks'
|
||||||
import { CreateComponentType } from '@/packages/index.d'
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { isPreview } from '@/utils'
|
import { isPreview, isArray } from '@/utils'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
themeSetting: {
|
themeSetting: {
|
||||||
@ -49,6 +49,7 @@ const dataSetHandle = (dataset: typeof dataJson) => {
|
|||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
newData => {
|
newData => {
|
||||||
|
if(!isArray(newData)) return
|
||||||
dataSetHandle(newData)
|
dataSetHandle(newData)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,7 @@ import 'echarts-liquidfill/src/liquidFill.js'
|
|||||||
import { CanvasRenderer } from 'echarts/renderers'
|
import { CanvasRenderer } from 'echarts/renderers'
|
||||||
import { GridComponent } from 'echarts/components'
|
import { GridComponent } from 'echarts/components'
|
||||||
import config from './config'
|
import config from './config'
|
||||||
import { isPreview, isString } from '@/utils'
|
import { isPreview, isString, isNumber } from '@/utils'
|
||||||
import { chartColorsSearch, defaultTheme } from '@/settings/chartThemes/index'
|
import { chartColorsSearch, defaultTheme } from '@/settings/chartThemes/index'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { useChartDataFetch } from '@/hooks'
|
import { useChartDataFetch } from '@/hooks'
|
||||||
@ -75,6 +75,7 @@ const dataHandle = (newData: number | string) => {
|
|||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
newData => {
|
newData => {
|
||||||
|
if(!isString(newData) && !isNumber(newData)) return
|
||||||
props.chartConfig.option.series[0].data = [dataHandle(newData)]
|
props.chartConfig.option.series[0].data = [dataHandle(newData)]
|
||||||
option.value = props.chartConfig.option
|
option.value = props.chartConfig.option
|
||||||
},
|
},
|
||||||
|
@ -12,7 +12,7 @@ import { mergeTheme } from '@/packages/public/chart'
|
|||||||
import config, { includes } from './config'
|
import config, { includes } from './config'
|
||||||
import { useChartDataFetch } from '@/hooks'
|
import { useChartDataFetch } from '@/hooks'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
|
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent, TitleComponent } from 'echarts/components'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
themeSetting: {
|
themeSetting: {
|
||||||
@ -29,7 +29,7 @@ const props = defineProps({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent])
|
use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent, TitleComponent])
|
||||||
|
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
value: {}
|
value: {}
|
||||||
|
@ -50,7 +50,7 @@ watch(
|
|||||||
props.chartConfig.option.series[0].roseType = true
|
props.chartConfig.option.series[0].roseType = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ deep: true, immediate: true }
|
{ deep: false, immediate: true }
|
||||||
)
|
)
|
||||||
|
|
||||||
const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
|
const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore)
|
||||||
|
@ -20,7 +20,7 @@ import config, { includes, seriesItem } from './config'
|
|||||||
import { mergeTheme } from '@/packages/public/chart'
|
import { mergeTheme } from '@/packages/public/chart'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { useChartDataFetch } from '@/hooks'
|
import { useChartDataFetch } from '@/hooks'
|
||||||
import { isPreview } from '@/utils'
|
import { isPreview, isArray } from '@/utils'
|
||||||
import {
|
import {
|
||||||
DatasetComponent,
|
DatasetComponent,
|
||||||
GridComponent,
|
GridComponent,
|
||||||
@ -69,6 +69,7 @@ const option = computed(() => {
|
|||||||
watch(
|
watch(
|
||||||
() => props.chartConfig.option.dataset,
|
() => props.chartConfig.option.dataset,
|
||||||
(newData, oldData) => {
|
(newData, oldData) => {
|
||||||
|
if (!isArray(newData)) return
|
||||||
if (newData?.length !== oldData?.length) {
|
if (newData?.length !== oldData?.length) {
|
||||||
replaceMergeArr.value = ['series']
|
replaceMergeArr.value = ['series']
|
||||||
// eslint-disable-next-line vue/no-mutating-props
|
// eslint-disable-next-line vue/no-mutating-props
|
||||||
|
47
src/packages/components/Decorates/Mores/CountDown/config.ts
Normal file
47
src/packages/components/Decorates/Mores/CountDown/config.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import { PublicConfigClass } from '@/packages/public'
|
||||||
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
|
import { CountDownConfig } from './index'
|
||||||
|
import cloneDeep from 'lodash/cloneDeep'
|
||||||
|
import { chartInitConfig } from '@/settings/designSetting'
|
||||||
|
import { FlipType } from '@/components/Flipper'
|
||||||
|
|
||||||
|
type STYLE = '时分秒' | '冒号'
|
||||||
|
|
||||||
|
export interface OptionType {
|
||||||
|
dataset: number
|
||||||
|
useEndDate: boolean
|
||||||
|
endDate: number
|
||||||
|
style: STYLE
|
||||||
|
showDay: boolean
|
||||||
|
flipperBgColor: string
|
||||||
|
flipperTextColor: string
|
||||||
|
flipperWidth: number
|
||||||
|
flipperHeight: number
|
||||||
|
flipperRadius: number
|
||||||
|
flipperGap: number
|
||||||
|
flipperType: FlipType
|
||||||
|
flipperSpeed: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export const option: OptionType = {
|
||||||
|
dataset: 10 * 60, // 10分钟
|
||||||
|
useEndDate: false,
|
||||||
|
endDate: new Date().getTime(), // 当前时间
|
||||||
|
style: '时分秒',
|
||||||
|
showDay: false,
|
||||||
|
flipperBgColor: '#16293E',
|
||||||
|
flipperTextColor: '#4A9EF8FF',
|
||||||
|
flipperWidth: 30,
|
||||||
|
flipperHeight: 50,
|
||||||
|
flipperRadius: 5,
|
||||||
|
flipperGap: 10,
|
||||||
|
flipperType: 'down',
|
||||||
|
flipperSpeed: 450
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class Config extends PublicConfigClass implements CreateComponentType {
|
||||||
|
public key = CountDownConfig.key
|
||||||
|
public attr = { ...chartInitConfig, w: 500, h: 100, zIndex: -1 }
|
||||||
|
public chartConfig = cloneDeep(CountDownConfig)
|
||||||
|
public option = cloneDeep(option)
|
||||||
|
}
|
98
src/packages/components/Decorates/Mores/CountDown/config.vue
Normal file
98
src/packages/components/Decorates/Mores/CountDown/config.vue
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<template>
|
||||||
|
<collapse-item name="倒计时" expanded>
|
||||||
|
<setting-item-box name="内容" alone>
|
||||||
|
<setting-item name="计时(秒)">
|
||||||
|
<n-input-number
|
||||||
|
v-model:value="optionData.dataset"
|
||||||
|
size="small"
|
||||||
|
:min="0"
|
||||||
|
:disabled="optionData.useEndDate"
|
||||||
|
></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="结束日期">
|
||||||
|
<n-date-picker v-model:value="optionData.endDate" type="datetime" :disabled="!optionData.useEndDate" />
|
||||||
|
</setting-item>
|
||||||
|
<setting-item>
|
||||||
|
<n-checkbox v-model:checked="optionData.useEndDate" size="small">使用固定结束日期</n-checkbox>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
|
||||||
|
<setting-item-box name="样式">
|
||||||
|
<setting-item name="风格">
|
||||||
|
<n-select
|
||||||
|
v-model:value="optionData.style"
|
||||||
|
size="small"
|
||||||
|
:options="[
|
||||||
|
{ label: '时分秒', value: '时分秒' },
|
||||||
|
{ label: '冒号', value: '冒号' }
|
||||||
|
]"
|
||||||
|
></n-select>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item>
|
||||||
|
<n-checkbox v-model:checked="optionData.showDay" size="small">显示天</n-checkbox>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
</collapse-item>
|
||||||
|
|
||||||
|
<collapse-item name="翻牌" expanded>
|
||||||
|
<setting-item-box name="样式">
|
||||||
|
<setting-item name="宽度">
|
||||||
|
<n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="高度">
|
||||||
|
<n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="间隔">
|
||||||
|
<n-input-number v-model:value="optionData.flipperGap" size="small" :min="0"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="圆角">
|
||||||
|
<n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="背景色">
|
||||||
|
<n-color-picker
|
||||||
|
size="small"
|
||||||
|
:show-alpha="false"
|
||||||
|
:modes="['hex']"
|
||||||
|
v-model:value="optionData.flipperBgColor"
|
||||||
|
></n-color-picker>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="字体色">
|
||||||
|
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
|
||||||
|
<setting-item-box name="行为">
|
||||||
|
<setting-item name="动画">
|
||||||
|
<n-select
|
||||||
|
v-model:value="optionData.flipperType"
|
||||||
|
size="small"
|
||||||
|
:options="[
|
||||||
|
{ label: '下翻', value: 'down' },
|
||||||
|
{ label: '上翻', value: 'up' }
|
||||||
|
]"
|
||||||
|
></n-select>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="翻牌速度(毫秒)">
|
||||||
|
<n-input-number
|
||||||
|
v-model:value="optionData.flipperSpeed"
|
||||||
|
size="small"
|
||||||
|
:min="100"
|
||||||
|
:max="900"
|
||||||
|
:step="100"
|
||||||
|
></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
</collapse-item>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { PropType } from 'vue'
|
||||||
|
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
|
||||||
|
import { OptionType } from './config'
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
optionData: {
|
||||||
|
type: Object as PropType<OptionType>,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
14
src/packages/components/Decorates/Mores/CountDown/index.ts
Normal file
14
src/packages/components/Decorates/Mores/CountDown/index.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import image from '@/assets/images/chart/decorates/countdown.png'
|
||||||
|
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
|
||||||
|
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
|
||||||
|
|
||||||
|
export const CountDownConfig: ConfigType = {
|
||||||
|
key: 'CountDown',
|
||||||
|
chartKey: 'VCountDown',
|
||||||
|
conKey: 'VCCountDown',
|
||||||
|
title: '倒计时',
|
||||||
|
category: ChatCategoryEnum.MORE,
|
||||||
|
categoryName: ChatCategoryEnumName.MORE,
|
||||||
|
package: PackagesCategoryEnum.DECORATES,
|
||||||
|
image
|
||||||
|
}
|
184
src/packages/components/Decorates/Mores/CountDown/index.vue
Normal file
184
src/packages/components/Decorates/Mores/CountDown/index.vue
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<n-countdown
|
||||||
|
ref="countdownRef"
|
||||||
|
:duration="totalDuration"
|
||||||
|
:render="renderCountdown"
|
||||||
|
:active="countdownActive"
|
||||||
|
v-show="false"
|
||||||
|
/>
|
||||||
|
<n-space class="go-decorates-more-countdown" :size="flipperGap" align="center" justify="center">
|
||||||
|
<template v-if="showDay">
|
||||||
|
<flipper
|
||||||
|
:count="item"
|
||||||
|
:width="flipperWidth"
|
||||||
|
:height="flipperHeight"
|
||||||
|
:front-color="flipperTextColor"
|
||||||
|
:back-color="flipperBgColor"
|
||||||
|
:radius="flipperRadius"
|
||||||
|
:flip-type="flipperType"
|
||||||
|
:duration="flipperSpeed"
|
||||||
|
v-for="(item, index) in daysFlipperData"
|
||||||
|
:key="index"
|
||||||
|
class="go-d-block"
|
||||||
|
/>
|
||||||
|
<div v-if="style === '时分秒'">天</div>
|
||||||
|
<div v-else>:</div>
|
||||||
|
</template>
|
||||||
|
<flipper
|
||||||
|
:count="item"
|
||||||
|
:width="flipperWidth"
|
||||||
|
:height="flipperHeight"
|
||||||
|
:front-color="flipperTextColor"
|
||||||
|
:back-color="flipperBgColor"
|
||||||
|
:radius="flipperRadius"
|
||||||
|
:flip-type="flipperType"
|
||||||
|
:duration="flipperSpeed"
|
||||||
|
v-for="(item, index) in hoursFlipperData"
|
||||||
|
:key="index"
|
||||||
|
class="go-d-block"
|
||||||
|
/>
|
||||||
|
<div v-if="style === '时分秒'">时</div>
|
||||||
|
<div v-else>:</div>
|
||||||
|
<flipper
|
||||||
|
:count="item"
|
||||||
|
:width="flipperWidth"
|
||||||
|
:height="flipperHeight"
|
||||||
|
:front-color="flipperTextColor"
|
||||||
|
:back-color="flipperBgColor"
|
||||||
|
:radius="flipperRadius"
|
||||||
|
:flip-type="flipperType"
|
||||||
|
:duration="flipperSpeed"
|
||||||
|
v-for="(item, index) in minutesFlipperData"
|
||||||
|
:key="index"
|
||||||
|
class="go-d-block"
|
||||||
|
/>
|
||||||
|
<div v-if="style === '时分秒'">分</div>
|
||||||
|
<div v-else>:</div>
|
||||||
|
<flipper
|
||||||
|
:count="item"
|
||||||
|
:width="flipperWidth"
|
||||||
|
:height="flipperHeight"
|
||||||
|
:front-color="flipperTextColor"
|
||||||
|
:back-color="flipperBgColor"
|
||||||
|
:radius="flipperRadius"
|
||||||
|
:flip-type="flipperType"
|
||||||
|
:duration="flipperSpeed"
|
||||||
|
v-for="(item, index) in secondsFlipperData"
|
||||||
|
:key="index"
|
||||||
|
class="go-d-block"
|
||||||
|
/>
|
||||||
|
<div v-if="style === '时分秒'">秒</div>
|
||||||
|
</n-space>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { PropType, toRefs, watch, ref, onMounted } from 'vue'
|
||||||
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
|
import { Flipper } from '@/components/Flipper'
|
||||||
|
import { OptionType } from './config'
|
||||||
|
import { CountdownInst, CountdownProps } from 'naive-ui/es/countdown/src/Countdown'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
chartConfig: {
|
||||||
|
type: Object as PropType<CreateComponentType>,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { w, h } = toRefs(props.chartConfig.attr)
|
||||||
|
|
||||||
|
const {
|
||||||
|
dataset,
|
||||||
|
useEndDate,
|
||||||
|
endDate,
|
||||||
|
style,
|
||||||
|
showDay,
|
||||||
|
flipperBgColor,
|
||||||
|
flipperTextColor,
|
||||||
|
flipperWidth,
|
||||||
|
flipperHeight,
|
||||||
|
flipperRadius,
|
||||||
|
flipperGap,
|
||||||
|
flipperType,
|
||||||
|
flipperSpeed
|
||||||
|
} = toRefs(props.chartConfig.option as OptionType)
|
||||||
|
|
||||||
|
const countdownRef = ref<CountdownInst | null>()
|
||||||
|
const countdownActive = ref(false)
|
||||||
|
|
||||||
|
const totalDuration = ref(dataset.value * 1000)
|
||||||
|
const daysFlipperData = ref<string[] | number[]>([])
|
||||||
|
const hoursFlipperData = ref<string[] | number[]>([])
|
||||||
|
const minutesFlipperData = ref<string[] | number[]>([])
|
||||||
|
const secondsFlipperData = ref<string[] | number[]>([])
|
||||||
|
const getFlipperData = (val: string | number) => {
|
||||||
|
const len = Math.max(val.toString().length, 2)
|
||||||
|
return val
|
||||||
|
.toString()
|
||||||
|
.padStart(len, '0') // 左侧填充|右对齐
|
||||||
|
.split('') // 转数组
|
||||||
|
}
|
||||||
|
const updateDatasetHandler = (hours: number, minutes: number, seconds: number) => {
|
||||||
|
const days = Math.floor(hours / 24)
|
||||||
|
daysFlipperData.value = getFlipperData(days)
|
||||||
|
hoursFlipperData.value = getFlipperData(showDay.value ? hours % 24 : hours)
|
||||||
|
minutesFlipperData.value = getFlipperData(minutes)
|
||||||
|
secondsFlipperData.value = getFlipperData(seconds)
|
||||||
|
}
|
||||||
|
|
||||||
|
const renderCountdown: CountdownProps['render'] = ({ hours, minutes, seconds }) => {
|
||||||
|
updateDatasetHandler(hours, minutes, seconds)
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateTotalDuration = () => {
|
||||||
|
countdownActive.value = false
|
||||||
|
totalDuration.value = useEndDate.value ? endDate.value - new Date().getTime() : dataset.value * 1000
|
||||||
|
countdownRef.value?.reset && countdownRef.value?.reset()
|
||||||
|
countdownActive.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.chartConfig.option.dataset,
|
||||||
|
() => {
|
||||||
|
updateTotalDuration()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
watch(
|
||||||
|
() => props.chartConfig.option.endDate,
|
||||||
|
() => {
|
||||||
|
updateTotalDuration()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
watch(
|
||||||
|
() => props.chartConfig.option.useEndDate,
|
||||||
|
() => {
|
||||||
|
updateTotalDuration()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
updateTotalDuration()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@include go('decorates-more-countdown') {
|
||||||
|
width: v-bind('`${w}px`');
|
||||||
|
height: v-bind('`${h}px`');
|
||||||
|
font-size: v-bind('`${flipperWidth}px`');
|
||||||
|
line-height: v-bind('`${flipperHeight}px`');
|
||||||
|
color: v-bind('flipperTextColor');
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,39 @@
|
|||||||
|
import { PublicConfigClass } from '@/packages/public'
|
||||||
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
|
import { FlipperNumberConfig } from './index'
|
||||||
|
import cloneDeep from 'lodash/cloneDeep'
|
||||||
|
import { chartInitConfig } from '@/settings/designSetting'
|
||||||
|
import { FlipType } from '@/components/Flipper'
|
||||||
|
|
||||||
|
export interface OptionType {
|
||||||
|
dataset: number | string
|
||||||
|
flipperLength: number
|
||||||
|
flipperBgColor: string
|
||||||
|
flipperTextColor: string
|
||||||
|
flipperWidth: number
|
||||||
|
flipperHeight: number
|
||||||
|
flipperRadius: number
|
||||||
|
flipperGap: number
|
||||||
|
flipperType: FlipType
|
||||||
|
flipperSpeed: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export const option: OptionType = {
|
||||||
|
dataset: 3234,
|
||||||
|
flipperLength: 6,
|
||||||
|
flipperBgColor: '#16293E',
|
||||||
|
flipperTextColor: '#4A9EF8FF',
|
||||||
|
flipperWidth: 30,
|
||||||
|
flipperHeight: 50,
|
||||||
|
flipperRadius: 5,
|
||||||
|
flipperGap: 10,
|
||||||
|
flipperType: 'down',
|
||||||
|
flipperSpeed: 450
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class Config extends PublicConfigClass implements CreateComponentType {
|
||||||
|
public key = FlipperNumberConfig.key
|
||||||
|
public attr = { ...chartInitConfig, w: 300, h: 100, zIndex: -1 }
|
||||||
|
public chartConfig = cloneDeep(FlipperNumberConfig)
|
||||||
|
public option = cloneDeep(option)
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
<template>
|
||||||
|
<collapse-item name="翻牌" :expanded="true">
|
||||||
|
<setting-item-box name="内容">
|
||||||
|
<setting-item name="初始值">
|
||||||
|
<n-input-number v-model:value="optionData.dataset" size="small" :min="0"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="翻牌个数">
|
||||||
|
<n-input-number v-model:value="optionData.flipperLength" size="small" :min="1"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
|
||||||
|
<setting-item-box name="样式">
|
||||||
|
<setting-item name="宽度">
|
||||||
|
<n-input-number v-model:value="optionData.flipperWidth" size="small" :min="1"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="高度">
|
||||||
|
<n-input-number v-model:value="optionData.flipperHeight" size="small" :min="1"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="间隔">
|
||||||
|
<n-input-number v-model:value="optionData.flipperGap" size="small" :min="0"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="圆角">
|
||||||
|
<n-input-number v-model:value="optionData.flipperRadius" size="small" :min="0"></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="背景色">
|
||||||
|
<n-color-picker
|
||||||
|
size="small"
|
||||||
|
:show-alpha="false"
|
||||||
|
:modes="['hex']"
|
||||||
|
v-model:value="optionData.flipperBgColor"
|
||||||
|
></n-color-picker>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="字体色">
|
||||||
|
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.flipperTextColor"></n-color-picker>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
|
||||||
|
<setting-item-box name="行为">
|
||||||
|
<setting-item name="动画">
|
||||||
|
<n-select
|
||||||
|
v-model:value="optionData.flipperType"
|
||||||
|
size="small"
|
||||||
|
:options="[
|
||||||
|
{ label: '下翻', value: 'down' },
|
||||||
|
{ label: '上翻', value: 'up' }
|
||||||
|
]"
|
||||||
|
></n-select>
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="翻牌速度(毫秒)">
|
||||||
|
<n-input-number
|
||||||
|
v-model:value="optionData.flipperSpeed"
|
||||||
|
size="small"
|
||||||
|
:min="100"
|
||||||
|
:max="900"
|
||||||
|
:step="100"
|
||||||
|
></n-input-number>
|
||||||
|
</setting-item>
|
||||||
|
</setting-item-box>
|
||||||
|
</collapse-item>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { PropType } from 'vue'
|
||||||
|
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
|
||||||
|
import { OptionType } from './config'
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
optionData: {
|
||||||
|
type: Object as PropType<OptionType>,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
@ -0,0 +1,14 @@
|
|||||||
|
import image from '@/assets/images/chart/decorates/flipper-number.png'
|
||||||
|
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
|
||||||
|
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
|
||||||
|
|
||||||
|
export const FlipperNumberConfig: ConfigType = {
|
||||||
|
key: 'FlipperNumber',
|
||||||
|
chartKey: 'VFlipperNumber',
|
||||||
|
conKey: 'VCFlipperNumber',
|
||||||
|
title: '数字翻牌',
|
||||||
|
category: ChatCategoryEnum.MORE,
|
||||||
|
categoryName: ChatCategoryEnumName.MORE,
|
||||||
|
package: PackagesCategoryEnum.DECORATES,
|
||||||
|
image
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
<template>
|
||||||
|
<n-space class="go-decorates-flipper-number" :size="flipperGap" align="center" justify="center">
|
||||||
|
<flipper
|
||||||
|
:count="item"
|
||||||
|
:width="flipperWidth"
|
||||||
|
:height="flipperHeight"
|
||||||
|
:front-color="flipperTextColor"
|
||||||
|
:back-color="flipperBgColor"
|
||||||
|
:radius="flipperRadius"
|
||||||
|
:flip-type="flipperType"
|
||||||
|
:duration="flipperSpeed"
|
||||||
|
v-for="(item, index) in flipperData"
|
||||||
|
:key="index"
|
||||||
|
class="go-d-block"
|
||||||
|
/>
|
||||||
|
</n-space>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { PropType, toRefs, watch, ref } from 'vue'
|
||||||
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
|
import { useChartDataFetch } from '@/hooks'
|
||||||
|
import { Flipper } from '@/components/Flipper'
|
||||||
|
import { OptionType } from './config'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
chartConfig: {
|
||||||
|
type: Object as PropType<CreateComponentType>,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { w, h } = toRefs(props.chartConfig.attr)
|
||||||
|
|
||||||
|
const {
|
||||||
|
flipperLength,
|
||||||
|
flipperBgColor,
|
||||||
|
flipperTextColor,
|
||||||
|
flipperWidth,
|
||||||
|
flipperHeight,
|
||||||
|
flipperRadius,
|
||||||
|
flipperGap,
|
||||||
|
flipperType,
|
||||||
|
flipperSpeed
|
||||||
|
} = toRefs(props.chartConfig.option as OptionType)
|
||||||
|
|
||||||
|
const flipperData = ref<string[] | number[]>([])
|
||||||
|
const getFlipperData = (val: string | number) => {
|
||||||
|
return val
|
||||||
|
.toString()
|
||||||
|
.padStart(flipperLength.value, '0') // 左侧填充|右对齐
|
||||||
|
.split('') // 转数组
|
||||||
|
.slice(flipperLength.value * -1) // 从后面取指定长度
|
||||||
|
}
|
||||||
|
const updateDatasetHandler = (newVal: string | number) => {
|
||||||
|
flipperData.value = getFlipperData(newVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.chartConfig.option,
|
||||||
|
newVal => {
|
||||||
|
updateDatasetHandler((newVal as OptionType).dataset)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true,
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
useChartDataFetch(props.chartConfig, useChartEditStore, (newVal: string | number) => {
|
||||||
|
updateDatasetHandler(newVal)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@include go('decorates-flipper-number') {
|
||||||
|
width: v-bind('`${w}px`');
|
||||||
|
height: v-bind('`${h}px`');
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,12 +1,12 @@
|
|||||||
import image from '@/assets/images/chart/decorates/number.png'
|
import image from '@/assets/images/chart/decorates/number.png'
|
||||||
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
|
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
|
||||||
import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
|
import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
|
||||||
|
|
||||||
export const NumberConfig: ConfigType = {
|
export const NumberConfig: ConfigType = {
|
||||||
key: 'Number',
|
key: 'Number',
|
||||||
chartKey: 'VNumber',
|
chartKey: 'VNumber',
|
||||||
conKey: 'VCNumber',
|
conKey: 'VCNumber',
|
||||||
title: '数字翻牌',
|
title: '数字计数',
|
||||||
category: ChatCategoryEnum.MORE,
|
category: ChatCategoryEnum.MORE,
|
||||||
categoryName: ChatCategoryEnumName.MORE,
|
categoryName: ChatCategoryEnumName.MORE,
|
||||||
package: PackagesCategoryEnum.DECORATES,
|
package: PackagesCategoryEnum.DECORATES,
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import { NumberConfig } from './Number/index'
|
import { NumberConfig } from './Number/index'
|
||||||
import { TimeCommonConfig } from './TimeCommon/index'
|
import { TimeCommonConfig } from './TimeCommon/index'
|
||||||
import { ClockConfig } from './Clock/index'
|
import { ClockConfig } from './Clock/index'
|
||||||
|
import { CountDownConfig } from './CountDown/index'
|
||||||
|
import { FlipperNumberConfig } from './FlipperNumber'
|
||||||
|
|
||||||
export default [TimeCommonConfig, NumberConfig, ClockConfig]
|
export default [NumberConfig, FlipperNumberConfig, TimeCommonConfig, CountDownConfig, ClockConfig]
|
||||||
|
@ -28,57 +28,29 @@
|
|||||||
<SettingItem name="显示行号">
|
<SettingItem name="显示行号">
|
||||||
<n-switch size="small" v-model:value="optionData.index" />
|
<n-switch size="small" v-model:value="optionData.index" />
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
|
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
|
|
||||||
<SettingItemBox name="配置" :alone="true">
|
<SettingItemBox name="配置" :alone="true">
|
||||||
<SettingItem name="表头数据">
|
<SettingItem name="表头数据">
|
||||||
<n-input
|
<n-input v-model:value="header" :min="1" size="small" placeholder="表头数据(英文','分割)"></n-input>
|
||||||
v-model:value="header"
|
|
||||||
:min="1"
|
|
||||||
size="small"
|
|
||||||
placeholder="表头数据(英文','分割)"
|
|
||||||
></n-input>
|
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem name="列对齐方式">
|
<SettingItem name="列对齐方式">
|
||||||
<n-input
|
<n-input v-model:value="align" :min="1" size="small" placeholder="对齐方式(英文','分割)"></n-input>
|
||||||
v-model:value="align"
|
|
||||||
:min="1"
|
|
||||||
size="small"
|
|
||||||
placeholder="对齐方式(英文','分割)"
|
|
||||||
></n-input>
|
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem name="列宽度">
|
<SettingItem name="列宽度">
|
||||||
<n-input
|
<n-input v-model:value="columnWidth" :min="1" size="small" placeholder="列宽度(英文','分割)"></n-input>
|
||||||
v-model:value="columnWidth"
|
|
||||||
:min="1"
|
|
||||||
size="small"
|
|
||||||
placeholder="列宽度(英文','分割)"
|
|
||||||
></n-input>
|
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
|
|
||||||
<SettingItemBox name="样式">
|
<SettingItemBox name="样式">
|
||||||
<SettingItem name="表头背景色">
|
<SettingItem name="表头背景色">
|
||||||
<n-color-picker
|
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.headerBGC"></n-color-picker>
|
||||||
size="small"
|
|
||||||
:modes="['hex']"
|
|
||||||
v-model:value="optionData.headerBGC"
|
|
||||||
></n-color-picker>
|
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem name="奇数行背景色">
|
<SettingItem name="奇数行背景色">
|
||||||
<n-color-picker
|
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.oddRowBGC"></n-color-picker>
|
||||||
size="small"
|
|
||||||
:modes="['hex']"
|
|
||||||
v-model:value="optionData.oddRowBGC"
|
|
||||||
></n-color-picker>
|
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem name="偶数行背景色">
|
<SettingItem name="偶数行背景色">
|
||||||
<n-color-picker
|
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.evenRowBGC"></n-color-picker>
|
||||||
size="small"
|
|
||||||
:modes="['hex']"
|
|
||||||
v-model:value="optionData.evenRowBGC"
|
|
||||||
></n-color-picker>
|
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
</SettingItemBox>
|
</SettingItemBox>
|
||||||
</CollapseItem>
|
</CollapseItem>
|
||||||
@ -86,36 +58,43 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { PropType, ref, watch } from 'vue'
|
import { PropType, ref, watch } from 'vue'
|
||||||
import {
|
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
|
||||||
CollapseItem,
|
|
||||||
SettingItemBox,
|
|
||||||
SettingItem,
|
|
||||||
} from '@/components/Pages/ChartItemSetting'
|
|
||||||
import { option } from './config'
|
import { option } from './config'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
optionData: {
|
optionData: {
|
||||||
type: Object as PropType<typeof option>,
|
type: Object as PropType<typeof option>,
|
||||||
required: true,
|
required: true
|
||||||
},
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const header = ref(props.optionData.header.toString())
|
const header = ref()
|
||||||
const align = ref(props.optionData.align.toString())
|
const align = ref()
|
||||||
const columnWidth = ref(props.optionData.columnWidth.toString())
|
const columnWidth = ref()
|
||||||
|
|
||||||
watch([header, align, columnWidth],([headerNew,alignNew,columnWidthNew],[headerOld,alignOld,columnWidthOld])=>{
|
watch(
|
||||||
if(headerNew !== headerOld){
|
() => props.optionData,
|
||||||
|
newData => {
|
||||||
|
header.value = props.optionData.header.toString()
|
||||||
|
align.value = props.optionData.align.toString()
|
||||||
|
columnWidth.value = props.optionData.columnWidth.toString()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
deep: false,
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
watch([header, align, columnWidth], ([headerNew, alignNew, columnWidthNew], [headerOld, alignOld, columnWidthOld]) => {
|
||||||
|
if (headerNew !== headerOld) {
|
||||||
props.optionData.header = headerNew.split(',')
|
props.optionData.header = headerNew.split(',')
|
||||||
}
|
}
|
||||||
if(alignNew !== alignOld){
|
if (alignNew !== alignOld) {
|
||||||
props.optionData.align = alignNew.split(',')
|
props.optionData.align = alignNew.split(',')
|
||||||
}
|
}
|
||||||
if(columnWidthNew !== columnWidthOld){
|
if (columnWidthNew !== columnWidthOld) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
props.optionData.columnWidth = columnWidthNew.split(',')
|
props.optionData.columnWidth = columnWidthNew.split(',')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
40
src/packages/index.d.ts
vendored
40
src/packages/index.d.ts
vendored
@ -36,6 +36,12 @@ interface EchartsDataType {
|
|||||||
source: any[]
|
source: any[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 组件状态
|
||||||
|
export interface StatusType {
|
||||||
|
lock: boolean
|
||||||
|
hide: boolean
|
||||||
|
}
|
||||||
|
|
||||||
// 滤镜/变换枚举
|
// 滤镜/变换枚举
|
||||||
export enum FilterEnum {
|
export enum FilterEnum {
|
||||||
// 是否启用
|
// 是否启用
|
||||||
@ -59,14 +65,36 @@ export enum FilterEnum {
|
|||||||
|
|
||||||
// 倾斜
|
// 倾斜
|
||||||
SKEW_X = 'skewX',
|
SKEW_X = 'skewX',
|
||||||
SKEW_Y = 'skewY'
|
SKEW_Y = 'skewY',
|
||||||
|
|
||||||
|
// 混合模式
|
||||||
|
BLEND_MODE = 'blendMode'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const BlendModeEnumList = [
|
||||||
|
{ label: '正常', value: 'normal' },
|
||||||
|
{ label: '正片叠底', value: 'multiply' },
|
||||||
|
{ label: '叠加', value: 'overlay' },
|
||||||
|
{ label: '滤色', value: 'screen' },
|
||||||
|
{ label: '变暗', value: 'darken' },
|
||||||
|
{ label: '变亮', value: 'lighten' },
|
||||||
|
{ label: '颜色减淡', value: 'color-dodge' },
|
||||||
|
{ label: '颜色加深', value: 'color-burn;' },
|
||||||
|
{ label: '强光', value: 'hard-light' },
|
||||||
|
{ label: '柔光', value: 'soft-light' },
|
||||||
|
{ label: '差值', value: 'difference' },
|
||||||
|
{ label: '排除', value: 'exclusion' },
|
||||||
|
{ label: '色相', value: 'hue' },
|
||||||
|
{ label: '饱和度', value: 'saturation' },
|
||||||
|
{ label: '颜色', value: 'color' },
|
||||||
|
{ label: '亮度', value: 'luminosity' }
|
||||||
|
]
|
||||||
|
|
||||||
// 组件实例类
|
// 组件实例类
|
||||||
export interface PublicConfigType {
|
export interface PublicConfigType {
|
||||||
id: string
|
id: string
|
||||||
isGroup: boolean
|
isGroup: boolean
|
||||||
attr: { x: number; y: number; w: number; h: number; zIndex: number; offsetX: number; offsetY: number; }
|
attr: { x: number; y: number; w: number; h: number; zIndex: number; offsetX: number; offsetY: number }
|
||||||
styles: {
|
styles: {
|
||||||
[FilterEnum.FILTERS_SHOW]: boolean
|
[FilterEnum.FILTERS_SHOW]: boolean
|
||||||
[FilterEnum.OPACITY]: number
|
[FilterEnum.OPACITY]: number
|
||||||
@ -81,14 +109,12 @@ export interface PublicConfigType {
|
|||||||
|
|
||||||
[FilterEnum.SKEW_X]: number
|
[FilterEnum.SKEW_X]: number
|
||||||
[FilterEnum.SKEW_Y]: number
|
[FilterEnum.SKEW_Y]: number
|
||||||
|
[FilterEnum.BLEND_MODE]: string
|
||||||
// 动画
|
// 动画
|
||||||
animations: string[]
|
animations: string[]
|
||||||
},
|
}
|
||||||
status: {
|
|
||||||
lock: boolean,
|
|
||||||
hide: boolean,
|
|
||||||
},
|
|
||||||
filter?: string
|
filter?: string
|
||||||
|
status: StatusType
|
||||||
setPosition: Function
|
setPosition: Function
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,9 @@ export class PublicConfigClass implements PublicConfigType {
|
|||||||
skewX: 0,
|
skewX: 0,
|
||||||
skewY: 0,
|
skewY: 0,
|
||||||
|
|
||||||
|
// 混合模式
|
||||||
|
blendMode: 'normal',
|
||||||
|
|
||||||
// 动画
|
// 动画
|
||||||
animations: []
|
animations: []
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,12 @@ import {
|
|||||||
ChevronDownOutline as ChevronDownOutlineIcon,
|
ChevronDownOutline as ChevronDownOutlineIcon,
|
||||||
Pulse as PulseIcon,
|
Pulse as PulseIcon,
|
||||||
Folder as FolderIcon,
|
Folder as FolderIcon,
|
||||||
FolderOpen as FolderOpenIcon
|
FolderOpen as FolderOpenIcon,
|
||||||
|
Image as ImageIcon,
|
||||||
|
Images as ImagesIcon,
|
||||||
|
List as ListIcon,
|
||||||
|
EyeOutline as EyeOutlineIcon,
|
||||||
|
EyeOffOutline as EyeOffOutlineIcon
|
||||||
} from '@vicons/ionicons5'
|
} from '@vicons/ionicons5'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -211,7 +216,16 @@ const ionicons5 = {
|
|||||||
// 文件夹
|
// 文件夹
|
||||||
FolderIcon,
|
FolderIcon,
|
||||||
// 文件夹打开
|
// 文件夹打开
|
||||||
FolderOpenIcon
|
FolderOpenIcon,
|
||||||
|
// 图片
|
||||||
|
ImageIcon,
|
||||||
|
// 多个图片
|
||||||
|
ImagesIcon,
|
||||||
|
// 列表
|
||||||
|
ListIcon,
|
||||||
|
// 眼睛
|
||||||
|
EyeOutlineIcon,
|
||||||
|
EyeOffOutlineIcon
|
||||||
}
|
}
|
||||||
|
|
||||||
const carbon = {
|
const carbon = {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import type { App } from 'vue';
|
import type { App } from 'vue'
|
||||||
import {
|
import {
|
||||||
create,
|
create,
|
||||||
NA,
|
NA,
|
||||||
@ -8,6 +8,7 @@ import {
|
|||||||
NH3,
|
NH3,
|
||||||
NH4,
|
NH4,
|
||||||
NCode,
|
NCode,
|
||||||
|
NCountdown,
|
||||||
NText,
|
NText,
|
||||||
NTime,
|
NTime,
|
||||||
NEllipsis,
|
NEllipsis,
|
||||||
@ -98,7 +99,7 @@ import {
|
|||||||
NWatermark,
|
NWatermark,
|
||||||
NEmpty,
|
NEmpty,
|
||||||
NCollapseTransition
|
NCollapseTransition
|
||||||
} from 'naive-ui';
|
} from 'naive-ui'
|
||||||
|
|
||||||
const naive = create({
|
const naive = create({
|
||||||
components: [
|
components: [
|
||||||
@ -109,6 +110,7 @@ const naive = create({
|
|||||||
NH3,
|
NH3,
|
||||||
NH4,
|
NH4,
|
||||||
NCode,
|
NCode,
|
||||||
|
NCountdown,
|
||||||
NText,
|
NText,
|
||||||
NTime,
|
NTime,
|
||||||
NEllipsis,
|
NEllipsis,
|
||||||
@ -199,9 +201,9 @@ const naive = create({
|
|||||||
NWatermark,
|
NWatermark,
|
||||||
NEmpty,
|
NEmpty,
|
||||||
NCollapseTransition
|
NCollapseTransition
|
||||||
],
|
]
|
||||||
});
|
})
|
||||||
|
|
||||||
export function setupNaive(app: App<Element>) {
|
export function setupNaive(app: App<Element>) {
|
||||||
app.use(naive);
|
app.use(naive)
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,66 +1,30 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"CMYK": [
|
"CMYK": [62, 0, 21, 16],
|
||||||
62,
|
"RGB": [81, 214, 169],
|
||||||
0,
|
|
||||||
21,
|
|
||||||
16
|
|
||||||
],
|
|
||||||
"RGB": [
|
|
||||||
81,
|
|
||||||
214,
|
|
||||||
169
|
|
||||||
],
|
|
||||||
"hex": "#51d6a9",
|
"hex": "#51d6a9",
|
||||||
"name": "碧空绿",
|
"name": "碧空绿",
|
||||||
"pinyin": "bikonlv"
|
"pinyin": "bikonlv"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"CMYK": [
|
"CMYK": [4, 13, 67, 0],
|
||||||
93,
|
"RGB": [248, 223, 114],
|
||||||
0,
|
"hex": "#f8df72",
|
||||||
31,
|
"name": "茉莉黄",
|
||||||
0
|
"pinyin": "molihuang"
|
||||||
],
|
|
||||||
"RGB": [
|
|
||||||
16,
|
|
||||||
174,
|
|
||||||
194
|
|
||||||
],
|
|
||||||
"hex": "#10aec2",
|
|
||||||
"name": "甸子蓝",
|
|
||||||
"pinyin": "dianzilan"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"CMYK": [
|
"CMYK": [76, 51, 0, 0],
|
||||||
76,
|
"RGB": [60, 126, 255],
|
||||||
51,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"RGB": [
|
|
||||||
60,
|
|
||||||
126,
|
|
||||||
255
|
|
||||||
],
|
|
||||||
"hex": "#3c7eff",
|
"hex": "#3c7eff",
|
||||||
"name": "深海蓝",
|
"name": "深海蓝",
|
||||||
"pinyin": "shenhailan"
|
"pinyin": "shenhailan"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"CMYK": [
|
"CMYK": [59, 12, 19, 0],
|
||||||
4,
|
"RGB": [138, 188, 209],
|
||||||
13,
|
"hex": "#8abcd1",
|
||||||
67,
|
"name": "秋波蓝",
|
||||||
0
|
"pinyin": "qiubolan"
|
||||||
],
|
|
||||||
"RGB": [
|
|
||||||
248,
|
|
||||||
223,
|
|
||||||
114
|
|
||||||
],
|
|
||||||
"hex": "#f8df72",
|
|
||||||
"name": "茉莉黄",
|
|
||||||
"pinyin": "molihuang"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -77,6 +77,7 @@ export interface EditCanvasConfigType {
|
|||||||
[FilterEnum.ROTATE_Y]: number
|
[FilterEnum.ROTATE_Y]: number
|
||||||
[FilterEnum.SKEW_X]: number
|
[FilterEnum.SKEW_X]: number
|
||||||
[FilterEnum.SKEW_Y]: number
|
[FilterEnum.SKEW_Y]: number
|
||||||
|
[FilterEnum.BLEND_MODE]: string
|
||||||
// 大屏宽度
|
// 大屏宽度
|
||||||
[EditCanvasConfigEnum.WIDTH]: number
|
[EditCanvasConfigEnum.WIDTH]: number
|
||||||
// 大屏高度
|
// 大屏高度
|
||||||
|
@ -97,6 +97,8 @@ export const useChartEditStore = defineStore({
|
|||||||
rotateY: 0,
|
rotateY: 0,
|
||||||
skewX: 0,
|
skewX: 0,
|
||||||
skewY: 0,
|
skewY: 0,
|
||||||
|
// 混合模式
|
||||||
|
blendMode: 'normal',
|
||||||
// 默认背景色
|
// 默认背景色
|
||||||
background: undefined,
|
background: undefined,
|
||||||
backgroundImage: undefined,
|
backgroundImage: undefined,
|
||||||
@ -532,6 +534,10 @@ export const useChartEditStore = defineStore({
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 取消选中
|
||||||
|
this.setTargetSelectChart()
|
||||||
|
|
||||||
|
// 重新选中
|
||||||
let historyData = HistoryItem.historyData as Array<CreateComponentType | CreateComponentGroupType>
|
let historyData = HistoryItem.historyData as Array<CreateComponentType | CreateComponentGroupType>
|
||||||
if (isArray(historyData)) {
|
if (isArray(historyData)) {
|
||||||
// 选中目标元素,支持多个
|
// 选中目标元素,支持多个
|
||||||
@ -602,7 +608,8 @@ export const useChartEditStore = defineStore({
|
|||||||
ids.push(item.id)
|
ids.push(item.id)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
(historyData[0] as CreateComponentGroupType).groupList.forEach(item => {
|
const group = historyData[0] as CreateComponentGroupType
|
||||||
|
group.groupList.forEach(item => {
|
||||||
ids.push(item.id)
|
ids.push(item.id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -617,6 +624,38 @@ export const useChartEditStore = defineStore({
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理锁定
|
||||||
|
const isLock = HistoryItem.actionType === HistoryActionTypeEnum.LOCK
|
||||||
|
const isUnLock = HistoryItem.actionType === HistoryActionTypeEnum.UNLOCK
|
||||||
|
if (isLock || isUnLock) {
|
||||||
|
if ((isLock && isForward) || (isUnLock && !isForward)) {
|
||||||
|
historyData.forEach(item => {
|
||||||
|
this.setLock(!item.status.lock, false)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
historyData.forEach(item => {
|
||||||
|
this.setUnLock(false)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理隐藏
|
||||||
|
const isHide = HistoryItem.actionType === HistoryActionTypeEnum.HIDE
|
||||||
|
const isShow = HistoryItem.actionType === HistoryActionTypeEnum.SHOW
|
||||||
|
if (isHide || isShow) {
|
||||||
|
if ((isHide && isForward) || (isShow && !isForward)) {
|
||||||
|
historyData.forEach(item => {
|
||||||
|
this.setHide(!item.status.hide, false)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
historyData.forEach(item => {
|
||||||
|
this.setShow(false)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// * 撤回
|
// * 撤回
|
||||||
setBack() {
|
setBack() {
|
||||||
@ -795,6 +834,72 @@ export const useChartEditStore = defineStore({
|
|||||||
loadingFinish()
|
loadingFinish()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// * 锁定
|
||||||
|
setLock(status: boolean = true, isHistory: boolean = true) {
|
||||||
|
try {
|
||||||
|
// 暂不支持多选
|
||||||
|
if (this.getTargetChart.selectId.length > 1) return
|
||||||
|
|
||||||
|
loadingStart()
|
||||||
|
const index: number = this.fetchTargetIndex()
|
||||||
|
if (index !== -1) {
|
||||||
|
// 更新状态
|
||||||
|
const targetItem = this.getComponentList[index]
|
||||||
|
targetItem.status.lock = status
|
||||||
|
|
||||||
|
// 历史记录
|
||||||
|
if (isHistory) {
|
||||||
|
status
|
||||||
|
? chartHistoryStore.createLockHistory([targetItem])
|
||||||
|
: chartHistoryStore.createUnLockHistory([targetItem])
|
||||||
|
}
|
||||||
|
this.updateComponentList(index, targetItem)
|
||||||
|
// 锁定添加失焦效果
|
||||||
|
if (status) this.setTargetSelectChart(undefined)
|
||||||
|
loadingFinish()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} catch (value) {
|
||||||
|
loadingError()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// * 解除锁定
|
||||||
|
setUnLock(isHistory: boolean = true) {
|
||||||
|
this.setLock(false, isHistory)
|
||||||
|
},
|
||||||
|
// * 隐藏
|
||||||
|
setHide(status: boolean = true, isHistory: boolean = true) {
|
||||||
|
try {
|
||||||
|
// 暂不支持多选
|
||||||
|
if (this.getTargetChart.selectId.length > 1) return
|
||||||
|
|
||||||
|
loadingStart()
|
||||||
|
const index: number = this.fetchTargetIndex()
|
||||||
|
if (index !== -1) {
|
||||||
|
// 更新状态
|
||||||
|
const targetItem = this.getComponentList[index]
|
||||||
|
targetItem.status.hide = status
|
||||||
|
|
||||||
|
// 历史记录
|
||||||
|
if (isHistory) {
|
||||||
|
status
|
||||||
|
? chartHistoryStore.createHideHistory([targetItem])
|
||||||
|
: chartHistoryStore.createShowHistory([targetItem])
|
||||||
|
}
|
||||||
|
this.updateComponentList(index, targetItem)
|
||||||
|
loadingFinish()
|
||||||
|
|
||||||
|
// 隐藏添加失焦效果
|
||||||
|
if (status) this.setTargetSelectChart(undefined)
|
||||||
|
}
|
||||||
|
} catch (value) {
|
||||||
|
loadingError()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// * 显示
|
||||||
|
setShow(isHistory: boolean = true) {
|
||||||
|
this.setHide(false, isHistory)
|
||||||
|
},
|
||||||
// ----------------
|
// ----------------
|
||||||
// * 设置页面大小
|
// * 设置页面大小
|
||||||
setPageSize(scale: number): void {
|
setPageSize(scale: number): void {
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
import {
|
import { HistoryTargetTypeEnum, HistoryActionTypeEnum } from './chartHistoryStore.d'
|
||||||
HistoryTargetTypeEnum,
|
|
||||||
HistoryActionTypeEnum
|
|
||||||
} from './chartHistoryStore.d'
|
|
||||||
|
|
||||||
export const historyActionTypeName = {
|
export const historyActionTypeName = {
|
||||||
[HistoryActionTypeEnum.ADD]: '新增图表',
|
[HistoryActionTypeEnum.ADD]: '新增',
|
||||||
[HistoryActionTypeEnum.DELETE]: '删除图表',
|
[HistoryActionTypeEnum.DELETE]: '删除',
|
||||||
[HistoryActionTypeEnum.UPDATE]: '修改属性',
|
[HistoryActionTypeEnum.UPDATE]: '更新',
|
||||||
[HistoryActionTypeEnum.MOVE]: '移动图表',
|
[HistoryActionTypeEnum.MOVE]: '移动',
|
||||||
[HistoryActionTypeEnum.PASTE]: '粘贴图表',
|
[HistoryActionTypeEnum.PASTE]: '粘贴',
|
||||||
[HistoryActionTypeEnum.COPY]: '复制图表',
|
[HistoryActionTypeEnum.COPY]: '复制',
|
||||||
[HistoryActionTypeEnum.CUT]: '剪切图表',
|
[HistoryActionTypeEnum.CUT]: '剪切',
|
||||||
[HistoryActionTypeEnum.TOP]: '层级置顶',
|
[HistoryActionTypeEnum.TOP]: '置顶',
|
||||||
[HistoryActionTypeEnum.BOTTOM]: '层级置底',
|
[HistoryActionTypeEnum.BOTTOM]: '置底',
|
||||||
[HistoryActionTypeEnum.UP]: '层级上移',
|
[HistoryActionTypeEnum.UP]: '上移',
|
||||||
[HistoryActionTypeEnum.DOWN]: '层级下移',
|
[HistoryActionTypeEnum.DOWN]: '下移',
|
||||||
[HistoryActionTypeEnum.GROUP]: '创建分组',
|
[HistoryActionTypeEnum.GROUP]: '成组',
|
||||||
[HistoryActionTypeEnum.UN_GROUP]: '解除分组',
|
[HistoryActionTypeEnum.UN_GROUP]: '解组',
|
||||||
[HistoryActionTypeEnum.SELECT_HISTORY]: '选择记录',
|
[HistoryActionTypeEnum.LOCK]: '锁定',
|
||||||
|
[HistoryActionTypeEnum.UNLOCK]: '解锁',
|
||||||
|
[HistoryActionTypeEnum.HIDE]: '隐藏',
|
||||||
|
[HistoryActionTypeEnum.SHOW]: '显示',
|
||||||
|
|
||||||
[HistoryTargetTypeEnum.CANVAS]: '画布初始化'
|
[HistoryTargetTypeEnum.CANVAS]: '画布初始化'
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.
|
|||||||
import { EditCanvasType } from '@/store/modules/chartEditStore/chartEditStore.d'
|
import { EditCanvasType } from '@/store/modules/chartEditStore/chartEditStore.d'
|
||||||
|
|
||||||
// 操作类型枚举
|
// 操作类型枚举
|
||||||
|
|
||||||
export enum HistoryActionTypeEnum {
|
export enum HistoryActionTypeEnum {
|
||||||
// 新增
|
// 新增
|
||||||
ADD = 'add',
|
ADD = 'add',
|
||||||
@ -29,8 +30,14 @@ export enum HistoryActionTypeEnum {
|
|||||||
GROUP = 'group',
|
GROUP = 'group',
|
||||||
// 解组
|
// 解组
|
||||||
UN_GROUP = 'unGroup',
|
UN_GROUP = 'unGroup',
|
||||||
// 选择历史记录
|
// 锁定
|
||||||
SELECT_HISTORY = 'selectHistory'
|
LOCK = 'lock',
|
||||||
|
// 解除锁定
|
||||||
|
UNLOCK = 'unLock',
|
||||||
|
// 隐藏
|
||||||
|
HIDE = 'hide',
|
||||||
|
// 显示
|
||||||
|
SHOW = 'show'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 对象类型
|
// 对象类型
|
||||||
|
@ -167,6 +167,22 @@ export const useChartHistoryStore = defineStore({
|
|||||||
// * 解除分组
|
// * 解除分组
|
||||||
createUnGroupHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
|
createUnGroupHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
|
||||||
this.createStackItem(item, HistoryActionTypeEnum.UN_GROUP, HistoryTargetTypeEnum.CHART)
|
this.createStackItem(item, HistoryActionTypeEnum.UN_GROUP, HistoryTargetTypeEnum.CHART)
|
||||||
|
},
|
||||||
|
// * 锁定记录
|
||||||
|
createLockHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
|
||||||
|
this.createStackItem(item, HistoryActionTypeEnum.LOCK, HistoryTargetTypeEnum.CHART)
|
||||||
|
},
|
||||||
|
// * 解锁记录
|
||||||
|
createUnLockHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
|
||||||
|
this.createStackItem(item, HistoryActionTypeEnum.UNLOCK, HistoryTargetTypeEnum.CHART)
|
||||||
|
},
|
||||||
|
// * 隐藏记录
|
||||||
|
createHideHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
|
||||||
|
this.createStackItem(item, HistoryActionTypeEnum.HIDE, HistoryTargetTypeEnum.CHART)
|
||||||
|
},
|
||||||
|
// * 展示记录
|
||||||
|
createShowHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
|
||||||
|
this.createStackItem(item, HistoryActionTypeEnum.SHOW, HistoryTargetTypeEnum.CHART)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
|
export enum LayerModeEnum {
|
||||||
|
THUMBNAIL = 'thumbnail',
|
||||||
|
TEXT = 'text'
|
||||||
|
}
|
||||||
|
|
||||||
export enum ChartLayoutStoreEnum {
|
export enum ChartLayoutStoreEnum {
|
||||||
LAYERS = 'layers',
|
LAYERS = 'layers',
|
||||||
CHARTS = 'charts',
|
CHARTS = 'charts',
|
||||||
DETAILS = 'details',
|
DETAILS = 'details',
|
||||||
|
LAYER_TYPE = 'layerType'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ChartLayoutType {
|
export interface ChartLayoutType {
|
||||||
@ -11,4 +17,6 @@ export interface ChartLayoutType {
|
|||||||
[ChartLayoutStoreEnum.CHARTS]: boolean
|
[ChartLayoutStoreEnum.CHARTS]: boolean
|
||||||
// 详情设置
|
// 详情设置
|
||||||
[ChartLayoutStoreEnum.DETAILS]: boolean
|
[ChartLayoutStoreEnum.DETAILS]: boolean
|
||||||
|
// 层级展示方式
|
||||||
|
[ChartLayoutStoreEnum.LAYER_TYPE]: LayerModeEnum
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import { ChartLayoutType } from './chartLayoutStore.d'
|
import { ChartLayoutType, LayerModeEnum } from './chartLayoutStore.d'
|
||||||
import { setLocalStorage, getLocalStorage } from '@/utils'
|
import { setLocalStorage, getLocalStorage } from '@/utils'
|
||||||
import { StorageEnum } from '@/enums/storageEnum'
|
import { StorageEnum } from '@/enums/storageEnum'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
@ -20,7 +20,9 @@ export const useChartLayoutStore = defineStore({
|
|||||||
// 图表组件
|
// 图表组件
|
||||||
charts: true,
|
charts: true,
|
||||||
// 详情设置(收缩为true)
|
// 详情设置(收缩为true)
|
||||||
details: false
|
details: false,
|
||||||
|
// 图层类型(默认图片)
|
||||||
|
layerType: LayerModeEnum.THUMBNAIL
|
||||||
},
|
},
|
||||||
getters: {
|
getters: {
|
||||||
getLayers(): boolean {
|
getLayers(): boolean {
|
||||||
@ -31,6 +33,9 @@ export const useChartLayoutStore = defineStore({
|
|||||||
},
|
},
|
||||||
getDetails(): boolean {
|
getDetails(): boolean {
|
||||||
return this.details
|
return this.details
|
||||||
|
},
|
||||||
|
getLayerType(): LayerModeEnum {
|
||||||
|
return this.layerType
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
@import './var.scss';
|
@import "./var.scss";
|
||||||
@import './format.scss';
|
@import "./format.scss";
|
||||||
@import './animation.scss';
|
@import "./animation.scss";
|
||||||
@import './mixins/mixins.scss';
|
@import "./mixins/mixins.scss";
|
||||||
|
|
||||||
// 过度
|
// 过度
|
||||||
.go-transition {
|
.go-transition {
|
||||||
@ -49,14 +49,14 @@
|
|||||||
// 毛玻璃
|
// 毛玻璃
|
||||||
.go-background-filter {
|
.go-background-filter {
|
||||||
backdrop-filter: $--filter-blur-base;
|
backdrop-filter: $--filter-blur-base;
|
||||||
@include fetch-bg-color('filter-color');
|
@include fetch-bg-color("filter-color");
|
||||||
box-shadow: $--border-shadow;
|
box-shadow: $--border-shadow;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 毛玻璃
|
// 毛玻璃
|
||||||
.go-background-filter-shallow {
|
.go-background-filter-shallow {
|
||||||
backdrop-filter: $--filter-blur-base;
|
backdrop-filter: $--filter-blur-base;
|
||||||
@include fetch-bg-color('filter-color-shallow');
|
@include fetch-bg-color("filter-color-shallow");
|
||||||
box-shadow: $--border-shadow;
|
box-shadow: $--border-shadow;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@
|
|||||||
|
|
||||||
// 背景斑点需配合 @mixin background-image 使用
|
// 背景斑点需配合 @mixin background-image 使用
|
||||||
.go-point-bg {
|
.go-point-bg {
|
||||||
@include fetch-theme-custom('background-color', 'background-color1');
|
@include fetch-theme-custom("background-color", "background-color1");
|
||||||
background-size: 15px 15px, 15px 15px;
|
background-size: 15px 15px, 15px 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,3 +118,10 @@
|
|||||||
#{$type}: 0 !important;
|
#{$type}: 0 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.go-d-inline-block {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.go-d-block {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@ -16,11 +16,11 @@ export const animationsClass = (animations: string[]) => {
|
|||||||
|
|
||||||
// * 滤镜
|
// * 滤镜
|
||||||
export const getFilterStyle = (styles?: StylesType | EditCanvasConfigType) => {
|
export const getFilterStyle = (styles?: StylesType | EditCanvasConfigType) => {
|
||||||
if(!styles || !styles.filterShow) return {}
|
if (!styles || !styles.filterShow) return {}
|
||||||
const { opacity, saturate, contrast, hueRotate, brightness } = styles
|
const { opacity, saturate, contrast, hueRotate, brightness } = styles
|
||||||
return {
|
return {
|
||||||
opacity: opacity,
|
opacity: opacity,
|
||||||
filter: `saturate(${saturate}) contrast(${contrast}) hue-rotate(${hueRotate}deg) brightness(${brightness})`,
|
filter: `saturate(${saturate}) contrast(${contrast}) hue-rotate(${hueRotate}deg) brightness(${brightness})`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +28,18 @@ export const getFilterStyle = (styles?: StylesType | EditCanvasConfigType) => {
|
|||||||
export const getTransformStyle = (styles: StylesType) => {
|
export const getTransformStyle = (styles: StylesType) => {
|
||||||
const { rotateZ, rotateX, rotateY, skewX, skewY } = styles
|
const { rotateZ, rotateX, rotateY, skewX, skewY } = styles
|
||||||
return {
|
return {
|
||||||
transform: `rotateZ(${rotateZ || 0}deg) rotateX(${rotateX || 0}deg) rotateY(${rotateY || 0}deg) skewX(${skewX || 0}deg) skewY(${skewY || 0}deg)`,
|
transform: `rotateZ(${rotateZ || 0}deg) rotateX(${rotateX || 0}deg) rotateY(${rotateY || 0}deg) skewX(${
|
||||||
|
skewX || 0
|
||||||
|
}deg) skewY(${skewY || 0}deg)`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// * 混合模式
|
||||||
|
export const getBlendModeStyle = (styles: StylesType) => {
|
||||||
|
if (!styles || !styles.filterShow) return {}
|
||||||
|
const { blendMode } = styles
|
||||||
|
return {
|
||||||
|
'mix-blend-mode': blendMode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +49,7 @@ export const getTransformStyle = (styles: StylesType) => {
|
|||||||
* @param alpha 默认1
|
* @param alpha 默认1
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function alpha(color: string, alpha = 1 ) {
|
export function alpha(color: string, alpha = 1) {
|
||||||
return Color(color).alpha(alpha).toString()
|
return Color(color).alpha(alpha).toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,14 +10,9 @@
|
|||||||
<slot name="icon"></slot>
|
<slot name="icon"></slot>
|
||||||
</div>
|
</div>
|
||||||
</n-space>
|
</n-space>
|
||||||
<n-space>
|
<n-space align="center" style="gap: 4px">
|
||||||
<slot name="top-right"></slot>
|
<slot name="top-right"></slot>
|
||||||
<n-icon
|
<n-icon v-show="backIcon" size="20" class="go-cursor-pointer go-d-block" @click="backHandle">
|
||||||
v-show="backIcon"
|
|
||||||
size="20"
|
|
||||||
class="go-cursor-pointer"
|
|
||||||
@click="backHandle"
|
|
||||||
>
|
|
||||||
<chevron-back-outline-icon></chevron-back-outline-icon>
|
<chevron-back-outline-icon></chevron-back-outline-icon>
|
||||||
</n-icon>
|
</n-icon>
|
||||||
</n-space>
|
</n-space>
|
||||||
@ -165,9 +160,7 @@ $topOrBottomHeight: 40px;
|
|||||||
height: calc(100vh - #{$--header-height} - #{$topOrBottomHeight});
|
height: calc(100vh - #{$--header-height} - #{$topOrBottomHeight});
|
||||||
}
|
}
|
||||||
.content-height-show-both {
|
.content-height-show-both {
|
||||||
height: calc(
|
height: calc(100vh - #{$--header-height} - #{$topOrBottomHeight} - #{$topOrBottomHeight});
|
||||||
100vh - #{$--header-height} - #{$topOrBottomHeight} - #{$topOrBottomHeight}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -30,17 +30,11 @@
|
|||||||
:onBeforeUpload="beforeUploadHandle"
|
:onBeforeUpload="beforeUploadHandle"
|
||||||
>
|
>
|
||||||
<n-upload-dragger>
|
<n-upload-dragger>
|
||||||
<img
|
<img v-if="canvasConfig.backgroundImage" class="upload-show" :src="canvasConfig.backgroundImage" alt="背景" />
|
||||||
v-if="canvasConfig.backgroundImage"
|
|
||||||
class="upload-show"
|
|
||||||
:src="canvasConfig.backgroundImage"
|
|
||||||
alt="背景"
|
|
||||||
/>
|
|
||||||
<div class="upload-img" v-show="!canvasConfig.backgroundImage">
|
<div class="upload-img" v-show="!canvasConfig.backgroundImage">
|
||||||
<img src="@/assets/images/canvas/noImage.png" />
|
<img src="@/assets/images/canvas/noImage.png" />
|
||||||
<n-text class="upload-desc" depth="3">
|
<n-text class="upload-desc" depth="3">
|
||||||
背景图需小于 {{ backgroundImageSize }}M ,格式为 png/jpg/gif
|
背景图需小于 {{ backgroundImageSize }}M ,格式为 png/jpg/gif 的文件
|
||||||
的文件
|
|
||||||
</n-text>
|
</n-text>
|
||||||
</div>
|
</div>
|
||||||
</n-upload-dragger>
|
</n-upload-dragger>
|
||||||
@ -48,43 +42,52 @@
|
|||||||
</n-card>
|
</n-card>
|
||||||
<n-space vertical :size="12">
|
<n-space vertical :size="12">
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-text>背景色</n-text>
|
<n-text>背景颜色</n-text>
|
||||||
<n-color-picker
|
<div class="picker-height">
|
||||||
style="width: 326px;"
|
<n-color-picker
|
||||||
:showPreview="true"
|
v-if="!switchSelectColorLoading"
|
||||||
:swatches="swatchesColors"
|
size="small"
|
||||||
v-model:value="canvasConfig.background"
|
style="width: 250px"
|
||||||
></n-color-picker>
|
v-model:value="canvasConfig.background"
|
||||||
|
:showPreview="true"
|
||||||
|
:swatches="swatchesColors"
|
||||||
|
></n-color-picker>
|
||||||
|
</div>
|
||||||
</n-space>
|
</n-space>
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-text>颜色应用</n-text>
|
<n-text>应用类型</n-text>
|
||||||
<n-switch
|
<n-select
|
||||||
size="small"
|
size="small"
|
||||||
v-model:value="canvasConfig.selectColor"
|
style="width: 250px"
|
||||||
:loading="switchSelectColorLoading"
|
v-model:value="selectColorValue"
|
||||||
:round="false"
|
|
||||||
:disabled="!canvasConfig.backgroundImage"
|
:disabled="!canvasConfig.backgroundImage"
|
||||||
:onUpdate="switchSelectColorHandle"
|
:options="selectColorOptions"
|
||||||
></n-switch>
|
@update:value="selectColorValueHandle"
|
||||||
|
/>
|
||||||
</n-space>
|
</n-space>
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-text>背景控制</n-text>
|
<n-text>背景控制</n-text>
|
||||||
<n-button size="small" :disabled="!canvasConfig.backgroundImage" @click="clearImage">清除背景图</n-button>
|
<n-button class="clear-btn" size="small" :disabled="!canvasConfig.backgroundImage" @click="clearImage">
|
||||||
<n-button size="small" :disabled="!canvasConfig.background" @click="clearColor">清除颜色</n-button>
|
清除背景
|
||||||
|
</n-button>
|
||||||
|
<n-button class="clear-btn" size="small" :disabled="!canvasConfig.background" @click="clearColor">
|
||||||
|
清除颜色
|
||||||
|
</n-button>
|
||||||
</n-space>
|
</n-space>
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-text>预览方式</n-text>
|
<n-text>预览方式</n-text>
|
||||||
<n-button-group>
|
<n-button-group>
|
||||||
<n-button
|
<n-button
|
||||||
ghost
|
|
||||||
v-for="item in previewTypeList"
|
v-for="item in previewTypeList"
|
||||||
:key="item.key"
|
:key="item.key"
|
||||||
:type="canvasConfig.previewScaleType === item.key ? 'primary' : 'tertiary'"
|
:type="canvasConfig.previewScaleType === item.key ? 'primary' : 'tertiary'"
|
||||||
|
ghost
|
||||||
size="small"
|
size="small"
|
||||||
@click="selectPreviewType(item.key)">
|
@click="selectPreviewType(item.key)"
|
||||||
|
>
|
||||||
<n-tooltip :show-arrow="false" trigger="hover">
|
<n-tooltip :show-arrow="false" trigger="hover">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<n-icon size="18">
|
<n-icon class="select-preview-icon" size="18">
|
||||||
<component :is="item.icon"></component>
|
<component :is="item.icon"></component>
|
||||||
</n-icon>
|
</n-icon>
|
||||||
</template>
|
</template>
|
||||||
@ -97,7 +100,7 @@
|
|||||||
|
|
||||||
<!-- 滤镜 -->
|
<!-- 滤镜 -->
|
||||||
<styles-setting :isCanvas="true" :chartStyles="canvasConfig"></styles-setting>
|
<styles-setting :isCanvas="true" :chartStyles="canvasConfig"></styles-setting>
|
||||||
<n-divider style="margin: 10px 0;"></n-divider>
|
<n-divider style="margin: 10px 0"></n-divider>
|
||||||
|
|
||||||
<!-- 主题选择和全局配置 -->
|
<!-- 主题选择和全局配置 -->
|
||||||
<n-tabs class="tabs-box" size="small" type="segment">
|
<n-tabs class="tabs-box" size="small" type="segment">
|
||||||
@ -123,7 +126,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, nextTick } from 'vue'
|
import { ref, nextTick, watch } from 'vue'
|
||||||
import { backgroundImageSize } from '@/settings/designSetting'
|
import { backgroundImageSize } from '@/settings/designSetting'
|
||||||
import { FileTypeEnum } from '@/enums/fileTypeEnum'
|
import { FileTypeEnum } from '@/enums/fileTypeEnum'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
@ -143,23 +146,25 @@ const editCanvas = chartEditStore.getEditCanvas
|
|||||||
|
|
||||||
const uploadFileListRef = ref()
|
const uploadFileListRef = ref()
|
||||||
const switchSelectColorLoading = ref(false)
|
const switchSelectColorLoading = ref(false)
|
||||||
|
const selectColorValue = ref(0)
|
||||||
|
|
||||||
const ChartThemeColor = loadAsyncComponent(() =>
|
const ChartThemeColor = loadAsyncComponent(() => import('./components/ChartThemeColor/index.vue'))
|
||||||
import('./components/ChartThemeColor/index.vue')
|
|
||||||
)
|
|
||||||
|
|
||||||
// 北京默认展示颜色列表
|
// 默认应用类型
|
||||||
const swatchesColors = [
|
const selectColorOptions = [
|
||||||
'#232324',
|
{
|
||||||
'#2a2a2b',
|
label: '应用颜色',
|
||||||
'#313132',
|
value: 0
|
||||||
'#373739',
|
},
|
||||||
'#757575',
|
{
|
||||||
'#e0e0e0',
|
label: '应用背景',
|
||||||
'#eeeeee',
|
value: 1
|
||||||
'#fafafa'
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
// 默认展示颜色列表
|
||||||
|
const swatchesColors = ['#232324', '#2a2a2b', '#313132', '#373739', '#757575', '#e0e0e0', '#eeeeee', '#fafafa']
|
||||||
|
|
||||||
const globalTabList = [
|
const globalTabList = [
|
||||||
{
|
{
|
||||||
key: 'ChartTheme',
|
key: 'ChartTheme',
|
||||||
@ -193,9 +198,19 @@ const previewTypeList = [
|
|||||||
title: '铺满',
|
title: '铺满',
|
||||||
icon: FitToScreenIcon,
|
icon: FitToScreenIcon,
|
||||||
desc: '强行拉伸画面,填充所有视图'
|
desc: '强行拉伸画面,填充所有视图'
|
||||||
},
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => canvasConfig.selectColor,
|
||||||
|
newValue => {
|
||||||
|
selectColorValue.value = newValue ? 0 : 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// 画布尺寸规则
|
// 画布尺寸规则
|
||||||
const validator = (x: number) => x > 50
|
const validator = (x: number) => x > 50
|
||||||
|
|
||||||
@ -212,9 +227,7 @@ const beforeUploadHandle = async ({ file }) => {
|
|||||||
const size = file.file.size
|
const size = file.file.size
|
||||||
|
|
||||||
if (size > 1024 * 1024 * backgroundImageSize) {
|
if (size > 1024 * 1024 * backgroundImageSize) {
|
||||||
window['$message'].warning(
|
window['$message'].warning(`图片超出 ${backgroundImageSize}M 限制,请重新上传!`)
|
||||||
`图片超出 ${backgroundImageSize}M 限制,请重新上传!`
|
|
||||||
)
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (type !== FileTypeEnum.PNG && type !== FileTypeEnum.JPEG && type !== FileTypeEnum.GIF) {
|
if (type !== FileTypeEnum.PNG && type !== FileTypeEnum.JPEG && type !== FileTypeEnum.GIF) {
|
||||||
@ -224,38 +237,32 @@ const beforeUploadHandle = async ({ file }) => {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 应用颜色
|
||||||
|
const selectColorValueHandle = (value: number) => {
|
||||||
|
canvasConfig.selectColor = value == 0
|
||||||
|
}
|
||||||
|
|
||||||
// 清除背景
|
// 清除背景
|
||||||
const clearImage = () => {
|
const clearImage = () => {
|
||||||
chartEditStore.setEditCanvasConfig(
|
chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, undefined)
|
||||||
EditCanvasConfigEnum.BACKGROUND_IMAGE,
|
chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, true)
|
||||||
undefined
|
|
||||||
)
|
|
||||||
chartEditStore.setEditCanvasConfig(
|
|
||||||
EditCanvasConfigEnum.SELECT_COLOR,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清除颜色
|
// 启用/关闭 颜色(强制更新)
|
||||||
const clearColor = () => {
|
|
||||||
chartEditStore.setEditCanvasConfig(
|
|
||||||
EditCanvasConfigEnum.BACKGROUND,
|
|
||||||
undefined
|
|
||||||
)
|
|
||||||
if (canvasConfig.backgroundImage) {
|
|
||||||
chartEditStore.setEditCanvasConfig(
|
|
||||||
EditCanvasConfigEnum.SELECT_COLOR,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 启用/关闭 颜色
|
|
||||||
const switchSelectColorHandle = () => {
|
const switchSelectColorHandle = () => {
|
||||||
switchSelectColorLoading.value = true
|
switchSelectColorLoading.value = true
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
switchSelectColorLoading.value = false
|
switchSelectColorLoading.value = false
|
||||||
}, 1000)
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除颜色
|
||||||
|
const clearColor = () => {
|
||||||
|
chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND, undefined)
|
||||||
|
if (canvasConfig.backgroundImage) {
|
||||||
|
chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false)
|
||||||
|
}
|
||||||
|
switchSelectColorHandle()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自定义上传操作
|
// 自定义上传操作
|
||||||
@ -264,14 +271,8 @@ const customRequest = (options: UploadCustomRequestOptions) => {
|
|||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (file.file) {
|
if (file.file) {
|
||||||
const ImageUrl = fileToUrl(file.file)
|
const ImageUrl = fileToUrl(file.file)
|
||||||
chartEditStore.setEditCanvasConfig(
|
chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, ImageUrl)
|
||||||
EditCanvasConfigEnum.BACKGROUND_IMAGE,
|
chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false)
|
||||||
ImageUrl
|
|
||||||
)
|
|
||||||
chartEditStore.setEditCanvasConfig(
|
|
||||||
EditCanvasConfigEnum.SELECT_COLOR,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
window['$message'].error('添加图片失败,请稍后重试!')
|
window['$message'].error('添加图片失败,请稍后重试!')
|
||||||
}
|
}
|
||||||
@ -285,8 +286,8 @@ const selectPreviewType = (key: PreviewScaleEnum) => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
$updloadWidth: 326px;
|
$uploadWidth: 326px;
|
||||||
$updloadHeight: 193px;
|
$uploadHeight: 193px;
|
||||||
@include go(canvas-setting) {
|
@include go(canvas-setting) {
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
.upload-box {
|
.upload-box {
|
||||||
@ -299,12 +300,12 @@ $updloadHeight: 193px;
|
|||||||
}
|
}
|
||||||
.n-upload-dragger {
|
.n-upload-dragger {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
width: $updloadWidth;
|
width: $uploadWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.upload-show {
|
.upload-show {
|
||||||
width: -webkit-fill-available;
|
width: -webkit-fill-available;
|
||||||
height: $updloadHeight;
|
height: $uploadHeight;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
.upload-img {
|
.upload-img {
|
||||||
@ -322,6 +323,17 @@ $updloadHeight: 193px;
|
|||||||
.icon-position {
|
.icon-position {
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
}
|
}
|
||||||
|
.picker-height {
|
||||||
|
min-height: 35px;
|
||||||
|
}
|
||||||
|
.clear-btn {
|
||||||
|
padding-left: 2.25em;
|
||||||
|
padding-right: 2.25em;
|
||||||
|
}
|
||||||
|
.select-preview-icon {
|
||||||
|
padding-right: .68em;
|
||||||
|
padding-left: .68em;
|
||||||
|
}
|
||||||
.tabs-box {
|
.tabs-box {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
@before-upload="beforeUpload"
|
@before-upload="beforeUpload"
|
||||||
>
|
>
|
||||||
<n-space>
|
<n-space>
|
||||||
<n-button v-if="!ajax" class="sourceBtn-item">
|
<n-button v-if="!ajax" class="sourceBtn-item" :disabled="noData">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<n-icon>
|
<n-icon>
|
||||||
<document-add-icon />
|
<document-add-icon />
|
||||||
@ -52,7 +52,7 @@
|
|||||||
</n-space>
|
</n-space>
|
||||||
</n-upload>
|
</n-upload>
|
||||||
<div>
|
<div>
|
||||||
<n-button class="sourceBtn-item" @click="download">
|
<n-button class="sourceBtn-item" :disabled="noData" @click="download">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<n-icon>
|
<n-icon>
|
||||||
<document-download-icon />
|
<document-download-icon />
|
||||||
@ -111,6 +111,7 @@ const { DocumentAddIcon, DocumentDownloadIcon } = icon.carbon
|
|||||||
const source = ref()
|
const source = ref()
|
||||||
const dimensions = ref()
|
const dimensions = ref()
|
||||||
const dimensionsAndSource = ref()
|
const dimensionsAndSource = ref()
|
||||||
|
const noData = ref(false)
|
||||||
|
|
||||||
const { uploadFileListRef, customRequest, beforeUpload, download } = useFile(targetData)
|
const { uploadFileListRef, customRequest, beforeUpload, download } = useFile(targetData)
|
||||||
|
|
||||||
@ -180,6 +181,7 @@ watch(
|
|||||||
dimensionsAndSource.value = null
|
dimensionsAndSource.value = null
|
||||||
source.value = newData
|
source.value = newData
|
||||||
} else {
|
} else {
|
||||||
|
noData.value = true
|
||||||
source.value = '此组件无数据源'
|
source.value = '此组件无数据源'
|
||||||
}
|
}
|
||||||
if (isArray(newData)) {
|
if (isArray(newData)) {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<!-- 尺寸 -->
|
<!-- 尺寸 -->
|
||||||
<size-setting :isGroup="targetData.isGroup" :chartAttr="targetData.attr"></size-setting>
|
<size-setting :isGroup="targetData.isGroup" :chartAttr="targetData.attr"></size-setting>
|
||||||
<!-- 位置 -->
|
<!-- 位置 -->
|
||||||
<position-setting :chartAttr="targetData.attr" :canvasConfig="chartEditStore.getEditCanvasConfig"/>
|
<position-setting :chartAttr="targetData.attr" :canvasConfig="chartEditStore.getEditCanvasConfig" />
|
||||||
<!-- 滤镜 -->
|
<!-- 滤镜 -->
|
||||||
<styles-setting :isGroup="targetData.isGroup" :chartStyles="targetData.styles"></styles-setting>
|
<styles-setting :isGroup="targetData.isGroup" :chartStyles="targetData.styles"></styles-setting>
|
||||||
<!-- 自定义配置项 -->
|
<!-- 自定义配置项 -->
|
||||||
@ -17,7 +17,6 @@
|
|||||||
import { NameSetting, PositionSetting, SizeSetting, StylesSetting } from '@/components/Pages/ChartItemSetting'
|
import { NameSetting, PositionSetting, SizeSetting, StylesSetting } from '@/components/Pages/ChartItemSetting'
|
||||||
import { useTargetData } from '../hooks/useTargetData.hook'
|
import { useTargetData } from '../hooks/useTargetData.hook'
|
||||||
const { targetData, chartEditStore } = useTargetData()
|
const { targetData, chartEditStore } = useTargetData()
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
...useComponentStyle(groupData.attr, groupIndex),
|
...useComponentStyle(groupData.attr, groupIndex),
|
||||||
...useSizeStyle(groupData.attr),
|
...useSizeStyle(groupData.attr),
|
||||||
...getFilterStyle(groupData.styles),
|
...getFilterStyle(groupData.styles),
|
||||||
...getTransformStyle(groupData.styles)
|
...getTransformStyle(groupData.styles),
|
||||||
|
...getBlendModeStyle(groupData.styles) as any
|
||||||
}"
|
}"
|
||||||
@click="mouseClickHandle($event, groupData)"
|
@click="mouseClickHandle($event, groupData)"
|
||||||
@mousedown="mousedownHandle($event, groupData)"
|
@mousedown="mousedownHandle($event, groupData)"
|
||||||
@ -55,7 +56,7 @@ import { MenuEnum } from '@/enums/editPageEnum'
|
|||||||
import { chartColors } from '@/settings/chartThemes/index'
|
import { chartColors } from '@/settings/chartThemes/index'
|
||||||
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
||||||
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
||||||
import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
|
import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
|
import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
|
||||||
import { useMouseHandle } from '../../hooks/useDrag.hook'
|
import { useMouseHandle } from '../../hooks/useDrag.hook'
|
||||||
@ -85,26 +86,32 @@ const optionsHandle = (
|
|||||||
allList: MenuOptionsItemType[],
|
allList: MenuOptionsItemType[],
|
||||||
targetInstance: CreateComponentType
|
targetInstance: CreateComponentType
|
||||||
) => {
|
) => {
|
||||||
// 多选
|
|
||||||
const moreMenuEnums = [MenuEnum.GROUP, MenuEnum.DELETE]
|
|
||||||
// 单选
|
|
||||||
const singleMenuEnums = [MenuEnum.UN_GROUP]
|
|
||||||
|
|
||||||
const filter = (menulist: MenuEnum[]) => {
|
const filter = (menulist: MenuEnum[]) => {
|
||||||
const list: MenuOptionsItemType[] = []
|
return allList.filter(i => menulist.includes(i.key as MenuEnum))
|
||||||
allList.forEach(item => {
|
|
||||||
if (menulist.includes(item.key as MenuEnum)) {
|
|
||||||
list.push(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return list
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 多选处理
|
// 多选处理
|
||||||
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
||||||
return filter(moreMenuEnums)
|
return filter([MenuEnum.GROUP, MenuEnum.DELETE])
|
||||||
} else {
|
} else {
|
||||||
return [...filter(singleMenuEnums), divider(), ...targetList]
|
const statusMenuEnums: MenuEnum[] = []
|
||||||
|
if (targetInstance.status.lock) {
|
||||||
|
statusMenuEnums.push(MenuEnum.LOCK)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.UNLOCK)
|
||||||
|
}
|
||||||
|
if (targetInstance.status.hide) {
|
||||||
|
statusMenuEnums.push(MenuEnum.HIDE)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.SHOW)
|
||||||
|
}
|
||||||
|
// 单选
|
||||||
|
const singleMenuEnums = [MenuEnum.UN_GROUP]
|
||||||
|
return [
|
||||||
|
...filter(singleMenuEnums),
|
||||||
|
divider(),
|
||||||
|
...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,19 @@ import {
|
|||||||
HistoryActionTypeEnum
|
HistoryActionTypeEnum
|
||||||
} from '@/store/modules/chartHistoryStore/chartHistoryStore.d'
|
} from '@/store/modules/chartHistoryStore/chartHistoryStore.d'
|
||||||
|
|
||||||
const { DesktopOutlineIcon, PencilIcon, TrashIcon, CopyIcon, LayersIcon, DuplicateIcon, HelpOutlineIcon } =
|
const {
|
||||||
icon.ionicons5
|
DesktopOutlineIcon,
|
||||||
|
PencilIcon,
|
||||||
|
TrashIcon,
|
||||||
|
CopyIcon,
|
||||||
|
LayersIcon,
|
||||||
|
DuplicateIcon,
|
||||||
|
HelpOutlineIcon,
|
||||||
|
LockClosedOutlineIcon,
|
||||||
|
LockOpenOutlineIcon,
|
||||||
|
EyeOffOutlineIcon,
|
||||||
|
EyeOutlineIcon
|
||||||
|
} = icon.ionicons5
|
||||||
const { StackedMoveIcon, Carbon3DCursorIcon, Carbon3DSoftwareIcon } = icon.carbon
|
const { StackedMoveIcon, Carbon3DCursorIcon, Carbon3DSoftwareIcon } = icon.carbon
|
||||||
|
|
||||||
const chartHistoryStoreStore = useChartHistoryStore()
|
const chartHistoryStoreStore = useChartHistoryStore()
|
||||||
@ -83,6 +94,14 @@ const iconHandle = (e: HistoryItemType) => {
|
|||||||
return Carbon3DCursorIcon
|
return Carbon3DCursorIcon
|
||||||
case HistoryActionTypeEnum.UN_GROUP:
|
case HistoryActionTypeEnum.UN_GROUP:
|
||||||
return Carbon3DSoftwareIcon
|
return Carbon3DSoftwareIcon
|
||||||
|
case HistoryActionTypeEnum.LOCK:
|
||||||
|
return LockClosedOutlineIcon
|
||||||
|
case HistoryActionTypeEnum.UNLOCK:
|
||||||
|
return LockOpenOutlineIcon
|
||||||
|
case HistoryActionTypeEnum.HIDE:
|
||||||
|
return EyeOffOutlineIcon
|
||||||
|
case HistoryActionTypeEnum.SHOW:
|
||||||
|
return EyeOutlineIcon
|
||||||
default:
|
default:
|
||||||
return PencilIcon
|
return PencilIcon
|
||||||
}
|
}
|
||||||
@ -109,9 +128,7 @@ const options = computed(() => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return reverse(options.filter(item => {
|
return reverse(options.filter(item => item.label))
|
||||||
return item.label
|
|
||||||
}))
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="go-shape-box">
|
<div class="go-shape-box" :class="{ lock, hide }">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
<!-- 锚点 -->
|
<!-- 锚点 -->
|
||||||
<template v-if="!hiddenPoint">
|
<template v-if="!hiddenPoint">
|
||||||
@ -55,14 +55,26 @@ const themeColor = computed(() => {
|
|||||||
|
|
||||||
// 计算当前选中目标
|
// 计算当前选中目标
|
||||||
const hover = computed(() => {
|
const hover = computed(() => {
|
||||||
|
if (props.item.status.lock) return false
|
||||||
return props.item.id === chartEditStore.getTargetChart.hoverId
|
return props.item.id === chartEditStore.getTargetChart.hoverId
|
||||||
})
|
})
|
||||||
|
|
||||||
// 兼容多值场景
|
// 兼容多值场景
|
||||||
const select = computed(() => {
|
const select = computed(() => {
|
||||||
const id = props.item.id
|
const id = props.item.id
|
||||||
|
if (props.item.status.lock) return false
|
||||||
return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
|
return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 锁定
|
||||||
|
const lock = computed(() => {
|
||||||
|
return props.item.status.lock
|
||||||
|
})
|
||||||
|
|
||||||
|
// 隐藏
|
||||||
|
const hide = computed(() => {
|
||||||
|
return props.item.status.hide
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@ -70,6 +82,14 @@ const select = computed(() => {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
cursor: move;
|
cursor: move;
|
||||||
|
|
||||||
|
&.lock {
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* 锚点 */
|
/* 锚点 */
|
||||||
.shape-point {
|
.shape-point {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
@ -63,6 +63,26 @@ const shortcutKeyOptions = [
|
|||||||
win: `${WinKeyboard.CTRL.toUpperCase()} + ← `,
|
win: `${WinKeyboard.CTRL.toUpperCase()} + ← `,
|
||||||
mac: `${MacKeyboard.CTRL.toUpperCase()} + ← `
|
mac: `${MacKeyboard.CTRL.toUpperCase()} + ← `
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '锁定',
|
||||||
|
win: `${WinKeyboard.CTRL.toUpperCase()} + L `,
|
||||||
|
mac: `${MacKeyboard.CTRL.toUpperCase()} + L `
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '解锁',
|
||||||
|
win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()}+ L `,
|
||||||
|
mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + L `
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '展示',
|
||||||
|
win: `${WinKeyboard.CTRL.toUpperCase()} + H `,
|
||||||
|
mac: `${MacKeyboard.CTRL.toUpperCase()} + H `
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '隐藏',
|
||||||
|
win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + H `,
|
||||||
|
mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + H `
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '删除',
|
label: '删除',
|
||||||
win: 'Delete'.toUpperCase(),
|
win: 'Delete'.toUpperCase(),
|
||||||
|
@ -179,7 +179,8 @@ $asideBottom: 70px;
|
|||||||
}
|
}
|
||||||
@include deep() {
|
@include deep() {
|
||||||
.n-button__icon {
|
.n-button__icon {
|
||||||
margin-right: 4px;
|
margin-right: 0;
|
||||||
|
margin-left: 0;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,9 @@ export const mousedownBoxSelect = (e: MouseEvent, item?: CreateComponentType | C
|
|||||||
targetAttr.x1 - selectAttr.x1 >= 0 &&
|
targetAttr.x1 - selectAttr.x1 >= 0 &&
|
||||||
targetAttr.y1 - selectAttr.y1 >= 0 &&
|
targetAttr.y1 - selectAttr.y1 >= 0 &&
|
||||||
targetAttr.x2 - selectAttr.x2 <= 0 &&
|
targetAttr.x2 - selectAttr.x2 <= 0 &&
|
||||||
targetAttr.y2 - selectAttr.y2 <= 0
|
targetAttr.y2 - selectAttr.y2 <= 0 &&
|
||||||
|
!item.status.lock &&
|
||||||
|
!item.status.hide
|
||||||
) {
|
) {
|
||||||
isSelect = true
|
isSelect = true
|
||||||
chartEditStore.setTargetSelectChart(item.id, true)
|
chartEditStore.setTargetSelectChart(item.id, true)
|
||||||
@ -166,6 +168,7 @@ export const useMouseHandle = () => {
|
|||||||
const mouseClickHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {
|
const mouseClickHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
if (item.status.lock) return
|
||||||
// 若此时按下了 CTRL, 表示多选
|
// 若此时按下了 CTRL, 表示多选
|
||||||
if (
|
if (
|
||||||
window.$KeyboardActive?.has(WinKeyboard.CTRL_SOURCE_KEY) ||
|
window.$KeyboardActive?.has(WinKeyboard.CTRL_SOURCE_KEY) ||
|
||||||
@ -185,6 +188,7 @@ export const useMouseHandle = () => {
|
|||||||
const mousedownHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {
|
const mousedownHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
if (item.status.lock) return
|
||||||
onClickOutSide()
|
onClickOutSide()
|
||||||
// 按下左键 + CTRL
|
// 按下左键 + CTRL
|
||||||
if (
|
if (
|
||||||
|
@ -37,7 +37,10 @@
|
|||||||
v-else
|
v-else
|
||||||
:data-id="item.id"
|
:data-id="item.id"
|
||||||
:index="index"
|
:index="index"
|
||||||
:style="useComponentStyle(item.attr, index)"
|
:style="{
|
||||||
|
...useComponentStyle(item.attr, index),
|
||||||
|
...getBlendModeStyle(item.styles) as any
|
||||||
|
}"
|
||||||
:item="item"
|
:item="item"
|
||||||
@click="mouseClickHandle($event, item)"
|
@click="mouseClickHandle($event, item)"
|
||||||
@mousedown="mousedownHandle($event, item)"
|
@mousedown="mousedownHandle($event, item)"
|
||||||
@ -81,7 +84,7 @@ import { onMounted, computed } from 'vue'
|
|||||||
import { chartColors } from '@/settings/chartThemes/index'
|
import { chartColors } from '@/settings/chartThemes/index'
|
||||||
import { MenuEnum } from '@/enums/editPageEnum'
|
import { MenuEnum } from '@/enums/editPageEnum'
|
||||||
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
||||||
import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
|
import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
|
||||||
import { useContextMenu } from '@/views/chart/hooks/useContextMenu.hook'
|
import { useContextMenu } from '@/views/chart/hooks/useContextMenu.hook'
|
||||||
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
@ -114,24 +117,22 @@ const optionsHandle = (
|
|||||||
allList: MenuOptionsItemType[],
|
allList: MenuOptionsItemType[],
|
||||||
targetInstance: CreateComponentType
|
targetInstance: CreateComponentType
|
||||||
) => {
|
) => {
|
||||||
// 多选
|
|
||||||
const moreMenuEnums = [MenuEnum.GROUP, MenuEnum.DELETE]
|
|
||||||
// 单选
|
|
||||||
const singleMenuEnums = targetList
|
|
||||||
|
|
||||||
// 多选处理
|
// 多选处理
|
||||||
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
||||||
const list: MenuOptionsItemType[] = []
|
return allList.filter(i => [MenuEnum.GROUP, MenuEnum.DELETE].includes(i.key as MenuEnum))
|
||||||
|
|
||||||
allList.forEach(item => {
|
|
||||||
// 成组
|
|
||||||
if (moreMenuEnums.includes(item.key as MenuEnum)) {
|
|
||||||
list.push(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return list
|
|
||||||
}
|
}
|
||||||
return singleMenuEnums
|
const statusMenuEnums: MenuEnum[] = []
|
||||||
|
if (targetInstance.status.lock) {
|
||||||
|
statusMenuEnums.push(MenuEnum.LOCK)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.UNLOCK)
|
||||||
|
}
|
||||||
|
if (targetInstance.status.hide) {
|
||||||
|
statusMenuEnums.push(MenuEnum.HIDE)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.SHOW)
|
||||||
|
}
|
||||||
|
return targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 主题色
|
// 主题色
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div class="go-content-layers-group-list-item">
|
<div class="go-content-layers-group-list-item">
|
||||||
<div
|
<div
|
||||||
class="root-item-content"
|
class="root-item-content"
|
||||||
:class="{ hover: hover, select: select }"
|
:class="{ hover, select, 'list-mini': selectText }"
|
||||||
@click="clickHandle($event)"
|
@click="clickHandle($event)"
|
||||||
@mousedown="groupMousedownHandle($event)"
|
@mousedown="groupMousedownHandle($event)"
|
||||||
@mouseenter="mouseenterHandle(componentGroupData)"
|
@mouseenter="mouseenterHandle(componentGroupData)"
|
||||||
@ -18,11 +18,12 @@
|
|||||||
<folder-icon></folder-icon>
|
<folder-icon></folder-icon>
|
||||||
</template>
|
</template>
|
||||||
</n-icon>
|
</n-icon>
|
||||||
<n-ellipsis>
|
<n-ellipsis style="margin-right: auto">
|
||||||
<n-text class="go-ml-2 list-text" :depth="2">
|
<n-text class="go-ml-2 list-text" :depth="2">
|
||||||
{{ componentGroupData.chartConfig.title }}
|
{{ componentGroupData.chartConfig.title }}
|
||||||
</n-text>
|
</n-text>
|
||||||
</n-ellipsis>
|
</n-ellipsis>
|
||||||
|
<layers-status :isGroup="false" :hover="hover" :status="status"></layers-status>
|
||||||
</div>
|
</div>
|
||||||
<div :class="{ 'select-modal': select }"></div>
|
<div :class="{ 'select-modal': select }"></div>
|
||||||
</div>
|
</div>
|
||||||
@ -31,6 +32,8 @@
|
|||||||
v-for="element in componentGroupData.groupList"
|
v-for="element in componentGroupData.groupList"
|
||||||
:key="element.id"
|
:key="element.id"
|
||||||
:componentData="element"
|
:componentData="element"
|
||||||
|
:layer-mode="layerMode"
|
||||||
|
:isGroup="true"
|
||||||
@mousedown="mousedownHandle($event, element, componentGroupData.id)"
|
@mousedown="mousedownHandle($event, element, componentGroupData.id)"
|
||||||
@mouseenter="mouseenterHandle(element)"
|
@mouseenter="mouseenterHandle(element)"
|
||||||
@mouseleave="mouseleaveHandle(element)"
|
@mouseleave="mouseleaveHandle(element)"
|
||||||
@ -48,15 +51,20 @@ import { useDesignStore } from '@/store/modules/designStore/designStore'
|
|||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
|
import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook'
|
||||||
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
||||||
|
import { LayerModeEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
|
||||||
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
||||||
import { LayersListItem } from '../LayersListItem'
|
import { LayersListItem } from '../LayersListItem'
|
||||||
import throttle from 'lodash/throttle'
|
import { LayersStatus } from '../LayersStatus/index'
|
||||||
import { icon } from '@/plugins'
|
import { icon } from '@/plugins'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
componentGroupData: {
|
componentGroupData: {
|
||||||
type: Object as PropType<CreateComponentGroupType>,
|
type: Object as PropType<CreateComponentGroupType>,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
layerMode: {
|
||||||
|
type: String as PropType<LayerModeEnum>,
|
||||||
|
default: LayerModeEnum.THUMBNAIL
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -77,6 +85,27 @@ const themeColor = computed(() => {
|
|||||||
return designStore.getAppTheme
|
return designStore.getAppTheme
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 是否选中文本
|
||||||
|
const selectText = computed(() => {
|
||||||
|
return props.layerMode === LayerModeEnum.TEXT
|
||||||
|
})
|
||||||
|
|
||||||
|
// 计算当前选中目标
|
||||||
|
const select = computed(() => {
|
||||||
|
const id = props.componentGroupData.id
|
||||||
|
return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 悬浮
|
||||||
|
const hover = computed(() => {
|
||||||
|
return props.componentGroupData.id === chartEditStore.getTargetChart.hoverId
|
||||||
|
})
|
||||||
|
|
||||||
|
// 组件状态 隐藏/锁定
|
||||||
|
const status = computed(() => {
|
||||||
|
return props.componentGroupData.status
|
||||||
|
})
|
||||||
|
|
||||||
// 右键
|
// 右键
|
||||||
const optionsHandle = (
|
const optionsHandle = (
|
||||||
targetList: MenuOptionsItemType[],
|
targetList: MenuOptionsItemType[],
|
||||||
@ -84,20 +113,29 @@ const optionsHandle = (
|
|||||||
targetInstance: CreateComponentType
|
targetInstance: CreateComponentType
|
||||||
) => {
|
) => {
|
||||||
const filter = (menulist: MenuEnum[]) => {
|
const filter = (menulist: MenuEnum[]) => {
|
||||||
const list: MenuOptionsItemType[] = []
|
return allList.filter(i => menulist.includes(i.key as MenuEnum))
|
||||||
allList.forEach(item => {
|
|
||||||
if (menulist.includes(item.key as MenuEnum)) {
|
|
||||||
list.push(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return list
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 多选处理
|
// 多选处理
|
||||||
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
||||||
return filter([MenuEnum.GROUP])
|
return filter([MenuEnum.GROUP])
|
||||||
} else {
|
} else {
|
||||||
return [...filter([MenuEnum.UN_GROUP]), divider(), ...targetList]
|
const statusMenuEnums: MenuEnum[] = []
|
||||||
|
if (targetInstance.status.lock) {
|
||||||
|
statusMenuEnums.push(MenuEnum.LOCK)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.UNLOCK)
|
||||||
|
}
|
||||||
|
if (targetInstance.status.hide) {
|
||||||
|
statusMenuEnums.push(MenuEnum.HIDE)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.SHOW)
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
...filter([MenuEnum.UN_GROUP]),
|
||||||
|
divider(),
|
||||||
|
...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,17 +152,6 @@ const clickHandle = (e: MouseEvent) => {
|
|||||||
mousedownHandle(e, props.componentGroupData)
|
mousedownHandle(e, props.componentGroupData)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算当前选中目标
|
|
||||||
const select = computed(() => {
|
|
||||||
const id = props.componentGroupData.id
|
|
||||||
return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
|
|
||||||
})
|
|
||||||
|
|
||||||
// 悬浮
|
|
||||||
const hover = computed(() => {
|
|
||||||
return props.componentGroupData.id === chartEditStore.getTargetChart.hoverId
|
|
||||||
})
|
|
||||||
|
|
||||||
// 组点击事件
|
// 组点击事件
|
||||||
const groupMousedownHandle = (e: MouseEvent) => {
|
const groupMousedownHandle = (e: MouseEvent) => {
|
||||||
onClickOutSide()
|
onClickOutSide()
|
||||||
@ -148,7 +175,11 @@ const groupMousedownHandle = (e: MouseEvent) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 公共点击事件
|
// 公共点击事件
|
||||||
const mousedownHandle = (e: MouseEvent, componentInstance: CreateComponentType | CreateComponentGroupType, id?: string) => {
|
const mousedownHandle = (
|
||||||
|
e: MouseEvent,
|
||||||
|
componentInstance: CreateComponentType | CreateComponentGroupType,
|
||||||
|
id?: string
|
||||||
|
) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
|
||||||
@ -169,6 +200,7 @@ const mouseleaveHandle = (componentInstance: CreateComponentType | CreateCompone
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
$centerHeight: 52px;
|
$centerHeight: 52px;
|
||||||
|
$centerMiniHeight: 28px;
|
||||||
$textSize: 10px;
|
$textSize: 10px;
|
||||||
|
|
||||||
@include go(content-layers-group-list-item) {
|
@include go(content-layers-group-list-item) {
|
||||||
@ -177,6 +209,20 @@ $textSize: 10px;
|
|||||||
margin: 10px 5%;
|
margin: 10px 5%;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
@extend .go-transition-quick;
|
@extend .go-transition-quick;
|
||||||
|
@include deep() {
|
||||||
|
.go-content-layers-list-item {
|
||||||
|
margin-right: 0 !important;
|
||||||
|
width: 95% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@include deep() {
|
||||||
|
.icon-item {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.root-item-content {
|
.root-item-content {
|
||||||
height: $centerHeight;
|
height: $centerHeight;
|
||||||
@ -196,6 +242,17 @@ $textSize: 10px;
|
|||||||
border: 1px solid v-bind('themeColor') !important;
|
border: 1px solid v-bind('themeColor') !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mini样式
|
||||||
|
&.list-mini {
|
||||||
|
height: $centerMiniHeight;
|
||||||
|
.item-content {
|
||||||
|
height: calc(#{$centerMiniHeight} - 10px) !important;
|
||||||
|
}
|
||||||
|
.select-modal {
|
||||||
|
height: calc(#{$centerMiniHeight} + 2px) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.select-modal,
|
.select-modal,
|
||||||
.item-content {
|
.item-content {
|
||||||
@ -220,5 +277,9 @@ $textSize: 10px;
|
|||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
font-size: $textSize;
|
font-size: $textSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.list-status-icon {
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="go-content-layers-list-item" :class="{ hover: hover, select: select }">
|
<div class="go-content-layers-list-item" :class="{ hover, select, 'list-mini': selectText }">
|
||||||
<div class="go-flex-center item-content">
|
<div class="go-flex-center item-content">
|
||||||
<n-image
|
<n-image
|
||||||
class="list-img"
|
class="list-img"
|
||||||
@ -8,54 +8,77 @@
|
|||||||
:src="image"
|
:src="image"
|
||||||
:fallback-src="requireErrorImg()"
|
:fallback-src="requireErrorImg()"
|
||||||
></n-image>
|
></n-image>
|
||||||
<n-ellipsis>
|
<n-ellipsis style="margin-right: auto">
|
||||||
<n-text class="list-text" :depth="2">
|
<n-text class="list-text" :depth="2">
|
||||||
{{ props.componentData.chartConfig.title }}
|
{{ props.componentData.chartConfig.title }}
|
||||||
</n-text>
|
</n-text>
|
||||||
</n-ellipsis>
|
</n-ellipsis>
|
||||||
|
<layers-status :isGroup="isGroup" :hover="hover" :status="status"></layers-status>
|
||||||
</div>
|
</div>
|
||||||
<div :class="{ 'select-modal': select }"></div>
|
<div :class="{ 'select-modal': select }"></div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { toRefs, computed } from 'vue'
|
import { computed, PropType } from 'vue'
|
||||||
import { requireErrorImg } from '@/utils'
|
import { requireErrorImg } from '@/utils'
|
||||||
import { useDesignStore } from '@/store/modules/designStore/designStore'
|
import { useDesignStore } from '@/store/modules/designStore/designStore'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
|
import { LayerModeEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
|
||||||
// 全局颜色
|
import { LayersStatus } from '../LayersStatus/index'
|
||||||
const designStore = useDesignStore()
|
|
||||||
const chartEditStore = useChartEditStore()
|
|
||||||
|
|
||||||
// 颜色
|
|
||||||
const themeColor = computed(() => {
|
|
||||||
return designStore.getAppTheme
|
|
||||||
})
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
componentData: {
|
componentData: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
isGroup: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
layerMode: {
|
||||||
|
type: String as PropType<LayerModeEnum>,
|
||||||
|
default: LayerModeEnum.THUMBNAIL
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 全局颜色
|
||||||
|
const designStore = useDesignStore()
|
||||||
|
const chartEditStore = useChartEditStore()
|
||||||
|
|
||||||
// eslint-disable-next-line vue/no-setup-props-destructure
|
// eslint-disable-next-line vue/no-setup-props-destructure
|
||||||
const { image } = props.componentData.chartConfig
|
const { image } = props.componentData.chartConfig
|
||||||
|
|
||||||
|
// 颜色
|
||||||
|
const themeColor = computed(() => {
|
||||||
|
return designStore.getAppTheme
|
||||||
|
})
|
||||||
|
|
||||||
// 计算当前选中目标
|
// 计算当前选中目标
|
||||||
const select = computed(() => {
|
const select = computed(() => {
|
||||||
const id = props.componentData.id
|
const id = props.componentData.id
|
||||||
return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
|
return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 悬浮对象
|
||||||
const hover = computed(() => {
|
const hover = computed(() => {
|
||||||
return props.componentData.id === chartEditStore.getTargetChart.hoverId
|
return props.componentData.id === chartEditStore.getTargetChart.hoverId
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 组件状态 隐藏/锁定
|
||||||
|
const status = computed(() => {
|
||||||
|
return props.componentData.status
|
||||||
|
})
|
||||||
|
|
||||||
|
// 是否选中文本
|
||||||
|
const selectText = computed(() => {
|
||||||
|
return props.layerMode === LayerModeEnum.TEXT
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
$centerHeight: 52px;
|
$centerHeight: 52px;
|
||||||
|
$centerMiniHeight: 28px;
|
||||||
$textSize: 10px;
|
$textSize: 10px;
|
||||||
|
|
||||||
@include go(content-layers-list-item) {
|
@include go(content-layers-list-item) {
|
||||||
@ -72,15 +95,14 @@ $textSize: 10px;
|
|||||||
&:hover {
|
&:hover {
|
||||||
@include fetch-bg-color('background-color4');
|
@include fetch-bg-color('background-color4');
|
||||||
}
|
}
|
||||||
/* 选中 */
|
&:hover {
|
||||||
&.select {
|
@include deep() {
|
||||||
border: 1px solid v-bind('themeColor');
|
.icon-item {
|
||||||
/* 需要设置最高级,覆盖 hover 的颜色 */
|
opacity: 1;
|
||||||
background-color: rgba(0, 0, 0, 0);
|
}
|
||||||
.list-img {
|
|
||||||
border: 1px solid v-bind('themeColor') !important;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.select-modal,
|
.select-modal,
|
||||||
.item-content {
|
.item-content {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -94,24 +116,39 @@ $textSize: 10px;
|
|||||||
width: calc(100% - 10px);
|
width: calc(100% - 10px);
|
||||||
height: calc(100% - 10px);
|
height: calc(100% - 10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.select-modal {
|
.select-modal {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
background-color: v-bind('themeColor');
|
background-color: v-bind('themeColor');
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-img {
|
.list-img {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
height: $centerHeight;
|
height: $centerHeight;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1px solid;
|
border: none !important;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
@include hover-border-color('hover-border-color');
|
@include hover-border-color('hover-border-color');
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-text {
|
.list-text {
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
font-size: $textSize;
|
font-size: $textSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 选中样式 */
|
||||||
|
&.select {
|
||||||
|
border: 1px solid v-bind('themeColor');
|
||||||
|
/* 需要设置最高级,覆盖 hover 的颜色 */
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// mini样式
|
||||||
|
&.list-mini {
|
||||||
|
height: $centerMiniHeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
import LayersStatus from './index.vue'
|
||||||
|
|
||||||
|
export { LayersStatus }
|
@ -0,0 +1,86 @@
|
|||||||
|
<template>
|
||||||
|
<div class="icon-item-box" v-show="!isGroup">
|
||||||
|
<n-icon
|
||||||
|
class="go-ml-1 icon-item"
|
||||||
|
:class="{ active: status.lock }"
|
||||||
|
size="15"
|
||||||
|
:component="status.lock ? LockClosedOutlineIcon : LockOpenOutlineIcon"
|
||||||
|
@click="lockHandle"
|
||||||
|
/>
|
||||||
|
<n-icon
|
||||||
|
class="go-ml-1 icon-item"
|
||||||
|
:class="{ active: status.hide }"
|
||||||
|
size="15"
|
||||||
|
:component="status.hide ? EyeOffOutlineIcon : EyeOutlineIcon"
|
||||||
|
@click="showHandle"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { computed, PropType } from 'vue'
|
||||||
|
import { useDesignStore } from '@/store/modules/designStore/designStore'
|
||||||
|
import { StatusType } from '@/packages/index.d'
|
||||||
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
|
import { icon } from '@/plugins'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
isGroup: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
hover: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Object as PropType<StatusType>,
|
||||||
|
default: () => ({
|
||||||
|
lock: false,
|
||||||
|
hide: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const { LockClosedOutlineIcon, LockOpenOutlineIcon, EyeOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
|
||||||
|
const chartEditStore = useChartEditStore()
|
||||||
|
const designStore = useDesignStore()
|
||||||
|
|
||||||
|
// 颜色
|
||||||
|
const themeColor = computed(() => {
|
||||||
|
return designStore.getAppTheme
|
||||||
|
})
|
||||||
|
|
||||||
|
// 隐藏 / 展示
|
||||||
|
const showHandle = (e: MouseEvent) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
props.status.hide ? chartEditStore.setShow() : chartEditStore.setHide()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 锁定 / 解锁
|
||||||
|
const lockHandle = (e: MouseEvent) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
props.status.lock ? chartEditStore.setUnLock() : chartEditStore.setLock()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
$activeColor: v-bind('themeColor');
|
||||||
|
|
||||||
|
.icon-item-box {
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
.icon-item {
|
||||||
|
opacity: 0;
|
||||||
|
padding-top: 5px;
|
||||||
|
@extend.go-transition;
|
||||||
|
&.active,
|
||||||
|
&:hover {
|
||||||
|
color: $activeColor;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
0
src/views/chart/ContentLayers/enums.ts
Normal file
0
src/views/chart/ContentLayers/enums.ts
Normal file
@ -8,24 +8,49 @@
|
|||||||
@mousedown="boxMousedownHandle($event)"
|
@mousedown="boxMousedownHandle($event)"
|
||||||
>
|
>
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<n-icon size="16" :depth="2">
|
<n-icon size="16" :depth="2" :component="LayersIcon" />
|
||||||
<component :is="LayersIcon"></component>
|
|
||||||
</n-icon>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #top-right>
|
||||||
|
<n-button-group style="display: flex">
|
||||||
|
<n-button
|
||||||
|
v-for="(item, index) in layerModeList"
|
||||||
|
:key="index"
|
||||||
|
ghost
|
||||||
|
size="small"
|
||||||
|
:type="layerMode === item.value ? 'primary' : 'tertiary'"
|
||||||
|
@click="changeLayerType(item.value)"
|
||||||
|
>
|
||||||
|
<n-tooltip :show-arrow="false" trigger="hover">
|
||||||
|
<template #trigger>
|
||||||
|
<n-icon size="14" :component="item.icon" />
|
||||||
|
</template>
|
||||||
|
{{ item.label }}
|
||||||
|
</n-tooltip>
|
||||||
|
</n-button>
|
||||||
|
</n-button-group>
|
||||||
|
</template>
|
||||||
|
|
||||||
<!-- 图层内容 -->
|
<!-- 图层内容 -->
|
||||||
<n-space v-if="reverseList.length === 0" justify="center">
|
<n-space v-if="reverseList.length === 0" justify="center">
|
||||||
<n-text class="not-layer-text">暂无图层~</n-text>
|
<n-text class="not-layer-text">暂无图层~</n-text>
|
||||||
</n-space>
|
</n-space>
|
||||||
|
|
||||||
<!-- https://github.com/SortableJS/vue.draggable.next -->
|
<!-- https://github.com/SortableJS/vue.draggable.next -->
|
||||||
<draggable item-key="id" v-model="layerList" ghostClass="ghost" @change="onMoveCallback">
|
<draggable item-key="id" v-model="layerList" ghostClass="ghost" @change="onMoveCallback">
|
||||||
<template #item="{ element }">
|
<template #item="{ element }">
|
||||||
<div class="go-content-layer-box">
|
<div class="go-content-layer-box">
|
||||||
<!-- 组合 -->
|
<!-- 组合 -->
|
||||||
<layers-group-list-item v-if="element.isGroup" :componentGroupData="element"></layers-group-list-item>
|
<layers-group-list-item
|
||||||
|
v-if="element.isGroup"
|
||||||
|
:componentGroupData="element"
|
||||||
|
:layer-mode="layerMode"
|
||||||
|
></layers-group-list-item>
|
||||||
<!-- 单组件 -->
|
<!-- 单组件 -->
|
||||||
<layers-list-item
|
<layers-list-item
|
||||||
v-else
|
v-else
|
||||||
:componentData="element"
|
:componentData="element"
|
||||||
|
:layer-mode="layerMode"
|
||||||
@mousedown="mousedownHandle($event, element)"
|
@mousedown="mousedownHandle($event, element)"
|
||||||
@mouseenter="mouseenterHandle(element)"
|
@mouseenter="mouseenterHandle(element)"
|
||||||
@mouseleave="mouseleaveHandle(element)"
|
@mouseleave="mouseleaveHandle(element)"
|
||||||
@ -43,7 +68,7 @@ import Draggable from 'vuedraggable'
|
|||||||
import cloneDeep from 'lodash/cloneDeep'
|
import cloneDeep from 'lodash/cloneDeep'
|
||||||
import { ContentBox } from '../ContentBox/index'
|
import { ContentBox } from '../ContentBox/index'
|
||||||
import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore'
|
import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore'
|
||||||
import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
|
import { ChartLayoutStoreEnum, LayerModeEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
||||||
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
||||||
@ -55,12 +80,18 @@ import { LayersGroupListItem } from './components/LayersGroupListItem/index'
|
|||||||
|
|
||||||
import { icon } from '@/plugins'
|
import { icon } from '@/plugins'
|
||||||
|
|
||||||
const { LayersIcon } = icon.ionicons5
|
const { LayersIcon, GridIcon, ListIcon } = icon.ionicons5
|
||||||
const chartLayoutStore = useChartLayoutStore()
|
const chartLayoutStore = useChartLayoutStore()
|
||||||
const chartEditStore = useChartEditStore()
|
const chartEditStore = useChartEditStore()
|
||||||
const { handleContextMenu, onClickOutSide } = useContextMenu()
|
const { handleContextMenu, onClickOutSide } = useContextMenu()
|
||||||
|
|
||||||
|
const layerModeList = [
|
||||||
|
{ label: '缩略图', icon: GridIcon, value: LayerModeEnum.THUMBNAIL },
|
||||||
|
{ label: '文本列表', icon: ListIcon, value: LayerModeEnum.TEXT }
|
||||||
|
]
|
||||||
|
|
||||||
const layerList = ref<any>([])
|
const layerList = ref<any>([])
|
||||||
|
const layerMode = ref<LayerModeEnum>(chartLayoutStore.getLayerType)
|
||||||
|
|
||||||
// 逆序展示
|
// 逆序展示
|
||||||
const reverseList = computed(() => {
|
const reverseList = computed(() => {
|
||||||
@ -83,16 +114,21 @@ const optionsHandle = (
|
|||||||
) => {
|
) => {
|
||||||
// 多选处理
|
// 多选处理
|
||||||
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
||||||
const list: MenuOptionsItemType[] = []
|
return targetList.filter(i => i.key === MenuEnum.GROUP)
|
||||||
targetList.forEach(item => {
|
|
||||||
// 成组
|
|
||||||
if (item.key === MenuEnum.GROUP) {
|
|
||||||
list.push(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return list
|
|
||||||
}
|
}
|
||||||
return targetList
|
const statusMenuEnums: MenuEnum[] = []
|
||||||
|
// 处理锁定与隐藏
|
||||||
|
if (targetInstance.status.lock) {
|
||||||
|
statusMenuEnums.push(MenuEnum.LOCK)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.UNLOCK)
|
||||||
|
}
|
||||||
|
if (targetInstance.status.hide) {
|
||||||
|
statusMenuEnums.push(MenuEnum.HIDE)
|
||||||
|
} else {
|
||||||
|
statusMenuEnums.push(MenuEnum.SHOW)
|
||||||
|
}
|
||||||
|
return targetList.filter(item => !statusMenuEnums.includes(item.key as MenuEnum))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 缩小
|
// 缩小
|
||||||
@ -156,10 +192,17 @@ const mouseenterHandle = (item: CreateComponentType) => {
|
|||||||
const mouseleaveHandle = (item: CreateComponentType) => {
|
const mouseleaveHandle = (item: CreateComponentType) => {
|
||||||
chartEditStore.setTargetHoverChart(undefined)
|
chartEditStore.setTargetHoverChart(undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 修改图层展示方式
|
||||||
|
const changeLayerType = (value: LayerModeEnum) => {
|
||||||
|
layerMode.value = value
|
||||||
|
chartLayoutStore.setItem(ChartLayoutStoreEnum.LAYER_TYPE, value)
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
$wight: 170px;
|
$wight: 200px;
|
||||||
@include go(content-layers) {
|
@include go(content-layers) {
|
||||||
width: $wight;
|
width: $wight;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
@ -177,5 +220,8 @@ $wight: 170px;
|
|||||||
.ghost {
|
.ghost {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
.go-layer-mode-active {
|
||||||
|
color: #51d6a9;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -7,7 +7,18 @@ import { MenuOptionsItemType } from './useContextMenu.hook.d'
|
|||||||
import { MenuEnum } from '@/enums/editPageEnum'
|
import { MenuEnum } from '@/enums/editPageEnum'
|
||||||
import cloneDeep from 'lodash/cloneDeep'
|
import cloneDeep from 'lodash/cloneDeep'
|
||||||
|
|
||||||
const { CopyIcon, CutIcon, ClipboardOutlineIcon, TrashIcon, ChevronDownIcon, ChevronUpIcon } = icon.ionicons5
|
const {
|
||||||
|
CopyIcon,
|
||||||
|
CutIcon,
|
||||||
|
ClipboardOutlineIcon,
|
||||||
|
TrashIcon,
|
||||||
|
ChevronDownIcon,
|
||||||
|
ChevronUpIcon,
|
||||||
|
LockOpenOutlineIcon,
|
||||||
|
LockClosedOutlineIcon,
|
||||||
|
EyeOutlineIcon,
|
||||||
|
EyeOffOutlineIcon
|
||||||
|
} = icon.ionicons5
|
||||||
const { UpToTopIcon, DownToBottomIcon, PaintBrushIcon, Carbon3DSoftwareIcon, Carbon3DCursorIcon } = icon.carbon
|
const { UpToTopIcon, DownToBottomIcon, PaintBrushIcon, Carbon3DSoftwareIcon, Carbon3DCursorIcon } = icon.carbon
|
||||||
|
|
||||||
const chartEditStore = useChartEditStore()
|
const chartEditStore = useChartEditStore()
|
||||||
@ -17,7 +28,7 @@ const chartEditStore = useChartEditStore()
|
|||||||
* @param {number} n > 2
|
* @param {number} n > 2
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const divider = (n:number = 3) => {
|
export const divider = (n: number = 3) => {
|
||||||
return {
|
return {
|
||||||
type: 'divider',
|
type: 'divider',
|
||||||
key: `d${n}`
|
key: `d${n}`
|
||||||
@ -26,6 +37,34 @@ export const divider = (n:number = 3) => {
|
|||||||
|
|
||||||
// * 默认单组件选项
|
// * 默认单组件选项
|
||||||
export const defaultOptions: MenuOptionsItemType[] = [
|
export const defaultOptions: MenuOptionsItemType[] = [
|
||||||
|
{
|
||||||
|
label: '锁定',
|
||||||
|
key: MenuEnum.LOCK,
|
||||||
|
icon: renderIcon(LockClosedOutlineIcon),
|
||||||
|
fnHandle: chartEditStore.setLock
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '解锁',
|
||||||
|
key: MenuEnum.UNLOCK,
|
||||||
|
icon: renderIcon(LockOpenOutlineIcon),
|
||||||
|
fnHandle: chartEditStore.setUnLock
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '隐藏',
|
||||||
|
key: MenuEnum.HIDE,
|
||||||
|
icon: renderIcon(EyeOffOutlineIcon),
|
||||||
|
fnHandle: chartEditStore.setHide
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '显示',
|
||||||
|
key: MenuEnum.SHOW,
|
||||||
|
icon: renderIcon(EyeOutlineIcon),
|
||||||
|
fnHandle: chartEditStore.setShow
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'divider',
|
||||||
|
key: 'd0'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '复制',
|
label: '复制',
|
||||||
key: MenuEnum.COPY,
|
key: MenuEnum.COPY,
|
||||||
@ -61,13 +100,13 @@ export const defaultOptions: MenuOptionsItemType[] = [
|
|||||||
fnHandle: chartEditStore.setBottom
|
fnHandle: chartEditStore.setBottom
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '上移一层',
|
label: '上移',
|
||||||
key: MenuEnum.UP,
|
key: MenuEnum.UP,
|
||||||
icon: renderIcon(ChevronUpIcon),
|
icon: renderIcon(ChevronUpIcon),
|
||||||
fnHandle: chartEditStore.setUp
|
fnHandle: chartEditStore.setUp
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '下移一层',
|
label: '下移',
|
||||||
key: MenuEnum.DOWN,
|
key: MenuEnum.DOWN,
|
||||||
icon: renderIcon(ChevronDownIcon),
|
icon: renderIcon(ChevronDownIcon),
|
||||||
fnHandle: chartEditStore.setDown
|
fnHandle: chartEditStore.setDown
|
||||||
@ -160,7 +199,9 @@ const handleContextMenu = (
|
|||||||
target = target.parentNode
|
target = target.parentNode
|
||||||
}
|
}
|
||||||
|
|
||||||
// 展示列表
|
chartEditStore.setTargetSelectChart(targetInstance && targetInstance.id)
|
||||||
|
|
||||||
|
// 隐藏旧列表
|
||||||
chartEditStore.setRightMenuShow(false)
|
chartEditStore.setRightMenuShow(false)
|
||||||
|
|
||||||
// * 多选默认选项
|
// * 多选默认选项
|
||||||
|
@ -24,6 +24,10 @@ export const winKeyboardValue = {
|
|||||||
[MenuEnum.FORWORD]: winCtrlMerge(winShiftMerge('z')),
|
[MenuEnum.FORWORD]: winCtrlMerge(winShiftMerge('z')),
|
||||||
[MenuEnum.GROUP]: winCtrlMerge('g'),
|
[MenuEnum.GROUP]: winCtrlMerge('g'),
|
||||||
[MenuEnum.UN_GROUP]: winCtrlMerge(winShiftMerge('g')),
|
[MenuEnum.UN_GROUP]: winCtrlMerge(winShiftMerge('g')),
|
||||||
|
[MenuEnum.LOCK]: winCtrlMerge('l'),
|
||||||
|
[MenuEnum.UNLOCK]: winCtrlMerge(winShiftMerge('l')),
|
||||||
|
[MenuEnum.HIDE]: winCtrlMerge('h'),
|
||||||
|
[MenuEnum.SHOW]: winCtrlMerge(winShiftMerge('h')),
|
||||||
}
|
}
|
||||||
|
|
||||||
// 这个 Ctrl 后面还是换成了 ⌘
|
// 这个 Ctrl 后面还是换成了 ⌘
|
||||||
@ -45,6 +49,10 @@ export const macKeyboardValue = {
|
|||||||
[MenuEnum.FORWORD]: macCtrlMerge(macShiftMerge('z')),
|
[MenuEnum.FORWORD]: macCtrlMerge(macShiftMerge('z')),
|
||||||
[MenuEnum.GROUP]: macCtrlMerge('g'),
|
[MenuEnum.GROUP]: macCtrlMerge('g'),
|
||||||
[MenuEnum.UN_GROUP]: macCtrlMerge(macShiftMerge('g')),
|
[MenuEnum.UN_GROUP]: macCtrlMerge(macShiftMerge('g')),
|
||||||
|
[MenuEnum.LOCK]: macCtrlMerge('l'),
|
||||||
|
[MenuEnum.UNLOCK]: macCtrlMerge(macShiftMerge('l')),
|
||||||
|
[MenuEnum.HIDE]: macCtrlMerge('h'),
|
||||||
|
[MenuEnum.SHOW]: macCtrlMerge(macShiftMerge('h')),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win 快捷键列表
|
// Win 快捷键列表
|
||||||
@ -64,6 +72,12 @@ const winKeyList: Array<string> = [
|
|||||||
|
|
||||||
winKeyboardValue.group,
|
winKeyboardValue.group,
|
||||||
winKeyboardValue.unGroup,
|
winKeyboardValue.unGroup,
|
||||||
|
|
||||||
|
winKeyboardValue.lock,
|
||||||
|
winKeyboardValue.unLock,
|
||||||
|
|
||||||
|
winKeyboardValue.hide,
|
||||||
|
winKeyboardValue.show,
|
||||||
]
|
]
|
||||||
|
|
||||||
// Mac 快捷键列表
|
// Mac 快捷键列表
|
||||||
@ -83,6 +97,12 @@ const macKeyList: Array<string> = [
|
|||||||
|
|
||||||
macKeyboardValue.group,
|
macKeyboardValue.group,
|
||||||
macKeyboardValue.unGroup,
|
macKeyboardValue.unGroup,
|
||||||
|
|
||||||
|
macKeyboardValue.lock,
|
||||||
|
macKeyboardValue.unLock,
|
||||||
|
|
||||||
|
macKeyboardValue.hide,
|
||||||
|
macKeyboardValue.show,
|
||||||
]
|
]
|
||||||
|
|
||||||
// 处理键盘记录
|
// 处理键盘记录
|
||||||
@ -156,6 +176,24 @@ export const useAddKeyboard = () => {
|
|||||||
case keyboardValue.unGroup:
|
case keyboardValue.unGroup:
|
||||||
keymaster(e, throttle(() => { chartEditStore.setUnGroup(); return false }, throttleTime))
|
keymaster(e, throttle(() => { chartEditStore.setUnGroup(); return false }, throttleTime))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// 锁定 ct+l
|
||||||
|
case keyboardValue.lock:
|
||||||
|
keymaster(e, throttle(() => { chartEditStore.setLock(); return false }, throttleTime))
|
||||||
|
break;
|
||||||
|
// 解除锁定 ct+sh+l
|
||||||
|
case keyboardValue.unLock:
|
||||||
|
keymaster(e, throttle(() => { chartEditStore.setUnLock(); return false }, throttleTime))
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 锁定 ct+h
|
||||||
|
case keyboardValue.hide:
|
||||||
|
keymaster(e, throttle(() => { chartEditStore.setHide(); return false }, throttleTime))
|
||||||
|
break;
|
||||||
|
// 解除锁定 ct+sh+h
|
||||||
|
case keyboardValue.show:
|
||||||
|
keymaster(e, throttle(() => { chartEditStore.setShow(); return false }, throttleTime))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
winKeyList.forEach((key: string) => {
|
winKeyList.forEach((key: string) => {
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
:style="{
|
:style="{
|
||||||
...getComponentAttrStyle(item.attr, groupIndex),
|
...getComponentAttrStyle(item.attr, groupIndex),
|
||||||
...getFilterStyle(item.styles),
|
...getFilterStyle(item.styles),
|
||||||
...getTransformStyle(item.styles)
|
...getTransformStyle(item.styles),
|
||||||
|
...getStatusStyle(item.status),
|
||||||
|
...getBlendModeStyle(item.styles) as any
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<component
|
<component
|
||||||
@ -23,8 +25,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { CreateComponentGroupType } from '@/packages/index.d'
|
import { CreateComponentGroupType } from '@/packages/index.d'
|
||||||
import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
|
import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
|
||||||
import { getSizeStyle, getComponentAttrStyle } from '../../utils'
|
import { getSizeStyle, getComponentAttrStyle, getStatusStyle } from '../../utils'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
groupData: {
|
groupData: {
|
||||||
|
@ -7,8 +7,10 @@
|
|||||||
:style="{
|
:style="{
|
||||||
...getComponentAttrStyle(item.attr, index),
|
...getComponentAttrStyle(item.attr, index),
|
||||||
...getFilterStyle(item.styles),
|
...getFilterStyle(item.styles),
|
||||||
...getTransformStyle(item.styles)
|
...getTransformStyle(item.styles),
|
||||||
}"
|
...getStatusStyle(item.status),
|
||||||
|
...getBlendModeStyle(item.styles) as any
|
||||||
|
} as any"
|
||||||
>
|
>
|
||||||
<!-- 分组 -->
|
<!-- 分组 -->
|
||||||
<preview-render-group
|
<preview-render-group
|
||||||
@ -37,8 +39,8 @@ import { ChartEditStorageType } from '../../index.d'
|
|||||||
import { PreviewRenderGroup } from '../PreviewRenderGroup/index'
|
import { PreviewRenderGroup } from '../PreviewRenderGroup/index'
|
||||||
import { CreateComponentGroupType } from '@/packages/index.d'
|
import { CreateComponentGroupType } from '@/packages/index.d'
|
||||||
import { chartColors } from '@/settings/chartThemes/index'
|
import { chartColors } from '@/settings/chartThemes/index'
|
||||||
import { animationsClass, getFilterStyle, getTransformStyle } from '@/utils'
|
import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils'
|
||||||
import { getSizeStyle, getComponentAttrStyle } from '../../utils'
|
import { getSizeStyle, getComponentAttrStyle, getStatusStyle } from '../../utils'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
localStorageInfo: {
|
localStorageInfo: {
|
||||||
|
@ -2,7 +2,7 @@ import { PickCreateComponentType } from '@/packages/index.d'
|
|||||||
import { EditCanvasConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
|
import { EditCanvasConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
|
||||||
|
|
||||||
type AttrType = PickCreateComponentType<'attr'>
|
type AttrType = PickCreateComponentType<'attr'>
|
||||||
type StylesType = PickCreateComponentType<'styles'>
|
type StatusType = PickCreateComponentType<'status'>
|
||||||
|
|
||||||
// 设置位置
|
// 设置位置
|
||||||
export const getComponentAttrStyle = (attr: AttrType, index: number) => {
|
export const getComponentAttrStyle = (attr: AttrType, index: number) => {
|
||||||
@ -16,10 +16,17 @@ export const getComponentAttrStyle = (attr: AttrType, index: number) => {
|
|||||||
|
|
||||||
// 设置大小
|
// 设置大小
|
||||||
export const getSizeStyle = (attr: AttrType, scale?: number) => {
|
export const getSizeStyle = (attr: AttrType, scale?: number) => {
|
||||||
return ({
|
return {
|
||||||
width: `${scale ? scale * attr.w : attr.w}px`,
|
width: `${scale ? scale * attr.w : attr.w}px`,
|
||||||
height: `${scale ? scale * attr.h : attr.h}px`
|
height: `${scale ? scale * attr.h : attr.h}px`
|
||||||
})
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置状态样式
|
||||||
|
export const getStatusStyle = (attr: StatusType) => {
|
||||||
|
return {
|
||||||
|
display: attr.hide ? 'none' : 'block'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 全局样式
|
// 全局样式
|
||||||
|
Loading…
x
Reference in New Issue
Block a user