-
+
@@ -86,9 +86,11 @@
} from './components';
import { useAppInject } from '/@/hooks/web/useAppInject';
import { useDesign } from '/@/hooks/web/useDesign';
+ import { usePermission } from '/@/hooks/web/usePermission';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
import { useLocale } from '/@/locales/useLocale';
+ import { useUserStore } from '/@/store/modules/user';
export default defineComponent({
name: 'LayoutHeader',
@@ -152,6 +154,14 @@
];
});
+ const getUseCorpModel = computed(() => {
+ const userStore = useUserStore();
+ const { hasPermission } = usePermission();
+ return (
+ userStore.getPageCacheByKey('useCorpModel', false) && hasPermission('sys:corpAdmin:edit')
+ );
+ });
+
const getShowSetting = computed(() => {
if (!unref(getShowSettingButton)) {
return false;
@@ -202,6 +212,7 @@
getShowSettingButton,
getShowSetting,
getShowSearch,
+ getUseCorpModel,
};
},
});
diff --git a/src/layouts/default/setting/SettingDrawer.tsx b/src/layouts/default/setting/SettingDrawer.tsx
index 2f18d5a96249ed4938b761bdafda644f83846fa8..f9ca2348f120efd7af57f4ef96ee9d1d5fd3ad05 100644
--- a/src/layouts/default/setting/SettingDrawer.tsx
+++ b/src/layouts/default/setting/SettingDrawer.tsx
@@ -402,7 +402,7 @@ export default defineComponent({
{...attrs}
title={t('layout.setting.drawerTitle')}
width={330}
- wrapClassName="setting-drawer"
+ class="setting-drawer"
mask={false}
>
{/* {unref(getShowDarkModeToggle) &&
{() => t('layout.setting.darkMode')}} */}
diff --git a/src/layouts/default/setting/enum.ts b/src/layouts/default/setting/enum.ts
index 89faccf7cd17e44e745dc5a33b6b2c61decc2428..2ea0c468f6bc5525c6e284081fe2073a2c6cdfa0 100644
--- a/src/layouts/default/setting/enum.ts
+++ b/src/layouts/default/setting/enum.ts
@@ -38,9 +38,9 @@ export enum HandlerEnum {
HEADER_SEARCH,
+ TABS_SHOW,
TABS_SHOW_QUICK,
TABS_SHOW_REDO,
- TABS_SHOW,
TABS_SHOW_FOLD,
LOCK_TIME,
diff --git a/src/layouts/default/setting/handler.ts b/src/layouts/default/setting/handler.ts
index 47e4fe619f147abb5dd0b2d78db76efe1ab42ec5..1be0f4bf78f3142cd6449cc74f5019dfc3dc33c4 100644
--- a/src/layouts/default/setting/handler.ts
+++ b/src/layouts/default/setting/handler.ts
@@ -144,12 +144,12 @@ export function handler(event: HandlerEnum, value: any): DeepPartial
div {
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- svg {
- fill: @text-color-base;
- }
- }
-
- .ant-tabs-tab:not(.ant-tabs-tab-active) {
- &:hover {
- color: @primary-color;
- }
- }
-
- .ant-tabs-tab-active {
- position: relative;
- // padding-left: 18px;
- color: @white !important;
- // color: @primary-color !important;
- background: fade(@primary-color, 90);
- // border-color: fade(@primary-color, 25);
- // height: calc(@multiple-height - 2px);
- // transition: none;
- text-shadow: none;
-
- .ant-tabs-close-x {
- opacity: 1;
-
- svg {
- width: 0.7em;
- fill: @white;
- }
- }
- }
- }
-
- .ant-tabs-nav > div:nth-child(1) {
- padding: 0 15px;
-
- .ant-tabs-tab {
- margin-right: 10px !important;
- }
- }
- }
-
- .ant-tabs-tab:not(.ant-tabs-tab-active) {
- .ant-tabs-close-x {
- // font-size: 12px;
-
- svg {
- width: 0.6em;
- }
- }
- }
-
- .ant-tabs-extra-content {
- margin-top: 2px;
- margin-right: 10px;
- line-height: @multiple-height !important;
- }
-
- .ant-dropdown-trigger {
- display: inline-flex;
- }
-
- &.jeesite-multiple-tabs-hide-close {
- .ant-tabs-close-x {
- opacity: 0 !important;
- }
- }
-
- .jeesite-multiple-tabs-content {
- &__info {
- display: inline-block;
- width: 100%;
- cursor: pointer;
- user-select: none;
- }
- &__extra-redo {
- span[role='img'] {
- transform: rotate(0deg);
- }
- }
- &__extra-quick,
- &__extra-redo,
- &__extra-fold {
- display: inline-block;
- width: 36px;
- // height: @multiple-height;
- // line-height: @multiple-height;
- padding-top: 2px;
- color: @text-color-secondary;
- text-align: center;
- cursor: pointer;
- // border-left: 1px solid @header-light-bottom-border-color;
-
- &:hover {
- color: @text-color-base;
- }
-
- span[role='img'] {
- transform: rotate(90deg);
- }
- }
- }
-
- .ant-tabs-tab-prev-icon,
- .ant-tabs-tab-next-icon {
- padding-top: 5px;
- }
- }
-
\ No newline at end of file
+ * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
+ * No deletion without permission, or be held responsible to law.
+ * @author Vben、ThinkGem
+ */
+@prefix-cls: ~'jeesite-multiple-tabs';
+@multiple-height-large: 39px; // TABS_HEIGHT_LARGE
+
+html[data-theme='dark'] {
+ .@{prefix-cls} {
+ .ant-tabs.ant-tabs-card {
+ .ant-tabs-nav {
+ background: #000;
+ &::before {
+ border-bottom: 0;
+ }
+ .ant-tabs-tab {
+ color: #aaa !important;
+ background: #151515;
+ svg {
+ fill: #aaa !important;
+ }
+ &:hover,
+ .ant-tabs-tab-btn:hover {
+ color: #ddd !important;
+ }
+ }
+ .ant-tabs-tab-active {
+ background: #2975bc !important;
+ svg {
+ fill: #fff !important;
+ }
+ .ant-tabs-tab-btn,
+ .ant-tabs-tab-btn:hover {
+ color: #fff !important;
+ }
+ }
+ }
+ }
+ }
+}
+
+.@{prefix-cls} {
+ z-index: 10;
+ height: @multiple-height-large + 2;
+ line-height: @multiple-height-large + 2;
+
+ .ant-tabs.ant-tabs-card {
+ .ant-tabs-nav {
+ height: @multiple-height-large;
+ background-color: @content-bg;
+ margin: 0;
+ border: 0;
+ box-shadow: none;
+
+ .ant-tabs-tab {
+ height: calc(@multiple-height-large - 12px);
+ line-height: calc(@multiple-height-large - 13px);
+ color: @text-color-base;
+ background-color: @component-background;
+ transition: none;
+ border-radius: 4px;
+ margin: 10px 0 0 0;
+ padding-left: 10px;
+ padding-right: 11px;
+ border: 0 !important;
+
+ .ant-tabs-tab-btn {
+ transition: none;
+ }
+
+ &:hover,
+ .ant-tabs-tab-btn:hover {
+ color: @text-color-base;
+ }
+
+ .anticon {
+ opacity: 0.8;
+ font-size: 16px;
+ text-align: center;
+ margin-right: 5px;
+ svg {
+ fill: @text-color-base;
+ }
+ }
+
+ .ant-tabs-tab-remove {
+ width: 12px;
+ height: 24px;
+ color: inherit;
+ transition: none;
+ padding: 0;
+ .anticon {
+ svg {
+ width: 0.6em;
+ }
+ &:hover svg {
+ width: 0.7em;
+ }
+ }
+ }
+ }
+
+ .ant-tabs-tab:not(.ant-tabs-tab-active) {
+ &:hover {
+ color: @primary-color;
+ }
+ }
+
+ .ant-tabs-tab-active {
+ position: relative;
+ // padding-left: 18px;
+ color: @white !important;
+ // color: @primary-color !important;
+ background: fade(@primary-color, 90);
+ // border-color: fade(@primary-color, 25);
+ // height: calc(@multiple-height-large - 2px);
+ border: 0;
+ transition: none;
+ text-shadow: none;
+
+ // span {
+ // color: @white !important;
+ // }
+ .ant-tabs-tab-btn {
+ color: @white !important;
+ text-shadow: none;
+ }
+
+ .ant-tabs-tab-remove {
+ opacity: 1;
+ svg {
+ fill: @white;
+ }
+ }
+ }
+ }
+
+ .ant-tabs-nav > div:nth-child(1) {
+ padding: 0 15px;
+ .ant-tabs-tab {
+ margin-right: 10px !important;
+ &:nth-last-child(2) {
+ margin-right: 20px !important;
+ }
+ }
+ }
+ }
+
+ .ant-tabs-extra-content {
+ margin-top: 2px;
+ margin-right: 10px;
+ line-height: @multiple-height-large !important;
+ }
+
+ .ant-dropdown-trigger {
+ display: inline-flex;
+ }
+
+ &.jeesite-multiple-tabs-hide-close {
+ .ant-tabs-tab-remove {
+ opacity: 0 !important;
+ }
+ }
+
+ .jeesite-multiple-tabs-content {
+ &__info {
+ display: inline-block;
+ width: 100%;
+ cursor: pointer;
+ user-select: none;
+ }
+ &__extra-redo {
+ span[role='img'] {
+ transform: rotate(0deg);
+ }
+ }
+ &__extra-quick,
+ &__extra-redo,
+ &__extra-fold {
+ display: inline-block;
+ width: 36px;
+ // height: @multiple-height-large;
+ // line-height: @multiple-height-large;
+ padding-top: 6px;
+ color: @text-color-secondary;
+ text-align: center;
+ cursor: pointer;
+ // border-left: 1px solid @header-light-bottom-border-color;
+
+ &:hover {
+ color: @text-color-base;
+ }
+
+ span[role='img'] {
+ transform: rotate(90deg);
+ }
+ }
+ }
+
+ .ant-tabs .ant-tabs-nav {
+ .ant-tabs-nav-more {
+ padding-top: 12px;
+ }
+ }
+}
+
+.ant-tabs-dropdown-menu {
+ padding: 5px 0;
+ max-height: 300px;
+ &-title-content {
+ display: flex;
+ align-items: center;
+ padding-left: 8px;
+ .@{prefix-cls} {
+ &-content__info {
+ width: auto;
+ margin-left: 0;
+ line-height: 28px;
+ }
+ }
+ .anticon:not(.anticon-close) {
+ margin-left: -3px;
+ margin-right: 3px;
+ }
+ }
+ &-item-remove {
+ margin-left: auto !important;
+ }
+}
\ No newline at end of file
diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue
index 128d955d1aaffbba09614ef9d0e67815c68ee40b..5d658cc98399c701b515f2747e7f60762fb59495 100644
--- a/src/layouts/default/tabs/index.vue
+++ b/src/layouts/default/tabs/index.vue
@@ -18,7 +18,7 @@
-
+
@@ -70,7 +70,7 @@
const { prefixCls } = useDesign('multiple-tabs');
const go = useGo();
- const { getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
+ const { getTabsStyle, getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
const getTabsState = computed(() => {
return tabStore.getTabList.filter((item) => !item.meta?.hideTab);
@@ -81,8 +81,9 @@
const getWrapClass = computed(() => {
return [
prefixCls,
+ `${prefixCls}-${unref(getTabsStyle)}`,
{
- [`${prefixCls}--hide-close`]: unref(unClose),
+ [`${prefixCls}-hide-close`]: unref(unClose),
},
];
});
diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts
index 1afa87db21aaf22ccd1b1288dff71a35ee97b94f..f2bf24736acebaeb18ebaeac52de30b9acf87f33 100644
--- a/src/locales/lang/en.ts
+++ b/src/locales/lang/en.ts
@@ -1,6 +1,5 @@
import { genMessage } from '../helper';
import antdLocale from 'ant-design-vue/es/locale/en_US';
-// import momentLocale from 'moment/dist/locale/en-us';
const modules = import.meta.globEager('./en/**/*.ts');
export default {
@@ -8,6 +7,6 @@ export default {
...genMessage(modules, 'en'),
antdLocale,
},
- momentLocale: null,
- momentLocaleName: 'en',
+ dateLocale: null,
+ dateLocaleName: 'en',
};
diff --git a/src/locales/lang/en/layout.ts b/src/locales/lang/en/layout.ts
index a8f7913d8c7e59aec0e2655261054e88db907238..0fe1b5ea8b55cfaf4448059c414337124bc403db 100644
--- a/src/locales/lang/en/layout.ts
+++ b/src/locales/lang/en/layout.ts
@@ -91,6 +91,8 @@ export default {
breadcrumb: 'Breadcrumbs',
breadcrumbIcon: 'Breadcrumbs Icon',
tabs: 'Tabs',
+ tabsHide: 'Not Show',
+ tabsStyle: 'Style',
tabsQuickBtn: 'Tabs quick button',
tabsRedoBtn: 'Tabs redo button',
tabsFoldBtn: 'Tabs flod button',
diff --git a/src/locales/lang/zh-CN/layout.ts b/src/locales/lang/zh-CN/layout.ts
index 5f0c40a97914536094fac04a9b31d94fc6f11b2d..ea4e7f393ec8ef8bced5eaa5bbe9f94b11e9286f 100644
--- a/src/locales/lang/zh-CN/layout.ts
+++ b/src/locales/lang/zh-CN/layout.ts
@@ -91,6 +91,8 @@ export default {
breadcrumb: '面包屑',
breadcrumbIcon: '面包屑图标',
tabs: '标签页',
+ tabsHide: '不显示',
+ tabsStyle: '风格',
tabsQuickBtn: '标签页快捷按钮',
tabsRedoBtn: '标签页刷新按钮',
tabsFoldBtn: '标签页折叠按钮',
diff --git a/src/locales/lang/zh_CN.ts b/src/locales/lang/zh_CN.ts
index 1cb1565c083d3df1f92cc849875399d0a7391c7a..d44c95a0122b126ffad771235493c1c1a22843ce 100644
--- a/src/locales/lang/zh_CN.ts
+++ b/src/locales/lang/zh_CN.ts
@@ -1,6 +1,5 @@
import { genMessage } from '../helper';
import antdLocale from 'ant-design-vue/es/locale/zh_CN';
-import momentLocale from 'moment/dist/locale/zh-cn';
const modules = import.meta.globEager('./zh-CN/**/*.ts');
export default {
@@ -8,6 +7,6 @@ export default {
...genMessage(modules, 'zh-CN'),
antdLocale,
},
- momentLocale,
- momentLocaleName: 'zh-cn',
+ dateLocale: null,
+ dateLocaleName: 'zh-cn',
};
diff --git a/src/locales/useLocale.ts b/src/locales/useLocale.ts
index 19fff0768ac26fddcf7d25aadcb3a6bb755d9605..64bd4a1ed03dbadf16f55f41d8f01590689fcfc9 100644
--- a/src/locales/useLocale.ts
+++ b/src/locales/useLocale.ts
@@ -3,8 +3,6 @@
*/
import type { LocaleType } from '/#/config';
-import moment from 'moment';
-
import { i18n } from './setupI18n';
import { useLocaleStoreWithOut } from '/@/store/modules/locale';
import { unref, computed } from 'vue';
@@ -12,8 +10,8 @@ import { loadLocalePool, setHtmlPageLang } from './helper';
interface LangModule {
message: Recordable;
- momentLocale: Recordable;
- momentLocaleName: string;
+ dateLocale: Recordable;
+ dateLocaleName: string;
}
function setI18nLanguage(locale: LocaleType) {
@@ -53,10 +51,9 @@ export function useLocale() {
const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule;
if (!langModule) return;
- const { message, momentLocale, momentLocaleName } = langModule;
+ const { message } = langModule;
globalI18n.setLocaleMessage(locale, message);
- moment.updateLocale(momentLocaleName, momentLocale);
loadLocalePool.push(locale);
setI18nLanguage(locale);
diff --git a/src/main.ts b/src/main.ts
index 024a3ec468b2799d2412f8e2efe5cd1fd0722ebc..80e3d32066d8a67c30169544a1b828ffb07e67b7 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -24,7 +24,7 @@ if (import.meta.env.DEV) {
'%c JeeSite %cVue \n%c 用心去做我们的快速开发平台,用心去帮助我们的客户!好不好用,您说的算。\n 您的一个关注,就是对我们最大的支持: https://gitee.com/thinkgem/jeesite-vue (请点 star 收藏我们)\n 免费技术 QQ 交流群: 127515876、209330483、223507718、709534275、730390092、1373527、183903863(外包) %c\n ',
'font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:39px;color:#0f87e8;-webkit-text-fill-color:#0f87e8;-webkit-text-stroke:1px #0f87e8;',
'font-size:24px;color:#aaa;',
- 'color:#333;font-size:14px;',
+ 'font-size:14px;color:#888;',
'font-size:12px;',
);
}
diff --git a/src/settings/componentSetting.ts b/src/settings/componentSetting.ts
index 9b9596fdf3672ae6ad08be5f9539990310899cad..940ffc2ea30372fd28f9f0a23d18d3f02c84e9da 100644
--- a/src/settings/componentSetting.ts
+++ b/src/settings/componentSetting.ts
@@ -21,6 +21,8 @@ export default {
pageSizeOptions: ['10', '20', '50', '80', '100'],
// Default display quantity on one page
defaultPageSize: 20,
+ // Default Size
+ defaultSize: 'middle',
// Custom general sort function
defaultSortFn: (sortInfo: SorterResult) => {
const { order, columnKey } = sortInfo;
diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts
index 6cfd59d67100520af7114e3df3d0e1d69b735fd6..6f656352ac44e71b2530ca5fe93d8755bc8793e0 100644
--- a/src/settings/projectSetting.ts
+++ b/src/settings/projectSetting.ts
@@ -121,6 +121,8 @@ const setting: ProjectConfig = {
cache: false,
// Turn on
show: true,
+ // Tabs style, Optional value: 1、2、3
+ style: '3',
// Is it possible to drag and drop sorting tabs
canDrag: true,
// Turn on quick actions
diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts
index b0dbeafa44f29dcefa2b54fed7e6d01d99556fb2..b8e9e3b6608b52e7c6dc926cb8df52172ece4dc7 100644
--- a/src/store/modules/app.ts
+++ b/src/store/modules/app.ts
@@ -16,6 +16,7 @@ import { Persistent } from '/@/utils/cache/persistent';
import { darkMode } from '/@/settings/designSetting';
import { resetRouter } from '/@/router';
import { deepMerge } from '/@/utils';
+import { switchSkin } from '/@/api/sys/login';
interface AppState {
darkMode?: ThemeEnum;
@@ -72,6 +73,7 @@ export const useAppStore = defineStore({
setDarkMode(mode: ThemeEnum): void {
this.darkMode = mode;
localStorage.setItem(APP_DARK_MODE_KEY, mode);
+ switchSkin();
},
setBeforeMiniInfo(state: BeforeMiniState): void {
diff --git a/src/store/modules/lock.ts b/src/store/modules/lock.ts
index 92a5106fcbacc9ad8d653cc6d0588655949f67dd..c00fc40dda1b58dc39c47aa0e80a5fc222ff85a4 100644
--- a/src/store/modules/lock.ts
+++ b/src/store/modules/lock.ts
@@ -4,7 +4,7 @@ import { defineStore } from 'pinia';
import { LOCK_INFO_KEY } from '/@/enums/cacheEnum';
import { Persistent } from '/@/utils/cache/persistent';
-// import { useUserStore } from './user';
+import { useUserStore } from './user';
interface LockState {
lockInfo: Nullable;
@@ -31,30 +31,30 @@ export const useLockStore = defineStore({
},
// Unlock
async unLock(password?: string) {
- // const userStore = useUserStore();
+ const userStore = useUserStore();
if (this.lockInfo?.pwd === password) {
this.resetLockInfo();
return true;
}
- // const tryLogin = async () => {
- // try {
- // const username = userStore.getUserInfo?.loginCode;
- // const res = await userStore.login({
- // username: username,
- // password: password!,
- // goHome: false,
- // mode: 'none',
- // });
- // if (res) {
- // this.resetLockInfo();
- // }
- // return res;
- // } catch (error) {
- // return false;
- // }
- // };
- // return await tryLogin();
- return false;
+ const tryLogin = async () => {
+ try {
+ const username = userStore.getUserInfo?.loginCode;
+ const res = await userStore.login({
+ username: username,
+ password: password!,
+ goHome: false,
+ mode: 'none',
+ });
+ if (res.result == 'true') {
+ this.resetLockInfo();
+ return true;
+ }
+ } catch (error: any) {
+ console.log(error);
+ }
+ return false;
+ };
+ return await tryLogin();
},
},
});
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index 3a1551952cb9f91e40c71d042d72ecaa3e0fa3e5..dab9455aaeeae1899bb05b55c4a93be9315fad9d 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -78,10 +78,10 @@ export const useUserStore = defineStore({
},
},
actions: {
- setToken(info: string | undefined) {
- this.token = info ? info : ''; // for null or undefined value
+ setToken(token: string | undefined) {
+ this.token = token ? token : ''; // for null or undefined value
this.lastUpdateTime = new Date().getTime();
- setAuthCache(TOKEN_KEY, info);
+ setAuthCache(TOKEN_KEY, token);
},
setRoleList(roleList: RoleEnum[] | string[]) {
this.roleList = roleList;
@@ -190,8 +190,13 @@ export const useUserStore = defineStore({
},
initPageCache(res: LoginResult) {
this.setUserInfo(res.user);
+ this.setPageCache('demoMode', res.demoMode);
+ this.setPageCache('useCorpModel', res.useCorpModel);
+ this.setPageCache('currentCorpCode', res.currentCorpCode);
+ this.setPageCache('currentCorpName', res.currentCorpName);
this.setPageCache('modifyPasswordTip', res.modifyPasswordTip);
this.setPageCache('modifyPasswordMsg', res.modifyPasswordMsg);
+ this.setPageCache('sysCode', res.sysCode);
},
/**
* @description: logout
diff --git a/src/utils/dateUtil.ts b/src/utils/dateUtil.ts
index efac92623e8962468acadfdac393e4c186911c17..9094c9f75b5a48d55c6df9cfb42bc3d5efbd798c 100644
--- a/src/utils/dateUtil.ts
+++ b/src/utils/dateUtil.ts
@@ -1,20 +1,25 @@
/**
* Independent time operation tool to facilitate subsequent switch to dayjs
*/
-import moment from 'moment';
+import dayjs from 'dayjs';
-const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
-const DATE_FORMAT = 'YYYY-MM-DD ';
+const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
+const DATE_FORMAT = 'YYYY-MM-DD';
export function formatToDateTime(
- date: moment.MomentInput = undefined,
+ date: dayjs.Dayjs | undefined = undefined,
format = DATE_TIME_FORMAT,
-): string {
- return moment(date).format(format);
+): string | undefined {
+ if (!date) return undefined;
+ return dayjs(date).format(format);
}
-export function formatToDate(date: moment.MomentInput = undefined, format = DATE_FORMAT): string {
- return moment(date).format(format);
+export function formatToDate(
+ date: dayjs.Dayjs | undefined = undefined,
+ format = DATE_FORMAT,
+): string | undefined {
+ if (!date) return undefined;
+ return dayjs(date).format(format);
}
-export const dateUtil = moment;
+export const dateUtil = dayjs;
diff --git a/src/utils/helper/treeHelper.ts b/src/utils/helper/treeHelper.ts
index 921816ef23486dca59db7cccba62623f4e591efc..81525d5e5c4305ced6be6779668f2de6f8f1a7c7 100644
--- a/src/utils/helper/treeHelper.ts
+++ b/src/utils/helper/treeHelper.ts
@@ -1,13 +1,13 @@
interface TreeHelperConfig {
id: string;
- children: string;
pid: string;
+ children: string;
callback: Fn;
}
const DEFAULT_CONFIG: TreeHelperConfig = {
id: 'id',
- children: 'children',
pid: 'pId',
+ children: 'children',
callback: () => {},
};
@@ -18,7 +18,7 @@ export function listToTree(list?: any[], config: Partial {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await areaForm(data);
record.value = (res.area || {}) as Area;
if (data.parentCode && data.parentName) {
diff --git a/src/views/sys/area/index.vue b/src/views/sys/area/index.vue
index 2d141e8da3ecad193b95c44287a8c179134b4bd7..0e396a8d405d596d023438c684607607567e6dda 100644
--- a/src/views/sys/area/index.vue
+++ b/src/views/sys/area/index.vue
@@ -7,25 +7,34 @@
-
+
diff --git a/src/views/sys/area/list.vue b/src/views/sys/area/list.vue
index c81e9cb8cf857203a5ca38ca854a72e5f5572432..df44f4d5f84b97f49c8ba1a8e5f6467e77a8b187 100644
--- a/src/views/sys/area/list.vue
+++ b/src/views/sys/area/list.vue
@@ -104,7 +104,7 @@
dataIndex: 'areaName',
width: 230,
align: 'left',
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('排序号'),
diff --git a/src/views/sys/company/form.vue b/src/views/sys/company/form.vue
index 547618669033d4d7790c9c3dac302e3f37b4599d..835122e871ee9e85f7023c10eda5fc9f54f92265 100644
--- a/src/views/sys/company/form.vue
+++ b/src/views/sys/company/form.vue
@@ -140,8 +140,8 @@
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await companyForm(data);
record.value = (res.company || {}) as Company;
record.value.officeCodes = res.officeCodes || '';
diff --git a/src/views/sys/company/list.vue b/src/views/sys/company/list.vue
index 9492e6fb0c911c2734995578d3ebb869703e54d6..cebef5975c83096b837c206a2065ca184af71003 100644
--- a/src/views/sys/company/list.vue
+++ b/src/views/sys/company/list.vue
@@ -100,7 +100,7 @@
dataIndex: 'companyName',
width: 230,
align: 'left',
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('公司全称'),
diff --git a/src/views/sys/config/form.vue b/src/views/sys/config/form.vue
index 4a97bf8623cc971aac1ccbb309b4640e0d03df7b..5b8b2ca9bd1f6c09ee548270df5463094176b704 100644
--- a/src/views/sys/config/form.vue
+++ b/src/views/sys/config/form.vue
@@ -111,8 +111,8 @@
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await configForm(data);
record.value = (res.config || {}) as Config;
setFieldsValue(record.value);
diff --git a/src/views/sys/config/list.vue b/src/views/sys/config/list.vue
index 5940beb48f7d65eb111f49e4aadb96cada68b263..1bf8684990e1fd3d494f11df8397b25170e8c545 100644
--- a/src/views/sys/config/list.vue
+++ b/src/views/sys/config/list.vue
@@ -82,7 +82,7 @@
sorter: true,
width: 130,
align: 'left',
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('参数键名'),
diff --git a/src/views/sys/corpAdmin/list.vue b/src/views/sys/corpAdmin/list.vue
index d8bf233345f1fb44fe460286fd2cf1bb6f585ded..c79375eb0fe081237ef92a609b0ea1f06a3f4666 100644
--- a/src/views/sys/corpAdmin/list.vue
+++ b/src/views/sys/corpAdmin/list.vue
@@ -108,7 +108,7 @@
key: 'a.login_code',
sorter: true,
width: 100,
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('用户昵称'),
@@ -123,7 +123,7 @@
key: 'a.corp_code',
sorter: true,
width: 100,
- slots: { customRender: 'corpColumn' },
+ slot: 'corpColumn',
ifShow: () => useCorpModel.value,
},
{
diff --git a/src/views/sys/dictData/form.vue b/src/views/sys/dictData/form.vue
index d972f73b10256062556fe86a0361001c848086c0..7779a644c2dfdf39af474813b793487f377c0159 100644
--- a/src/views/sys/dictData/form.vue
+++ b/src/views/sys/dictData/form.vue
@@ -162,8 +162,8 @@
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await dictDataForm(data);
record.value = (res.dictData || {}) as DictData;
if (data.dictType) {
diff --git a/src/views/sys/dictData/list.vue b/src/views/sys/dictData/list.vue
index 4123784b735e55fecc4e139561e9bd492cf77f34..9968b7d98be94ef83be63fbadf771236b2dd2997 100644
--- a/src/views/sys/dictData/list.vue
+++ b/src/views/sys/dictData/list.vue
@@ -109,7 +109,7 @@
dataIndex: 'dictLabelRaw',
width: 230,
align: 'left',
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('选项键值'),
diff --git a/src/views/sys/dictType/form.vue b/src/views/sys/dictType/form.vue
index a3cee37d52a04ccd76ea28a07d8bc849cc9f54ff..873eb9b9f7622c645efeecadaaea7a317d114062 100644
--- a/src/views/sys/dictType/form.vue
+++ b/src/views/sys/dictType/form.vue
@@ -41,7 +41,7 @@
const record = ref({} as DictType);
const getTitle = computed(() => ({
icon: router.currentRoute.value.meta.icon || 'ant-design:book-outlined',
- value: record.value.isNewRecord ? t('新增字典类型') : t('编辑字典类型'),
+ value: record.value.isNewRecord ? t('新增字典') : t('编辑字典'),
}));
const inputFormSchemas: FormSchema[] = [
@@ -101,8 +101,8 @@
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await dictTypeForm(data);
record.value = (res.dictType || {}) as DictType;
setFieldsValue(record.value);
diff --git a/src/views/sys/dictType/list.vue b/src/views/sys/dictType/list.vue
index 94ca870b7702c8f7526f5c74ecb9a64a64e771ba..852d1a1367c76115047e2319881604b4965d2bc4 100644
--- a/src/views/sys/dictType/list.vue
+++ b/src/views/sys/dictType/list.vue
@@ -96,7 +96,7 @@
sorter: true,
width: 260,
align: 'left',
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('字典类型'),
@@ -105,7 +105,7 @@
sorter: true,
width: 260,
align: 'left',
- slots: { customRender: 'dictTypeColumn' },
+ slot: 'dictTypeColumn',
},
{
title: t('系统字典'),
diff --git a/src/views/sys/empUser/form.vue b/src/views/sys/empUser/form.vue
index 8ff58aa823f3afaf58e6ca07be6f3970fe2f480d..65d43c54cb5516a92bda020afcbde78fe4dcd7c0 100644
--- a/src/views/sys/empUser/form.vue
+++ b/src/views/sys/empUser/form.vue
@@ -59,7 +59,7 @@
const record = ref({} as EmpUser);
const getTitle = computed(() => ({
icon: router.currentRoute.value.meta.icon || 'ant-design:book-outlined',
- value: record.value.isNewRecord ? t('新增字典') : t('编辑字典'),
+ value: record.value.isNewRecord ? t('新增用户') : t('编辑用户'),
}));
const ctrlPermi = ref('');
const op = ref('');
@@ -377,7 +377,7 @@
}
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
+ await resetFields();
employeeOfficeTable.setTableData([]);
userRoleTable.setTableData([]);
userRoleTable.setSelectedRowKeys([]);
diff --git a/src/views/sys/empUser/formAuthDataScope.vue b/src/views/sys/empUser/formAuthDataScope.vue
index fe4e306a51acab4b97c060de4358c424182f1529..63cd2858d25a3fd74e92554dac95fc7009341068 100644
--- a/src/views/sys/empUser/formAuthDataScope.vue
+++ b/src/views/sys/empUser/formAuthDataScope.vue
@@ -116,8 +116,8 @@
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await formAuthDataScope(data);
record.value = (res.empUser || {}) as Recordable;
ctrlPermi.value = res.ctrlPermi || '2';
diff --git a/src/views/sys/empUser/list.vue b/src/views/sys/empUser/list.vue
index a9237a5f6c18c9bf1b462364e1e36305da3d4096..36eb27966512c464614491735a160d027133b5cc 100644
--- a/src/views/sys/empUser/list.vue
+++ b/src/views/sys/empUser/list.vue
@@ -160,7 +160,7 @@
key: 'a.login_code',
sorter: true,
width: 100,
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('用户昵称'),
@@ -310,6 +310,7 @@
showTableSetting: true,
useSearchForm: true,
canResize: true,
+ // pagination: { defaultPageSize: 10 },
});
onMounted(async () => {
diff --git a/src/views/sys/error-log/index.vue b/src/views/sys/error-log/index.vue
index 3c232015738571b0e4d75994faa9335029f07068..66238031d0c7049b3fbb7cfb1ddf19e61d70b29c 100644
--- a/src/views/sys/error-log/index.vue
+++ b/src/views/sys/error-log/index.vue
@@ -52,7 +52,7 @@
width: 80,
title: '操作',
dataIndex: 'action',
- slots: { customRender: 'action' },
+ slot: 'action',
},
});
const [registerModal, { openModal }] = useModal();
diff --git a/src/views/sys/lock/useNow.ts b/src/views/sys/lock/useNow.ts
index 2fac748da54c7c2ec7ec5e6f2c828b5f720b152b..76a54709a75690debac7d2486a467d2e193cf2bb 100644
--- a/src/views/sys/lock/useNow.ts
+++ b/src/views/sys/lock/useNow.ts
@@ -1,11 +1,8 @@
import { dateUtil } from '/@/utils/dateUtil';
import { reactive, toRefs } from 'vue';
-import { useLocaleStore } from '/@/store/modules/locale';
import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';
export function useNow(immediate = true) {
- const localeStore = useLocaleStore();
- const localData = dateUtil.localeData(localeStore.getLocale);
let timer: IntervalHandle;
const state = reactive({
@@ -28,13 +25,13 @@ export function useNow(immediate = true) {
state.year = now.get('y');
state.month = now.get('M') + 1;
- state.week = localData.weekdays()[now.day()];
- state.day = now.get('D');
+ state.week = '星期' + ['一', '二', '三', '四', '五', '六', '日'][now.day() - 1];
+ state.day = now.get('d');
state.hour = h;
state.minute = m;
state.second = s;
- state.meridiem = localData.meridiem(Number(h), Number(h), true);
+ state.meridiem = now.format('A');
};
function start() {
diff --git a/src/views/sys/log/form.vue b/src/views/sys/log/form.vue
index 56842a2eff47fdda348da73edcd2cb2adbf6e3e6..117bfac63147cbb6a68de99c0e674f6d00aa2311 100644
--- a/src/views/sys/log/form.vue
+++ b/src/views/sys/log/form.vue
@@ -204,8 +204,8 @@
});
const [registerDrawer, { setDrawerProps }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await logForm(data);
record.value = (res.log || {}) as Log;
record.value.__t = new Date().getTime();
diff --git a/src/views/sys/log/list.vue b/src/views/sys/log/list.vue
index caee96b1afa83af95511a856d4890101afb8400d..c97174dc94277aa2db10fc9d38d1edccdcac54cf 100644
--- a/src/views/sys/log/list.vue
+++ b/src/views/sys/log/list.vue
@@ -116,7 +116,7 @@
sorter: true,
width: 180,
align: 'left',
- slots: { customRender: 'firstColumn' },
+ slot: 'firstColumn',
},
{
title: t('请求地址'),
diff --git a/src/views/sys/login/LoginForm.vue b/src/views/sys/login/LoginForm.vue
index 694b921eb492a7b87821f89d0cd5692cdb35aa1f..4838ba77fd3b3550113702be92de82f78a363f49 100644
--- a/src/views/sys/login/LoginForm.vue
+++ b/src/views/sys/login/LoginForm.vue
@@ -22,6 +22,7 @@
visibilityToggle
v-model:value="formData.password"
:placeholder="t('sys.login.password')"
+ autocomplete="false"
/>
diff --git a/src/views/sys/login/RegisterForm.vue b/src/views/sys/login/RegisterForm.vue
index e70917e48756e9a2e3fd02fb76a63ca0842ef213..ca5030c0300f9f9ad879db73831b0c70050de7ad 100644
--- a/src/views/sys/login/RegisterForm.vue
+++ b/src/views/sys/login/RegisterForm.vue
@@ -39,6 +39,7 @@
visibilityToggle
v-model:value="formData.confirmPassword"
:placeholder="t('sys.login.confirmPassword')"
+ autocomplete="false"
/>
diff --git a/src/views/sys/menu/form.vue b/src/views/sys/menu/form.vue
index 3709e05f02a5b8dbc82f92f28ce9ae3992fe9d79..747a9cd6891a05bf0e69cd6c4cbd89c031175c94 100644
--- a/src/views/sys/menu/form.vue
+++ b/src/views/sys/menu/form.vue
@@ -222,8 +222,8 @@
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
- resetFields();
setDrawerProps({ loading: true });
+ await resetFields();
const res = await menuForm(data);
record.value = (res.menu || {}) as Menu;
if (data.parentCode && data.parentName) {
diff --git a/src/views/sys/menu/index.vue b/src/views/sys/menu/index.vue
index 14a21bca9e37a1f3ae300c2d92cb13b0fac21f4e..56824928ea201ba48c0bcec6b709af22f2ef7432 100644
--- a/src/views/sys/menu/index.vue
+++ b/src/views/sys/menu/index.vue
@@ -7,17 +7,22 @@
+ >
+
+
+ {{ sysName }}
+
+
+
-
+