index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. <CloseIcon />
  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. />
  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. />
  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. <HelpOutlineIcon />
  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.CHART_ALIGN_RANGE,
  67. value: settingStore.getChartAlignRange,
  68. type: 'number',
  69. name: '吸附距离',
  70. min: 10,
  71. suffix: 'px',
  72. step: 2,
  73. desc: '移动图表时的吸附距离'
  74. },
  75. {
  76. key: SettingStoreEnums.ASIDE_ALL_COLLAPSED,
  77. value: settingStore.getAsideAllCollapsed,
  78. type: 'switch',
  79. name: '菜单折叠',
  80. desc: '首页菜单折叠时隐藏全部'
  81. },
  82. {
  83. key: SettingStoreEnums.HIDE_PACKAGE_ONE_CATEGORY,
  84. value: settingStore.getHidePackageOneCategory,
  85. type: 'switch',
  86. name: '隐藏分类',
  87. desc: '工作空间表单分类只有单项时隐藏'
  88. },
  89. {
  90. key: SettingStoreEnums.CHANGE_LANG_RELOAD,
  91. value: settingStore.getChangeLangReload,
  92. type: 'switch',
  93. name: '切换语言',
  94. desc: '切换语言重新加载页面',
  95. tip: '若遇到部分区域语言切换失败,则开启'
  96. }
  97. ])
  98. const closeHandle = () => {
  99. emit('update:modelShow', false)
  100. }
  101. const handleChange = (e: MouseEvent, item: ListType) => {
  102. settingStore.setItem(item.key, item.value)
  103. }
  104. </script>
  105. <style lang="scss" scoped>
  106. @include go("system-setting") {
  107. @extend .go-background-filter;
  108. min-width: 100px;
  109. max-width: 60vw;
  110. .item-left {
  111. width: 200px;
  112. }
  113. .input-num-width {
  114. width: 100px;
  115. }
  116. }
  117. </style>