!68 修复升级依赖带来的问题
* Merge remote-tracking branch 'origin/dev' into dev
* 升级依赖
* Merge remote-tracking branch 'origin/ts' into ts
* 升级依赖
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts
* 升级依赖
* !61 fix: 删除重复环境变量ElUploadInstance
* fix: 删除重复环境变量ElUploadInstance
| | |
| | | "useTabs": false, |
| | | "semi": true, |
| | | "singleQuote": true, |
| | | "quoteProps": "as-needed", |
| | | "quoteProps": "preserve", |
| | | "jsxSingleQuote": false, |
| | | "bracketSameLine": false, |
| | | "trailingComma": "none", |
| | |
| | | "url": "https://gitee.com/JavaLionLi/plus-ui.git" |
| | | }, |
| | | "dependencies": { |
| | | "@element-plus/icons-vue": "2.1.0", |
| | | "@element-plus/icons-vue": "2.3.1", |
| | | "@vueup/vue-quill": "1.2.0", |
| | | "@vueuse/core": "10.7.0", |
| | | "animate.css": "4.1.1", |
| | | "await-to-js": "^3.0.0", |
| | | "axios": "^1.3.4", |
| | | "crypto-js": "^4.1.1", |
| | | "echarts": "5.4.0", |
| | | "echarts": "5.4.3", |
| | | "element-plus": "2.4.3", |
| | | "file-saver": "2.0.5", |
| | | "fuse.js": "6.6.2", |
| | | "js-cookie": "3.0.1", |
| | | "jsencrypt": "3.3.1", |
| | | "js-cookie": "3.0.5", |
| | | "jsencrypt": "3.3.2", |
| | | "nprogress": "0.2.0", |
| | | "path-browserify": "1.0.1", |
| | | "path-to-regexp": "6.2.0", |
| | |
| | | "screenfull": "6.0.0", |
| | | "vform3-builds": "3.0.8", |
| | | "vue": "3.3.11", |
| | | "vue-cropper": "1.0.3", |
| | | "vue-cropper": "1.1.1", |
| | | "vue-i18n": "9.2.2", |
| | | "vue-router": "4.2.5", |
| | | "vue-types": "5.1.1" |
| | | }, |
| | | "devDependencies": { |
| | | "@iconify/json": "^2.2.40", |
| | | "@intlify/unplugin-vue-i18n": "0.8.2", |
| | | "@iconify/json": "^2.2.157", |
| | | "@intlify/unplugin-vue-i18n": "1.6.0", |
| | | "@types/crypto-js": "^4.1.1", |
| | | "@types/file-saver": "2.0.5", |
| | | "@types/js-cookie": "3.0.3", |
| | |
| | | "@unocss/preset-attributify": "^0.58.0", |
| | | "@unocss/preset-icons": "^0.58.0", |
| | | "@unocss/preset-uno": "^0.58.0", |
| | | "@vue/compiler-sfc": "3.2.45", |
| | | "@vue/compiler-sfc": "3.3.9", |
| | | "@vitejs/plugin-vue": "4.5.2", |
| | | "autoprefixer": "10.4.14", |
| | | "eslint": "8.55.0", |
| | |
| | | "husky": "7.0.4", |
| | | "postcss": "^8.4.21", |
| | | "prettier": "3.1.1", |
| | | "sass": "1.56.1", |
| | | "sass": "1.69.5", |
| | | "typescript": "5.2.2", |
| | | "unocss": "^0.58.0", |
| | | "unplugin-auto-import": "0.17.2", |
| | | "unplugin-icons": "0.18.1", |
| | | "unplugin-vue-components": "0.26.0", |
| | | "unplugin-vue-setup-extend-plus": "0.4.9", |
| | | "unplugin-vue-setup-extend-plus": "1.0.0", |
| | | "vite-plugin-compression": "0.5.1", |
| | | "vite-plugin-svg-icons": "2.0.1", |
| | | "vitest": "^0.29.7", |
| | |
| | | import useAppStore from '@/store/modules/app'; |
| | | |
| | | const appStore = useAppStore(); |
| | | const size = computed(() => appStore.size as any); |
| | | const size = computed(() => appStore.size); |
| | | |
| | | onMounted(() => { |
| | | nextTick(() => { |
| | |
| | | isView: false |
| | | }); |
| | | |
| | | const vFormRef = ref(null); |
| | | const vFormRef = ref(); |
| | | // è·åè¡¨åæ°æ®-弿¥ |
| | | const getFormData = () => { |
| | | return vFormRef.value.getFormData(); |
| | |
| | | * @param {表åé
ç½®} formConf |
| | | * formConfigï¼{ formTemplateï¼è¡¨å模æ¿ï¼formDataï¼è¡¨åæ°æ®ï¼hiddenFieldï¼éè¦éèçåæ®µå符串éåï¼disabledFieldï¼éè¦ç¦ç¨çèªè¯»å符串éå} |
| | | */ |
| | | const initForm = (formConf) => { |
| | | const initForm = (formConf: any) => { |
| | | const { formTemplate, formData, hiddenField, disabledField } = toRaw(formConf); |
| | | if (formTemplate) { |
| | | vFormRef.value.setFormJson(formTemplate); |
| | |
| | | <template> |
| | | <div class="relative" :style="{ width: width }"> |
| | | <div class="relative" :style="{ 'width': width }"> |
| | | <el-input v-model="modelValue" readonly placeholder="ç¹å»éæ©å¾æ " @click="visible = !visible"> |
| | | <template #prepend> |
| | | <svg-icon :icon-class="modelValue" /> |
| | |
| | | } |
| | | let real_src_list = props.src.split(','); |
| | | let srcList: string[] = []; |
| | | real_src_list.forEach((item) => { |
| | | real_src_list.forEach((item: string) => { |
| | | return srcList.push(item); |
| | | }); |
| | | return srcList; |
| | |
| | | { label: 'ç¨å°', value: 'small' } |
| | | ]); |
| | | |
| | | const handleSetSize = (size: string) => { |
| | | const handleSetSize = (size: 'large' | 'default' | 'small') => { |
| | | appStore.setSize(size); |
| | | }; |
| | | </script> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export enum LanguageEnum { |
| | | zh_CN = 'zh_CN', |
| | | |
| | | en_US = 'en_US' |
| | | } |
| | |
| | | // æ¬å°è¯è¨å
|
| | | import enUSLocale from './en_US'; |
| | | import zhCNLocale from './zh_CN'; |
| | | import { LanguageEnum } from '@/enums/LanguageEnum'; |
| | | |
| | | const messages = { |
| | | zh_CN: { |
| | |
| | | * è·åå½åè¯è¨ |
| | | * @returns zh-cn|en ... |
| | | */ |
| | | export const getLanguage = () => { |
| | | const language = useStorage('language', 'zh_CN'); |
| | | export const getLanguage = (): LanguageEnum => { |
| | | const language = useStorage<LanguageEnum>('language', LanguageEnum.zh_CN); |
| | | if (language.value) { |
| | | return language.value; |
| | | } |
| | | return 'zh_CN'; |
| | | return LanguageEnum.zh_CN; |
| | | }; |
| | | |
| | | const i18n = createI18n({ |
| | |
| | | <div class="drawer-item"> |
| | | <span>å¼å¯ TopNav</span> |
| | | <span class="comp-style"> |
| | | <el-switch v-model="topNav" class="drawer-switch" /> |
| | | <el-switch v-model="settingsStore.topNav" class="drawer-switch" @change="topNavChange" /> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="drawer-item"> |
| | | <span>å¼å¯ Tags-Views</span> |
| | | <span class="comp-style"> |
| | | <el-switch v-model="tagsView" class="drawer-switch" /> |
| | | <el-switch v-model="settingsStore.tagsView" class="drawer-switch" /> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="drawer-item"> |
| | | <span>åºå® Header</span> |
| | | <span class="comp-style"> |
| | | <el-switch v-model="fixedHeader" class="drawer-switch" /> |
| | | <el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" /> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="drawer-item"> |
| | | <span>æ¾ç¤º Logo</span> |
| | | <span class="comp-style"> |
| | | <el-switch v-model="sidebarLogo" class="drawer-switch" /> |
| | | <el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" /> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="drawer-item"> |
| | | <span>卿æ é¢</span> |
| | | <span class="comp-style"> |
| | | <el-switch v-model="dynamicTitle" class="drawer-switch" /> |
| | | <el-switch v-model="settingsStore.dynamicTitle" class="drawer-switch" @change="dynamicTitleChange" /> |
| | | </span> |
| | | </div> |
| | | |
| | |
| | | import useSettingsStore from '@/store/modules/settings'; |
| | | import usePermissionStore from '@/store/modules/permission'; |
| | | import { handleThemeStyle } from '@/utils/theme'; |
| | | import { SettingTypeEnum } from '@/enums/SettingTypeEnum'; |
| | | import { SideThemeEnum } from '@/enums/SideThemeEnum'; |
| | | import defaultSettings from '@/settings'; |
| | | |
| | | const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
| | | const appStore = useAppStore(); |
| | |
| | | valueDark: 'dark', |
| | | valueLight: 'light' |
| | | }); |
| | | // å¹é
èåé¢è² |
| | | watch(isDark, () => { |
| | | if (isDark.value) { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: SideThemeEnum.DARK }); |
| | | settingsStore.sideTheme = SideThemeEnum.DARK; |
| | | } else { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: sideTheme.value }); |
| | | settingsStore.sideTheme = sideTheme.value; |
| | | } |
| | | }); |
| | | const toggleDark = () => useToggle(isDark); |
| | | |
| | | /** æ¯å¦éè¦topNav */ |
| | | const topNav = computed({ |
| | | get: () => storeSettings.value.topNav, |
| | | set: (val) => { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.TOP_NAV, value: val }); |
| | | if (!val) { |
| | | appStore.toggleSideBarHide(false); |
| | | permissionStore.setSidebarRouters(permissionStore.defaultRoutes); |
| | | } |
| | | const topNavChange = (val) => { |
| | | if (!val) { |
| | | appStore.toggleSideBarHide(false); |
| | | permissionStore.setSidebarRouters(permissionStore.defaultRoutes); |
| | | } |
| | | }); |
| | | /** æ¯å¦éè¦tagview */ |
| | | const tagsView = computed({ |
| | | get: () => storeSettings.value.tagsView, |
| | | set: (val) => { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.TAGS_VIEW, value: val }); |
| | | } |
| | | }); |
| | | /**æ¯å¦éè¦åºå®å¤´é¨ */ |
| | | const fixedHeader = computed({ |
| | | get: () => storeSettings.value.fixedHeader, |
| | | set: (val) => { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.FIXED_HEADER, value: val }); |
| | | } |
| | | }); |
| | | /**æ¯å¦éè¦ä¾§è¾¹æ çlogo */ |
| | | const sidebarLogo = computed({ |
| | | get: () => storeSettings.value.sidebarLogo, |
| | | set: (val) => { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.SIDEBAR_LOGO, value: val }); |
| | | } |
| | | }); |
| | | /**æ¯å¦éè¦ä¾§è¾¹æ ç卿ç½é¡µçtitle */ |
| | | const dynamicTitle = computed({ |
| | | get: () => storeSettings.value.dynamicTitle, |
| | | set: (val) => { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.DYNAMIC_TITLE, value: val }); |
| | | // å¨æè®¾ç½®ç½é¡µæ é¢ |
| | | useDynamicTitle(); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | const dynamicTitleChange = () => { |
| | | // å¨æè®¾ç½®ç½é¡µæ é¢ |
| | | useDynamicTitle(); |
| | | }; |
| | | |
| | | const themeChange = (val: string) => { |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.THEME, value: val }); |
| | | theme.value = val; |
| | | if (val) { |
| | | handleThemeStyle(val); |
| | | } |
| | | settingsStore.theme = val; |
| | | handleThemeStyle(val); |
| | | }; |
| | | const handleTheme = (val: string) => { |
| | | sideTheme.value = val; |
| | | if (isDark.value && val === SideThemeEnum.LIGHT) { |
| | | // æé»æ¨¡å¼é¢è²ä¸å |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: SideThemeEnum.DARK }); |
| | | settingsStore.sideTheme = SideThemeEnum.DARK; |
| | | return; |
| | | } |
| | | settingsStore.changeSetting({ key: SettingTypeEnum.SIDE_THEME, value: val }); |
| | | settingsStore.sideTheme = val; |
| | | }; |
| | | const saveSetting = () => { |
| | | proxy?.$modal.loading('æ£å¨ä¿åå°æ¬å°ï¼è¯·ç¨å...'); |
| | | let layoutSetting = { |
| | | topNav: storeSettings.value.topNav, |
| | | tagsView: storeSettings.value.tagsView, |
| | | fixedHeader: storeSettings.value.fixedHeader, |
| | | sidebarLogo: storeSettings.value.sidebarLogo, |
| | | dynamicTitle: storeSettings.value.dynamicTitle, |
| | | sideTheme: storeSettings.value.sideTheme, |
| | | theme: storeSettings.value.theme |
| | | }; |
| | | localStorage.setItem('layout-setting', JSON.stringify(layoutSetting)); |
| | | const settings = useStorage<LayoutSetting>('layout-setting', defaultSettings); |
| | | settings.value.topNav = storeSettings.value.topNav; |
| | | settings.value.tagsView = storeSettings.value.tagsView; |
| | | settings.value.fixedHeader = storeSettings.value.fixedHeader; |
| | | settings.value.sidebarLogo = storeSettings.value.sidebarLogo; |
| | | settings.value.dynamicTitle = storeSettings.value.dynamicTitle; |
| | | settings.value.sideTheme = storeSettings.value.sideTheme; |
| | | settings.value.theme = storeSettings.value.theme; |
| | | setTimeout(() => { |
| | | proxy?.$modal.closeLoading(); |
| | | }, 1000); |
| | | }; |
| | | const resetSetting = () => { |
| | | proxy?.$modal.loading('æ£å¨æ¸
é¤è®¾ç½®ç¼åå¹¶å·æ°ï¼è¯·ç¨å...'); |
| | | localStorage.removeItem('layout-setting'); |
| | | useStorage<any>('layout-setting', null).value = null; |
| | | setTimeout('window.location.reload()', 1000); |
| | | }; |
| | | const openSetting = () => { |
| | |
| | | |
| | | // 注åæä»¶ |
| | | import plugins from './plugins/index'; // plugins |
| | | import { download } from '@/utils/request'; |
| | | |
| | | // é¢è®¾å¨ç» |
| | | import animate from './animate'; |
| | | |
| | | // svg徿 |
| | | import 'virtual:svg-icons-register'; |
| | |
| | | // permission control |
| | | import './permission'; |
| | | |
| | | import { useDict } from '@/utils/dict'; |
| | | import { getConfigKey, updateConfigByKey } from '@/api/system/config'; |
| | | import { parseTime, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'; |
| | | |
| | | // å½é
å |
| | | import i18n from '@/lang/index'; |
| | | |
| | | const app = createApp(App); |
| | | // å
¨å±æ¹æ³æè½½ |
| | | app.config.globalProperties.useDict = useDict; |
| | | app.config.globalProperties.getConfigKey = getConfigKey; |
| | | app.config.globalProperties.updateConfigByKey = updateConfigByKey; |
| | | app.config.globalProperties.download = download; |
| | | app.config.globalProperties.parseTime = parseTime; |
| | | app.config.globalProperties.handleTree = handleTree; |
| | | app.config.globalProperties.addDateRange = addDateRange; |
| | | app.config.globalProperties.selectDictLabel = selectDictLabel; |
| | | app.config.globalProperties.selectDictLabels = selectDictLabels; |
| | | app.config.globalProperties.animate = animate; |
| | | |
| | | app.use(ElementIcons); |
| | | app.use(router); |
| | |
| | | router.beforeEach(async (to, from, next) => { |
| | | NProgress.start(); |
| | | if (getToken()) { |
| | | to.meta.title && useSettingsStore().setTitle(to.meta.title as string); |
| | | to.meta.title && useSettingsStore().setTitle(to.meta.title); |
| | | /* has token*/ |
| | | if (to.path === '/login') { |
| | | next({ path: '/' }); |
| | | NProgress.done(); |
| | | } else if (whiteList.indexOf(to.path) !== -1) { |
| | | next() |
| | | } else if (whiteList.indexOf(to.path as string) !== -1) { |
| | | next(); |
| | | } else { |
| | | if (useUserStore().roles.length === 0) { |
| | | isRelogin.show = true; |
| | |
| | | import download from './download'; |
| | | import cache from './cache'; |
| | | import auth from './auth'; |
| | | // é¢è®¾å¨ç» |
| | | import animate from '@/animate'; |
| | | |
| | | import { download as dl } from '@/utils/request'; |
| | | import { useDict } from '@/utils/dict'; |
| | | import { getConfigKey, updateConfigByKey } from '@/api/system/config'; |
| | | import { parseTime, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'; |
| | | |
| | | import { App } from 'vue'; |
| | | |
| | |
| | | |
| | | // 认è¯å¯¹è±¡ |
| | | app.config.globalProperties.$auth = auth; |
| | | |
| | | // å
¨å±æ¹æ³æè½½ |
| | | app.config.globalProperties.useDict = useDict; |
| | | app.config.globalProperties.getConfigKey = getConfigKey; |
| | | app.config.globalProperties.updateConfigByKey = updateConfigByKey; |
| | | app.config.globalProperties.download = dl; |
| | | app.config.globalProperties.parseTime = parseTime; |
| | | app.config.globalProperties.handleTree = handleTree; |
| | | app.config.globalProperties.addDateRange = addDateRange; |
| | | app.config.globalProperties.selectDictLabel = selectDictLabel; |
| | | app.config.globalProperties.selectDictLabels = selectDictLabels; |
| | | app.config.globalProperties.animate = animate; |
| | | } |
| | |
| | | import { LanguageEnum } from '@/enums/LanguageEnum'; |
| | | |
| | | const setting: DefaultSettings = { |
| | | /** |
| | | * ç½é¡µæ é¢ |
| | |
| | | |
| | | animationEnable: false, |
| | | |
| | | dark: false |
| | | dark: false, |
| | | language: LanguageEnum.zh_CN, |
| | | |
| | | size: 'default', |
| | | |
| | | layout: '' |
| | | }; |
| | | export default setting; |
| | |
| | | hide: false |
| | | }); |
| | | const device = ref<string>('desktop'); |
| | | const size = useStorage('size', 'default'); |
| | | const size = useStorage<'large' | 'default' | 'small'>('size', 'default'); |
| | | |
| | | // è¯è¨ |
| | | const language = useStorage('language', 'zh_CN'); |
| | |
| | | const toggleDevice = (d: string): void => { |
| | | device.value = d; |
| | | }; |
| | | const setSize = (s: string): void => { |
| | | const setSize = (s: 'large' | 'default' | 'small'): void => { |
| | | size.value = s; |
| | | }; |
| | | const toggleSideBarHide = (status: boolean): void => { |
| | |
| | | import { defineStore } from 'pinia'; |
| | | import defaultSettings from '@/settings'; |
| | | import { SettingTypeEnum } from '@/enums/SettingTypeEnum'; |
| | | import { useDynamicTitle } from '@/utils/dynamicTitle'; |
| | | |
| | | export const useSettingsStore = defineStore('setting', () => { |
| | | const storageSetting = JSON.parse(localStorage.getItem('layout-setting') || '{}'); |
| | | const storageSetting = useStorage<LayoutSetting>('layout-setting', { |
| | | topNav: defaultSettings.topNav, |
| | | tagsView: defaultSettings.tagsView, |
| | | fixedHeader: defaultSettings.fixedHeader, |
| | | sidebarLogo: defaultSettings.sidebarLogo, |
| | | dynamicTitle: defaultSettings.dynamicTitle, |
| | | sideTheme: defaultSettings.sideTheme, |
| | | theme: defaultSettings.theme |
| | | }); |
| | | const title = ref<string>(defaultSettings.title); |
| | | const theme = ref<string>(storageSetting.theme || defaultSettings.theme); |
| | | const sideTheme = ref<string>(storageSetting.sideTheme || defaultSettings.sideTheme); |
| | | const showSettings = ref<boolean>(storageSetting.showSettings || defaultSettings.showSettings); |
| | | const topNav = ref<boolean>(storageSetting.topNav === undefined ? defaultSettings.topNav : storageSetting.topNav); |
| | | const tagsView = ref<boolean>(storageSetting.tagsView === undefined ? defaultSettings.tagsView : storageSetting.tagsView); |
| | | const fixedHeader = ref<boolean>(storageSetting.fixedHeader === undefined ? defaultSettings.fixedHeader : storageSetting.fixedHeader); |
| | | const sidebarLogo = ref<boolean>(storageSetting.sidebarLogo === undefined ? defaultSettings.sidebarLogo : storageSetting.sidebarLogo); |
| | | const dynamicTitle = ref<boolean>(storageSetting.dynamicTitle === undefined ? defaultSettings.dynamicTitle : storageSetting.dynamicTitle); |
| | | const animationEnable = ref<boolean>( |
| | | storageSetting.animationEnable === undefined ? defaultSettings.animationEnable : storageSetting.animationEnable |
| | | ); |
| | | const dark = ref<boolean>(storageSetting.dark || defaultSettings.dark); |
| | | const theme = ref<string>(storageSetting.value.theme); |
| | | const sideTheme = ref<string>(storageSetting.value.sideTheme); |
| | | const showSettings = ref<boolean>(defaultSettings.showSettings); |
| | | const topNav = ref<boolean>(storageSetting.value.topNav); |
| | | const tagsView = ref<boolean>(storageSetting.value.tagsView); |
| | | const fixedHeader = ref<boolean>(storageSetting.value.fixedHeader); |
| | | const sidebarLogo = ref<boolean>(storageSetting.value.sidebarLogo); |
| | | const dynamicTitle = ref<boolean>(storageSetting.value.dynamicTitle); |
| | | const animationEnable = ref<boolean>(defaultSettings.animationEnable); |
| | | const dark = ref<boolean>(defaultSettings.dark); |
| | | |
| | | const prop: { [key: string]: Ref<any> } = { |
| | | theme, |
| | | sideTheme, |
| | | showSettings, |
| | | topNav, |
| | | tagsView, |
| | | fixedHeader, |
| | | sidebarLogo, |
| | | dynamicTitle, |
| | | animationEnable, |
| | | dark |
| | | }; |
| | | |
| | | // actions |
| | | const changeSetting = (param: { key: SettingTypeEnum; value: any }) => { |
| | | const { key, value } = param; |
| | | if (key in prop) { |
| | | prop[key].value = value; |
| | | } |
| | | }; |
| | | const setTitle = (value: string) => { |
| | | title.value = value; |
| | | useDynamicTitle(); |
| | |
| | | dynamicTitle, |
| | | animationEnable, |
| | | dark, |
| | | changeSetting, |
| | | setTitle |
| | | }; |
| | | }); |
| | |
| | | import type { ComponentInternalInstance as ComponentInstance, PropType as VuePropType } from 'vue/runtime-core'; |
| | | import { LanguageEnum } from '@/enums/LanguageEnum'; |
| | | |
| | | declare global { |
| | | /** vue Instance */ |
| | |
| | | /** æ¯å¦ç¦ç¨ä¸ä¼ */ |
| | | isUploading: boolean; |
| | | |
| | | updateSupport: number; |
| | | |
| | | /** å
¶ä»åæ° */ |
| | | [key: string]: any; |
| | | } |
| | |
| | | pageNum: number; |
| | | pageSize: number; |
| | | } |
| | | declare interface LayoutSetting { |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºé¡¶é¨å¯¼èª |
| | | */ |
| | | topNav: boolean; |
| | | |
| | | declare type DefaultSettings = { |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¤æ ç¾å¯¼èª |
| | | */ |
| | | tagsView: boolean; |
| | | /** |
| | | * æ¯å¦åºå®å¤´é¨ |
| | | */ |
| | | fixedHeader: boolean; |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºä¾§è¾¹æ Logo |
| | | */ |
| | | sidebarLogo: boolean; |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¨ææ é¢ |
| | | */ |
| | | dynamicTitle: boolean; |
| | | /** |
| | | * ä¾§è¾¹æ ä¸»é¢ theme-dark | theme-light |
| | | */ |
| | | sideTheme: string; |
| | | /** |
| | | * 䏻颿¨¡å¼ |
| | | */ |
| | | theme: string; |
| | | } |
| | | |
| | | declare interface DefaultSettings extends LayoutSetting { |
| | | /** |
| | | * ç½é¡µæ é¢ |
| | | */ |
| | | title: string; |
| | | |
| | | /** |
| | | * ä¾§è¾¹æ ä¸»é¢ theme-dark | theme-light |
| | | */ |
| | | sideTheme?: string; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºç³»ç»å¸å±è®¾ç½® |
| | | */ |
| | | showSettings?: boolean; |
| | | showSettings: boolean; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºé¡¶é¨å¯¼èª |
| | | */ |
| | | topNav?: boolean; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¤æ ç¾å¯¼èª |
| | | */ |
| | | tagsView?: boolean; |
| | | /** |
| | | * æ¯å¦åºå®å¤´é¨ |
| | | */ |
| | | fixedHeader?: boolean; |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºä¾§è¾¹æ Logo |
| | | */ |
| | | sidebarLogo?: boolean; |
| | | /** |
| | | * å¯¼èªæ å¸å± |
| | | */ |
| | | layout?: string; |
| | | /** |
| | | * 䏻颿¨¡å¼ |
| | | */ |
| | | theme?: string; |
| | | layout: string; |
| | | |
| | | /** |
| | | * å¸å±å¤§å° |
| | | */ |
| | | size?: string; |
| | | size: 'large' | 'default' | 'small'; |
| | | |
| | | /** |
| | | * è¯è¨ |
| | | */ |
| | | language?: string; |
| | | language: LanguageEnum; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¨ææ é¢ |
| | | */ |
| | | dynamicTitle?: boolean; |
| | | /** |
| | | * æ¯å¦å¯ç¨å¨ç»ææ |
| | | */ |
| | | animationEnable?: boolean; |
| | | animationEnable: boolean; |
| | | /** |
| | | * æ¯å¦å¯ç¨æé»æ¨¡å¼ |
| | | * |
| | | * true:æé»æ¨¡å¼ |
| | | * false: æäº®æ¨¡å¼ |
| | | */ |
| | | dark?: boolean; |
| | | dark: boolean; |
| | | |
| | | errorLog?: string; |
| | | }; |
| | | errorLog: string; |
| | | } |
| | | } |
| | | export {}; |
| | |
| | | import type modal from '@/plugins/modal'; |
| | | import type tab from '@/plugins/tab'; |
| | | import type download from '@/plugins/download'; |
| | | import type auth from '@/plugins/auth'; |
| | | import type cache from '@/plugins/cache'; |
| | | import type animate from '@/animate'; |
| | | import type { useDict } from '@/utils/dict'; |
| | | import type { addDateRange, handleTree, selectDictLabel, selectDictLabels, parseTime } from '@/utils/ruoyi'; |
| | | import type { getConfigKey, updateConfigByKey } from '@/api/system/config'; |
| | | import type { download as rd } from '@/utils/request'; |
| | | import modal from '@/plugins/modal'; |
| | | import tab from '@/plugins/tab'; |
| | | import download from '@/plugins/download'; |
| | | import auth from '@/plugins/auth'; |
| | | import cache from '@/plugins/cache'; |
| | | import animate from '@/animate'; |
| | | import { useDict } from '@/utils/dict'; |
| | | import handleTree, { addDateRange, selectDictLabel, selectDictLabels, parseTime } from '@/utils/ruoyi'; |
| | | import { getConfigKey, updateConfigByKey } from '@/api/system/config'; |
| | | import { download as rd } from '@/utils/request'; |
| | | |
| | | declare module '@vue/runtime-core' { |
| | | interface ComponentCustomProperties { |
| | |
| | | export const blobValidate = (data: any) => { |
| | | return data.type !== 'application/json'; |
| | | }; |
| | | |
| | | export default { |
| | | handleTree |
| | | }; |
| | |
| | | import { globalHeaders } from '@/utils/request'; |
| | | |
| | | const router = useRouter(); |
| | | const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { sys_normal_disable, sys_user_sex } = toRefs<any>(proxy?.useDict('sys_normal_disable', 'sys_user_sex')); |
| | | |
| | | const userList = ref<UserVO[]>(); |
| | | const loading = ref(true); |
| | | const showSearch = ref(true); |
| | |
| | | inputErrorMessage: 'ç¨æ·å¯ç é¿åº¦å¿
é¡»ä»äº 5 å 20 ä¹é´' |
| | | }) |
| | | ); |
| | | if (!err) { |
| | | if (!err && res) { |
| | | await api.resetUserPwd(row.userId, res.value); |
| | | proxy?.$modal.msgSuccess('ä¿®æ¹æåï¼æ°å¯ç æ¯ï¼' + res.value); |
| | | } |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { updateUserProfile } from '@/api/system/user'; |
| | | import { propTypes } from '@/utils/propTypes'; |
| | | |
| | | const props = defineProps({ |
| | | user: { |
| | | type: Object as PropType<any>, |
| | | required: true |
| | | } |
| | | user: propTypes.any.isRequired |
| | | }); |
| | | const userForm = computed(() => props.user); |
| | | const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
| | |
| | | |
| | | const subColumns = ref<any>([]); |
| | | const menuOptions = ref<Array<MenuOptionsType>>([]); |
| | | const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | | const props = defineProps({ |
| | | info: propTypes.any.def(null), |