From 1401a091ebc54dffbb0ca60c36d364f3aeca5ba1 Mon Sep 17 00:00:00 2001
From: QuietlyChan <1013893148@qq.com>
Date: Fri, 28 Jul 2023 10:11:34 +0800
Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=85=A8?=
 =?UTF-8?q?=E5=B1=8F=E6=8C=89=E9=92=AE=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../images/chart/decorates/fullScreen.png     | Bin 0 -> 6161 bytes
 .../Decorates/Mores/FullScreen/config.ts      |  17 +++
 .../Decorates/Mores/FullScreen/config.vue     |  28 +++++
 .../Decorates/Mores/FullScreen/index.ts       |  14 +++
 .../Decorates/Mores/FullScreen/index.vue      | 111 ++++++++++++++++++
 .../components/Decorates/Mores/index.ts       |  12 +-
 6 files changed, 181 insertions(+), 1 deletion(-)
 create mode 100644 src/assets/images/chart/decorates/fullScreen.png
 create mode 100644 src/packages/components/Decorates/Mores/FullScreen/config.ts
 create mode 100644 src/packages/components/Decorates/Mores/FullScreen/config.vue
 create mode 100644 src/packages/components/Decorates/Mores/FullScreen/index.ts
 create mode 100644 src/packages/components/Decorates/Mores/FullScreen/index.vue

