ny
22 小时以前 282fbc6488f4e8ceb5fda759f963ee88fbf7b999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<script setup lang="ts">
import { computed, reactive, toRefs } from 'vue';
 
import { useMessage } from '@jnpf/hooks';
 
import { Animation, BgTheme, Block, BuiltinTheme, ColorMode, Layout, SwitchItem, Tabbar, Theme } from '@vben/layouts';
import { usePreferences } from '@vben/preferences';
import { cloneDeep, merge } from '@vben/utils';
 
import { $t } from '#/locales';
import { defaultPreferencesConfig } from '#/utils/constants';
import { getRealJnpfAppEnCode } from '#/utils/jnpf';
 
const props = defineProps(['saveApi', 'query']);
 
const emit = defineEmits(['updatePreference']);
 
interface State {
  dataForm: any;
}
 
defineExpose({ initConfig, handleSubmit });
 
const { createConfirm, createMessage } = useMessage();
const { isDark } = usePreferences();
const state = reactive<State>({
  dataForm: cloneDeep(defaultPreferencesConfig),
});
const { dataForm } = toRefs(state);
 
const getShowLayoutSetting = computed(() => {
  const appEnCode = getRealJnpfAppEnCode();
  return appEnCode && !['teamwork', 'workFlow'].includes(appEnCode);
});
 
function handleSubmit() {
  createConfirm({
    iconType: 'warning',
    title: $t('common.tipTitle'),
    content: '您确定要保存,是否继续?',
    onOk: () => {
      const preferenceJson = JSON.stringify(state.dataForm);
      props.saveApi({ preferenceJson, ...props.query }).then((res) => {
        emit('updatePreference', preferenceJson);
        createMessage.success(res.msg);
      });
    },
  });
}
function initConfig(config) {
  state.dataForm = merge(config || {}, defaultPreferencesConfig);
}
</script>
 
<template>
  <div class="preference-v">
    <Block :title="$t('preferences.layout')" v-if="getShowLayoutSetting">
      <Layout v-model="dataForm.app.layout" />
    </Block>
    <Block :title="$t('preferences.theme.title')">
      <Theme
        v-model="dataForm.theme.mode"
        v-model:theme-semi-dark-header="dataForm.theme.semiDarkHeader"
        v-model:theme-semi-dark-sidebar="dataForm.theme.semiDarkSidebar" />
    </Block>
    <Block :title="$t('preferences.theme.builtin.title')">
      <BuiltinTheme v-model="dataForm.theme.builtinType" v-model:theme-color-primary="dataForm.theme.colorPrimary" :is-dark="isDark" picker-placement="top" />
    </Block>
    <Block :title="$t('preferences.theme.bgType.title')">
      <BgTheme v-model="dataForm.theme.bgType" />
    </Block>
    <Block :title="$t('preferences.animation.title')">
      <Animation
        v-model:transition-enable="dataForm.transition.enable"
        v-model:transition-loading="dataForm.transition.loading"
        v-model:transition-name="dataForm.transition.name"
        v-model:transition-progress="dataForm.transition.progress" />
    </Block>
    <Block :title="$t('preferences.tabbar.title')">
      <Tabbar
        v-model:tabbar-draggable="dataForm.tabbar.draggable"
        v-model:tabbar-enable="dataForm.tabbar.enable"
        v-model:tabbar-show-icon="dataForm.tabbar.showIcon"
        v-model:tabbar-show-maximize="dataForm.tabbar.showMaximize"
        v-model:tabbar-show-more="dataForm.tabbar.showMore"
        v-model:tabbar-style-type="dataForm.tabbar.styleType"
        v-model:tabbar-wheelable="dataForm.tabbar.wheelable"
        v-model:tabbar-max-count="dataForm.tabbar.maxCount"
        v-model:tabbar-middle-click-to-close="dataForm.tabbar.middleClickToClose" />
    </Block>
    <Block :title="$t('preferences.widget.title')">
      <SwitchItem v-model="dataForm.widget.globalSearch">
        {{ $t('preferences.widget.globalSearch') }}
      </SwitchItem>
      <SwitchItem v-model="dataForm.widget.languageToggle">
        {{ $t('preferences.widget.languageToggle') }}
      </SwitchItem>
      <SwitchItem v-model="dataForm.widget.fullscreen">
        {{ $t('preferences.widget.fullscreen') }}
      </SwitchItem>
      <SwitchItem v-model="dataForm.widget.lockScreen">
        {{ $t('preferences.widget.lockScreen') }}
      </SwitchItem>
      <SwitchItem v-model="dataForm.widget.sidebarToggle">
        {{ $t('preferences.widget.sidebarToggle') }}
      </SwitchItem>
      <SwitchItem v-model="dataForm.widget.refresh">
        {{ $t('preferences.widget.refresh') }}
      </SwitchItem>
    </Block>
    <Block :title="$t('preferences.other')">
      <ColorMode v-model:app-color-gray-mode="dataForm.app.colorGrayMode" v-model:app-color-weak-mode="dataForm.app.colorWeakMode" />
      <SwitchItem v-model="dataForm.tabbar.keepAlive">
        {{ $t('preferences.tabbar.keepAlive') }}
      </SwitchItem>
    </Block>
  </div>
</template>
<style lang="scss" scoped>
.preference-v {
  width: 350px;
 
  :deep(h3) {
    font-size: 18px;
    line-height: 30px;
  }
}
</style>