Showing
19 changed files
with
915 additions
and
811 deletions
1 | -import { defHttp } from '@/utils/external/http/axios'; | 1 | +import {defHttp} from '@/utils/external/http/axios'; |
2 | import { | 2 | import { |
3 | ContentParams, | 3 | ContentParams, |
4 | - LoginResultModel, | ||
5 | -} from './model/userModel'; | 4 | + ContentResultModel, |
5 | +} from './model/contentModel'; | ||
6 | 6 | ||
7 | -import type { ErrorMessageMode } from '/#/external/axios'; | 7 | +import type {ErrorMessageMode} from '/#/external/axios'; |
8 | 8 | ||
9 | enum Api { | 9 | enum Api { |
10 | - CONTENT = '/data_view/content', | 10 | + CONTENT = '/data_view/content', |
11 | + GET_CONTENT = '/data_view', | ||
12 | + FILE_UPLOAD = '/oss/upload' | ||
11 | } | 13 | } |
12 | 14 | ||
13 | /** | 15 | /** |
14 | * @description: content save api | 16 | * @description: content save api |
15 | */ | 17 | */ |
16 | -export function contentSaveApi(params: ContentParams, mode: ErrorMessageMode = 'modal') { | ||
17 | - return defHttp.post<LoginResultModel>( | ||
18 | - { | ||
19 | - url: Api.CONTENT, | ||
20 | - params, | ||
21 | - }, | ||
22 | - { | ||
23 | - errorMessageMode: mode, | ||
24 | - } | ||
25 | - ); | 18 | +export function contentUpdateApi(params: object, mode: ErrorMessageMode = 'modal') { |
19 | + return defHttp.put( | ||
20 | + { | ||
21 | + url: Api.CONTENT, | ||
22 | + params, | ||
23 | + }, | ||
24 | + { | ||
25 | + errorMessageMode: mode, | ||
26 | + } | ||
27 | + ); | ||
26 | } | 28 | } |
29 | +export function contentSaveApi(params: object, mode: ErrorMessageMode = 'modal') { | ||
30 | + return defHttp.post( | ||
31 | + { | ||
32 | + url: Api.CONTENT, | ||
33 | + params, | ||
34 | + }, | ||
35 | + { | ||
36 | + errorMessageMode: mode, | ||
37 | + } | ||
38 | + ); | ||
39 | +} | ||
40 | +/** | ||
41 | + * @description:dataView content get api | ||
42 | + */ | ||
43 | + | ||
44 | +export const getDataView = (id: string) => { | ||
45 | + return defHttp.get({ | ||
46 | + url: `${Api.GET_CONTENT}/get_configuration_info/${id}`, | ||
47 | + }); | ||
48 | +}; | ||
49 | + | ||
50 | + | ||
51 | +/** | ||
52 | + * @description: content get api | ||
53 | + */ | ||
54 | + | ||
55 | +export const getDataViewList = (params: object) => { | ||
56 | + return defHttp.get({ | ||
57 | + url: `${Api.GET_CONTENT}`, | ||
58 | + params | ||
59 | + }); | ||
60 | +}; | ||
61 | + | ||
62 | +/** | ||
63 | + * @description: file Upload | ||
64 | + */ | ||
65 | + | ||
66 | + | ||
67 | +// * 上传文件 | ||
68 | +export const uploadFile = async (file: FormData, mode: ErrorMessageMode = 'modal') => { | ||
69 | + return defHttp.post({url: Api.FILE_UPLOAD, params: file}, { | ||
70 | + errorMessageMode: mode, | ||
71 | + }); | ||
72 | +} | ||
73 | + |
1 | /** | 1 | /** |
2 | * @description: Login interface parameters | 2 | * @description: Login interface parameters |
3 | */ | 3 | */ |
4 | -export interface ContentParams{ | ||
5 | - "content": string, | ||
6 | - "createTime": string, | ||
7 | - "creator": string, | ||
8 | - "defaultConfig": string, | ||
9 | - "description": string, | ||
10 | - "enabled": boolean, | ||
11 | - "icon": string, | ||
12 | - "id": string, | ||
13 | - "name": string, | ||
14 | - "nodeIds": [ | ||
15 | - string | ||
16 | - ], | ||
17 | - "remark": string, | ||
18 | - "roleIds": [ | ||
19 | - string | ||
20 | - ], | ||
21 | - "tenantExpireTime": string, | ||
22 | - "tenantId": string, | ||
23 | - "tenantProfileId": string, | ||
24 | - "tenantStatus": string, | ||
25 | - "updateTime":string, | ||
26 | - "updater":string, | ||
27 | - "viewId":string | 4 | +export interface ContentParams { |
5 | + "content": string, | ||
6 | + "createTime"?: string, | ||
7 | + "creator"?: string, | ||
8 | + "defaultConfig"?: string, | ||
9 | + "description"?: string, | ||
10 | + "enabled"?: boolean, | ||
11 | + "icon"?: string, | ||
12 | + "id": string, | ||
13 | + "name"?: string, | ||
14 | + "nodeIds"?: [ | ||
15 | + string | ||
16 | + ], | ||
17 | + "remark"?: string, | ||
18 | + "roleIds"?: [ | ||
19 | + string | ||
20 | + ], | ||
21 | + "tenantExpireTime"?: string, | ||
22 | + "tenantId"?: string, | ||
23 | + "tenantProfileId"?: string, | ||
24 | + "tenantStatus"?: string, | ||
25 | + "updateTime"?: string, | ||
26 | + "updater"?: string, | ||
27 | + "viewId"?: string | ||
28 | } | 28 | } |
29 | + | ||
29 | export interface RoleInfo { | 30 | export interface RoleInfo { |
30 | - roleName: string; | ||
31 | - value: string; | 31 | + roleName: string; |
32 | + value: string; | ||
32 | } | 33 | } |
33 | 34 | ||
34 | /** | 35 | /** |
35 | * @description: Login interface return value | 36 | * @description: Login interface return value |
36 | */ | 37 | */ |
37 | -export interface LoginResultModel {{ | ||
38 | - "content": string, | ||
39 | - "createTime": string, | ||
40 | - "creator": string, | ||
41 | - "defaultConfig": string, | ||
42 | - "description": string, | ||
43 | - "enabled": boolean, | ||
44 | - "icon": string, | ||
45 | - "id": string, | ||
46 | - "name": string, | ||
47 | - "nodeIds": [ | ||
48 | - string | ||
49 | - ], | ||
50 | - "remark": string, | ||
51 | - "roleIds": [ | ||
52 | - string | ||
53 | - ], | ||
54 | - "tenantExpireTime": string, | ||
55 | - "tenantId": string, | ||
56 | - "tenantProfileId": string, | ||
57 | - "tenantStatus": string, | ||
58 | - "updateTime":string, | ||
59 | - "updater":string, | ||
60 | - "viewId":string | 38 | +export interface ContentResultModel { |
39 | + "content": string, | ||
40 | + "createTime": string, | ||
41 | + "creator": string, | ||
42 | + "defaultConfig": string, | ||
43 | + "description": string, | ||
44 | + "enabled": boolean, | ||
45 | + "icon": string, | ||
46 | + "id": string, | ||
47 | + "name": string, | ||
48 | + "nodeIds": [ | ||
49 | + string | ||
50 | + ], | ||
51 | + "remark": string, | ||
52 | + "roleIds": [ | ||
53 | + string | ||
54 | + ], | ||
55 | + "tenantExpireTime": string, | ||
56 | + "tenantId": string, | ||
57 | + "tenantProfileId": string, | ||
58 | + "tenantStatus": string, | ||
59 | + "updateTime": string, | ||
60 | + "updater": string, | ||
61 | + "viewId": string | ||
61 | } | 62 | } |
62 | 63 |
@@ -82,3 +82,16 @@ export enum MacKeyboard { | @@ -82,3 +82,16 @@ export enum MacKeyboard { | ||
82 | ALT_SOURCE_KEY = '⌥', | 82 | ALT_SOURCE_KEY = '⌥', |
83 | SPACE = 'Space' | 83 | SPACE = 'Space' |
84 | } | 84 | } |
85 | + | ||
86 | + | ||
87 | +// 同步状态枚举 | ||
88 | +export enum SyncEnum { | ||
89 | + // 等待 | ||
90 | + PENDING, | ||
91 | + // 开始 | ||
92 | + START, | ||
93 | + // 成功 | ||
94 | + SUCCESS, | ||
95 | + // 失败 | ||
96 | + FAILURE | ||
97 | +} |
1 | -import { PublicConfigClass } from '@/packages/public' | ||
2 | -import { CreateComponentType } from '@/packages/index.d' | ||
3 | -import { LeftCenterRightHeadConfig } from './index' | 1 | +import {PublicConfigClass} from '@/packages/public' |
2 | +import {CreateComponentType} from '@/packages/index.d' | ||
3 | +import {LeftCenterRightHeadCommonConfig} from './index' | ||
4 | import cloneDeep from 'lodash/cloneDeep' | 4 | import cloneDeep from 'lodash/cloneDeep' |
5 | 5 | ||
6 | export const option = { | 6 | export const option = { |
7 | - dataset: '物联网平台数据统计', | ||
8 | - bgSrc: 'src/assets/images/chart/headbackground/bg_top.png', | ||
9 | - fontSize: 36, | ||
10 | - showRight:true, | ||
11 | - textColor:'#00f6ff', | ||
12 | - textRightSizeColor:'#ffffff', | ||
13 | - textRightFontSize:14, | ||
14 | - x:0, | ||
15 | - y:0, | ||
16 | - xT:0, | ||
17 | - yT:0, | 7 | + colorLefts: ['#1dc1f5', '#1dc1f5'], |
8 | + colorRights: ['#1dc1f5', '#1dc1f5'], | ||
9 | + // 是否翻转,组合头部,默认开启 | ||
10 | + reverse: true, | ||
11 | + defaultReverse: false, | ||
18 | } | 12 | } |
19 | 13 | ||
20 | export default class Config extends PublicConfigClass implements CreateComponentType { | 14 | export default class Config extends PublicConfigClass implements CreateComponentType { |
21 | - public key = LeftCenterRightHeadConfig.key | ||
22 | - public chartConfig = cloneDeep(LeftCenterRightHeadConfig) | ||
23 | - public option = cloneDeep(option) | 15 | + public key = LeftCenterRightHeadCommonConfig.key |
16 | + public chartConfig = cloneDeep(LeftCenterRightHeadCommonConfig) | ||
17 | + public option = cloneDeep(option) | ||
24 | } | 18 | } |
1 | <template> | 1 | <template> |
2 | - <collapse-item name="信息" :expanded="true"> | ||
3 | - <setting-item-box name="背景选择" :alone="true"> | ||
4 | - <setting-item> | ||
5 | - <n-select | 2 | + <CollapseItem name="头部左侧样式" :expanded="true"> |
3 | + <SettingItemBox | ||
4 | + :name="`颜色-${index + 1}`" | ||
5 | + v-for="(item, index) in optionData.colorLefts" | ||
6 | + :key="index" | ||
7 | + > | ||
8 | + <SettingItem name="颜色"> | ||
9 | + <n-color-picker | ||
6 | size="small" | 10 | size="small" |
7 | - placeholder="请选择您要使用的背景" | ||
8 | - style="width: 250px" | ||
9 | - v-model:value="selectValue" | ||
10 | - :options="selectBgOptions" | ||
11 | - @update:value="selectBgValueHandle" | ||
12 | - /> | ||
13 | - </setting-item> | ||
14 | - </setting-item-box> | ||
15 | - <setting-item-box name="文字" :alone="true"> | ||
16 | - <setting-item> | ||
17 | - <n-input v-model:value="optionData.dataset" size="small"></n-input> | ||
18 | - </setting-item> | ||
19 | - </setting-item-box> | ||
20 | - </collapse-item> | ||
21 | - <collapse-item name="样式" :expanded="true"> | ||
22 | - <setting-item-box name="文字"> | ||
23 | - <setting-item name="字体大小"> | ||
24 | - <n-input-number v-model:value="optionData.fontSize" size="small" placeholder="字体大小"></n-input-number> | ||
25 | - </setting-item> | ||
26 | - </setting-item-box> | ||
27 | - <setting-item-box name="文字颜色"> | ||
28 | - <setting-item name="颜色"> | ||
29 | - <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.textColor"></n-color-picker> | ||
30 | - </setting-item> | ||
31 | - </setting-item-box> | ||
32 | - <setting-item-box name="位置x轴"> | ||
33 | - <setting-item name="字体位置x轴"> | ||
34 | - <n-input-number v-model:value="optionData.x" size="small" placeholder="字体位置"></n-input-number> | ||
35 | - </setting-item> | ||
36 | - </setting-item-box> | ||
37 | - <setting-item-box name="位置y轴"> | ||
38 | - <setting-item name="字体位置y轴"> | ||
39 | - <n-input-number v-model:value="optionData.y" size="small" placeholder="字体位置"></n-input-number> | ||
40 | - </setting-item> | ||
41 | - </setting-item-box> | ||
42 | - </collapse-item> | ||
43 | - <collapse-item name="右侧" :expanded="true"> | ||
44 | - <setting-item-box name="是否显示"> | ||
45 | - <setting-item name=""> | ||
46 | - <n-switch @change="handleChange" v-model:value="optionData.showRight"/> | ||
47 | - </setting-item> | ||
48 | - </setting-item-box> | ||
49 | - <setting-item-box name="文字"> | ||
50 | - <setting-item name="字体大小"> | ||
51 | - <n-input-number v-model:value="optionData.textRightFontSize" size="small" | ||
52 | - placeholder="字体大小"></n-input-number> | ||
53 | - </setting-item> | ||
54 | - <setting-item name="字体位置x轴"> | ||
55 | - <n-input-number v-model:value="optionData.xT" size="small" placeholder="字体位置"></n-input-number> | ||
56 | - </setting-item> | ||
57 | - <setting-item name="字体位置y轴"> | ||
58 | - <n-input-number v-model:value="optionData.yT" size="small" placeholder="字体位置"></n-input-number> | ||
59 | - </setting-item> | ||
60 | - </setting-item-box> | ||
61 | - <setting-item-box name="时间颜色"> | ||
62 | - <setting-item name="颜色"> | ||
63 | - <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.textRightSizeColor"></n-color-picker> | ||
64 | - </setting-item> | ||
65 | - </setting-item-box> | ||
66 | - </collapse-item> | 11 | + :modes="['hex']" |
12 | + v-model:value="optionData.colorLefts[index]" | ||
13 | + ></n-color-picker> | ||
14 | + </SettingItem> | ||
15 | + <SettingItem> | ||
16 | + <n-button | ||
17 | + size="small" | ||
18 | + @click="optionData.colorLefts[index] = option.colorLefts[index]" | ||
19 | + > | ||
20 | + 恢复默认 | ||
21 | + </n-button> | ||
22 | + </SettingItem> | ||
23 | + </SettingItemBox> | ||
24 | + </CollapseItem> | ||
25 | + <CollapseItem name="头部右侧样式" :expanded="true"> | ||
26 | + <SettingItemBox | ||
27 | + :name="`颜色-${index + 1}`" | ||
28 | + v-for="(item, index) in optionData.colorRights" | ||
29 | + :key="index" | ||
30 | + > | ||
31 | + <SettingItem name="颜色"> | ||
32 | + <n-color-picker | ||
33 | + size="small" | ||
34 | + :modes="['hex']" | ||
35 | + v-model:value="optionData.colorRights[index]" | ||
36 | + ></n-color-picker> | ||
37 | + </SettingItem> | ||
38 | + <SettingItem> | ||
39 | + <n-button | ||
40 | + size="small" | ||
41 | + @click="optionData.colorRights[index] = option.colorRights[index]" | ||
42 | + > | ||
43 | + 恢复默认 | ||
44 | + </n-button> | ||
45 | + </SettingItem> | ||
46 | + </SettingItemBox> | ||
47 | + </CollapseItem> | ||
67 | </template> | 48 | </template> |
68 | 49 | ||
69 | <script setup lang="ts"> | 50 | <script setup lang="ts"> |
70 | -import {PropType, ref} from 'vue' | 51 | +import {PropType} from 'vue' |
71 | import {option} from './config' | 52 | import {option} from './config' |
72 | import { | 53 | import { |
73 | CollapseItem, | 54 | CollapseItem, |
74 | SettingItemBox, | 55 | SettingItemBox, |
75 | SettingItem | 56 | SettingItem |
76 | } from '@/components/Pages/ChartItemSetting' | 57 | } from '@/components/Pages/ChartItemSetting' |
77 | -import {SelectOption} from "naive-ui"; | ||
78 | 58 | ||
79 | const props = defineProps({ | 59 | const props = defineProps({ |
80 | optionData: { | 60 | optionData: { |
@@ -83,28 +63,5 @@ const props = defineProps({ | @@ -83,28 +63,5 @@ const props = defineProps({ | ||
83 | } | 63 | } |
84 | }) | 64 | }) |
85 | 65 | ||
86 | -const selectBgOptions = ref<Array<SelectOption>>([]) | ||
87 | - | ||
88 | -const selectValue = ref('') | ||
89 | - | ||
90 | -//TODO待封装 成传文件夹名字获取下面所有图片 | ||
91 | -const getFetchImages = () => { | ||
92 | - const imagesModules = import.meta.globEager('@/assets/images/chart/headbackground/*') | ||
93 | - for (const key in imagesModules) { | ||
94 | - selectBgOptions.value.push({ | ||
95 | - label: imagesModules[key]?.default.slice(25), | ||
96 | - value: imagesModules[key]?.default | ||
97 | - }) | ||
98 | - } | ||
99 | -} | ||
100 | -getFetchImages() | ||
101 | - | ||
102 | -const selectBgValueHandle = (value: string) => { | ||
103 | - selectValue.value = value | ||
104 | - props.optionData.bgSrc = value | ||
105 | -} | ||
106 | 66 | ||
107 | -const handleChange = (value: boolean) => { | ||
108 | - props.optionData.showRight = value | ||
109 | -} | ||
110 | </script> | 67 | </script> |
1 | import {ConfigType, PackagesCategoryEnum, ChartFrameEnum} from '@/packages/index.d' | 1 | import {ConfigType, PackagesCategoryEnum, ChartFrameEnum} from '@/packages/index.d' |
2 | import {ChatCategoryEnum, ChatCategoryEnumName} from '../../index.d' | 2 | import {ChatCategoryEnum, ChatCategoryEnumName} from '../../index.d' |
3 | 3 | ||
4 | -export const LeftCenterRightHeadConfig: ConfigType = { | ||
5 | - key: 'LeftCenterRightHead', | ||
6 | - chartKey: 'VLeftCenterRightHead', | ||
7 | - conKey: 'VCLeftCenterRightHead', | ||
8 | - title: '通用头部', | 4 | +export const LeftCenterRightHeadCommonConfig: ConfigType = { |
5 | + key: 'LeftCenterRightHeadCommon', | ||
6 | + chartKey: 'VLeftCenterRightHeadCommon', | ||
7 | + conKey: 'VCLeftCenterRightHeadCommon', | ||
8 | + title: '头部', | ||
9 | category: ChatCategoryEnum.HEADCOMBINATION, | 9 | category: ChatCategoryEnum.HEADCOMBINATION, |
10 | categoryName: ChatCategoryEnumName.HEADCOMBINATION, | 10 | categoryName: ChatCategoryEnumName.HEADCOMBINATION, |
11 | package: PackagesCategoryEnum.COMPOSES, | 11 | package: PackagesCategoryEnum.COMPOSES, |
1 | <template> | 1 | <template> |
2 | - <div class="go-text-box"> | ||
3 | - <n-grid :style="{'background-image': 'url('+option.configOption.bgSrc+')'}" class="go-n-grid" :x-gap="12" :y-gap="3" | 2 | + <div> |
3 | + <n-grid :x-gap="12" | ||
4 | :cols="3" layout-shift-disabled> | 4 | :cols="3" layout-shift-disabled> |
5 | <n-grid-item> | 5 | <n-grid-item> |
6 | - <!-- 占位--> | ||
7 | - <div></div> | 6 | + <svg :width="w" :height="h"> |
7 | + <polyline | ||
8 | + :stroke="colorLefts[0]" | ||
9 | + stroke-width="2" | ||
10 | + fill="transparent" | ||
11 | + :points="`${xFalsePos(0)}, 0 ${xFalsePos(30)}, ${h / 2}`" | ||
12 | + /> | ||
13 | + | ||
14 | + <polyline | ||
15 | + :stroke="colorLefts[0]" | ||
16 | + stroke-width="2" | ||
17 | + fill="transparent" | ||
18 | + :points="`${xFalsePos(20)}, 0 ${xFalsePos(50)}, ${h / 2} ${xFalsePos(w)}, ${ | ||
19 | + h / 2 | ||
20 | + }`" | ||
21 | + /> | ||
22 | + | ||
23 | + <polyline | ||
24 | + :stroke="colorLefts[1]" | ||
25 | + fill="transparent" | ||
26 | + stroke-width="3" | ||
27 | + :points="`${xFalsePos(0)}, ${h - 3}, ${xFalsePos(200)}, ${h - 3}`" | ||
28 | + /> | ||
29 | + </svg> | ||
8 | </n-grid-item> | 30 | </n-grid-item> |
9 | <n-grid-item> | 31 | <n-grid-item> |
10 | - <span | ||
11 | - style="position:relative" | ||
12 | - :style="{ top:option.configOption.y+'px',marginLeft:option.configOption.x+'px',color: option.configOption.textColor, fontSize: option.configOption.fontSize + 'px' }">{{ | ||
13 | - option.configOption.dataset | ||
14 | - }}</span> | 32 | +<!-- <div style="width:300px;height: 30px"></div>--> |
15 | </n-grid-item> | 33 | </n-grid-item> |
16 | <n-grid-item> | 34 | <n-grid-item> |
17 | - <span style="position:relative" v-if="option.configOption.showRight" | ||
18 | - :style="{ top:option.configOption.yT+'px',marginLeft:option.configOption.xT+'px',color: option.configOption.textRightSizeColor, fontSize: option.configOption.textRightFontSize + 'px' }">{{ | ||
19 | - newData | ||
20 | - }}</span> | 35 | +<!-- <svg :width="w" :height="h">--> |
36 | +<!-- <polyline--> | ||
37 | +<!-- :stroke="colorRights[0]"--> | ||
38 | +<!-- stroke-width="2"--> | ||
39 | +<!-- fill="transparent"--> | ||
40 | +<!-- :points="`${xPos(0)}, 0 ${xPos(30)}, ${h / 2}`"--> | ||
41 | +<!-- />--> | ||
42 | + | ||
43 | +<!-- <polyline--> | ||
44 | +<!-- :stroke="colorRights[0]"--> | ||
45 | +<!-- stroke-width="2"--> | ||
46 | +<!-- fill="transparent"--> | ||
47 | +<!-- :points="`${xPos(20)}, 0 ${xPos(50)}, ${h / 2} ${xPos(w)}, ${--> | ||
48 | +<!-- h / 2--> | ||
49 | +<!-- }`"--> | ||
50 | +<!-- />--> | ||
51 | + | ||
52 | +<!-- <polyline--> | ||
53 | +<!-- :stroke="colorRights[1]"--> | ||
54 | +<!-- fill="transparent"--> | ||
55 | +<!-- stroke-width="3"--> | ||
56 | +<!-- :points="`${xPos(0)}, ${h - 3}, ${xPos(200)}, ${h - 3}`"--> | ||
57 | +<!-- />--> | ||
58 | +<!-- </svg>--> | ||
21 | </n-grid-item> | 59 | </n-grid-item> |
22 | </n-grid> | 60 | </n-grid> |
23 | </div> | 61 | </div> |
24 | </template> | 62 | </template> |
25 | <script setup lang="ts"> | 63 | <script setup lang="ts"> |
26 | -import {PropType, toRefs, shallowReactive, watch, onMounted, onUnmounted, ref} from 'vue' | 64 | +import {PropType, toRefs} from 'vue' |
27 | import {CreateComponentType} from '@/packages/index.d' | 65 | import {CreateComponentType} from '@/packages/index.d' |
28 | -import {useChartDataFetch} from '@/hooks' | ||
29 | -import {useChartEditStore} from '@/store/modules/chartEditStore/chartEditStore' | ||
30 | -import {option as configOption} from './config' | ||
31 | 66 | ||
32 | const props = defineProps({ | 67 | const props = defineProps({ |
33 | chartConfig: { | 68 | chartConfig: { |
@@ -36,105 +71,23 @@ const props = defineProps({ | @@ -36,105 +71,23 @@ const props = defineProps({ | ||
36 | } | 71 | } |
37 | }) | 72 | }) |
38 | 73 | ||
39 | -const option = shallowReactive({ | ||
40 | - configOption | ||
41 | -}) | ||
42 | - | ||
43 | -let yearMonthDay = ref('2021-2-3') | ||
44 | - | ||
45 | -let nowData = ref('08:00:00') | ||
46 | - | ||
47 | -let newData = ref('2021-2-3 08:00:00') | ||
48 | - | ||
49 | -let timer: any = null | ||
50 | - | ||
51 | //默认设置宽高距离位置 | 74 | //默认设置宽高距离位置 |
52 | -props.chartConfig.attr.w = 1920 | ||
53 | -props.chartConfig.attr.h = 148 | ||
54 | -props.chartConfig.attr.x = 0 | ||
55 | -props.chartConfig.attr.y = 0 | ||
56 | - | ||
57 | -watch( | ||
58 | - () => props.chartConfig.option, | ||
59 | - (newData: any) => { | ||
60 | - option.configOption = newData | ||
61 | - }, | ||
62 | - { | ||
63 | - immediate: true, | ||
64 | - deep: false | ||
65 | - } | ||
66 | -) | ||
67 | - | ||
68 | -useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => { | ||
69 | - option.configOption = newData | ||
70 | -}) | ||
71 | - | ||
72 | - | ||
73 | -//TODO待封装 这里和原作者时间通用获取当前时间代码一样 | ||
74 | -onMounted(() => { | ||
75 | -//格式化当前时间 | ||
76 | - timer = setInterval(() => { | ||
77 | - const | ||
78 | - weeks = { | ||
79 | - "0": '星期日', | ||
80 | - "1": '星期一', | ||
81 | - "2": '星期二', | ||
82 | - "3": '星期三', | ||
83 | - "4": '星期四', | ||
84 | - "5": '星期五', | ||
85 | - "6": '星期六', | ||
86 | - } | ||
87 | - const datetime = new Date() | ||
88 | - const year = datetime.getFullYear() | ||
89 | - const month = datetime.getMonth() + 1 < 10 ? '0' + (datetime.getMonth() + 1) : datetime.getMonth() + 1 | ||
90 | - const date = datetime.getDate() < 10 ? '0' + datetime.getDate() : datetime.getDate() | ||
91 | - const hh = datetime.getHours() // 时 | ||
92 | - const mm = datetime.getMinutes() // 分 | ||
93 | - const ss = datetime.getSeconds() // 分 | ||
94 | - let weekIndex = datetime.getDay(); | ||
95 | - let time = '' | ||
96 | - if (hh < 10) time += '0' | ||
97 | - time += hh + ':' | ||
98 | - if (mm < 10) time += '0' | ||
99 | - time += mm + ':' | ||
100 | - if (ss < 10) time += '0' | ||
101 | - time += ss | ||
102 | - yearMonthDay.value = `${year}-${month}-${date}` | ||
103 | - nowData.value = time | ||
104 | - newData.value = yearMonthDay.value + ' ' + nowData.value + ' ' + weeks[weekIndex] | ||
105 | - }, 500) | ||
106 | -}) | ||
107 | -onUnmounted(() => { | ||
108 | - clearInterval(timer) | ||
109 | -}) | ||
110 | - | ||
111 | -</script> | ||
112 | - | ||
113 | -<style lang="scss" scoped> | ||
114 | -@include go('text-box') { | ||
115 | - display: flex; | ||
116 | - align-items: center; | ||
117 | - justify-content: center; | ||
118 | - .n-gradient-text { | ||
119 | - white-space: initial; | ||
120 | - } | 75 | +// props.chartConfig.attr.w = 1920 |
76 | +// props.chartConfig.attr.h = 148 | ||
77 | +// props.chartConfig.attr.x = 0 | ||
78 | +// props.chartConfig.attr.y = 0 | ||
79 | +const {w, h} = toRefs(props.chartConfig.attr) | ||
80 | +const {colorLefts,colorRights,reverse,defaultReverse} = toRefs(props.chartConfig.option) | ||
81 | + | ||
82 | +const xPos = (pos: number) => { | ||
83 | + if (!reverse.value) return pos | ||
84 | + return w.value - pos | ||
121 | } | 85 | } |
122 | - | ||
123 | -.light-green { | ||
124 | - height: 108px; | ||
125 | - background-color: rgba(0, 128, 0, 0.12); | ||
126 | -} | ||
127 | - | ||
128 | -.green { | ||
129 | - height: 108px; | ||
130 | - background-color: rgba(0, 128, 0, 0.24); | 86 | +const xFalsePos = (pos: number) => { |
87 | + if (!defaultReverse.value) return pos | ||
88 | + return w.value - pos | ||
131 | } | 89 | } |
90 | +</script> | ||
132 | 91 | ||
133 | -.go-n-grid { | ||
134 | - background: url(@/assets/images/chart/headbackground/bg_top.png) center no-repeat; | ||
135 | - background-size: 100% 100%; | ||
136 | - text-align: center; | ||
137 | - font-size: 36px; | ||
138 | - line-height: 90px; | ||
139 | -} | 92 | +<style lang="scss" scoped> |
140 | </style> | 93 | </style> |
1 | import { LeftCenterRightHeadConfig } from './LeftCenterRightHead/index' | 1 | import { LeftCenterRightHeadConfig } from './LeftCenterRightHead/index' |
2 | +import { LeftCenterRightHeadCommonConfig } from './LeftCenterRightHeadCommon/index' | ||
2 | 3 | ||
3 | -export default [LeftCenterRightHeadConfig] | 4 | +export default [LeftCenterRightHeadConfig,LeftCenterRightHeadCommonConfig] |
@@ -2,7 +2,6 @@ import { ChartList } from '@/packages/components/Charts/index' | @@ -2,7 +2,6 @@ import { ChartList } from '@/packages/components/Charts/index' | ||
2 | import { DecorateList } from '@/packages/components/Decorates/index' | 2 | import { DecorateList } from '@/packages/components/Decorates/index' |
3 | import { InformationList } from '@/packages/components/Informations/index' | 3 | import { InformationList } from '@/packages/components/Informations/index' |
4 | import { TableList } from '@/packages/components/Tables/index' | 4 | import { TableList } from '@/packages/components/Tables/index' |
5 | -import { ArtoonsList } from '@/packages/components/Artoons/index' | ||
6 | import { ComposesList } from '@/packages/components/Composes/index' | 5 | import { ComposesList } from '@/packages/components/Composes/index' |
7 | import { PackagesCategoryEnum, PackagesType, ConfigType, FetchComFlagType } from '@/packages/index.d' | 6 | import { PackagesCategoryEnum, PackagesType, ConfigType, FetchComFlagType } from '@/packages/index.d' |
8 | 7 | ||
@@ -16,7 +15,6 @@ export let packagesList: PackagesType = { | @@ -16,7 +15,6 @@ export let packagesList: PackagesType = { | ||
16 | [PackagesCategoryEnum.INFORMATIONS]: InformationList, | 15 | [PackagesCategoryEnum.INFORMATIONS]: InformationList, |
17 | [PackagesCategoryEnum.TABLES]: TableList, | 16 | [PackagesCategoryEnum.TABLES]: TableList, |
18 | [PackagesCategoryEnum.DECORATES]: DecorateList, | 17 | [PackagesCategoryEnum.DECORATES]: DecorateList, |
19 | - [PackagesCategoryEnum.ARTOONS]: ArtoonsList, | ||
20 | [PackagesCategoryEnum.COMPOSES]: ComposesList, | 18 | [PackagesCategoryEnum.COMPOSES]: ComposesList, |
21 | } | 19 | } |
22 | 20 |
@@ -74,4 +74,4 @@ export const canvasModelIndex = 9999 | @@ -74,4 +74,4 @@ export const canvasModelIndex = 9999 | ||
74 | export const selectBoxIndex = canvasModelIndex + 10 | 74 | export const selectBoxIndex = canvasModelIndex + 10 |
75 | 75 | ||
76 | // 工作台自动保存间隔(s) | 76 | // 工作台自动保存间隔(s) |
77 | -export const saveInterval = 120 | 77 | +export const saveInterval =30 |
1 | -import { CreateComponentType, CreateComponentGroupType, FilterEnum } from '@/packages/index.d' | ||
2 | -import { HistoryActionTypeEnum } from '@/store/modules/chartHistoryStore/chartHistoryStore.d' | 1 | +import {CreateComponentType, CreateComponentGroupType, FilterEnum} from '@/packages/index.d' |
2 | +import {HistoryActionTypeEnum} from '@/store/modules/chartHistoryStore/chartHistoryStore.d' | ||
3 | +import { SyncEnum } from '@/enums/editPageEnum' | ||
3 | import { | 4 | import { |
4 | - RequestHttpEnum, | ||
5 | - RequestContentTypeEnum, | ||
6 | - RequestDataTypeEnum, | ||
7 | - RequestHttpIntervalEnum, | ||
8 | - RequestParams, | ||
9 | - RequestBodyEnum, | ||
10 | - RequestParamsObjType | 5 | + RequestHttpEnum, |
6 | + RequestContentTypeEnum, | ||
7 | + RequestDataTypeEnum, | ||
8 | + RequestHttpIntervalEnum, | ||
9 | + RequestParams, | ||
10 | + RequestBodyEnum, | ||
11 | + RequestParamsObjType | ||
11 | } from '@/enums/httpEnum' | 12 | } from '@/enums/httpEnum' |
12 | -import { PreviewScaleEnum } from '@/enums/styleEnum' | ||
13 | -import type { ChartColorsNameType, GlobalThemeJsonType } from '@/settings/chartThemes/index' | 13 | +import {PreviewScaleEnum} from '@/enums/styleEnum' |
14 | +import type {ChartColorsNameType, GlobalThemeJsonType} from '@/settings/chartThemes/index' | ||
15 | + | ||
16 | +// 项目数据枚举 | ||
17 | +export enum ProjectInfoEnum { | ||
18 | + // ID | ||
19 | + PROJECT_ID = "projectId", | ||
20 | + // 名称 | ||
21 | + PROJECT_NAME = 'projectName', | ||
22 | + // 描述 | ||
23 | + REMARKS = 'remarks', | ||
24 | + // 缩略图 | ||
25 | + THUMBNAIL = 'thumbnail', | ||
26 | + // 是否公开发布 | ||
27 | + RELEASE = 'release' | ||
28 | +} | ||
29 | + | ||
30 | +// 项目数据 | ||
31 | +export type ProjectInfoType = { | ||
32 | + [ProjectInfoEnum.PROJECT_ID]: string, | ||
33 | + [ProjectInfoEnum.PROJECT_NAME]: string, | ||
34 | + [ProjectInfoEnum.REMARKS]: string, | ||
35 | + [ProjectInfoEnum.THUMBNAIL]: string, | ||
36 | + [ProjectInfoEnum.RELEASE]: boolean | ||
37 | +} | ||
14 | 38 | ||
15 | // 编辑画布属性 | 39 | // 编辑画布属性 |
16 | export enum EditCanvasTypeEnum { | 40 | export enum EditCanvasTypeEnum { |
17 | - EDIT_LAYOUT_DOM = 'editLayoutDom', | ||
18 | - EDIT_CONTENT_DOM = 'editContentDom', | ||
19 | - OFFSET = 'offset', | ||
20 | - SCALE = 'scale', | ||
21 | - USER_SCALE = 'userScale', | ||
22 | - LOCK_SCALE = 'lockScale', | ||
23 | - IS_CREATE = 'isCreate', | ||
24 | - IS_DRAG = 'isDrag', | ||
25 | - IS_SELECT = 'isSelect' | 41 | + EDIT_LAYOUT_DOM = 'editLayoutDom', |
42 | + EDIT_CONTENT_DOM = 'editContentDom', | ||
43 | + OFFSET = 'offset', | ||
44 | + SCALE = 'scale', | ||
45 | + USER_SCALE = 'userScale', | ||
46 | + LOCK_SCALE = 'lockScale', | ||
47 | + SAVE_STATUS = 'saveStatus', | ||
48 | + | ||
49 | + IS_CREATE = 'isCreate', | ||
50 | + IS_DRAG = 'isDrag', | ||
51 | + IS_SELECT = 'isSelect' | ||
26 | } | 52 | } |
27 | 53 | ||
28 | // 编辑区域 | 54 | // 编辑区域 |
29 | export type EditCanvasType = { | 55 | export type EditCanvasType = { |
30 | - // 编辑区域 DOM | ||
31 | - [EditCanvasTypeEnum.EDIT_LAYOUT_DOM]: HTMLElement | null | ||
32 | - [EditCanvasTypeEnum.EDIT_CONTENT_DOM]: HTMLElement | null | ||
33 | - // 偏移大小 | ||
34 | - [EditCanvasTypeEnum.OFFSET]: number | ||
35 | - // 缩放 | ||
36 | - [EditCanvasTypeEnum.SCALE]: number | ||
37 | - // 缩放 | ||
38 | - [EditCanvasTypeEnum.USER_SCALE]: number | ||
39 | - // 锁定缩放 | ||
40 | - [EditCanvasTypeEnum.LOCK_SCALE]: boolean | ||
41 | - // 初始化创建 | ||
42 | - [EditCanvasTypeEnum.IS_CREATE]: boolean | ||
43 | - // 拖拽中 | ||
44 | - [EditCanvasTypeEnum.IS_DRAG]: boolean | ||
45 | - // 框选中 | ||
46 | - [EditCanvasTypeEnum.IS_SELECT]: boolean | 56 | + // 编辑区域 DOM |
57 | + [EditCanvasTypeEnum.EDIT_LAYOUT_DOM]: HTMLElement | null | ||
58 | + [EditCanvasTypeEnum.EDIT_CONTENT_DOM]: HTMLElement | null | ||
59 | + // 偏移大小 | ||
60 | + [EditCanvasTypeEnum.OFFSET]: number | ||
61 | + // 缩放 | ||
62 | + [EditCanvasTypeEnum.SCALE]: number | ||
63 | + // 缩放 | ||
64 | + [EditCanvasTypeEnum.USER_SCALE]: number | ||
65 | + // 锁定缩放 | ||
66 | + [EditCanvasTypeEnum.LOCK_SCALE]: boolean | ||
67 | + // 初始化创建 | ||
68 | + [EditCanvasTypeEnum.IS_CREATE]: boolean | ||
69 | + // 保存状态 | ||
70 | + [EditCanvasTypeEnum.SAVE_STATUS]: SyncEnum | ||
71 | + // 拖拽中 | ||
72 | + [EditCanvasTypeEnum.IS_DRAG]: boolean | ||
73 | + // 框选中 | ||
74 | + [EditCanvasTypeEnum.IS_SELECT]: boolean | ||
47 | } | 75 | } |
48 | 76 | ||
49 | // 滤镜/背景色/宽高主题等 | 77 | // 滤镜/背景色/宽高主题等 |
50 | export enum EditCanvasConfigEnum { | 78 | export enum EditCanvasConfigEnum { |
51 | - PROJECT_NAME = 'projectName', | ||
52 | - WIDTH = 'width', | ||
53 | - HEIGHT = 'height', | ||
54 | - CHART_THEME_COLOR = 'chartThemeColor', | ||
55 | - CHART_THEME_SETTING = 'chartThemeSetting', | ||
56 | - BACKGROUND = 'background', | ||
57 | - BACKGROUND_IMAGE = 'backgroundImage', | ||
58 | - SELECT_COLOR = 'selectColor', | ||
59 | - PREVIEW_SCALE_TYPE = 'previewScaleType' | 79 | + PROJECT_NAME = 'projectName', |
80 | + WIDTH = 'width', | ||
81 | + HEIGHT = 'height', | ||
82 | + CHART_THEME_COLOR = 'chartThemeColor', | ||
83 | + CHART_THEME_SETTING = 'chartThemeSetting', | ||
84 | + BACKGROUND = 'background', | ||
85 | + BACKGROUND_IMAGE = 'backgroundImage', | ||
86 | + SELECT_COLOR = 'selectColor', | ||
87 | + PREVIEW_SCALE_TYPE = 'previewScaleType' | ||
60 | } | 88 | } |
61 | 89 | ||
62 | export interface EditCanvasConfigType { | 90 | export interface EditCanvasConfigType { |
63 | - // 滤镜-启用 | ||
64 | - [FilterEnum.FILTERS_SHOW]: boolean | ||
65 | - // 滤镜-色相 | ||
66 | - [FilterEnum.HUE_ROTATE]: number | ||
67 | - // 滤镜-饱和度 | ||
68 | - [FilterEnum.SATURATE]: number | ||
69 | - // 滤镜-亮度 | ||
70 | - [FilterEnum.BRIGHTNESS]: number | ||
71 | - // 滤镜-对比度 | ||
72 | - [FilterEnum.CONTRAST]: number | ||
73 | - // 滤镜-不透明度 | ||
74 | - [FilterEnum.OPACITY]: number | ||
75 | - // 变换(暂不使用) | ||
76 | - [FilterEnum.ROTATE_Z]: number | ||
77 | - [FilterEnum.ROTATE_X]: number | ||
78 | - [FilterEnum.ROTATE_Y]: number | ||
79 | - [FilterEnum.SKEW_X]: number | ||
80 | - [FilterEnum.SKEW_Y]: number | ||
81 | - [FilterEnum.BLEND_MODE]: string | ||
82 | - // 大屏名称 | ||
83 | - [EditCanvasConfigEnum.PROJECT_NAME]?: string | ||
84 | - // 大屏宽度 | ||
85 | - [EditCanvasConfigEnum.WIDTH]: number | ||
86 | - // 大屏高度 | ||
87 | - [EditCanvasConfigEnum.HEIGHT]: number | ||
88 | - // 背景色 | ||
89 | - [EditCanvasConfigEnum.BACKGROUND]?: string | ||
90 | - [EditCanvasConfigEnum.BACKGROUND_IMAGE]?: string | null | ||
91 | - // 图表主题颜色 | ||
92 | - [EditCanvasConfigEnum.CHART_THEME_COLOR]: ChartColorsNameType | ||
93 | - // 图表全局配置 | ||
94 | - [EditCanvasConfigEnum.CHART_THEME_SETTING]: GlobalThemeJsonType | ||
95 | - // 图表主题颜色 | ||
96 | - [EditCanvasConfigEnum.SELECT_COLOR]: boolean | ||
97 | - // 预览展示方式 | ||
98 | - [EditCanvasConfigEnum.PREVIEW_SCALE_TYPE]: PreviewScaleEnum | 91 | + // 滤镜-启用 |
92 | + [FilterEnum.FILTERS_SHOW]: boolean | ||
93 | + // 滤镜-色相 | ||
94 | + [FilterEnum.HUE_ROTATE]: number | ||
95 | + // 滤镜-饱和度 | ||
96 | + [FilterEnum.SATURATE]: number | ||
97 | + // 滤镜-亮度 | ||
98 | + [FilterEnum.BRIGHTNESS]: number | ||
99 | + // 滤镜-对比度 | ||
100 | + [FilterEnum.CONTRAST]: number | ||
101 | + // 滤镜-不透明度 | ||
102 | + [FilterEnum.OPACITY]: number | ||
103 | + // 变换(暂不使用) | ||
104 | + [FilterEnum.ROTATE_Z]: number | ||
105 | + [FilterEnum.ROTATE_X]: number | ||
106 | + [FilterEnum.ROTATE_Y]: number | ||
107 | + [FilterEnum.SKEW_X]: number | ||
108 | + [FilterEnum.SKEW_Y]: number | ||
109 | + [FilterEnum.BLEND_MODE]: string | ||
110 | + // 大屏名称 | ||
111 | + [EditCanvasConfigEnum.PROJECT_NAME]?: string | ||
112 | + // 大屏宽度 | ||
113 | + [EditCanvasConfigEnum.WIDTH]: number | ||
114 | + // 大屏高度 | ||
115 | + [EditCanvasConfigEnum.HEIGHT]: number | ||
116 | + // 背景色 | ||
117 | + [EditCanvasConfigEnum.BACKGROUND]?: string | ||
118 | + [EditCanvasConfigEnum.BACKGROUND_IMAGE]?: string | null | ||
119 | + // 图表主题颜色 | ||
120 | + [EditCanvasConfigEnum.CHART_THEME_COLOR]: ChartColorsNameType | ||
121 | + // 图表全局配置 | ||
122 | + [EditCanvasConfigEnum.CHART_THEME_SETTING]: GlobalThemeJsonType | ||
123 | + // 图表主题颜色 | ||
124 | + [EditCanvasConfigEnum.SELECT_COLOR]: boolean | ||
125 | + // 预览展示方式 | ||
126 | + [EditCanvasConfigEnum.PREVIEW_SCALE_TYPE]: PreviewScaleEnum | ||
99 | } | 127 | } |
100 | 128 | ||
101 | // 坐标轴信息 | 129 | // 坐标轴信息 |
102 | // eslint-disable-next-line no-redeclare | 130 | // eslint-disable-next-line no-redeclare |
103 | export enum EditCanvasTypeEnum { | 131 | export enum EditCanvasTypeEnum { |
104 | - START_X = 'startX', | ||
105 | - START_Y = 'startY', | ||
106 | - X = 'x', | ||
107 | - Y = 'y' | 132 | + START_X = 'startX', |
133 | + START_Y = 'startY', | ||
134 | + X = 'x', | ||
135 | + Y = 'y' | ||
108 | } | 136 | } |
109 | 137 | ||
110 | // 鼠标位置 | 138 | // 鼠标位置 |
111 | export type MousePositionType = { | 139 | export type MousePositionType = { |
112 | - // 开始 X | ||
113 | - [EditCanvasTypeEnum.START_X]: number | ||
114 | - // 开始 Y | ||
115 | - [EditCanvasTypeEnum.START_Y]: number | ||
116 | - // X | ||
117 | - [EditCanvasTypeEnum.X]: number | ||
118 | - // y | ||
119 | - [EditCanvasTypeEnum.Y]: number | 140 | + // 开始 X |
141 | + [EditCanvasTypeEnum.START_X]: number | ||
142 | + // 开始 Y | ||
143 | + [EditCanvasTypeEnum.START_Y]: number | ||
144 | + // X | ||
145 | + [EditCanvasTypeEnum.X]: number | ||
146 | + // y | ||
147 | + [EditCanvasTypeEnum.Y]: number | ||
120 | } | 148 | } |
121 | 149 | ||
122 | // 操作目标 | 150 | // 操作目标 |
123 | export type TargetChartType = { | 151 | export type TargetChartType = { |
124 | - hoverId?: string | ||
125 | - selectId: string[] | 152 | + hoverId?: string |
153 | + selectId: string[] | ||
126 | } | 154 | } |
127 | 155 | ||
128 | // 数据记录 | 156 | // 数据记录 |
129 | export type RecordChartType = { | 157 | export type RecordChartType = { |
130 | - charts: CreateComponentType | CreateComponentGroupType | Array<CreateComponentType | CreateComponentGroupType> | ||
131 | - type: HistoryActionTypeEnum.CUT | HistoryActionTypeEnum.COPY | 158 | + charts: CreateComponentType | CreateComponentGroupType | Array<CreateComponentType | CreateComponentGroupType> |
159 | + type: HistoryActionTypeEnum.CUT | HistoryActionTypeEnum.COPY | ||
132 | } | 160 | } |
133 | 161 | ||
134 | // Store 枚举 | 162 | // Store 枚举 |
135 | export enum ChartEditStoreEnum { | 163 | export enum ChartEditStoreEnum { |
136 | - EDIT_RANGE = 'editRange', | ||
137 | - EDIT_CANVAS = 'editCanvas', | ||
138 | - RIGHT_MENU_SHOW = 'rightMenuShow', | ||
139 | - MOUSE_POSITION = 'mousePosition', | ||
140 | - TARGET_CHART = 'targetChart', | ||
141 | - RECORD_CHART = 'recordChart', | ||
142 | - // 以下需要存储 | ||
143 | - EDIT_CANVAS_CONFIG = 'editCanvasConfig', | ||
144 | - REQUEST_GLOBAL_CONFIG = 'requestGlobalConfig', | ||
145 | - COMPONENT_LIST = 'componentList' | 164 | + PROJECT_INFO = 'projectInfo', |
165 | + | ||
166 | + EDIT_RANGE = 'editRange', | ||
167 | + EDIT_CANVAS = 'editCanvas', | ||
168 | + RIGHT_MENU_SHOW = 'rightMenuShow', | ||
169 | + MOUSE_POSITION = 'mousePosition', | ||
170 | + TARGET_CHART = 'targetChart', | ||
171 | + RECORD_CHART = 'recordChart', | ||
172 | + // 以下需要存储 | ||
173 | + EDIT_CANVAS_CONFIG = 'editCanvasConfig', | ||
174 | + REQUEST_GLOBAL_CONFIG = 'requestGlobalConfig', | ||
175 | + COMPONENT_LIST = 'componentList' | ||
146 | } | 176 | } |
147 | 177 | ||
148 | // 请求公共类型 | 178 | // 请求公共类型 |
149 | type RequestPublicConfigType = { | 179 | type RequestPublicConfigType = { |
150 | - // 时间单位(时分秒) | ||
151 | - requestIntervalUnit: RequestHttpIntervalEnum | ||
152 | - // 请求内容 | ||
153 | - requestParams: RequestParams | 180 | + // 时间单位(时分秒) |
181 | + requestIntervalUnit: RequestHttpIntervalEnum | ||
182 | + // 请求内容 | ||
183 | + requestParams: RequestParams | ||
154 | } | 184 | } |
155 | 185 | ||
156 | // 数据池项类型 | 186 | // 数据池项类型 |
157 | export type RequestDataPondItemType = { | 187 | export type RequestDataPondItemType = { |
158 | - dataPondId: string, | ||
159 | - dataPondName: string, | ||
160 | - dataPondRequestConfig: RequestConfigType | 188 | + dataPondId: string, |
189 | + dataPondName: string, | ||
190 | + dataPondRequestConfig: RequestConfigType | ||
161 | } | 191 | } |
162 | 192 | ||
163 | // 全局的图表请求配置 | 193 | // 全局的图表请求配置 |
164 | export interface RequestGlobalConfigType extends RequestPublicConfigType { | 194 | export interface RequestGlobalConfigType extends RequestPublicConfigType { |
165 | - // 组件定制轮询时间 | ||
166 | - requestInterval: number | ||
167 | - // 请求源地址 | ||
168 | - requestOriginUrl?: string | ||
169 | - // 公共数据池 | ||
170 | - requestDataPond: RequestDataPondItemType[] | 195 | + // 组件定制轮询时间 |
196 | + requestInterval: number | ||
197 | + // 请求源地址 | ||
198 | + requestOriginUrl?: string | ||
199 | + // 公共数据池 | ||
200 | + requestDataPond: RequestDataPondItemType[] | ||
171 | } | 201 | } |
172 | 202 | ||
173 | // 单个图表请求配置 | 203 | // 单个图表请求配置 |
174 | export interface RequestConfigType extends RequestPublicConfigType { | 204 | export interface RequestConfigType extends RequestPublicConfigType { |
175 | - // 所选全局数据池的对应 id | ||
176 | - requestDataPondId?: string | ||
177 | - // 组件定制轮询时间 | ||
178 | - requestInterval?: number | ||
179 | - // 获取数据的方式 | ||
180 | - requestDataType: RequestDataTypeEnum | ||
181 | - // 请求方式 get/post/del/put/patch | ||
182 | - requestHttpType: RequestHttpEnum | ||
183 | - // 源后续的 url | ||
184 | - requestUrl?: string | ||
185 | - // 请求内容主体方式 普通/sql | ||
186 | - requestContentType: RequestContentTypeEnum | ||
187 | - // 请求体类型 | ||
188 | - requestParamsBodyType: RequestBodyEnum | ||
189 | - // SQL 请求对象 | ||
190 | - requestSQLContent: { | ||
191 | - sql: string | ||
192 | - } | 205 | + // 所选全局数据池的对应 id |
206 | + requestDataPondId?: string | ||
207 | + // 组件定制轮询时间 | ||
208 | + requestInterval?: number | ||
209 | + // 获取数据的方式 | ||
210 | + requestDataType: RequestDataTypeEnum | ||
211 | + // 请求方式 get/post/del/put/patch | ||
212 | + requestHttpType: RequestHttpEnum | ||
213 | + // 源后续的 url | ||
214 | + requestUrl?: string | ||
215 | + // 请求内容主体方式 普通/sql | ||
216 | + requestContentType: RequestContentTypeEnum | ||
217 | + // 请求体类型 | ||
218 | + requestParamsBodyType: RequestBodyEnum | ||
219 | + // SQL 请求对象 | ||
220 | + requestSQLContent: { | ||
221 | + sql: string | ||
222 | + } | ||
193 | } | 223 | } |
194 | 224 | ||
195 | // Store 类型 | 225 | // Store 类型 |
196 | export interface ChartEditStoreType { | 226 | export interface ChartEditStoreType { |
197 | - [ChartEditStoreEnum.EDIT_CANVAS]: EditCanvasType | ||
198 | - [ChartEditStoreEnum.EDIT_CANVAS_CONFIG]: EditCanvasConfigType | ||
199 | - [ChartEditStoreEnum.RIGHT_MENU_SHOW]: boolean | ||
200 | - [ChartEditStoreEnum.MOUSE_POSITION]: MousePositionType | ||
201 | - [ChartEditStoreEnum.TARGET_CHART]: TargetChartType | ||
202 | - [ChartEditStoreEnum.RECORD_CHART]?: RecordChartType | ||
203 | - [ChartEditStoreEnum.REQUEST_GLOBAL_CONFIG]: RequestGlobalConfigType | ||
204 | - [ChartEditStoreEnum.COMPONENT_LIST]: Array<CreateComponentType | CreateComponentGroupType> | 227 | + [ChartEditStoreEnum.PROJECT_INFO]: ProjectInfoType |
228 | + [ChartEditStoreEnum.EDIT_CANVAS]: EditCanvasType | ||
229 | + [ChartEditStoreEnum.EDIT_CANVAS_CONFIG]: EditCanvasConfigType | ||
230 | + [ChartEditStoreEnum.RIGHT_MENU_SHOW]: boolean | ||
231 | + [ChartEditStoreEnum.MOUSE_POSITION]: MousePositionType | ||
232 | + [ChartEditStoreEnum.TARGET_CHART]: TargetChartType | ||
233 | + [ChartEditStoreEnum.RECORD_CHART]?: RecordChartType | ||
234 | + [ChartEditStoreEnum.REQUEST_GLOBAL_CONFIG]: RequestGlobalConfigType | ||
235 | + [ChartEditStoreEnum.COMPONENT_LIST]: Array<CreateComponentType | CreateComponentGroupType> | ||
205 | } | 236 | } |
206 | 237 | ||
207 | // 存储数据类型 | 238 | // 存储数据类型 |
208 | export interface ChartEditStorage { | 239 | export interface ChartEditStorage { |
209 | - [ChartEditStoreEnum.EDIT_CANVAS_CONFIG]: EditCanvasConfigType | ||
210 | - [ChartEditStoreEnum.REQUEST_GLOBAL_CONFIG]: RequestGlobalConfigType | ||
211 | - [ChartEditStoreEnum.COMPONENT_LIST]: Array<CreateComponentType | CreateComponentGroupType> | 240 | + [ChartEditStoreEnum.EDIT_CANVAS_CONFIG]: EditCanvasConfigType |
241 | + [ChartEditStoreEnum.REQUEST_GLOBAL_CONFIG]: RequestGlobalConfigType | ||
242 | + [ChartEditStoreEnum.COMPONENT_LIST]: Array<CreateComponentType | CreateComponentGroupType> | ||
212 | } | 243 | } |
@@ -18,6 +18,7 @@ import { | @@ -18,6 +18,7 @@ import { | ||
18 | import { MenuEnum } from '@/enums/editPageEnum' | 18 | import { MenuEnum } from '@/enums/editPageEnum' |
19 | import { getUUID, loadingStart, loadingFinish, loadingError, isString, isArray } from '@/utils' | 19 | import { getUUID, loadingStart, loadingFinish, loadingError, isString, isArray } from '@/utils' |
20 | import { | 20 | import { |
21 | + ProjectInfoType, | ||
21 | ChartEditStoreEnum, | 22 | ChartEditStoreEnum, |
22 | ChartEditStorage, | 23 | ChartEditStorage, |
23 | ChartEditStoreType, | 24 | ChartEditStoreType, |
@@ -36,6 +37,14 @@ const settingStore = useSettingStore() | @@ -36,6 +37,14 @@ const settingStore = useSettingStore() | ||
36 | export const useChartEditStore = defineStore({ | 37 | export const useChartEditStore = defineStore({ |
37 | id: 'useChartEditStore', | 38 | id: 'useChartEditStore', |
38 | state: (): ChartEditStoreType => ({ | 39 | state: (): ChartEditStoreType => ({ |
40 | + // 项目数据 | ||
41 | + projectInfo: { | ||
42 | + projectId: '', | ||
43 | + projectName: '', | ||
44 | + remarks: '', | ||
45 | + thumbnail: '', | ||
46 | + release: false | ||
47 | + }, | ||
39 | // 画布属性 | 48 | // 画布属性 |
40 | editCanvas: { | 49 | editCanvas: { |
41 | // 编辑区域 Dom | 50 | // 编辑区域 Dom |
@@ -134,6 +143,9 @@ export const useChartEditStore = defineStore({ | @@ -134,6 +143,9 @@ export const useChartEditStore = defineStore({ | ||
134 | componentList: [] | 143 | componentList: [] |
135 | }), | 144 | }), |
136 | getters: { | 145 | getters: { |
146 | + getProjectInfo(): ProjectInfoType { | ||
147 | + return this.projectInfo | ||
148 | + }, | ||
137 | getMousePosition(): MousePositionType { | 149 | getMousePosition(): MousePositionType { |
138 | return this.mousePosition | 150 | return this.mousePosition |
139 | }, | 151 | }, |
@@ -168,6 +180,10 @@ export const useChartEditStore = defineStore({ | @@ -168,6 +180,10 @@ export const useChartEditStore = defineStore({ | ||
168 | } | 180 | } |
169 | }, | 181 | }, |
170 | actions: { | 182 | actions: { |
183 | + // * 设置 peojectInfo 数据项 | ||
184 | + setProjectInfo<T extends keyof ProjectInfoType, K extends ProjectInfoType[T]>(key: T, value: K) { | ||
185 | + this.projectInfo[key] = value | ||
186 | + }, | ||
171 | // * 设置 editCanvas 数据项 | 187 | // * 设置 editCanvas 数据项 |
172 | setEditCanvas<T extends keyof EditCanvasType, K extends EditCanvasType[T]>(key: T, value: K) { | 188 | setEditCanvas<T extends keyof EditCanvasType, K extends EditCanvasType[T]>(key: T, value: K) { |
173 | this.editCanvas[key] = value | 189 | this.editCanvas[key] = value |
@@ -506,7 +522,7 @@ export const useChartEditStore = defineStore({ | @@ -506,7 +522,7 @@ export const useChartEditStore = defineStore({ | ||
506 | item.id = getUUID() | 522 | item.id = getUUID() |
507 | }) | 523 | }) |
508 | } | 524 | } |
509 | - | 525 | + |
510 | return e | 526 | return e |
511 | } | 527 | } |
512 | const isCut = recordCharts.type === HistoryActionTypeEnum.CUT | 528 | const isCut = recordCharts.type === HistoryActionTypeEnum.CUT |
1 | <template> | 1 | <template> |
2 | <!-- <edit-rule></edit-rule> --> | 2 | <!-- <edit-rule></edit-rule> --> |
3 | <content-box | 3 | <content-box |
4 | - id="go-chart-edit-layout" | ||
5 | - :flex="true" | ||
6 | - :showTop="false" | ||
7 | - :showBottom="true" | ||
8 | - :depth="1" | ||
9 | - :xScroll="true" | ||
10 | - :disabledScroll="true" | ||
11 | - @mousedown="mousedownHandleUnStop" | ||
12 | - @drop="dragHandle" | ||
13 | - @dragover="dragoverHandle" | ||
14 | - @dragenter="dragoverHandle" | 4 | + id="go-chart-edit-layout" |
5 | + :flex="true" | ||
6 | + :showTop="false" | ||
7 | + :showBottom="true" | ||
8 | + :depth="1" | ||
9 | + :xScroll="true" | ||
10 | + :disabledScroll="true" | ||
11 | + @mousedown="mousedownHandleUnStop" | ||
12 | + @drop="dragHandle" | ||
13 | + @dragover="dragoverHandle" | ||
14 | + @dragenter="dragoverHandle" | ||
15 | > | 15 | > |
16 | <edit-rule> | 16 | <edit-rule> |
17 | <!-- 画布主体 --> | 17 | <!-- 画布主体 --> |
@@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
20 | <edit-range> | 20 | <edit-range> |
21 | <!-- 滤镜预览 --> | 21 | <!-- 滤镜预览 --> |
22 | <div | 22 | <div |
23 | - :style="{ | 23 | + :style="{ |
24 | ...getFilterStyle(chartEditStore.getEditCanvasConfig), | 24 | ...getFilterStyle(chartEditStore.getEditCanvasConfig), |
25 | ...rangeStyle | 25 | ...rangeStyle |
26 | }" | 26 | }" |
@@ -29,35 +29,35 @@ | @@ -29,35 +29,35 @@ | ||
29 | <div v-for="(item, index) in chartEditStore.getComponentList" :key="item.id"> | 29 | <div v-for="(item, index) in chartEditStore.getComponentList" :key="item.id"> |
30 | <!-- 分组 --> | 30 | <!-- 分组 --> |
31 | <edit-group | 31 | <edit-group |
32 | - v-if="item.isGroup" | ||
33 | - :groupData="(item as CreateComponentGroupType)" | ||
34 | - :groupIndex="index" | 32 | + v-if="item.isGroup" |
33 | + :groupData="(item as CreateComponentGroupType)" | ||
34 | + :groupIndex="index" | ||
35 | ></edit-group> | 35 | ></edit-group> |
36 | 36 | ||
37 | <!-- 单组件 --> | 37 | <!-- 单组件 --> |
38 | <edit-shape-box | 38 | <edit-shape-box |
39 | - v-else | ||
40 | - :data-id="item.id" | ||
41 | - :index="index" | ||
42 | - :style="{ | 39 | + v-else |
40 | + :data-id="item.id" | ||
41 | + :index="index" | ||
42 | + :style="{ | ||
43 | ...useComponentStyle(item.attr, index), | 43 | ...useComponentStyle(item.attr, index), |
44 | ...getBlendModeStyle(item.styles) as any | 44 | ...getBlendModeStyle(item.styles) as any |
45 | }" | 45 | }" |
46 | - :item="item" | ||
47 | - @click="mouseClickHandle($event, item)" | ||
48 | - @mousedown="mousedownHandle($event, item)" | ||
49 | - @mouseenter="mouseenterHandle($event, item)" | ||
50 | - @mouseleave="mouseleaveHandle($event, item)" | ||
51 | - @contextmenu="handleContextMenu($event, item, optionsHandle)" | 46 | + :item="item" |
47 | + @click="mouseClickHandle($event, item)" | ||
48 | + @mousedown="mousedownHandle($event, item)" | ||
49 | + @mouseenter="mouseenterHandle($event, item)" | ||
50 | + @mouseleave="mouseleaveHandle($event, item)" | ||
51 | + @contextmenu="handleContextMenu($event, item, optionsHandle)" | ||
52 | > | 52 | > |
53 | <component | 53 | <component |
54 | - class="edit-content-chart" | ||
55 | - :class="animationsClass(item.styles.animations)" | ||
56 | - :is="item.chartConfig.chartKey" | ||
57 | - :chartConfig="item" | ||
58 | - :themeSetting="themeSetting" | ||
59 | - :themeColor="themeColor" | ||
60 | - :style="{ | 54 | + class="edit-content-chart" |
55 | + :class="animationsClass(item.styles.animations)" | ||
56 | + :is="item.chartConfig.chartKey" | ||
57 | + :chartConfig="item" | ||
58 | + :themeSetting="themeSetting" | ||
59 | + :themeColor="themeColor" | ||
60 | + :style="{ | ||
61 | ...useSizeStyle(item.attr), | 61 | ...useSizeStyle(item.attr), |
62 | ...getFilterStyle(item.styles), | 62 | ...getFilterStyle(item.styles), |
63 | ...getTransformStyle(item.styles) | 63 | ...getTransformStyle(item.styles) |
@@ -83,42 +83,45 @@ | @@ -83,42 +83,45 @@ | ||
83 | </template> | 83 | </template> |
84 | 84 | ||
85 | <script lang="ts" setup> | 85 | <script lang="ts" setup> |
86 | -import { onMounted, computed } from 'vue' | ||
87 | -import { chartColors } from '@/settings/chartThemes/index' | ||
88 | -import { MenuEnum } from '@/enums/editPageEnum' | ||
89 | -import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d' | ||
90 | -import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle } from '@/utils' | ||
91 | -import { useContextMenu } from '@/views/chart/hooks/useContextMenu.hook' | ||
92 | -import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d' | ||
93 | -import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' | ||
94 | - | ||
95 | -import { useLayout } from './hooks/useLayout.hook' | ||
96 | -import { useAddKeyboard } from '../hooks/useKeyboard.hook' | ||
97 | -import { dragHandle, dragoverHandle, mousedownHandleUnStop, useMouseHandle } from './hooks/useDrag.hook' | ||
98 | -import { useComponentStyle, useSizeStyle } from './hooks/useStyle.hook' | ||
99 | - | ||
100 | -import { ContentBox } from '../ContentBox/index' | ||
101 | -import { EditGroup } from './components/EditGroup' | ||
102 | -import { EditRange } from './components/EditRange' | ||
103 | -import { EditRule } from './components/EditRule' | ||
104 | -import { EditBottom } from './components/EditBottom' | ||
105 | -import { EditShapeBox } from './components/EditShapeBox' | ||
106 | -import { EditTools } from './components/EditTools' | 86 | +import {onMounted, computed} from 'vue' |
87 | +import {chartColors} from '@/settings/chartThemes/index' | ||
88 | +import {MenuEnum} from '@/enums/editPageEnum' | ||
89 | +import {CreateComponentType, CreateComponentGroupType} from '@/packages/index.d' | ||
90 | +import {animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle} from '@/utils' | ||
91 | +import {useContextMenu} from '@/views/chart/hooks/useContextMenu.hook' | ||
92 | +import {MenuOptionsItemType} from '@/views/chart/hooks/useContextMenu.hook.d' | ||
93 | +import {useChartEditStore} from '@/store/modules/chartEditStore/chartEditStore' | ||
94 | + | ||
95 | +import {useLayout} from './hooks/useLayout.hook' | ||
96 | +import {useAddKeyboard} from '../hooks/useKeyboard.hook' | ||
97 | +import {dragHandle, dragoverHandle, mousedownHandleUnStop, useMouseHandle} from './hooks/useDrag.hook' | ||
98 | +import {useComponentStyle, useSizeStyle} from './hooks/useStyle.hook' | ||
99 | +import {useSync} from '../hooks/useSync.hook' | ||
100 | + | ||
101 | +import {ContentBox} from '../ContentBox/index' | ||
102 | +import {EditGroup} from './components/EditGroup' | ||
103 | +import {EditRange} from './components/EditRange' | ||
104 | +import {EditRule} from './components/EditRule' | ||
105 | +import {EditBottom} from './components/EditBottom' | ||
106 | +import {EditShapeBox} from './components/EditShapeBox' | ||
107 | +import {EditTools} from './components/EditTools' | ||
107 | 108 | ||
108 | const chartEditStore = useChartEditStore() | 109 | const chartEditStore = useChartEditStore() |
109 | -const { handleContextMenu } = useContextMenu() | 110 | +const {handleContextMenu} = useContextMenu() |
111 | +const {dataSyncFetch, intervalDataSyncUpdate} = useSync() | ||
112 | + | ||
110 | 113 | ||
111 | // 布局处理 | 114 | // 布局处理 |
112 | useLayout() | 115 | useLayout() |
113 | 116 | ||
114 | // 点击事件 | 117 | // 点击事件 |
115 | -const { mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle } = useMouseHandle() | 118 | +const {mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle} = useMouseHandle() |
116 | 119 | ||
117 | // 右键事件 | 120 | // 右键事件 |
118 | const optionsHandle = ( | 121 | const optionsHandle = ( |
119 | - targetList: MenuOptionsItemType[], | ||
120 | - allList: MenuOptionsItemType[], | ||
121 | - targetInstance: CreateComponentType | 122 | + targetList: MenuOptionsItemType[], |
123 | + allList: MenuOptionsItemType[], | ||
124 | + targetInstance: CreateComponentType | ||
122 | ) => { | 125 | ) => { |
123 | // 多选处理 | 126 | // 多选处理 |
124 | if (chartEditStore.getTargetChart.selectId.length > 1) { | 127 | if (chartEditStore.getTargetChart.selectId.length > 1) { |
@@ -164,8 +167,8 @@ const rangeStyle = computed(() => { | @@ -164,8 +167,8 @@ const rangeStyle = computed(() => { | ||
164 | const backgroundColor = background ? background : undefined | 167 | const backgroundColor = background ? background : undefined |
165 | 168 | ||
166 | const computedBackground = selectColor | 169 | const computedBackground = selectColor |
167 | - ? { background: backgroundColor } | ||
168 | - : { background: `url(${backgroundImage}) no-repeat center center / cover !important` } | 170 | + ? {background: backgroundColor} |
171 | + : {background: `url(${backgroundImage}) no-repeat center center / cover !important`} | ||
169 | 172 | ||
170 | // @ts-ignore | 173 | // @ts-ignore |
171 | return { | 174 | return { |
@@ -178,6 +181,10 @@ const rangeStyle = computed(() => { | @@ -178,6 +181,10 @@ const rangeStyle = computed(() => { | ||
178 | // 键盘事件 | 181 | // 键盘事件 |
179 | onMounted(() => { | 182 | onMounted(() => { |
180 | useAddKeyboard() | 183 | useAddKeyboard() |
184 | + // 获取数据 | ||
185 | + dataSyncFetch() | ||
186 | + // 定时更新数据 | ||
187 | + intervalDataSyncUpdate() | ||
181 | }) | 188 | }) |
182 | </script> | 189 | </script> |
183 | 190 |
1 | -import { getUUID, fetchRouteParamsLocation } from '@/utils' | ||
2 | -import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' | ||
3 | -import { ChartEditStoreEnum, ChartEditStorage } from '@/store/modules/chartEditStore/chartEditStore.d' | ||
4 | -import { useChartHistoryStore } from '@/store/modules/chartHistoryStore/chartHistoryStore' | ||
5 | -import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore' | ||
6 | -import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d' | ||
7 | -import { fetchChartComponent, fetchConfigComponent, createComponent } from '@/packages/index' | ||
8 | -import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d' | ||
9 | -import { BaseEvent, EventLife } from '@/enums/eventEnum' | ||
10 | -import { PublicGroupConfigClass } from '@/packages/public/publicConfig' | 1 | +import {getUUID, fetchRouteParamsLocation, JSONStringify, JSONParse} from '@/utils' |
2 | +import {useChartEditStore} from '@/store/modules/chartEditStore/chartEditStore' | ||
3 | +import { | ||
4 | + EditCanvasTypeEnum, | ||
5 | + ChartEditStoreEnum, | ||
6 | + ChartEditStorage, | ||
7 | + ProjectInfoEnum | ||
8 | +} from '@/store/modules/chartEditStore/chartEditStore.d' | ||
9 | +import {useChartHistoryStore} from '@/store/modules/chartHistoryStore/chartHistoryStore' | ||
10 | +import {useChartLayoutStore} from '@/store/modules/chartLayoutStore/chartLayoutStore' | ||
11 | +import {ChartLayoutStoreEnum} from '@/store/modules/chartLayoutStore/chartLayoutStore.d' | ||
12 | +import {fetchChartComponent, fetchConfigComponent, createComponent} from '@/packages/index' | ||
13 | +import {CreateComponentType, CreateComponentGroupType} from '@/packages/index.d' | ||
14 | +import {BaseEvent, EventLife} from '@/enums/eventEnum' | ||
15 | +import {PublicGroupConfigClass} from '@/packages/public/publicConfig' | ||
11 | import merge from 'lodash/merge' | 16 | import merge from 'lodash/merge' |
12 | -import { onUnmounted } from 'vue' | ||
13 | -import { saveInterval } from '@/settings/designSetting' | 17 | +import {onUnmounted} from 'vue' |
18 | +import {saveInterval} from '@/settings/designSetting' | ||
14 | import throttle from 'lodash/throttle' | 19 | import throttle from 'lodash/throttle' |
15 | import html2canvas from 'html2canvas' | 20 | import html2canvas from 'html2canvas' |
21 | +import {contentUpdateApi, getDataView, uploadFile} from '@/api/external/contentSave/content' | ||
22 | +// 画布枚举 | ||
23 | +import {SyncEnum} from '@/enums/editPageEnum' | ||
16 | 24 | ||
17 | /** | 25 | /** |
18 | * * 画布-版本升级对旧数据无法兼容的补丁 | 26 | * * 画布-版本升级对旧数据无法兼容的补丁 |
19 | * @param object | 27 | * @param object |
20 | */ | 28 | */ |
21 | const canvasVersionUpdatePolyfill = (object: any) => { | 29 | const canvasVersionUpdatePolyfill = (object: any) => { |
22 | - return object | 30 | + return object |
23 | } | 31 | } |
24 | 32 | ||
25 | /** | 33 | /** |
@@ -28,38 +36,38 @@ const canvasVersionUpdatePolyfill = (object: any) => { | @@ -28,38 +36,38 @@ const canvasVersionUpdatePolyfill = (object: any) => { | ||
28 | * @param sources | 36 | * @param sources |
29 | */ | 37 | */ |
30 | const componentVersionUpdatePolyfill = (newObject: any, sources: any) => { | 38 | const componentVersionUpdatePolyfill = (newObject: any, sources: any) => { |
31 | - try { | ||
32 | - // 判断是否是组件 | ||
33 | - if (sources.id) { | ||
34 | - // 处理事件补丁 | ||
35 | - const hasVnodeBeforeMount = 'vnodeBeforeMount' in sources.events | ||
36 | - const hasVnodeMounted = 'vnodeMounted' in sources.events | 39 | + try { |
40 | + // 判断是否是组件 | ||
41 | + if (sources.id) { | ||
42 | + // 处理事件补丁 | ||
43 | + const hasVnodeBeforeMount = 'vnodeBeforeMount' in sources.events | ||
44 | + const hasVnodeMounted = 'vnodeMounted' in sources.events | ||
37 | 45 | ||
38 | - if (hasVnodeBeforeMount) { | ||
39 | - newObject.events.advancedEvents.vnodeBeforeMount = sources?.events.vnodeBeforeMount | ||
40 | - } | ||
41 | - if (hasVnodeMounted) { | ||
42 | - newObject.events.advancedEvents.vnodeMounted = sources?.events.vnodeMounted | ||
43 | - } | ||
44 | - if (hasVnodeBeforeMount || hasVnodeMounted) { | ||
45 | - sources.events = { | ||
46 | - baseEvent: { | ||
47 | - [BaseEvent.ON_CLICK]: undefined, | ||
48 | - [BaseEvent.ON_DBL_CLICK]: undefined, | ||
49 | - [BaseEvent.ON_MOUSE_ENTER]: undefined, | ||
50 | - [BaseEvent.ON_MOUSE_LEAVE]: undefined | ||
51 | - }, | ||
52 | - advancedEvents: { | ||
53 | - [EventLife.VNODE_MOUNTED]: undefined, | ||
54 | - [EventLife.VNODE_BEFORE_MOUNT]: undefined | ||
55 | - } | 46 | + if (hasVnodeBeforeMount) { |
47 | + newObject.events.advancedEvents.vnodeBeforeMount = sources?.events.vnodeBeforeMount | ||
48 | + } | ||
49 | + if (hasVnodeMounted) { | ||
50 | + newObject.events.advancedEvents.vnodeMounted = sources?.events.vnodeMounted | ||
51 | + } | ||
52 | + if (hasVnodeBeforeMount || hasVnodeMounted) { | ||
53 | + sources.events = { | ||
54 | + baseEvent: { | ||
55 | + [BaseEvent.ON_CLICK]: undefined, | ||
56 | + [BaseEvent.ON_DBL_CLICK]: undefined, | ||
57 | + [BaseEvent.ON_MOUSE_ENTER]: undefined, | ||
58 | + [BaseEvent.ON_MOUSE_LEAVE]: undefined | ||
59 | + }, | ||
60 | + advancedEvents: { | ||
61 | + [EventLife.VNODE_MOUNTED]: undefined, | ||
62 | + [EventLife.VNODE_BEFORE_MOUNT]: undefined | ||
63 | + } | ||
64 | + } | ||
65 | + } | ||
66 | + return newObject | ||
56 | } | 67 | } |
57 | - } | ||
58 | - return newObject | 68 | + } catch (error) { |
69 | + return newObject | ||
59 | } | 70 | } |
60 | - } catch (error) { | ||
61 | - return newObject | ||
62 | - } | ||
63 | } | 71 | } |
64 | 72 | ||
65 | /** | 73 | /** |
@@ -69,211 +77,266 @@ const componentVersionUpdatePolyfill = (newObject: any, sources: any) => { | @@ -69,211 +77,266 @@ const componentVersionUpdatePolyfill = (newObject: any, sources: any) => { | ||
69 | * @returns object | 77 | * @returns object |
70 | */ | 78 | */ |
71 | const componentMerge = (newObject: any, sources: any, notComponent = false) => { | 79 | const componentMerge = (newObject: any, sources: any, notComponent = false) => { |
72 | - // 处理组件补丁 | ||
73 | - componentVersionUpdatePolyfill(newObject, sources) | 80 | + // 处理组件补丁 |
81 | + componentVersionUpdatePolyfill(newObject, sources) | ||
74 | 82 | ||
75 | - // 非组件不处理 | ||
76 | - if (notComponent) return merge(newObject, sources) | ||
77 | - // 组件排除 newObject | ||
78 | - const option = sources.option | ||
79 | - if (!option) return merge(newObject, sources) | 83 | + // 非组件不处理 |
84 | + if (notComponent) return merge(newObject, sources) | ||
85 | + // 组件排除 newObject | ||
86 | + const option = sources.option | ||
87 | + if (!option) return merge(newObject, sources) | ||
80 | 88 | ||
81 | - // 为 undefined 的 sources 来源对象属性将被跳过详见 https://www.lodashjs.com/docs/lodash.merge | ||
82 | - sources.option = undefined | ||
83 | - if (option) { | ||
84 | - return { | ||
85 | - ...merge(newObject, sources), | ||
86 | - option: option | 89 | + // 为 undefined 的 sources 来源对象属性将被跳过详见 https://www.lodashjs.com/docs/lodash.merge |
90 | + sources.option = undefined | ||
91 | + if (option) { | ||
92 | + return { | ||
93 | + ...merge(newObject, sources), | ||
94 | + option: option | ||
95 | + } | ||
87 | } | 96 | } |
88 | - } | ||
89 | } | 97 | } |
90 | 98 | ||
91 | // 请求处理 | 99 | // 请求处理 |
92 | export const useSync = () => { | 100 | export const useSync = () => { |
93 | - const chartEditStore = useChartEditStore() | ||
94 | - const chartHistoryStore = useChartHistoryStore() | ||
95 | - const chartLayoutStore = useChartLayoutStore() | ||
96 | - /** | ||
97 | - * * 组件动态注册 | ||
98 | - * @param projectData 项目数据 | ||
99 | - * @param isReplace 是否替换数据 | ||
100 | - * @returns | ||
101 | - */ | ||
102 | - const updateComponent = async (projectData: ChartEditStorage, isReplace = false, changeId = false) => { | ||
103 | - if (isReplace) { | ||
104 | - // 清除列表 | ||
105 | - chartEditStore.componentList = [] | ||
106 | - // 清除历史记录 | ||
107 | - chartHistoryStore.clearBackStack() | ||
108 | - chartHistoryStore.clearForwardStack() | ||
109 | - } | ||
110 | - // 画布补丁处理 | ||
111 | - projectData.editCanvasConfig = canvasVersionUpdatePolyfill(projectData.editCanvasConfig) | ||
112 | - | ||
113 | - // 列表组件注册 | ||
114 | - projectData.componentList.forEach(async (e: CreateComponentType | CreateComponentGroupType) => { | ||
115 | - const intComponent = (target: CreateComponentType) => { | ||
116 | - if (!window['$vue'].component(target.chartConfig.chartKey)) { | ||
117 | - window['$vue'].component(target.chartConfig.chartKey, fetchChartComponent(target.chartConfig)) | ||
118 | - window['$vue'].component(target.chartConfig.conKey, fetchConfigComponent(target.chartConfig)) | 101 | + const chartEditStore = useChartEditStore() |
102 | + const chartHistoryStore = useChartHistoryStore() | ||
103 | + const chartLayoutStore = useChartLayoutStore() | ||
104 | + /** | ||
105 | + * * 组件动态注册 | ||
106 | + * @param projectData 项目数据 | ||
107 | + * @param isReplace 是否替换数据 | ||
108 | + * @returns | ||
109 | + */ | ||
110 | + const updateComponent = async (projectData: ChartEditStorage, isReplace = false, changeId = false) => { | ||
111 | + if (isReplace) { | ||
112 | + // 清除列表 | ||
113 | + chartEditStore.componentList = [] | ||
114 | + // 清除历史记录 | ||
115 | + chartHistoryStore.clearBackStack() | ||
116 | + chartHistoryStore.clearForwardStack() | ||
119 | } | 117 | } |
120 | - } | ||
121 | - | ||
122 | - if (e.isGroup) { | ||
123 | - ;(e as CreateComponentGroupType).groupList.forEach(groupItem => { | ||
124 | - intComponent(groupItem) | ||
125 | - }) | ||
126 | - } else { | ||
127 | - intComponent(e as CreateComponentType) | ||
128 | - } | ||
129 | - }) | 118 | + // 画布补丁处理 |
119 | + projectData.editCanvasConfig = canvasVersionUpdatePolyfill(projectData.editCanvasConfig) | ||
130 | 120 | ||
131 | - // 创建函数-重新创建是为了处理类种方法消失的问题 | ||
132 | - const create = async ( | ||
133 | - _componentInstance: CreateComponentType, | ||
134 | - callBack?: (componentInstance: CreateComponentType) => void | ||
135 | - ) => { | ||
136 | - // 补充 class 上的方法 | ||
137 | - let newComponent: CreateComponentType = await createComponent(_componentInstance.chartConfig) | ||
138 | - if (callBack) { | ||
139 | - if (changeId) { | ||
140 | - callBack(componentMerge(newComponent, { ..._componentInstance, id: getUUID() })) | ||
141 | - } else { | ||
142 | - callBack(componentMerge(newComponent, _componentInstance)) | ||
143 | - } | ||
144 | - } else { | ||
145 | - if (changeId) { | ||
146 | - chartEditStore.addComponentList( | ||
147 | - componentMerge(newComponent, { ..._componentInstance, id: getUUID() }), | ||
148 | - false, | ||
149 | - true | ||
150 | - ) | ||
151 | - } else { | ||
152 | - chartEditStore.addComponentList(componentMerge(newComponent, _componentInstance), false, true) | ||
153 | - } | ||
154 | - } | ||
155 | - } | 121 | + // 列表组件注册 |
122 | + projectData.componentList.forEach(async (e: CreateComponentType | CreateComponentGroupType) => { | ||
123 | + const intComponent = (target: CreateComponentType) => { | ||
124 | + if (!window['$vue'].component(target.chartConfig.chartKey)) { | ||
125 | + window['$vue'].component(target.chartConfig.chartKey, fetchChartComponent(target.chartConfig)) | ||
126 | + window['$vue'].component(target.chartConfig.conKey, fetchConfigComponent(target.chartConfig)) | ||
127 | + } | ||
128 | + } | ||
156 | 129 | ||
157 | - // 数据赋值 | ||
158 | - for (const key in projectData) { | ||
159 | - // 组件 | ||
160 | - if (key === ChartEditStoreEnum.COMPONENT_LIST) { | ||
161 | - let loadIndex = 0 | ||
162 | - const listLength = projectData[key].length | ||
163 | - for (const comItem of projectData[key]) { | ||
164 | - // 设置加载数量 | ||
165 | - let percentage = parseInt((parseFloat(`${++loadIndex / listLength}`) * 100).toString()) | ||
166 | - chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.PERCENTAGE, percentage) | ||
167 | - // 判断类型 | ||
168 | - if (comItem.isGroup) { | ||
169 | - // 创建分组 | ||
170 | - let groupClass = new PublicGroupConfigClass() | ||
171 | - if (changeId) { | ||
172 | - groupClass = componentMerge(groupClass, { ...comItem, id: getUUID() }) | 130 | + if (e.isGroup) { |
131 | + ;(e as CreateComponentGroupType).groupList.forEach(groupItem => { | ||
132 | + intComponent(groupItem) | ||
133 | + }) | ||
173 | } else { | 134 | } else { |
174 | - groupClass = componentMerge(groupClass, comItem) | 135 | + intComponent(e as CreateComponentType) |
175 | } | 136 | } |
137 | + }) | ||
176 | 138 | ||
177 | - // 异步注册子应用 | ||
178 | - const targetList: CreateComponentType[] = [] | ||
179 | - for (const groupItem of (comItem as CreateComponentGroupType).groupList) { | ||
180 | - await create(groupItem, e => { | ||
181 | - targetList.push(e) | ||
182 | - }) | 139 | + // 创建函数-重新创建是为了处理类种方法消失的问题 |
140 | + const create = async ( | ||
141 | + _componentInstance: CreateComponentType, | ||
142 | + callBack?: (componentInstance: CreateComponentType) => void | ||
143 | + ) => { | ||
144 | + // 补充 class 上的方法 | ||
145 | + let newComponent: CreateComponentType = await createComponent(_componentInstance.chartConfig) | ||
146 | + if (callBack) { | ||
147 | + if (changeId) { | ||
148 | + callBack(componentMerge(newComponent, {..._componentInstance, id: getUUID()})) | ||
149 | + } else { | ||
150 | + callBack(componentMerge(newComponent, _componentInstance)) | ||
151 | + } | ||
152 | + } else { | ||
153 | + if (changeId) { | ||
154 | + chartEditStore.addComponentList( | ||
155 | + componentMerge(newComponent, {..._componentInstance, id: getUUID()}), | ||
156 | + false, | ||
157 | + true | ||
158 | + ) | ||
159 | + } else { | ||
160 | + chartEditStore.addComponentList(componentMerge(newComponent, _componentInstance), false, true) | ||
161 | + } | ||
183 | } | 162 | } |
184 | - groupClass.groupList = targetList | ||
185 | - | ||
186 | - // 分组插入到列表 | ||
187 | - chartEditStore.addComponentList(groupClass, false, true) | ||
188 | - } else { | ||
189 | - await create(comItem as CreateComponentType) | ||
190 | - } | ||
191 | } | 163 | } |
192 | - } else { | ||
193 | - // 非组件(顺便排除脏数据) | ||
194 | - if (key !== 'editCanvasConfig' && key !== 'requestGlobalConfig') return | ||
195 | - componentMerge(chartEditStore[key], projectData[key], true) | ||
196 | - } | ||
197 | - } | ||
198 | 164 | ||
199 | - // 清除数量 | ||
200 | - chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.PERCENTAGE, 0) | ||
201 | - } | 165 | + // 数据赋值 |
166 | + for (const key in projectData) { | ||
167 | + // 组件 | ||
168 | + if (key === ChartEditStoreEnum.COMPONENT_LIST) { | ||
169 | + let loadIndex = 0 | ||
170 | + const listLength = projectData[key].length | ||
171 | + for (const comItem of projectData[key]) { | ||
172 | + // 设置加载数量 | ||
173 | + let percentage = parseInt((parseFloat(`${++loadIndex / listLength}`) * 100).toString()) | ||
174 | + chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.PERCENTAGE, percentage) | ||
175 | + // 判断类型 | ||
176 | + if (comItem.isGroup) { | ||
177 | + // 创建分组 | ||
178 | + let groupClass = new PublicGroupConfigClass() | ||
179 | + if (changeId) { | ||
180 | + groupClass = componentMerge(groupClass, {...comItem, id: getUUID()}) | ||
181 | + } else { | ||
182 | + groupClass = componentMerge(groupClass, comItem) | ||
183 | + } | ||
202 | 184 | ||
203 | - // 数据保存 | ||
204 | - const dataSyncUpdate = throttle(async (updateImg = true) => { | ||
205 | - if (!fetchRouteParamsLocation()) return | ||
206 | - window['$message'].success('保存成功!') | ||
207 | - // let projectId = chartEditStore.getProjectInfo[ProjectInfoEnum.PROJECT_ID] | ||
208 | - // if (projectId === null || projectId === '') { | ||
209 | - // window['$message'].error('数据初未始化成功,请刷新页面!') | ||
210 | - // return | ||
211 | - // } | 185 | + // 异步注册子应用 |
186 | + const targetList: CreateComponentType[] = [] | ||
187 | + for (const groupItem of (comItem as CreateComponentGroupType).groupList) { | ||
188 | + await create(groupItem, e => { | ||
189 | + targetList.push(e) | ||
190 | + }) | ||
191 | + } | ||
192 | + groupClass.groupList = targetList | ||
212 | 193 | ||
213 | - // chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START) | ||
214 | - | ||
215 | - // 异常处理:缩略图上传失败不影响JSON的保存 | ||
216 | - try { | ||
217 | - if (updateImg) { | ||
218 | - // 获取缩略图片 | ||
219 | - const range = document.querySelector('.go-edit-range') as HTMLElement | ||
220 | - // 生成图片 | ||
221 | - const canvasImage: HTMLCanvasElement = await html2canvas(range, { | ||
222 | - backgroundColor: null, | ||
223 | - allowTaint: true, | ||
224 | - useCORS: true | ||
225 | - }) | 194 | + // 分组插入到列表 |
195 | + chartEditStore.addComponentList(groupClass, false, true) | ||
196 | + } else { | ||
197 | + await create(comItem as CreateComponentType) | ||
198 | + } | ||
199 | + } | ||
200 | + } else { | ||
201 | + // 非组件(顺便排除脏数据) | ||
202 | + if (key !== 'editCanvasConfig' && key !== 'requestGlobalConfig') return | ||
203 | + componentMerge(chartEditStore[key], projectData[key], true) | ||
204 | + } | ||
205 | + } | ||
226 | 206 | ||
227 | - // 上传预览图 | ||
228 | - // let uploadParams = new FormData() | ||
229 | - // uploadParams.append( | ||
230 | - // 'object', | ||
231 | - // base64toFile(canvasImage.toDataURL(), `${fetchRouteParamsLocation()}_index_preview.png`) | ||
232 | - // ) | ||
233 | - // const uploadRes = await uploadFile(uploadParams) | ||
234 | - // 保存预览图 | ||
235 | - // if (uploadRes && uploadRes.code === ResultEnum.SUCCESS) { | ||
236 | - // await updateProjectApi({ | ||
237 | - // id: fetchRouteParamsLocation(), | ||
238 | - // indexImage: `${systemStore.getFetchInfo.OSSUrl}${uploadRes.data.fileName}` | ||
239 | - // }) | ||
240 | - // } | ||
241 | - } | ||
242 | - } catch (e) { | ||
243 | - console.log(e) | 207 | + // 清除数量 |
208 | + chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.PERCENTAGE, 0) | ||
244 | } | 209 | } |
245 | 210 | ||
246 | - // 保存数据 | ||
247 | - // let params = new FormData() | ||
248 | - // params.append('projectId', projectId) | ||
249 | - // params.append('content', JSONStringify(chartEditStore.getStorageInfo || {})) | ||
250 | - // const res = await saveProjectApi(params) | 211 | + /** |
212 | + * * 赋值全局数据 | ||
213 | + * @param projectData 项目数据 | ||
214 | + * @returns | ||
215 | + */ | ||
216 | + const updateStoreInfo = (projectData: { | ||
217 | + dataViewId: string, | ||
218 | + dataViewName: string, | ||
219 | + indexImage: string, | ||
220 | + id: string, | ||
221 | + state: number, | ||
222 | + dataViewContent: { id: string, content: string, enabled: boolean } | ||
223 | + }) => { | ||
224 | + const {dataViewId, dataViewName, indexImage, state, dataViewContent} = projectData | ||
225 | + // ID | ||
226 | + chartEditStore.setProjectInfo(ProjectInfoEnum.PROJECT_ID, dataViewId) | ||
227 | + // 名称 | ||
228 | + chartEditStore.setProjectInfo(ProjectInfoEnum.PROJECT_NAME, dataViewName) | ||
229 | + // 描述 | ||
230 | + chartEditStore.setProjectInfo(ProjectInfoEnum.REMARKS, dataViewContent?.id) | ||
231 | + // 缩略图 | ||
232 | + chartEditStore.setProjectInfo(ProjectInfoEnum.THUMBNAIL, indexImage) | ||
233 | + // 发布 | ||
234 | + chartEditStore.setProjectInfo(ProjectInfoEnum.RELEASE, state === 1) | ||
235 | + } | ||
236 | + // * 数据获取 | ||
237 | + const dataSyncFetch = async () => { | ||
238 | + // FIX:重新执行dataSyncFetch需清空chartEditStore.componentList,否则会导致图层重复 | ||
239 | + // 切换语言等操作会导致重新执行 dataSyncFetch,此时pinia中并未清空chartEditStore.componentList,导致图层重复 | ||
240 | + chartEditStore.componentList = [] | ||
241 | + chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START) | ||
242 | + try { | ||
243 | + const id = fetchRouteParamsLocation() | ||
244 | + const res = await getDataView(id) | ||
245 | + updateStoreInfo(res) | ||
246 | + // 更新全局数据 | ||
247 | + await updateComponent(JSONParse(res.dataViewContent.content)) | ||
248 | + return | ||
249 | + // else { | ||
250 | + // chartEditStore.setProjectInfo(ProjectInfoEnum.PROJECT_ID, fetchRouteParamsLocation()) | ||
251 | + // } | ||
252 | + setTimeout(() => { | ||
253 | + chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.SUCCESS) | ||
254 | + }, 1000) | ||
255 | + return | ||
256 | + // } | ||
257 | + // chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE) | ||
258 | + } catch (error) { | ||
259 | + chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE) | ||
260 | + // httpErrorHandle() | ||
261 | + } | ||
262 | + } | ||
263 | + // 数据保存 | ||
264 | + const dataSyncUpdate = throttle(async (updateImg = true) => { | ||
265 | + if (!fetchRouteParamsLocation()) return | ||
266 | + const projectId = chartEditStore.getProjectInfo[ProjectInfoEnum.PROJECT_ID] | ||
267 | + const id = chartEditStore.getProjectInfo[ProjectInfoEnum.REMARKS] | ||
268 | + const dataViewName = chartEditStore.getProjectInfo[ProjectInfoEnum.PROJECT_NAME] | ||
251 | 269 | ||
252 | - // if (res && res.code === ResultEnum.SUCCESS) { | ||
253 | - // // 成功状态 | ||
254 | - // setTimeout(() => { | ||
255 | - // chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.SUCCESS) | ||
256 | - // }, 1000) | ||
257 | - // return | ||
258 | - // } | ||
259 | - // 失败状态 | ||
260 | - // chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE) | ||
261 | - }, 3000) | ||
262 | - // * 定时处理 | ||
263 | - const intervalDataSyncUpdate = () => { | ||
264 | - // 定时获取数据 | ||
265 | - const syncTiming = setInterval(() => { | ||
266 | - dataSyncUpdate() | ||
267 | - }, saveInterval * 1000) | 270 | + if (projectId === null || projectId === '') { |
271 | + window['$message'].error('数据初未始化成功,请刷新页面!') | ||
272 | + return | ||
273 | + } | ||
274 | + chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START) | ||
275 | + // 异常处理:缩略图上传失败不影响JSON的保存 | ||
276 | + // try { | ||
277 | + // if (updateImg) { | ||
278 | + // // 获取缩略图片 | ||
279 | + // const range = document.querySelector('.go-edit-range') as HTMLElement | ||
280 | + // // 生成图片 | ||
281 | + // const canvasImage: HTMLCanvasElement = await html2canvas(range, { | ||
282 | + // backgroundColor: null, | ||
283 | + // allowTaint: true, | ||
284 | + // useCORS: true | ||
285 | + // }) | ||
286 | + // | ||
287 | + // // 上传预览图 | ||
288 | + // const uploadParams = new FormData() | ||
289 | + // uploadParams.append( | ||
290 | + // 'object', | ||
291 | + // base64toFile(canvasImage.toDataURL(), `${fetchRouteParamsLocation()}_index_preview.png`) | ||
292 | + // ) | ||
293 | + // const uploadRes = await uploadFile(uploadParams) | ||
294 | + // // 保存预览图 | ||
295 | + // if (uploadRes && uploadRes.code === ResultEnum.SUCCESS) { | ||
296 | + // await updateProjectApi({ | ||
297 | + // id: fetchRouteParamsLocation(), | ||
298 | + // thumbnail: `${systemStore.getFetchInfo.OSSUrl}${uploadRes.data.fileName}` | ||
299 | + // }) | ||
300 | + // } | ||
301 | + // } | ||
302 | + // } catch (e) { | ||
303 | + // console.log(e) | ||
304 | + // } | ||
305 | + // 保存数据 | ||
306 | + const saveContent = { | ||
307 | + dataViewContent: { | ||
308 | + id, | ||
309 | + content: JSONStringify(chartEditStore.getStorageInfo || {}) | ||
310 | + }, | ||
311 | + dataViewName, | ||
312 | + dataViewId: projectId | ||
313 | + } | ||
314 | + const res = await contentUpdateApi(saveContent) | ||
315 | + window['$message'].success('保存成功!') | ||
316 | + // 成功状态 | ||
317 | + setTimeout(() => { | ||
318 | + chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.SUCCESS) | ||
319 | + }, 1000) | ||
320 | + return | ||
321 | + // 失败状态 | ||
322 | + // chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE) | ||
323 | + }, 3000) | ||
324 | + // * 定时处理 | ||
325 | + const intervalDataSyncUpdate = () => { | ||
326 | + // 定时获取数据 | ||
327 | + const syncTiming = setInterval(() => { | ||
328 | + dataSyncUpdate() | ||
329 | + }, saveInterval * 1000) | ||
268 | 330 | ||
269 | - // 销毁 | ||
270 | - onUnmounted(() => { | ||
271 | - clearInterval(syncTiming) | ||
272 | - }) | ||
273 | - } | ||
274 | - return { | ||
275 | - updateComponent, | ||
276 | - dataSyncUpdate, | ||
277 | - intervalDataSyncUpdate | ||
278 | - } | 331 | + // 销毁 |
332 | + onUnmounted(() => { | ||
333 | + clearInterval(syncTiming) | ||
334 | + }) | ||
335 | + } | ||
336 | + return { | ||
337 | + updateComponent, | ||
338 | + dataSyncFetch, | ||
339 | + dataSyncUpdate, | ||
340 | + intervalDataSyncUpdate | ||
341 | + } | ||
279 | } | 342 | } |
@@ -36,12 +36,17 @@ | @@ -36,12 +36,17 @@ | ||
36 | import { computed, ref, watch } from 'vue' | 36 | import { computed, ref, watch } from 'vue' |
37 | import { MonacoEditor } from '@/components/Pages/MonacoEditor' | 37 | import { MonacoEditor } from '@/components/Pages/MonacoEditor' |
38 | import { SavePageEnum } from '@/enums/editPageEnum' | 38 | import { SavePageEnum } from '@/enums/editPageEnum' |
39 | -import { getSessionStorageInfo } from '../preview/utils' | 39 | +import { getSessionStorageInfo, } from '../preview/utils' |
40 | import type { ChartEditStorageType } from '../preview/index.d' | 40 | import type { ChartEditStorageType } from '../preview/index.d' |
41 | -import { setSessionStorage, JSONStringify, JSONParse, setTitle } from '@/utils' | 41 | +import { setSessionStorage, JSONStringify, JSONParse, setTitle,fetchRouteParamsLocation } from '@/utils' |
42 | import { StorageEnum } from '@/enums/storageEnum' | 42 | import { StorageEnum } from '@/enums/storageEnum' |
43 | import { icon } from '@/plugins' | 43 | import { icon } from '@/plugins' |
44 | +import { useSync } from '@/views/chart/hooks/useSync.hook' | ||
45 | +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' | ||
46 | +import { ProjectInfoEnum } from '@/store/modules/chartEditStore/chartEditStore.d' | ||
44 | 47 | ||
48 | +const chartEditStore = useChartEditStore() | ||
49 | +const { dataSyncUpdate } = useSync() | ||
45 | const { ChevronBackOutlineIcon, DownloadIcon } = icon.ionicons5 | 50 | const { ChevronBackOutlineIcon, DownloadIcon } = icon.ionicons5 |
46 | const showOpenFilePicker: Function = (window as any).showOpenFilePicker | 51 | const showOpenFilePicker: Function = (window as any).showOpenFilePicker |
47 | const content = ref('') | 52 | const content = ref('') |
@@ -94,6 +99,11 @@ async function updateSync() { | @@ -94,6 +99,11 @@ async function updateSync() { | ||
94 | const detail = JSONParse(content.value) | 99 | const detail = JSONParse(content.value) |
95 | delete detail.id | 100 | delete detail.id |
96 | // 保持id不变 | 101 | // 保持id不变 |
102 | + // 带后端版本额外处理请求 | ||
103 | + if (dataSyncUpdate) { | ||
104 | + chartEditStore.setProjectInfo(ProjectInfoEnum.PROJECT_ID, fetchRouteParamsLocation()) | ||
105 | + await dataSyncUpdate(false) // JSON界面保存不上传缩略图 | ||
106 | + } | ||
97 | window.opener.dispatchEvent(new CustomEvent(SavePageEnum.JSON, { detail })) | 107 | window.opener.dispatchEvent(new CustomEvent(SavePageEnum.JSON, { detail })) |
98 | } catch (e) { | 108 | } catch (e) { |
99 | window['$message'].error('内容格式有误') | 109 | window['$message'].error('内容格式有误') |
@@ -27,8 +27,8 @@ | @@ -27,8 +27,8 @@ | ||
27 | </div> | 27 | </div> |
28 | <template #action> | 28 | <template #action> |
29 | <div class="go-flex-items-center list-footer" justify="space-between"> | 29 | <div class="go-flex-items-center list-footer" justify="space-between"> |
30 | - <n-text class="go-ellipsis-1" :title="cardData.title"> | ||
31 | - {{ cardData.title || '' }} | 30 | + <n-text class="go-ellipsis-1" :title="cardData.name"> |
31 | + {{ cardData.name || '' }} | ||
32 | </n-text> | 32 | </n-text> |
33 | <!-- 工具 --> | 33 | <!-- 工具 --> |
34 | <div class="go-flex-items-center list-footer-ri"> | 34 | <div class="go-flex-items-center list-footer-ri"> |
@@ -37,12 +37,12 @@ | @@ -37,12 +37,12 @@ | ||
37 | <n-badge | 37 | <n-badge |
38 | class="go-animation-twinkle" | 38 | class="go-animation-twinkle" |
39 | dot | 39 | dot |
40 | - :color="cardData.release ? '#34c749' : '#fcbc40'" | 40 | + :color="cardData.state===0 ? '#34c749' : '#fcbc40'" |
41 | ></n-badge> | 41 | ></n-badge> |
42 | {{ | 42 | {{ |
43 | - cardData.release | ||
44 | - ? $t('project.release') | ||
45 | - : $t('project.unreleased') | 43 | + cardData.state===0 |
44 | + ?'未发布' | ||
45 | + : '已发布' | ||
46 | }} | 46 | }} |
47 | </n-text> | 47 | </n-text> |
48 | 48 |
1 | import { ref } from 'vue' | 1 | import { ref } from 'vue' |
2 | import { goDialog } from '@/utils' | 2 | import { goDialog } from '@/utils' |
3 | import { DialogEnum } from '@/enums/pluginEnum' | 3 | import { DialogEnum } from '@/enums/pluginEnum' |
4 | -import { ChartList } from '../../..' | 4 | +// import { ChartList } from '../../../index.d' |
5 | // 数据初始化 | 5 | // 数据初始化 |
6 | export const useDataListInit = () => { | 6 | export const useDataListInit = () => { |
7 | - const list = ref<ChartList>([ | ||
8 | - { | ||
9 | - id: 1, | ||
10 | - title: '物料1-假数据不可用', | ||
11 | - release: true, | ||
12 | - label: '官方案例' | ||
13 | - }, | ||
14 | - { | ||
15 | - id: 2, | ||
16 | - title: '物料2-假数据不可用', | ||
17 | - release: false, | ||
18 | - label: '官方案例' | ||
19 | - }, | ||
20 | - { | ||
21 | - id: 3, | ||
22 | - title: '物料3-假数据不可用', | ||
23 | - release: false, | ||
24 | - label: '官方案例' | ||
25 | - }, | ||
26 | - { | ||
27 | - id: 4, | ||
28 | - title: '物料4-假数据不可用', | ||
29 | - release: false, | ||
30 | - label: '官方案例' | ||
31 | - }, | ||
32 | - { | ||
33 | - id: 5, | ||
34 | - title: '物料5-假数据不可用', | ||
35 | - release: false, | ||
36 | - label: '官方案例' | ||
37 | - } | ||
38 | - ]) | 7 | + // const list = ref<ChartList>([ |
8 | + // { | ||
9 | + // id: 'b6fab428-80d3-42aa-992c-bc7da5f52489', | ||
10 | + // title: '物料1-假数据不可用', | ||
11 | + // release: true, | ||
12 | + // label: '官方案例' | ||
13 | + // }, | ||
14 | + // { | ||
15 | + // id: '9c5e3ace-dd8f-4334-9c7e-607d9f74755c', | ||
16 | + // title: '物料2-假数据不可用', | ||
17 | + // release: false, | ||
18 | + // label: '官方案例' | ||
19 | + // }, | ||
20 | + // { | ||
21 | + // id: '427a06cf-ddd5-4239-bf96-3d97ab5bf814', | ||
22 | + // title: '物料3-假数据不可用', | ||
23 | + // release: false, | ||
24 | + // label: '官方案例' | ||
25 | + // }, | ||
26 | + // { | ||
27 | + // id: 4, | ||
28 | + // title: '物料4-假数据不可用', | ||
29 | + // release: false, | ||
30 | + // label: '官方案例' | ||
31 | + // }, | ||
32 | + // { | ||
33 | + // id: 5, | ||
34 | + // title: '物料5-假数据不可用', | ||
35 | + // release: false, | ||
36 | + // label: '官方案例' | ||
37 | + // } | ||
38 | + // ]) | ||
39 | 39 | ||
40 | // 删除 | 40 | // 删除 |
41 | const deleteHandle = (cardData: object, index: number) => { | 41 | const deleteHandle = (cardData: object, index: number) => { |
42 | - goDialog({ | ||
43 | - type: DialogEnum.DELETE, | ||
44 | - promise: true, | ||
45 | - onPositiveCallback: () => | ||
46 | - new Promise(res => setTimeout(() => res(1), 1000)), | ||
47 | - promiseResCallback: (e: any) => { | ||
48 | - window.$message.success('删除成功') | ||
49 | - list.value.splice(index, 1) | ||
50 | - } | ||
51 | - }) | 42 | + // goDialog({ |
43 | + // type: DialogEnum.DELETE, | ||
44 | + // promise: true, | ||
45 | + // onPositiveCallback: () => | ||
46 | + // new Promise(res => setTimeout(() => res(1), 1000)), | ||
47 | + // promiseResCallback: (e: any) => { | ||
48 | + // window.$message.success('删除成功') | ||
49 | + // list.value.splice(index, 1) | ||
50 | + // } | ||
51 | + // }) | ||
52 | } | 52 | } |
53 | 53 | ||
54 | return { | 54 | return { |
55 | - list, | 55 | + // list, |
56 | deleteHandle | 56 | deleteHandle |
57 | } | 57 | } |
58 | } | 58 | } |
1 | <template> | 1 | <template> |
2 | <div class="go-items-list"> | 2 | <div class="go-items-list"> |
3 | <n-grid | 3 | <n-grid |
4 | - :x-gap="20" | ||
5 | - :y-gap="20" | ||
6 | - cols="2 s:2 m:3 l:4 xl:4 xxl:4" | ||
7 | - responsive="screen" | 4 | + :x-gap="20" |
5 | + :y-gap="20" | ||
6 | + cols="2 s:2 m:3 l:4 xl:4 xxl:4" | ||
7 | + responsive="screen" | ||
8 | > | 8 | > |
9 | <n-grid-item v-for="(item, index) in list" :key="item.id"> | 9 | <n-grid-item v-for="(item, index) in list" :key="item.id"> |
10 | <project-items-card | 10 | <project-items-card |
11 | - :cardData="item" | ||
12 | - @resize="resizeHandle" | ||
13 | - @delete="deleteHandle($event, index)" | ||
14 | - @edit="editHandle" | 11 | + :cardData="item" |
12 | + @resize="resizeHandle" | ||
13 | + @delete="deleteHandle($event, index)" | ||
14 | + @edit="editHandle" | ||
15 | ></project-items-card> | 15 | ></project-items-card> |
16 | </n-grid-item> | 16 | </n-grid-item> |
17 | </n-grid> | 17 | </n-grid> |
18 | <div class="list-pagination"> | 18 | <div class="list-pagination"> |
19 | <n-pagination | 19 | <n-pagination |
20 | - :item-count="10" | ||
21 | - :page-sizes="[10, 20, 30, 40]" | ||
22 | - show-size-picker | 20 | + :item-count="10" |
21 | + :page-sizes="[10, 20, 30, 40]" | ||
22 | + show-size-picker | ||
23 | /> | 23 | /> |
24 | </div> | 24 | </div> |
25 | </div> | 25 | </div> |
26 | <project-items-modal-card | 26 | <project-items-modal-card |
27 | - v-if="modalData" | ||
28 | - :modalShow="modalShow" | ||
29 | - :cardData="modalData" | ||
30 | - @close="closeModal" | ||
31 | - @edit="editHandle" | 27 | + v-if="modalData" |
28 | + :modalShow="modalShow" | ||
29 | + :cardData="modalData" | ||
30 | + @close="closeModal" | ||
31 | + @edit="editHandle" | ||
32 | ></project-items-modal-card> | 32 | ></project-items-modal-card> |
33 | </template> | 33 | </template> |
34 | 34 | ||
35 | <script setup lang="ts"> | 35 | <script setup lang="ts"> |
36 | -import { ProjectItemsCard } from '../ProjectItemsCard/index' | ||
37 | -import { ProjectItemsModalCard } from '../ProjectItemsModalCard/index' | ||
38 | -import { icon } from '@/plugins' | ||
39 | -import { useModalDataInit } from './hooks/useModal.hook' | ||
40 | -import { useDataListInit } from './hooks/useData.hook' | 36 | +import {ProjectItemsCard} from '../ProjectItemsCard/index' |
37 | +import {ProjectItemsModalCard} from '../ProjectItemsModalCard/index' | ||
38 | +import {icon} from '@/plugins' | ||
39 | +import {useModalDataInit} from './hooks/useModal.hook' | ||
40 | +import {useDataListInit} from './hooks/useData.hook' | ||
41 | +import {getDataViewList} from "@/api/external/contentSave/content"; | ||
42 | +import {onMounted, ref} from "vue"; | ||
43 | +import {ChartList} from '../../index.d' | ||
44 | + | ||
45 | +const {CopyIcon, EllipsisHorizontalCircleSharpIcon} = icon.ionicons5 | ||
46 | +const {deleteHandle} = useDataListInit() | ||
47 | +const {modalData, modalShow, closeModal, resizeHandle, editHandle} = useModalDataInit() | ||
48 | + | ||
49 | + | ||
50 | +const list = ref<ChartList>([]) | ||
51 | +onMounted(async () => { | ||
52 | + const {items} = await getDataViewList({page: 1, pageSize: 10}) | ||
53 | + list.value = items | ||
54 | +}) | ||
41 | 55 | ||
42 | -const { CopyIcon, EllipsisHorizontalCircleSharpIcon } = icon.ionicons5 | ||
43 | -const { list, deleteHandle } = useDataListInit() | ||
44 | -const { modalData, modalShow, closeModal, resizeHandle, editHandle } = useModalDataInit() | ||
45 | </script> | 56 | </script> |
46 | 57 | ||
47 | <style lang="scss" scoped> | 58 | <style lang="scss" scoped> |
1 | export type Chartype = { | 1 | export type Chartype = { |
2 | id: number | string | 2 | id: number | string |
3 | - title: string // 标题 | ||
4 | - label: string // 标签 | ||
5 | - release: boolean // 0未发布 | 1已发布 | 3 | + title?: string // 标题 |
4 | + label:? string // 标签 | ||
5 | + release?: boolean // 0未发布 | 1已发布 | ||
6 | + name: string // 0未发布 | 1已发布 | ||
7 | + state: number // 0未发布 | 1已发布 | ||
6 | } | 8 | } |
7 | 9 | ||
8 | -export type ChartList = Chartype[] | ||
10 | +export type ChartList = Chartype[] |