diff --git a/src/assets/images/chart/decorates/fullScreen.png b/src/assets/images/chart/decorates/fullScreen.png
new file mode 100644
index 0000000000000000000000000000000000000000..04167ed69e0f1fdb4bcaa774cf4af1f2c9a9a2a7
GIT binary patch
literal 6161
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
P(!9E|j#8C^P1yefNS3H7

literal 0
HcmV?d00001

diff --git a/src/packages/components/Decorates/Mores/FullScreen/config.ts b/src/packages/components/Decorates/Mores/FullScreen/config.ts
new file mode 100644
index 00000000..f6a1a938
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FullScreen/config.ts
@@ -0,0 +1,17 @@
+import { PublicConfigClass } from '@/packages/public'
+import { CreateComponentType } from '@/packages/index.d'
+import { FullScreenConfig } from './index'
+import cloneDeep from 'lodash/cloneDeep'
+
+export const option = {
+  border: 6,
+  bgColor: '#84a5e9',
+  borderColor: '#84a5e9'
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+  public key = FullScreenConfig.key
+  public attr = { w: 150, h: 150 }
+  public chartConfig = cloneDeep(FullScreenConfig)
+  public option = cloneDeep(option)
+}
diff --git a/src/packages/components/Decorates/Mores/FullScreen/config.vue b/src/packages/components/Decorates/Mores/FullScreen/config.vue
new file mode 100644
index 00000000..450752d7
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FullScreen/config.vue
@@ -0,0 +1,28 @@
+<template>
+  <CollapseItem name="全屏按钮" expanded>
+    <SettingItemBox name="按钮">
+      <SettingItem name="背景色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.bgColor"></n-color-picker>
+      </SettingItem>
+      <SettingItem name="边框色">
+        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.borderColor"></n-color-picker>
+      </SettingItem>
+      <SettingItem name="边框大小">
+        <n-input-number v-model:value="optionData.border" size="small" :step="0.5" :min="0"></n-input-number>
+      </SettingItem>
+    </SettingItemBox>
+  </CollapseItem>
+</template>
+
+<script setup lang="ts">
+import { PropType } from 'vue'
+import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
+import { option } from './config'
+
+const props = defineProps({
+  optionData: {
+    type: Object as PropType<typeof option>,
+    required: true
+  }
+})
+</script>
diff --git a/src/packages/components/Decorates/Mores/FullScreen/index.ts b/src/packages/components/Decorates/Mores/FullScreen/index.ts
new file mode 100644
index 00000000..19e37683
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FullScreen/index.ts
@@ -0,0 +1,14 @@
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
+
+export const FullScreenConfig: ConfigType = {
+  key: 'FullScreen',
+  chartKey: 'VFullScreen',
+  conKey: 'VCFullScreen',
+  title: '全屏按钮',
+  category: ChatCategoryEnum.MORE,
+  categoryName: ChatCategoryEnumName.MORE,
+  package: PackagesCategoryEnum.DECORATES,
+  chartFrame: ChartFrameEnum.STATIC,
+  image: 'fullScreen.png'
+}
diff --git a/src/packages/components/Decorates/Mores/FullScreen/index.vue b/src/packages/components/Decorates/Mores/FullScreen/index.vue
new file mode 100644
index 00000000..805c8294
--- /dev/null
+++ b/src/packages/components/Decorates/Mores/FullScreen/index.vue
@@ -0,0 +1,111 @@
+<template>
+  <svg @click="toggleFullscreen" v-if="!isFullscreen" viewBox="0 0 1024 1024">
+    <path
+      d="M665.6 1017.6c-19.2 0-38.4-19.2-38.4-38.4s19.2-38.4 38.4-38.4h268.8l6.4-268.8c0-19.2 19.2-38.4 38.4-38.4s38.4 19.2 38.4 38.4v294.4c0 32-25.6 51.2-51.2 51.2h-300.8zM51.2 396.8c-19.2 0-38.4-19.2-38.4-38.4V64C12.8 32 38.4 12.8 64 12.8h294.4c19.2 0 38.4 19.2 38.4 38.4s-19.2 38.4-38.4 38.4H89.6v268.8c0 19.2-19.2 38.4-38.4 38.4zM64 1017.6c-32 0-51.2-25.6-51.2-51.2v-294.4c0-19.2 19.2-38.4 38.4-38.4s38.4 19.2 38.4 38.4v217.6l198.4-198.4c6.4-6.4 19.2-12.8 25.6-12.8s19.2 6.4 25.6 12.8c6.4 6.4 12.8 19.2 12.8 25.6 0 12.8-6.4 19.2-12.8 25.6l-198.4 198.4h217.6c19.2 0 38.4 19.2 38.4 38.4s-19.2 38.4-38.4 38.4H64z m915.2-620.8c-19.2 0-38.4-19.2-38.4-38.4V140.8l-198.4 198.4c-6.4 6.4-19.2 12.8-25.6 12.8-12.8 0-19.2-6.4-25.6-12.8-12.8-12.8-12.8-38.4 0-51.2l198.4-198.4h-217.6c-19.2 0-38.4-19.2-38.4-38.4s19.2-38.4 38.4-38.4h294.4c32 0 51.2 25.6 51.2 51.2v294.4c0 19.2-19.2 38.4-38.4 38.4z"
+      class="fullScreen-border"
+    ></path>
+  </svg>
+  <svg @click="toggleFullscreen" v-else viewBox="0 0 1024 1024">
+    <path
+      d="M379.336 697.237L153.362 921.55c-14.11 14.007-36.905 13.922-50.912-0.188-14.007-14.11-13.922-36.905 0.188-50.912l227.6-225.927H138.645c-18.99 0-34.385-15.446-34.385-34.5 0-19.053 15.395-34.5 34.385-34.5H413.72c18.99 0 34.384 15.447 34.384 34.5v276c0 9.15-3.622 17.926-10.07 24.396a34.326 34.326 0 0 1-24.314 10.104 34.326 34.326 0 0 1-24.314-10.104 34.559 34.559 0 0 1-10.071-24.396V697.237z m263.395-366.88l227.813-227.813c14.059-14.059 36.853-14.059 50.912 0 14.059 14.059 14.059 36.853 0 50.912l-225.18 225.18h187.147c18.99 0 34.385 15.445 34.385 34.5 0 19.053-15.395 34.5-34.385 34.5H608.346c-18.99 0-34.384-15.447-34.384-34.5v-276c0-9.15 3.622-17.926 10.07-24.396a34.326 34.326 0 0 1 24.314-10.105c9.12 0 17.865 3.635 24.314 10.105a34.559 34.559 0 0 1 10.07 24.395v193.223zM99.385 410a34.326 34.326 0 0 1-24.314-10.105A34.559 34.559 0 0 1 65 375.5v-276C65 80.446 80.395 65 99.385 65h275.077c18.99 0 34.384 15.446 34.384 34.5 0 19.054-15.394 34.5-34.384 34.5H133.769v241.5c0 9.15-3.622 17.925-10.07 24.395A34.326 34.326 0 0 1 99.384 410z m825.23 552H649.538c-18.99 0-34.384-15.446-34.384-34.5 0-19.054 15.394-34.5 34.384-34.5h240.693V651.5c0-19.054 15.394-34.5 34.384-34.5 18.99 0 34.385 15.446 34.385 34.5v276c0 19.054-15.395 34.5-34.385 34.5z"
+      class="fullScreen-border"
+    ></path>
+  </svg>
+</template>
+
+<script setup lang="ts">
+import { PropType, toRefs, ref, onMounted, onUnmounted } from 'vue'
+import { CreateComponentType } from '@/packages/index.d'
+import { option } from './config'
+
+const props = defineProps({
+  chartConfig: {
+    type: Object as PropType<CreateComponentType & typeof option>,
+    required: true
+  }
+})
+
+let { border, bgColor, borderColor } = toRefs(props.chartConfig.option)
+const isFullscreen = ref(false)
+const checkFullscreen = () => {
+  isFullscreen.value = !!(
+    document.fullscreenElement ||
+    document.webkitFullscreenElement ||
+    document.mozFullScreenElement ||
+    document.msFullscreenElement
+  )
+}
+checkFullscreen()
+
+const requestFullscreen = element => {
+  if (element.requestFullscreen) {
+    element.requestFullscreen()
+  } else if (element.mozRequestFullScreen) {
+    /* Firefox */
+    element.mozRequestFullScreen()
+  } else if (element.webkitRequestFullscreen) {
+    /* Chrome, Safari and Opera */
+    element.webkitRequestFullscreen()
+  } else if (element.msRequestFullscreen) {
+    /* IE/Edge */
+    element.msRequestFullscreen()
+  }
+}
+
+const exitFullscreen = () => {
+  if (document.fullscreenElement && document.exitFullscreen) {
+    document.exitFullscreen()
+  } else if (document.mozFullScreenElement && document.mozCancelFullScreen) {
+    /* Firefox */
+    document.mozCancelFullScreen()
+  } else if (document.webkitFullscreenElement && document.webkitExitFullscreen) {
+    /* Chrome, Safari and Opera */
+    document.webkitExitFullscreen()
+  } else if (document.msFullscreenElement && document.msExitFullscreen) {
+    /* IE/Edge */
+    document.msExitFullscreen()
+  }
+}
+
+const toggleFullscreen = () => {
+  if (!isFullscreen.value) {
+    requestFullscreen(document.documentElement)
+  } else {
+    exitFullscreen()
+  }
+  isFullscreen.value = !isFullscreen.value
+  // 由于全屏状态的改变不会立即生效,所以需要延迟一段时间再去获取全屏状态
+  setTimeout(() => {
+    checkFullscreen()
+  }, 1000)
+}
+
+// 监听全屏状态的改变,保证多个全屏组件的状态一致
+onMounted(() => {
+  document.addEventListener('fullscreenchange', checkFullscreen)
+  document.addEventListener('webkitfullscreenchange', checkFullscreen)
+  document.addEventListener('mozfullscreenchange', checkFullscreen)
+  document.addEventListener('MSFullscreenChange', checkFullscreen)
+})
+
+onUnmounted(() => {
+  document.removeEventListener('fullscreenchange', checkFullscreen)
+  document.removeEventListener('webkitfullscreenchange', checkFullscreen)
+  document.removeEventListener('mozfullscreenchange', checkFullscreen)
+  document.removeEventListener('MSFullscreenChange', checkFullscreen)
+})
+</script>
+
+<style lang="scss" scoped>
+svg {
+  display: block;
+  width: 100%;
+  height: 100%;
+  cursor: pointer;
+}
+.fullScreen-border {
+  stroke: v-bind('borderColor');
+  stroke-width: v-bind('border+"px"');
+  fill: v-bind('bgColor');
+}
+</style>
diff --git a/src/packages/components/Decorates/Mores/index.ts b/src/packages/components/Decorates/Mores/index.ts
index 7223832b..489b9c5c 100644
--- a/src/packages/components/Decorates/Mores/index.ts
+++ b/src/packages/components/Decorates/Mores/index.ts
@@ -1,9 +1,19 @@
 import { NumberConfig } from './Number/index'
 import { TimeCommonConfig } from './TimeCommon/index'
 import { ClockConfig } from './Clock/index'
+import { FullScreenConfig } from './FullScreen/index'
 import { CountDownConfig } from './CountDown/index'
 import { FlipperNumberConfig } from './FlipperNumber'
 import { PipelineHConfig } from './PipelineH/index'
 import { PipelineVConfig } from './PipelineV/index'
 
-export default [NumberConfig, FlipperNumberConfig, TimeCommonConfig, CountDownConfig, ClockConfig, PipelineHConfig, PipelineVConfig]
+export default [
+  NumberConfig,
+  FlipperNumberConfig,
+  TimeCommonConfig,
+  CountDownConfig,
+  ClockConfig,
+  FullScreenConfig,
+  PipelineHConfig,
+  PipelineVConfig
+]

From dbc44bf4199806eaf26ef9a30bc0049f8d8f2c65 Mon Sep 17 00:00:00 2001
From: QuietlyChan <1013893148@qq.com>
Date: Fri, 28 Jul 2023 14:34:40 +0800
Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=9D=E5=A7=8B?=
 =?UTF-8?q?=E5=8C=96=E4=B8=8D=E8=83=BD=E6=8B=96=E6=8B=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/packages/components/Decorates/Mores/FullScreen/config.ts | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/packages/components/Decorates/Mores/FullScreen/config.ts b/src/packages/components/Decorates/Mores/FullScreen/config.ts
index f6a1a938..bed59c06 100644
--- a/src/packages/components/Decorates/Mores/FullScreen/config.ts
+++ b/src/packages/components/Decorates/Mores/FullScreen/config.ts
@@ -1,5 +1,6 @@
 import { PublicConfigClass } from '@/packages/public'
 import { CreateComponentType } from '@/packages/index.d'
+import { chartInitConfig } from '@/settings/designSetting'
 import { FullScreenConfig } from './index'
 import cloneDeep from 'lodash/cloneDeep'
 
@@ -11,7 +12,7 @@ export const option = {
 
 export default class Config extends PublicConfigClass implements CreateComponentType {
   public key = FullScreenConfig.key
-  public attr = { w: 150, h: 150 }
+  public attr = { ...chartInitConfig, w: 150, h: 150 }
   public chartConfig = cloneDeep(FullScreenConfig)
   public option = cloneDeep(option)
 }