Theme.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <div @click="openDrawer">
  3. <div title="系统设置">
  4. <i class="sfont system-shezhi"></i>
  5. </div>
  6. <el-drawer v-model="drawer" title="系统设置" class="system_user-config">
  7. <el-form>
  8. <el-collapse v-model="activeNames">
  9. <el-collapse-item title="医嘱录入" name="0">
  10. <el-form-item :label="`默认查询【${userConfig.yz_orderTimeDay}】天前医嘱`">
  11. <el-input-number
  12. :min="1"
  13. v-model="userConfig.yz_orderTimeDay"/>
  14. </el-form-item>
  15. <el-form-item label="医嘱排序">
  16. <el-select v-model="userConfig.yz_orderBySort">
  17. <xc-el-option :data="[{code: 'asc' , name : '正序'},{code: 'desc' , name : '反序'}]"/>
  18. </el-select>
  19. </el-form-item>
  20. </el-collapse-item>
  21. <el-collapse-item title="系统配置" name="1">
  22. <el-form-item label="布局">
  23. <el-switch
  24. active-text="圆角布局"
  25. inactive-text="常见布局"
  26. active-value="filletLayout"
  27. inactive-value="defaultLayout"
  28. v-model="userConfig.layOutPageName"
  29. />
  30. </el-form-item>
  31. <el-form-item label="侧边栏">
  32. <el-switch
  33. active-text="收起"
  34. inactive-text="展开"
  35. :active-value="true"
  36. :inactive-value="false"
  37. v-model="userConfig.isCollapse"
  38. />
  39. </el-form-item>
  40. </el-collapse-item>
  41. <el-collapse-item title="电子病历" name="2">
  42. <el-form-item label="侧边栏按钮大小">
  43. <el-select v-model="userConfig.emr_size"
  44. :disabled="userConfig.emr_function_button_show_text"
  45. >
  46. <xc-el-option :data="[{code: 'large' , name: '大'}, {code: 'default', name: '默认'}]"/>
  47. </el-select>
  48. </el-form-item>
  49. <el-form-item label="侧边栏显示文字">
  50. <el-switch
  51. @change="handelEmrfunctionButtonShowText"
  52. active-text="是"
  53. inactive-text="否"
  54. :active-value="true"
  55. :inactive-value="false"
  56. v-model="userConfig.emr_function_button_show_text"
  57. >
  58. </el-switch>
  59. </el-form-item>
  60. <el-form-item label="默认审阅模式">
  61. <el-select
  62. v-model="userConfig.emr_review_mode"
  63. >
  64. <xc-el-option :data="[{code: 0 , name: '关闭'}, {code: 1, name: '卡片'}, {code: 2, name: '嵌入'}]"/>
  65. </el-select>
  66. </el-form-item>
  67. </el-collapse-item>
  68. </el-collapse>
  69. </el-form>
  70. <template #footer>
  71. <el-button size="large" type="primary" @click="saveUserConfig">保存</el-button>
  72. </template>
  73. </el-drawer>
  74. </div>
  75. </template>
  76. <script setup lang="ts">
  77. import {theme} from "@/theme";
  78. import {SystemConfig, useSystemStore} from "@/pinia/system-store";
  79. import XEUtils from 'xe-utils'
  80. import {Ref, ref} from "vue";
  81. import XcElOption from "@/components/xiao-chan/xc-el-option/XcElOption.vue";
  82. const tabsHook = {
  83. setItem: function (val) {
  84. localStorage.setItem('theme', JSON.stringify(val))
  85. },
  86. getItem: function () {
  87. return JSON.parse(localStorage.getItem('theme') || '{}')
  88. },
  89. }
  90. const systemStore = useSystemStore()
  91. const drawer = ref(false)
  92. const activeNames = ref(['0', '1', '2'])
  93. const userConfig: Ref<SystemConfig> = ref({})
  94. function openDrawer() {
  95. userConfig.value = XEUtils.clone(systemStore.userConfig, true)
  96. drawer.value = true
  97. }
  98. function saveUserConfig() {
  99. systemStore.postUserConfig(userConfig.value)
  100. drawer.value = false
  101. }
  102. function handelEmrfunctionButtonShowText(val) {
  103. if (val) {
  104. userConfig.value.emr_size = 'large'
  105. }
  106. }
  107. watch(() => theme.value, () => {
  108. const el = document.documentElement
  109. for (let key in theme.value) {
  110. el.style.setProperty(key, theme.value[key])
  111. }
  112. tabsHook.setItem(theme.value)
  113. }, {deep: true})
  114. onMounted(() => {
  115. const el = document.documentElement
  116. for (let key in theme.value) {
  117. el.style.setProperty(key, theme.value[key])
  118. }
  119. if (localStorage.getItem('theme') == null) {
  120. tabsHook.setItem(theme.value)
  121. } else {
  122. theme.value = tabsHook.getItem()
  123. }
  124. })
  125. </script>
  126. <style lang="scss">
  127. .system_user-config {
  128. .el-drawer__header {
  129. margin-bottom: 10px !important;
  130. }
  131. }
  132. </style>