index.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <div v-if="'technology' != theme.themeName" class="vab-color-picker" style="margin-left: var(--el-margin)">
  3. <el-color-picker v-model="color" popper-class="vab-color-picker-popper" :predefine="predefineColors" @active-change="handleChange" />
  4. </div>
  5. </template>
  6. <script lang="ts" setup>
  7. import { color as _color } from '/@/config/'
  8. import { useSettingsStore } from '/@/store/modules/settings'
  9. defineOptions({
  10. name: 'VabColorPicker',
  11. })
  12. const $sub = inject<any>('$sub')
  13. const $unsub = inject<any>('$unsub')
  14. const predefineColors = ref<any>([
  15. _color,
  16. '#1e90ff',
  17. '#4e6ef2',
  18. '#0052d9',
  19. '#3fb884',
  20. '#16baa9',
  21. '#07c160',
  22. '#009688',
  23. '#6954f0',
  24. '#7b40f2',
  25. '#f01414',
  26. ])
  27. const settingsStore = useSettingsStore()
  28. const { changeColor, getColor } = settingsStore
  29. const { color, theme } = storeToRefs(settingsStore)
  30. const handleChange = (value: any) => {
  31. color.value = value
  32. changeColor()
  33. }
  34. // 还原默认
  35. $sub('shop-vite-reset-color', () => {
  36. handleChange(_color)
  37. })
  38. $sub('shop-vite-change-color', () => {
  39. handleChange(color)
  40. })
  41. onBeforeMount(() => {
  42. handleChange(getColor)
  43. })
  44. onBeforeUnmount(() => {
  45. $unsub('shop-vite-reset-color')
  46. $unsub('shop-vite-change-color')
  47. })
  48. </script>
  49. <style lang="scss">
  50. .vab-color-picker-popper {
  51. box-sizing: content-box !important;
  52. padding: calc(var(--el-padding) / 2);
  53. .el-color-dropdown__link-btn {
  54. display: none;
  55. }
  56. .el-color-dropdown__btns {
  57. margin-top: 0;
  58. }
  59. }
  60. </style>