diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6c30227..eb14f9e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6 +1,8 @@ lockfileVersion: 5.4 specifiers: + '@amap/amap-jsapi-loader': ^1.0.1 + '@amap/amap-jsapi-types': ^0.0.8 '@commitlint/cli': ^17.0.2 '@commitlint/config-conventional': ^17.0.2 '@types/color': ^3.0.3 @@ -65,6 +67,8 @@ specifiers: vuedraggable: ^4.1.0 dependencies: + '@amap/amap-jsapi-loader': 1.0.1 + '@amap/amap-jsapi-types': 0.0.8 '@types/color': 3.0.3 '@types/crypto-js': 4.1.1 '@types/keymaster': 1.6.30 @@ -132,6 +136,14 @@ devDependencies: packages: + /@amap/amap-jsapi-loader/1.0.1: + resolution: {integrity: sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==} + dev: false + + /@amap/amap-jsapi-types/0.0.8: + resolution: {integrity: sha512-q0FyZDIJcXjsMLGc3oS9rjfJsErOvt9rcp6AgzY4k14vo7bBhdq4eKwoSdVp/pYjR/rfaKBns5v10ycZOFwf/A==} + dev: false + /@ampproject/remapping/2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} diff --git a/src/App.vue b/src/App.vue index 1865e459..2fa191d8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,9 +1,9 @@ <template> <n-config-provider - :locale="zhCN" :theme="darkTheme" :hljs="hljsTheme" - :date-locale="dateZhCN" + :locale="locale" + :date-locale="dateLocale" :theme-overrides="overridesTheme" > <go-app-provider> @@ -14,11 +14,10 @@ </template> <script lang="ts" setup> -import { zhCN, dateZhCN, NConfigProvider } from 'naive-ui' +import { NConfigProvider } from 'naive-ui' import { GoAppProvider } from '@/components/GoAppProvider' import { I18n } from '@/components/I18n' - -import { useDarkThemeHook, useThemeOverridesHook, useCode } from '@/hooks' +import { useDarkThemeHook, useThemeOverridesHook, useCode, useLang } from '@/hooks' // 暗黑主题 const darkTheme = useDarkThemeHook() @@ -28,4 +27,8 @@ const overridesTheme = useThemeOverridesHook() // 代码主题 const hljsTheme = useCode() + +// 全局语言 +const { locale, dateLocale } = useLang() + </script> diff --git a/src/hooks/index.ts b/src/hooks/index.ts index bc9825fb..5ecfe3dd 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -2,4 +2,5 @@ export * from '@/hooks/useTheme.hook' export * from '@/hooks/usePreviewScale.hook' export * from '@/hooks/useCode.hook' export * from '@/hooks/useChartDataFetch.hook' -export * from '@/hooks/useLifeHandler.hook' \ No newline at end of file +export * from '@/hooks/useLifeHandler.hook' +export * from '@/hooks/useLang.hook' \ No newline at end of file diff --git a/src/hooks/useLang.hook.ts b/src/hooks/useLang.hook.ts new file mode 100644 index 00000000..f165ce6d --- /dev/null +++ b/src/hooks/useLang.hook.ts @@ -0,0 +1,24 @@ +import { computed } from 'vue' +import { LangEnum } from '@/enums/styleEnum' +import { useLangStore } from '@/store/modules/langStore/langStore' +import { zhCN, enUS, dateEnUS, dateZhCN } from 'naive-ui' + +type LangStoreType = typeof useLangStore + +// 语言切换 +export const useLang = () => { + const lang = useLangStore() + + const locale = computed(() => { + return lang.getLang === LangEnum.ZH ? zhCN : enUS + }) + + const dateLocale = computed(() => { + return lang.getLang === LangEnum.ZH ? dateZhCN : dateEnUS + }) + + return { + locale, + dateLocale + } +} diff --git a/src/packages/components/Decorates/Three/ThreeEarth01/index.vue b/src/packages/components/Decorates/Three/ThreeEarth01/index.vue index 057dac40..5fd62d6a 100644 --- a/src/packages/components/Decorates/Three/ThreeEarth01/index.vue +++ b/src/packages/components/Decorates/Three/ThreeEarth01/index.vue @@ -67,7 +67,7 @@ watch( onMounted(() => { try { if (navigator.userAgent.indexOf('Chrome') < -1 || navigator.userAgent.indexOf('Edg') > -1) { - window['$message'].error('此组件仅在【谷歌】浏览器上能正常展示!') + window['$message'].error('三维地图组件仅在【谷歌】浏览器上能正常展示!') chartEditStore.removeComponentList(undefined, false) return } diff --git a/src/packages/components/Informations/Mores/Iframe/config.ts b/src/packages/components/Informations/Mores/Iframe/config.ts index 514966ff..2e96c211 100644 --- a/src/packages/components/Informations/Mores/Iframe/config.ts +++ b/src/packages/components/Informations/Mores/Iframe/config.ts @@ -6,7 +6,7 @@ import cloneDeep from 'lodash/cloneDeep' export const option = { // 网站路径 - dataset: "https://cn.vuejs.org/", + dataset: "https://www.mtruning.club/", // 圆角 borderRadius: 10 } diff --git a/src/settings/pathConst.ts b/src/settings/pathConst.ts index 74cbb91d..d3c604a6 100644 --- a/src/settings/pathConst.ts +++ b/src/settings/pathConst.ts @@ -1,10 +1,10 @@ // * 外部路径地址 // 项目文档地址 -export const docPath = "http://www.mtruning.club:81/" +export const docPath = "https://www.mtruning.club/" // 项目源码 -export const giteeSourceCodePath = "https://gitee.com/MTrun/go-view/" +export const giteeSourceCodePath = "https://gitee.com/dromara/go-view" // 赞助 -export const sponsorPath = "http://www.mtruning.club:81/more/sponsor.html" +export const sponsorPath = "https://www.mtruning.club/sponsor/" diff --git a/src/store/index.ts b/src/store/index.ts index efaf6c97..4e303ea9 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,10 +1,10 @@ import type { App } from 'vue'; import { createPinia } from 'pinia'; -const store = createPinia(); +const pinia = createPinia(); export function setupStore(app: App<Element>) { - app.use(store); + app.use(pinia); } -export { store }; +export { pinia }; diff --git a/src/store/modules/langStore/langStore.ts b/src/store/modules/langStore/langStore.ts index 9eb7bdeb..d1795e6c 100644 --- a/src/store/modules/langStore/langStore.ts +++ b/src/store/modules/langStore/langStore.ts @@ -6,10 +6,8 @@ import i18n from '@/i18n/index' import { setLocalStorage, getLocalStorage, reloadRoutePage } from '@/utils' import { StorageEnum } from '@/enums/storageEnum' import { useSettingStore } from '@/store/modules/settingStore/settingStore' -const settingStore = useSettingStore() const { GO_LANG_STORE } = StorageEnum - const storageLang: LangStateType = getLocalStorage(GO_LANG_STORE) // 语言 @@ -17,7 +15,7 @@ export const useLangStore = defineStore({ id: 'useLangStore', state: (): LangStateType => storageLang || { - lang, + lang }, getters: { getLang(): LangEnum { @@ -26,6 +24,8 @@ export const useLangStore = defineStore({ }, actions: { changeLang(lang: LangEnum): void { + const settingStore = useSettingStore() + if (this.lang === lang) return this.lang = lang i18n.global.locale = lang diff --git a/src/views/chart/ContentConfigurations/index.vue b/src/views/chart/ContentConfigurations/index.vue index 0f8a8609..110a3c2f 100644 --- a/src/views/chart/ContentConfigurations/index.vue +++ b/src/views/chart/ContentConfigurations/index.vue @@ -14,7 +14,7 @@ @collapse="collapsedHandle" @expand="expandHandle" > - <content-box class="go-content-layers go-boderbox" :show-top="false" :depth="2"> + <content-box class="go-content-configurations go-boderbox" :show-top="false" :depth="2"> <!-- 页面配置 --> <n-tabs v-if="!selectTarget" class="tabs-box" size="small" type="segment"> <n-tab-pane @@ -160,7 +160,7 @@ const chartsTabList = [ </script> <style lang="scss" scoped> -@include go(content-layers) { +@include go(content-configurations) { overflow: hidden; .tabs-box { padding: 10px; diff --git a/src/views/chart/ContentEdit/components/EditRule/index.vue b/src/views/chart/ContentEdit/components/EditRule/index.vue index e297582f..2e98460f 100644 --- a/src/views/chart/ContentEdit/components/EditRule/index.vue +++ b/src/views/chart/ContentEdit/components/EditRule/index.vue @@ -12,14 +12,18 @@ </template> <script setup lang="ts"> -import { ref, toRefs, computed, watch } from 'vue' +import { ref, toRefs, computed, watch, nextTick, onBeforeUnmount } from 'vue' import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' import { useDesignStore } from '@/store/modules/designStore/designStore' +import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore' const chartEditStore = useChartEditStore() +const chartLayoutStore = useChartLayoutStore() const designStore = useDesignStore() const { width, height } = toRefs(chartEditStore.getEditCanvasConfig) +const { scale, lockScale } = toRefs(chartEditStore.getEditCanvas) +const { getLayers, getCharts, getDetails } = toRefs(chartLayoutStore) const configShow = ref(true) @@ -49,25 +53,47 @@ const canvasBox = () => { } } -const scale = computed(() => { - return chartEditStore.getEditCanvas.scale -}) - // 颜色 const themeColor = computed(() => { return designStore.getAppTheme }) // 处理标尺重制大小 +const ruleChangeHandle = () => { + configShow.value = false + setTimeout(() => { + configShow.value = true + }) +} + +const ruleChangeHandleTimeOut = () => { + if (lockScale.value) { + setTimeout(() => { + ruleChangeHandle() + }, 500) + } +} + watch( () => scale.value, - () => { - configShow.value = false - setTimeout(() => { - configShow.value = true - }) - } + () => ruleChangeHandle() ) + +watch( + () => getLayers.value, + () => ruleChangeHandleTimeOut() +) + +watch( + () => getCharts.value, + () => ruleChangeHandleTimeOut() +) + +watch( + () => getDetails.value, + () => ruleChangeHandleTimeOut() +) + </script> <style> diff --git a/src/views/edit/index.vue b/src/views/edit/index.vue index b9534025..b67efa28 100644 --- a/src/views/edit/index.vue +++ b/src/views/edit/index.vue @@ -55,8 +55,8 @@ getDataBySession() // 返回父窗口 function back() { - opener.name = Date.now() - window.open(opener.location.href, opener.name) + window.opener.name = Date.now() + window.open(window.opener.location.href, window.opener.name) } // 导入json文本 @@ -71,7 +71,7 @@ async function importJSON() { } // 同步 [画布页失去焦点时同步数据到JSON页,JSON页Ctrl+S 时同步数据到画布页] -opener.addEventListener(SavePageEnum.CHART, (e: any) => { +window.opener.addEventListener(SavePageEnum.CHART, (e: any) => { setSessionStorage(StorageEnum.GO_CHART_STORAGE_LIST, [e.detail]) content.value = JSON.stringify(e.detail, undefined, 2) }) @@ -87,14 +87,14 @@ addEventListener('blur', updateSync) // 同步更新 function updateSync() { - if (!opener) { + if (!window.opener) { return window['$message'].error('源窗口已关闭,视图同步失败') } try { const detail = JSON.parse(content.value) delete detail.id // 保持id不变 - opener.dispatchEvent(new CustomEvent(SavePageEnum.JSON, { detail })) + window.opener.dispatchEvent(new CustomEvent(SavePageEnum.JSON, { detail })) } catch (e) { window['$message'].error('内容格式有误') console.log(e) diff --git a/src/views/preview/wrapper.vue b/src/views/preview/wrapper.vue index 242910be..d209438a 100644 --- a/src/views/preview/wrapper.vue +++ b/src/views/preview/wrapper.vue @@ -1,5 +1,5 @@ <template> - <Preview :key="key"></Preview> + <preview :key="key"></preview> </template> <script setup lang="ts"> @@ -16,10 +16,10 @@ let localStorageInfo: ChartEditStorageType = getSessionStorageInfo() as ChartEdi // 数据变更 -> 同步sessionStorage -> reload页面 (重新执行Mounted) ;[SavePageEnum.JSON, SavePageEnum.CHART].forEach((saveEvent: string) => { - opener.addEventListener(saveEvent, (e: any) => { + if (!window.opener) return + window.opener.addEventListener(saveEvent, (e: any) => { setSessionStorage(StorageEnum.GO_CHART_STORAGE_LIST, [{ ...e.detail, id: localStorageInfo.id }]) key.value = Date.now() }) }) - </script> diff --git a/types/global.d.ts b/types/global.d.ts index cceade09..1b11026a 100644 --- a/types/global.d.ts +++ b/types/global.d.ts @@ -7,6 +7,8 @@ interface Window { $vue: any // 键盘按键记录 $KeyboardActive?: { [T: string]: boolean } + // 编辑 JSON 的存储对象 + opener: any } declare type Recordable<T = any> = Record<string, T>