index.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <n-modal v-model:show="modelShow" @afterLeave="closeHandle">
  3. <n-list bordered class="go-system-setting">
  4. <template #header>
  5. <n-space justify="space-between">
  6. <n-h3 class="go-mb-0">系统设置</n-h3>
  7. <n-icon size="20" class="go-cursor-pointer" @click="closeHandle">
  8. <close-icon></close-icon>
  9. </n-icon>
  10. </n-space>
  11. </template>
  12. <n-list-item v-for="item in list" :key="item.name">
  13. <n-space :size="40">
  14. <n-space>
  15. <n-text class="item-left">{{ item.name }}</n-text>
  16. <template v-if="item.type === 'switch'">
  17. <n-switch
  18. v-model:value="item.value"
  19. size="small"
  20. @update:value="handleChange($event, item)"
  21. ></n-switch>
  22. </template>
  23. <template v-else-if="item.type === 'number'">
  24. <n-input-number
  25. v-model:value="item.value"
  26. class="input-num-width"
  27. size="small"
  28. :step="item.step || null"
  29. :suffix="item.suffix || null"
  30. :min="item.min || 0"
  31. @update:value="handleChange($event, item)"
  32. ></n-input-number>
  33. </template>
  34. </n-space>
  35. <n-space>
  36. <n-text class="item-right">{{ item.desc }}</n-text>
  37. <n-tooltip v-if="item.tip" trigger="hover">
  38. <template #trigger>
  39. <n-icon size="21">
  40. <help-outline-icon></help-outline-icon>
  41. </n-icon>
  42. </template>
  43. <span>{{ item.tip }}</span>
  44. </n-tooltip>
  45. </n-space>
  46. </n-space>
  47. </n-list-item>
  48. <n-list-item></n-list-item>
  49. </n-list>
  50. </n-modal>
  51. </template>
  52. <script script lang="ts" setup>
  53. import { reactive } from 'vue'
  54. import { ListType } from './index.d'
  55. import { useSettingStore } from '@/store/modules/settingStore/settingStore'
  56. import { SettingStoreEnums } from '@/store/modules/settingStore/settingStore.d'
  57. import { icon } from '@/plugins'
  58. const { HelpOutlineIcon, CloseIcon } = icon.ionicons5
  59. const emit = defineEmits(['update:modelShow'])
  60. defineProps({
  61. modelShow: Boolean
  62. })
  63. const settingStore = useSettingStore()
  64. const list = reactive<ListType[]>([
  65. {
  66. key: SettingStoreEnums.ASIDE_ALL_COLLAPSED,
  67. value: settingStore.getAsideAllCollapsed,
  68. type: 'switch',
  69. name: '菜单折叠',
  70. desc: '首页菜单折叠时隐藏至界面外'
  71. },
  72. {
  73. key: SettingStoreEnums.HIDE_PACKAGE_ONE_CATEGORY,
  74. value: settingStore.getHidePackageOneCategory,
  75. type: 'switch',
  76. name: '隐藏分类',
  77. desc: '工作空间表单分类只有单项时隐藏'
  78. },
  79. {
  80. key: SettingStoreEnums.CHANGE_LANG_RELOAD,
  81. value: settingStore.getChangeLangReload,
  82. type: 'switch',
  83. name: '切换语言',
  84. desc: '切换语言重新加载页面',
  85. tip: '若遇到部分区域语言切换失败,则建议开启'
  86. },
  87. {
  88. key: SettingStoreEnums.CHART_MOVE_DISTANCE,
  89. value: settingStore.getChartMoveDistance,
  90. type: 'number',
  91. name: '移动距离',
  92. min: 1,
  93. step: 1,
  94. suffix: 'px',
  95. desc: '方向键控制图标移动的距离'
  96. },
  97. {
  98. key: SettingStoreEnums.CHART_ALIGN_RANGE,
  99. value: settingStore.getChartAlignRange,
  100. type: 'number',
  101. name: '吸附距离',
  102. min: 10,
  103. step: 2,
  104. suffix: 'px',
  105. desc: '移动图表时的吸附距离'
  106. },
  107. ])
  108. const closeHandle = () => {
  109. emit('update:modelShow', false)
  110. }
  111. const handleChange = (e: MouseEvent, item: ListType) => {
  112. settingStore.setItem(item.key, item.value)
  113. }
  114. </script>
  115. <style lang="scss" scoped>
  116. @include go("system-setting") {
  117. @extend .go-background-filter;
  118. min-width: 100px;
  119. max-width: 60vw;
  120. .item-left {
  121. width: 200px;
  122. }
  123. .input-num-width {
  124. width: 100px;
  125. }
  126. }
  127. </style>