diff --git a/package.json b/package.json index d15c5830..055edbbd 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "lint": "eslint \"{src}/**/*.{vue,ts,tsx}\" --fix --ext" }, "dependencies": { + "@vicons/carbon": "^0.11.0", "axios": "^0.23.0", "crypto-ts": "^1.0.2", "mockjs": "^1.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a016fcb..fd4d102a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,7 @@ specifiers: '@types/node': ^16.11.1 '@typescript-eslint/eslint-plugin': ^5.6.0 '@typescript-eslint/parser': ^5.6.0 + '@vicons/carbon': ^0.11.0 '@vicons/ionicons5': ~0.11.0 '@vitejs/plugin-vue': ^1.9.3 '@vitejs/plugin-vue-jsx': ^1.2.0 @@ -36,6 +37,7 @@ specifiers: vue-tsc: ^0.28.7 dependencies: + '@vicons/carbon': r2.cnpmjs.org/@vicons/carbon/0.11.0 axios: rg.cnpmjs.org/axios/0.23.0 crypto-ts: r2.cnpmjs.org/crypto-ts/1.0.2 mockjs: rg.cnpmjs.org/mockjs/1.1.0 @@ -134,6 +136,12 @@ packages: version: 14.14.45 dev: false + r2.cnpmjs.org/@vicons/carbon/0.11.0: + resolution: {integrity: sha512-+Wkl8wOP1GR7jS+OKcsJ58NnZr4i+BZhbpLRtgpZQui1zFpYjoWinwvYKLjGKJ/oiR10Q237cBDjGwmMSzXqTg==, registry: http://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/@vicons/carbon/-/carbon-0.11.0.tgz} + name: '@vicons/carbon' + version: 0.11.0 + dev: false + r2.cnpmjs.org/ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: http://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz} name: ansi-regex diff --git a/src/plugins/icon.ts b/src/plugins/icon.ts index 12c21cd2..c7e5d6e9 100644 --- a/src/plugins/icon.ts +++ b/src/plugins/icon.ts @@ -37,10 +37,16 @@ import { ChevronBackOutline as ChevronBackOutlineIcon, Flash as FlashIcon, SettingsSharp as SettingsSharpIcon, - Home as HomeIcon + Home as HomeIcon, + Card as CardIcon } from '@vicons/ionicons5' -// ionicons5 在这里 +import { + TableSplit as TableSplitIcon, + Roadmap as RoadmapIcon, + SpellCheck as SpellCheckIcon +} from '@vicons/carbon' + const ionicons5 = { // 帮助 HelpOutlineIcon, @@ -53,7 +59,7 @@ const ionicons5 = { // 退出 LogOutOutlineIcon, // 锁 - LockClosedOutlineIcon, + LockClosedOutlineIcon, // 人 PersonIcon, // 人2 @@ -119,11 +125,23 @@ const ionicons5 = { // 设置(齿轮) SettingsSharpIcon, // 回退 - HomeIcon + HomeIcon, + // 控件(卡片) + CardIcon +} + +const carbon = { + // 信息 + SpellCheckIcon, + // 图表 + RoadmapIcon, + // 表格 + TableSplitIcon } // https://www.xicons.org/#/ 还有很多 export const icon = { - ionicons5 + ionicons5, + carbon } diff --git a/src/styles/common/mixins/mixins.scss b/src/styles/common/mixins/mixins.scss index 887beeb5..abc145e5 100644 --- a/src/styles/common/mixins/mixins.scss +++ b/src/styles/common/mixins/mixins.scss @@ -52,14 +52,12 @@ } } -//获取边框颜色 +//设置边框颜色 @mixin filter-border-color($target) { @include themeify { border-color: themed($target); } } - -//获取边框颜色 @mixin hover-border-color($target) { @include themeify { border: 1px solid themed($target); diff --git a/src/styles/common/var.scss b/src/styles/common/var.scss index 5bc7f8cf..95dfe8a0 100644 --- a/src/styles/common/var.scss +++ b/src/styles/common/var.scss @@ -17,7 +17,7 @@ $--color-light-bg-2: #f2f3f5; $--color-light-bg-3: #e5e6eb; $--color-light-bg-4: #c9cdd4; $--color-light-bg-5: #bebebe; -$--color-dark-border: #efeff5; +$--color-light-border: #efeff5; // 黑色 $--color-dark-black: #000; @@ -42,6 +42,5 @@ $--filter-color-login-light: rgba(240, 240, 240, 0.8); // 边框 $--border-radius-base: 8px; -$--border-bottom-style: 1px solid $--color-dark-border; // 阴影 $--border-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); diff --git a/src/views/chart/components/ContentBox/index.vue b/src/views/chart/components/ContentBox/index.vue index 4dab72ca..849a3f6b 100644 --- a/src/views/chart/components/ContentBox/index.vue +++ b/src/views/chart/components/ContentBox/index.vue @@ -119,6 +119,10 @@ $topHeight: 36px; margin-top: 2px; } } + .top { + border-bottom: 1px solid; + @include filter-border-color('background-color1'); + } .content { height: calc(100vh - #{$--header-height} - #{$topHeight}); overflow: hidden; diff --git a/src/views/chart/components/ContentCharts/components/ChartCommon/index.ts b/src/views/chart/components/ContentCharts/components/ChartCommon/index.ts new file mode 100644 index 00000000..31fa457e --- /dev/null +++ b/src/views/chart/components/ContentCharts/components/ChartCommon/index.ts @@ -0,0 +1,3 @@ +import ChartCommon from './index.vue' + +export { ChartCommon } \ No newline at end of file diff --git a/src/views/chart/components/ContentCharts/components/ChartCommon/index.vue b/src/views/chart/components/ContentCharts/components/ChartCommon/index.vue new file mode 100644 index 00000000..36ee7eba --- /dev/null +++ b/src/views/chart/components/ContentCharts/components/ChartCommon/index.vue @@ -0,0 +1,9 @@ +<template> + <div> + 我是图表咯 + </div> +</template> + +<script setup lang="Ts"></script> + +<style lang="scss" scoped></style> diff --git a/src/views/chart/components/ContentCharts/components/TableCommon/index.ts b/src/views/chart/components/ContentCharts/components/TableCommon/index.ts new file mode 100644 index 00000000..a717f771 --- /dev/null +++ b/src/views/chart/components/ContentCharts/components/TableCommon/index.ts @@ -0,0 +1,3 @@ +import TableCommon from './index.vue' + +export { TableCommon } diff --git a/src/views/chart/components/ContentCharts/components/TableCommon/index.vue b/src/views/chart/components/ContentCharts/components/TableCommon/index.vue new file mode 100644 index 00000000..caa4a8c3 --- /dev/null +++ b/src/views/chart/components/ContentCharts/components/TableCommon/index.vue @@ -0,0 +1,9 @@ +<template> + <div> + 我是表格咯 + </div> +</template> + +<script setup lang="Ts"></script> + +<style lang="scss" scoped></style> diff --git a/src/views/chart/components/ContentCharts/components/TextCommon/index.ts b/src/views/chart/components/ContentCharts/components/TextCommon/index.ts new file mode 100644 index 00000000..1e94511e --- /dev/null +++ b/src/views/chart/components/ContentCharts/components/TextCommon/index.ts @@ -0,0 +1,3 @@ +import TextCommon from './index.vue' + +export { TextCommon } diff --git a/src/views/chart/components/ContentCharts/components/TextCommon/index.vue b/src/views/chart/components/ContentCharts/components/TextCommon/index.vue new file mode 100644 index 00000000..23687bd9 --- /dev/null +++ b/src/views/chart/components/ContentCharts/components/TextCommon/index.vue @@ -0,0 +1,9 @@ +<template> + <div> + 我是信息咯 + </div> +</template> + +<script setup lang="Ts"></script> + +<style lang="scss" scoped></style> diff --git a/src/views/chart/components/ContentCharts/index.vue b/src/views/chart/components/ContentCharts/index.vue index 402b53bb..993cc044 100644 --- a/src/views/chart/components/ContentCharts/index.vue +++ b/src/views/chart/components/ContentCharts/index.vue @@ -2,35 +2,126 @@ <ContentBox class="go-content-charts" :class="{ scoped: !getCharts }" - title="图表" - :depth="2" + title="全部组件" + :depth="1" :backIcon="false" > <template #icon> <n-icon size="14" :depth="2"> - <BarChartIcon /> + <!-- <BarChartIcon /> --> </n-icon> </template> + <!-- 图表 --> + <aside> + <div class="menu-width-box"> + <n-menu + class="menu-width" + v-model:value="selectValue" + :options="menuOptions" + :icon-size="16" + :indent="18" + @update:value="clickItemHandle" + /> + <div class="menu-component-box"> + <keep-alive> + <component :is="selectNode"></component> + </keep-alive> + </div> + </div> + </aside> </ContentBox> </template> <script setup lang="ts"> -import { toRefs } from 'vue' +import { reactive, ref, toRefs, computed } from 'vue' import { icon } from '@/plugins' -const { BarChartIcon } = icon.ionicons5 +import { renderLang, renderIcon } from '@/utils' import { ContentBox } from '../ContentBox/index' import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore' + +import { ChartCommon } from './components/ChartCommon' +import { TableCommon } from './components/TableCommon' +import { TextCommon } from './components/TextCommon' + +const { BarChartIcon } = icon.ionicons5 +const { TableSplitIcon, RoadmapIcon, SpellCheckIcon } = icon.carbon + +const { setItem } = useChartLayoutStore() const { getCharts } = toRefs(useChartLayoutStore()) + +const collapsed = ref(false) + +const menuOptions = reactive([ + { + key: 'ChartCommon', + icon: renderIcon(RoadmapIcon), + label: renderLang('图表'), + node: ChartCommon + }, + { + key: 'TextCommon', + icon: renderIcon(SpellCheckIcon), + label: renderLang('信息'), + node: TableCommon + }, + { + key: 'TableCommon', + icon: renderIcon(TableSplitIcon), + label: renderLang('表格'), + node: TextCommon + } +]) + +// 记录选中值 +let beforeSelect: string = menuOptions[0]['key'] +const selectValue = ref<string>(menuOptions[0]['key']) + +const selectNode = ref(menuOptions[0]['node']) + +// 点击 item +const clickItemHandle = <T extends { node: any }>(key: string, item: T) => { + // 处理渲染的 node + selectNode.value = item.node + // 处理折叠 + if (beforeSelect === key) { + setItem('charts', !getCharts.value) + } else { + setItem('charts', true) + } + beforeSelect = key +} </script> <style lang="scss" scoped> -$wight: 300px; -$wightScoped: 80px; +$width: 300px; +$widthScoped: 80px; +/* 此高度与 ContentBox 组件关联*/ +$topHeight: 36px; @include go(content-charts) { - width: $wight; + width: $width; @extend .go-transition; - &.scoped { - width: $wightScoped; + &.scoped, + .menu-width { + width: $widthScoped; + } + .menu-width-box { + display: flex; + height: calc(100vh - #{$--header-height} - #{$topHeight}); + .menu-width { + @include filter-bg-color('background-color2'); + } + .menu-component-box { + width: $width - $widthScoped; + overflow: hidden; + } + } + @include deep() { + .n-menu-item-content { + padding: 0 12px !important; + } + .n-menu-item-content__icon { + margin-right: 0 !important; + } } } </style> diff --git a/src/views/chart/components/ContentLayers/index.vue b/src/views/chart/components/ContentLayers/index.vue index 71b745f2..bce9aff1 100644 --- a/src/views/chart/components/ContentLayers/index.vue +++ b/src/views/chart/components/ContentLayers/index.vue @@ -3,6 +3,7 @@ class="go-content-layers" :class="{ scoped: !chartLayoutStore.getLayers }" title="图层" + :depth="2" @back="backHandle" > <template #icon> diff --git a/src/views/chart/components/HeaderLeftBtn/index.vue b/src/views/chart/components/HeaderLeftBtn/index.vue index 1065a158..3887a99d 100644 --- a/src/views/chart/components/HeaderLeftBtn/index.vue +++ b/src/views/chart/components/HeaderLeftBtn/index.vue @@ -1,12 +1,19 @@ <template> <n-space class="header-left-btn" :size="25"> - <n-button size="small" quaternary #icon @click="goHomeHandle()"> - <n-icon :depth="3"> - <HomeIcon /> - </n-icon> + <n-button size="small" quaternary @click="goHomeHandle()"> + <template #icon> + <n-icon :depth="3"> + <HomeIcon /> + </n-icon> + </template> </n-button> <n-space> - <n-tooltip v-for="item in btnList" :key="item.key" placement="bottom" trigger="hover"> + <n-tooltip + v-for="item in btnList" + :key="item.key" + placement="bottom" + trigger="hover" + > <template #trigger> <n-button :type="item.select ? 'success' : ''" @@ -34,9 +41,9 @@ const { setItem } = useChartLayoutStore() const { getLayers, getCharts, getDetails } = toRefs(useChartLayoutStore()) type ItemType = { - key: string; - select: Ref<boolean> | boolean; - title: string; + key: string + select: Ref<boolean> | boolean + title: string icon: any } @@ -69,11 +76,9 @@ const goHomeHandle = () => { goDialog({ message: '返回将不会保存任何操作', isMaskClosable: true, - onPositiveCallback: goHome, + onPositiveCallback: goHome }) - } - </script> <style lang="scss" scoped> .header-left-btn {