提交 3fcfac1f 作者: vben

wip: Upgrade ant-design-vue 3.0

上级 3b3f6c90
{ {
"typescript.tsdk": "./node_modules/typescript/lib", "typescript.tsdk": "./node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"volar.tsPlugin": true, "volar.tsPlugin": true,
"volar.tsPluginStatus": false, "volar.tsPluginStatus": false,
//=========================================== "npm.packageManager": "pnpm",
//============= Editor ======================
//===========================================
"editor.tabSize": 2, "editor.tabSize": 2,
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
//===========================================
//============= files =======================
//===========================================
"files.eol": "\n", "files.eol": "\n",
"search.exclude": { "search.exclude": {
"**/node_modules": true, "**/node_modules": true,
......
...@@ -30,118 +30,119 @@ ...@@ -30,118 +30,119 @@
"test:br": "npx http-server dist --cors --brotli -c-1", "test:br": "npx http-server dist --cors --brotli -c-1",
"reinstall": "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && npm run bootstrap", "reinstall": "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && npm run bootstrap",
"prepare": "husky install", "prepare": "husky install",
"gen:icon": "esno ./build/generate/icon/index.ts" "gen:icon": "esno ./build/generate/icon/index.ts",
"preinstall": "npx only-allow pnpm -y"
}, },
"dependencies": { "dependencies": {
"@ant-design/colors": "^6.0.0", "@ant-design/colors": "^6.0.0",
"@ant-design/icons-vue": "^6.0.1", "@ant-design/icons-vue": "^6.0.1",
"@iconify/iconify": "^2.0.4", "@iconify/iconify": "^2.1.0",
"@logicflow/core": "^0.7.5", "@logicflow/core": "^0.7.9",
"@logicflow/extension": "^0.7.5", "@logicflow/extension": "^0.7.9",
"@vueuse/core": "^6.8.0", "@vueuse/core": "^7.0.3",
"@vueuse/shared": "^6.8.0", "@vueuse/shared": "^7.0.3",
"@zxcvbn-ts/core": "^1.0.0", "@zxcvbn-ts/core": "^1.0.0",
"ant-design-vue": "2.2.8", "ant-design-vue": "3.0.0-alpha.12",
"axios": "^0.24.0", "axios": "^0.24.0",
"codemirror": "^5.63.3", "codemirror": "^5.64.0",
"cropperjs": "^1.5.12", "cropperjs": "^1.5.12",
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"dayjs": "^1.10.7",
"echarts": "^5.2.2", "echarts": "^5.2.2",
"intro.js": "^4.3.0", "intro.js": "^4.3.0",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"mockjs": "^1.1.0", "mockjs": "^1.1.0",
"moment": "^2.29.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"path-to-regexp": "^6.2.0", "path-to-regexp": "^6.2.0",
"pinia": "2.0.2", "pinia": "2.0.4",
"print-js": "^1.6.0", "print-js": "^1.6.0",
"qrcode": "^1.4.4", "qrcode": "^1.5.0",
"qs": "^6.10.1", "qs": "^6.10.1",
"resize-observer-polyfill": "^1.5.1", "resize-observer-polyfill": "^1.5.1",
"showdown": "^1.9.1", "showdown": "^1.9.1",
"sortablejs": "^1.14.0", "sortablejs": "^1.14.0",
"tinymce": "^5.10.1", "tinymce": "^5.10.2",
"vditor": "^3.8.7", "vditor": "^3.8.7",
"vue": "^3.2.21", "vue": "^3.2.22",
"vue-i18n": "^9.1.9", "vue-i18n": "^9.1.9",
"vue-json-pretty": "^2.0.5", "vue-json-pretty": "^2.0.6",
"vue-router": "^4.0.12", "vue-router": "^4.0.12",
"vue-types": "^4.1.1", "vue-types": "^4.1.1",
"xlsx": "^0.17.3" "xlsx": "^0.17.4"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^14.1.0", "@commitlint/cli": "^15.0.0",
"@commitlint/config-conventional": "^14.1.0", "@commitlint/config-conventional": "^15.0.0",
"@iconify/json": "^1.1.426", "@iconify/json": "^2.0.0",
"@purge-icons/generated": "^0.7.0", "@purge-icons/generated": "^0.7.0",
"@types/codemirror": "^5.60.5", "@types/codemirror": "^5.60.5",
"@types/crypto-js": "^4.0.2", "@types/crypto-js": "^4.0.2",
"@types/fs-extra": "^9.0.13", "@types/fs-extra": "^9.0.13",
"@types/inquirer": "^8.1.3", "@types/inquirer": "^8.1.3",
"@types/intro.js": "^3.0.2", "@types/intro.js": "^3.0.2",
"@types/jest": "^27.0.2", "@types/jest": "^27.0.3",
"@types/lodash-es": "^4.17.5", "@types/lodash-es": "^4.17.5",
"@types/mockjs": "^1.0.4", "@types/mockjs": "^1.0.4",
"@types/node": "^16.11.7", "@types/node": "^16.11.10",
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@types/qrcode": "^1.4.1", "@types/qrcode": "^1.4.1",
"@types/qs": "^6.9.7", "@types/qs": "^6.9.7",
"@types/showdown": "^1.9.4", "@types/showdown": "^1.9.4",
"@types/sortablejs": "^1.10.7", "@types/sortablejs": "^1.10.7",
"@typescript-eslint/eslint-plugin": "^5.3.1", "@typescript-eslint/eslint-plugin": "^5.4.0",
"@typescript-eslint/parser": "^5.3.1", "@typescript-eslint/parser": "^5.4.0",
"@vitejs/plugin-legacy": "^1.6.2", "@vitejs/plugin-legacy": "^1.6.3",
"@vitejs/plugin-vue": "^1.9.4", "@vitejs/plugin-vue": "^1.10.0",
"@vitejs/plugin-vue-jsx": "^1.2.0", "@vitejs/plugin-vue-jsx": "^1.3.0",
"@vue/compiler-sfc": "3.2.21", "@vue/compiler-sfc": "3.2.22",
"@vue/test-utils": "^2.0.0-rc.16", "@vue/test-utils": "^2.0.0-rc.17",
"autoprefixer": "^10.4.0", "autoprefixer": "^10.4.0",
"commitizen": "^4.2.4", "commitizen": "^4.2.4",
"conventional-changelog-cli": "^2.1.1", "conventional-changelog-cli": "^2.1.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"eslint": "^8.2.0", "eslint": "^8.3.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-define-config": "^1.1.3", "eslint-define-config": "^1.1.4",
"eslint-plugin-jest": "^25.2.4", "eslint-plugin-jest": "^25.3.0",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.0.3", "eslint-plugin-vue": "^8.1.1",
"esno": "^0.12.0", "esno": "^0.12.1",
"fs-extra": "^10.0.0", "fs-extra": "^10.0.0",
"husky": "^7.0.4", "husky": "^7.0.4",
"inquirer": "^8.2.0", "inquirer": "^8.2.0",
"jest": "^27.3.1", "jest": "^27.3.1",
"less": "^4.1.2", "less": "^4.1.2",
"lint-staged": "11.2.6", "lint-staged": "12.1.2",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"postcss": "^8.3.11", "postcss": "^8.4.0",
"postcss-html": "^1.2.0", "postcss-html": "^1.2.0",
"postcss-less": "^5.0.0", "postcss-less": "^5.0.0",
"prettier": "^2.4.1", "prettier": "^2.4.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rollup-plugin-visualizer": "^5.5.2", "rollup-plugin-visualizer": "^5.5.2",
"stylelint": "^14.0.1", "stylelint": "^14.1.0",
"stylelint-config-html": "^1.0.0", "stylelint-config-html": "^1.0.0",
"stylelint-config-prettier": "^9.0.3", "stylelint-config-prettier": "^9.0.3",
"stylelint-config-standard": "^23.0.0", "stylelint-config-standard": "^24.0.0",
"stylelint-order": "^5.0.0", "stylelint-order": "^5.0.0",
"ts-jest": "^27.0.7", "ts-jest": "^27.0.7",
"ts-node": "^10.4.0", "ts-node": "^10.4.0",
"typescript": "^4.4.4", "typescript": "^4.5.2",
"vite": "^2.6.14", "vite": "^2.6.14",
"vite-plugin-compression": "^0.3.5", "vite-plugin-compression": "^0.3.5",
"vite-plugin-html": "^2.1.1", "vite-plugin-html": "^2.1.1",
"vite-plugin-imagemin": "^0.4.6", "vite-plugin-imagemin": "^0.4.6",
"vite-plugin-mock": "^2.9.6", "vite-plugin-mock": "^2.9.6",
"vite-plugin-purge-icons": "^0.7.0", "vite-plugin-purge-icons": "^0.7.0",
"vite-plugin-pwa": "^0.11.3", "vite-plugin-pwa": "^0.11.7",
"vite-plugin-style-import": "^1.3.0", "vite-plugin-style-import": "^1.3.0",
"vite-plugin-svg-icons": "^1.0.5", "vite-plugin-svg-icons": "^1.0.5",
"vite-plugin-theme": "^0.8.1", "vite-plugin-theme": "^0.8.1",
"vite-plugin-vue-setup-extend": "^0.1.0", "vite-plugin-vue-setup-extend": "^0.1.0",
"vite-plugin-windicss": "^1.5.1", "vite-plugin-windicss": "^1.5.1",
"vue-eslint-parser": "^8.0.1", "vue-eslint-parser": "^8.0.1",
"vue-tsc": "^0.29.3" "vue-tsc": "^0.29.6"
}, },
"resolutions": { "resolutions": {
"//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it", "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it",
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
color: var(--comment); color: var(--comment);
text-align: right; text-align: right;
white-space: nowrap; white-space: nowrap;
opacity: 60%; opacity: 0.6;
} }
.CodeMirror-guttermarker { .CodeMirror-guttermarker {
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
display: inline-block; display: inline-block;
font-size: 0.8em; font-size: 0.8em;
content: '>'; content: '>';
opacity: 80%; opacity: 0.8;
transform: rotate(90deg); transform: rotate(90deg);
transition: transform 0.2s; transition: transform 0.2s;
} }
......
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
opt.width = '100%'; opt.width = '100%';
} }
const detailCls = `${prefixCls}__detail`; const detailCls = `${prefixCls}__detail`;
opt.wrapClassName = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls; opt.class = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls;
if (!getContainer) { if (!getContainer) {
// TODO type error? // TODO type error?
......
...@@ -128,13 +128,12 @@ export interface DrawerProps extends DrawerFooterProps { ...@@ -128,13 +128,12 @@ export interface DrawerProps extends DrawerFooterProps {
* @type any (string | slot) * @type any (string | slot)
*/ */
title?: VNodeChild | JSX.Element; title?: VNodeChild | JSX.Element;
/** /**
* The class name of the container of the Drawer dialog. * The class name of the container of the Drawer dialog.
* @type string * @type string
*/ */
wrapClassName?: string; wrapClassName?: string;
class?: string;
/** /**
* Style of wrapper element which **contains mask** compare to `drawerStyle` * Style of wrapper element which **contains mask** compare to `drawerStyle`
* @type object * @type object
......
...@@ -122,7 +122,7 @@ ...@@ -122,7 +122,7 @@
if (!Array.isArray(defaultValue)) { if (!Array.isArray(defaultValue)) {
schema.defaultValue = dateUtil(defaultValue); schema.defaultValue = dateUtil(defaultValue);
} else { } else {
const def: moment.Moment[] = []; const def: any[] = [];
defaultValue.forEach((item) => { defaultValue.forEach((item) => {
def.push(dateUtil(item)); def.push(dateUtil(item));
}); });
......
...@@ -33,7 +33,8 @@ export function useFormValues({ ...@@ -33,7 +33,8 @@ export function useFormValues({
if (isObject(value)) { if (isObject(value)) {
value = transformDateFunc?.(value); value = transformDateFunc?.(value);
} }
if (isArray(value) && value[0]?._isAMomentObject && value[1]?._isAMomentObject) {
if (isArray(value) && value[0]?.format && value[1]?.format) {
value = value.map((item) => transformDateFunc?.(item)); value = value.map((item) => transformDateFunc?.(item));
} }
// Remove spaces // Remove spaces
......
...@@ -53,7 +53,7 @@ export const basicProps = { ...@@ -53,7 +53,7 @@ export const basicProps = {
transformDateFunc: { transformDateFunc: {
type: Function as PropType<Fn>, type: Function as PropType<Fn>,
default: (date: any) => { default: (date: any) => {
return date._isAMomentObject ? date?.format('YYYY-MM-DD HH:mm:ss') : date; return date?.format?.('YYYY-MM-DD HH:mm:ss') ?? date;
}, },
}, },
rulesMessageJoinLabel: propTypes.bool.def(true), rulesMessageJoinLabel: propTypes.bool.def(true),
......
<script lang="tsx"> <script lang="tsx">
import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from './typing'; import type { ReplaceFields, Keys, CheckKeys, TreeActionType, TreeItem } from './typing';
import type { CheckEvent } from './typing';
import { import {
defineComponent, defineComponent,
...@@ -15,22 +16,17 @@ ...@@ -15,22 +16,17 @@
} from 'vue'; } from 'vue';
import { Tree, Empty } from 'ant-design-vue'; import { Tree, Empty } from 'ant-design-vue';
import { TreeIcon } from './TreeIcon'; import { TreeIcon } from './TreeIcon';
import TreeHeader from './TreeHeader.vue';
import { ScrollContainer } from '/@/components/Container'; import { ScrollContainer } from '/@/components/Container';
import { omit, get, difference } from 'lodash-es'; import { omit, get, difference } from 'lodash-es';
import { isArray, isBoolean, isEmpty, isFunction } from '/@/utils/is'; import { isArray, isBoolean, isEmpty, isFunction } from '/@/utils/is';
import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper'; import { extendSlots, getSlot } from '/@/utils/helper/tsxHelper';
import { filter, treeToList } from '/@/utils/helper/treeHelper'; import { filter, treeToList } from '/@/utils/helper/treeHelper';
import { useTree } from './useTree'; import { useTree } from './useTree';
import { useContextMenu } from '/@/hooks/web/useContextMenu'; import { useContextMenu } from '/@/hooks/web/useContextMenu';
import { useDesign } from '/@/hooks/web/useDesign'; import { useDesign } from '/@/hooks/web/useDesign';
import { basicProps } from './props'; import { basicProps } from './props';
import { CreateContextOptions } from '/@/components/ContextMenu'; import { CreateContextOptions } from '/@/components/ContextMenu';
import TreeHeader from './TreeHeader.vue';
import { CheckEvent } from './typing';
interface State { interface State {
expandedKeys: Keys; expandedKeys: Keys;
......
...@@ -168,9 +168,6 @@ ...@@ -168,9 +168,6 @@
} }
}, },
); );
// function handleSearch(e: ChangeEvent): void {
// debounceEmitChange(e.target.value);
// }
return { t, toolbarList, handleMenuClick, searchValue, getInputSearchCls }; return { t, toolbarList, handleMenuClick, searchValue, getInputSearchCls };
}, },
......
...@@ -8,7 +8,7 @@ import type { ...@@ -8,7 +8,7 @@ import type {
TreeItem, TreeItem,
} from './typing'; } from './typing';
import type { ContextMenuItem } from '/@/hooks/web/useContextMenu'; import type { ContextMenuItem } from '/@/hooks/web/useContextMenu';
import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; import type { TreeDataItem } from 'ant-design-vue/es/tree';
import { propTypes } from '/@/utils/propTypes'; import { propTypes } from '/@/utils/propTypes';
export const basicProps = { export const basicProps = {
......
import type { TreeDataItem, CheckEvent as CheckEventOrigin } from 'ant-design-vue/es/tree/Tree'; import type { TreeDataItem, CheckEvent as CheckEventOrigin } from 'ant-design-vue/es/tree/Tree';
import { ContextMenuItem } from '/@/hooks/web/useContextMenu'; import { ContextMenuItem } from '/@/hooks/web/useContextMenu';
export interface ActionItem { export interface ActionItem {
render: (record: Recordable) => any; render: (record: Recordable) => any;
show?: boolean | ((record: Recordable) => boolean); show?: boolean | ((record: Recordable) => boolean);
......
...@@ -26,6 +26,7 @@ export function useTree( ...@@ -26,6 +26,7 @@ export function useTree(
} }
return keys as Keys; return keys as Keys;
} }
// get keys that can be checked and selected // get keys that can be checked and selected
function getEnabledKeys(list?: TreeDataItem[]) { function getEnabledKeys(list?: TreeDataItem[]) {
const keys: string[] = []; const keys: string[] = [];
......
<template> <template>
<div> <div>
<a-button-group> <Space>
<a-button type="primary" @click="openUploadModal" preIcon="carbon:cloud-upload"> <a-button type="primary" @click="openUploadModal" preIcon="carbon:cloud-upload">
{{ t('component.upload.upload') }} {{ t('component.upload.upload') }}
</a-button> </a-button>
...@@ -18,8 +18,7 @@ ...@@ -18,8 +18,7 @@
</template> </template>
</a-button> </a-button>
</Tooltip> </Tooltip>
</a-button-group> </Space>
<UploadModal <UploadModal
v-bind="bindValue" v-bind="bindValue"
:previewFileList="fileList" :previewFileList="fileList"
...@@ -38,19 +37,19 @@ ...@@ -38,19 +37,19 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, watch, unref, computed } from 'vue'; import { defineComponent, ref, watch, unref, computed } from 'vue';
import UploadModal from './UploadModal.vue';
import UploadPreviewModal from './UploadPreviewModal.vue';
import { Icon } from '/@/components/Icon'; import { Icon } from '/@/components/Icon';
import { Tooltip } from 'ant-design-vue'; import { Tooltip, Space } from 'ant-design-vue';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import { uploadContainerProps } from './props'; import { uploadContainerProps } from './props';
import { omit } from 'lodash-es'; import { omit } from 'lodash-es';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { isArray } from '/@/utils/is'; import { isArray } from '/@/utils/is';
import UploadModal from './UploadModal.vue';
import UploadPreviewModal from './UploadPreviewModal.vue';
export default defineComponent({ export default defineComponent({
name: 'BasicUpload', name: 'BasicUpload',
components: { UploadModal, UploadPreviewModal, Icon, Tooltip }, components: { UploadModal, Space, UploadPreviewModal, Icon, Tooltip },
props: uploadContainerProps, props: uploadContainerProps,
emits: ['change', 'delete', 'preview-delete', 'update:value'], emits: ['change', 'delete', 'preview-delete', 'update:value'],
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
:closeFunc="handleCloseFunc" :closeFunc="handleCloseFunc"
:maskClosable="false" :maskClosable="false"
:keyboard="false" :keyboard="false"
wrapClassName="upload-modal" class="upload-modal"
:okButtonProps="getOkButtonProps" :okButtonProps="getOkButtonProps"
:cancelButtonProps="{ disabled: isUploadingRef }" :cancelButtonProps="{ disabled: isUploadingRef }"
> >
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<BasicModal <BasicModal
width="800px" width="800px"
:title="t('component.upload.preview')" :title="t('component.upload.preview')"
wrapClassName="upload-preview-modal" class="upload-preview-modal"
v-bind="$attrs" v-bind="$attrs"
@register="register" @register="register"
:showOkBtn="false" :showOkBtn="false"
......
import type { App } from 'vue'; import type { App } from 'vue';
import { Button } from './Button'; import { Button } from './Button';
import { import { Input, Layout } from 'ant-design-vue';
// Need
Button as AntButton,
Input,
Layout,
} from 'ant-design-vue';
const compList = [AntButton.Group];
export function registerGlobComp(app: App) { export function registerGlobComp(app: App) {
compList.forEach((comp) => {
app.component(comp.name || comp.displayName, comp);
});
app.use(Input).use(Button).use(Layout); app.use(Input).use(Button).use(Layout);
} }
...@@ -46,6 +46,6 @@ ...@@ -46,6 +46,6 @@
width: 100%; width: 100%;
height: 2px; height: 2px;
background-color: @primary-color; background-color: @primary-color;
opacity: 75%; opacity: 0.75;
} }
} }
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
.fade-enter-from, .fade-enter-from,
.fade-leave-to { .fade-leave-to {
opacity: 0%; opacity: 0;
} }
/* fade-slide */ /* fade-slide */
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
} }
.fade-slide-enter-from { .fade-slide-enter-from {
opacity: 0%; opacity: 0;
transform: translateX(-30px); transform: translateX(-30px);
} }
.fade-slide-leave-to { .fade-slide-leave-to {
opacity: 0%; opacity: 0;
transform: translateX(30px); transform: translateX(30px);
} }
...@@ -35,12 +35,12 @@ ...@@ -35,12 +35,12 @@
} }
.fade-bottom-enter-from { .fade-bottom-enter-from {
opacity: 0%; opacity: 0;
transform: translateY(-10%); transform: translateY(-10%);
} }
.fade-bottom-leave-to { .fade-bottom-leave-to {
opacity: 0%; opacity: 0;
transform: translateY(10%); transform: translateY(10%);
} }
...@@ -51,12 +51,12 @@ ...@@ -51,12 +51,12 @@
} }
.fade-scale-enter-from { .fade-scale-enter-from {
opacity: 0%; opacity: 0;
transform: scale(1.2); transform: scale(1.2);
} }
.fade-scale-leave-to { .fade-scale-leave-to {
opacity: 0%; opacity: 0;
transform: scale(0.8); transform: scale(0.8);
} }
...@@ -71,11 +71,11 @@ ...@@ -71,11 +71,11 @@
} }
.fade-top-enter-from { .fade-top-enter-from {
opacity: 0%; opacity: 0;
transform: translateY(8%); transform: translateY(8%);
} }
.fade-top-leave-to { .fade-top-leave-to {
opacity: 0%; opacity: 0;
transform: translateY(-8%); transform: translateY(-8%);
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
&-enter-from, &-enter-from,
&-leave, &-leave,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
transform: scale(0); transform: scale(0);
} }
} }
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
&-enter-from, &-enter-from,
&-leave, &-leave,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
transform: scale(0) rotate(-45deg); transform: scale(0) rotate(-45deg);
} }
} }
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
} }
&-enter-from { &-enter-from {
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
} }
&-enter-from { &-enter-from {
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
} }
&-enter-from { &-enter-from {
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
} }
&-enter-from { &-enter-from {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
transform: translateY(-15px); transform: translateY(-15px);
} }
} }
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
transform: translateY(15px); transform: translateY(15px);
} }
} }
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
transform: translateX(-15px); transform: translateX(-15px);
} }
} }
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
&-enter-from, &-enter-from,
&-leave-to { &-leave-to {
opacity: 0%; opacity: 0;
transform: translateX(15px); transform: translateX(15px);
} }
} }
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
.zoom-out-enter-from, .zoom-out-enter-from,
.zoom-out-leave-to { .zoom-out-leave-to {
opacity: 0%; opacity: 0;
transform: scale(0); transform: scale(0);
} }
...@@ -17,11 +17,11 @@ ...@@ -17,11 +17,11 @@
} }
.zoom-fade-enter-from { .zoom-fade-enter-from {
opacity: 0%; opacity: 0;
transform: scale(0.92); transform: scale(0.92);
} }
.zoom-fade-leave-to { .zoom-fade-leave-to {
opacity: 0%; opacity: 0;
transform: scale(1.06); transform: scale(1.06);
} }
...@@ -401,7 +401,7 @@ export default defineComponent({ ...@@ -401,7 +401,7 @@ export default defineComponent({
{...attrs} {...attrs}
title={t('layout.setting.drawerTitle')} title={t('layout.setting.drawerTitle')}
width={330} width={330}
wrapClassName="setting-drawer" class="setting-drawer"
> >
{unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>} {unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>}
{unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />} {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />}
......
...@@ -28,7 +28,8 @@ html[data-theme='light'] { ...@@ -28,7 +28,8 @@ html[data-theme='light'] {
} }
.ant-tabs.ant-tabs-card { .ant-tabs.ant-tabs-card {
.ant-tabs-card-bar { .ant-tabs-nav {
padding-top: 2px;
height: @multiple-height; height: @multiple-height;
margin: 0; margin: 0;
background-color: @component-background; background-color: @component-background;
...@@ -49,18 +50,20 @@ html[data-theme='light'] { ...@@ -49,18 +50,20 @@ html[data-theme='light'] {
transition: none; transition: none;
&:hover { &:hover {
.ant-tabs-close-x { .ant-tabs-tab-remove {
opacity: 100%; opacity: 1;
} }
} }
.ant-tabs-close-x { .ant-tabs-tab-remove {
width: 8px; width: 8px;
height: 12px; height: 28px;
font-size: 12px; font-size: 12px;
color: inherit; color: inherit;
opacity: 0%; opacity: 0;
transition: none; transition: none;
margin-left: 2px;
margin-right: -4px;
&:hover { &:hover {
svg { svg {
...@@ -69,11 +72,11 @@ html[data-theme='light'] { ...@@ -69,11 +72,11 @@ html[data-theme='light'] {
} }
} }
> div { // > div {
display: flex; // display: flex;
justify-content: center; // justify-content: center;
align-items: center; // align-items: center;
} // }
svg { svg {
fill: @text-color-base; fill: @text-color-base;
...@@ -89,13 +92,16 @@ html[data-theme='light'] { ...@@ -89,13 +92,16 @@ html[data-theme='light'] {
.ant-tabs-tab-active { .ant-tabs-tab-active {
position: relative; position: relative;
padding-left: 18px; padding-left: 18px;
color: @white !important;
background: @primary-color; background: @primary-color;
border: 0; border: 0;
transition: none; transition: none;
.ant-tabs-close-x { span {
opacity: 100%; color: @white !important;
}
.ant-tabs-tab-remove {
opacity: 1;
} }
svg { svg {
...@@ -124,18 +130,13 @@ html[data-theme='light'] { ...@@ -124,18 +130,13 @@ html[data-theme='light'] {
} }
} }
.ant-tabs-extra-content {
margin-top: 2px;
line-height: @multiple-height !important;
}
.ant-dropdown-trigger { .ant-dropdown-trigger {
display: inline-flex; display: inline-flex;
} }
&--hide-close { &--hide-close {
.ant-tabs-close-x { .ant-tabs-tab-remove {
opacity: 0% !important; opacity: 0 !important;
} }
} }
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</TabPane> </TabPane>
</template> </template>
<template #tabBarExtraContent v-if="getShowRedo || getShowQuick"> <template #rightExtra v-if="getShowRedo || getShowQuick">
<TabRedo v-if="getShowRedo" /> <TabRedo v-if="getShowRedo" />
<TabContent isExtra :tabItem="$route" v-if="getShowQuick" /> <TabContent isExtra :tabItem="$route" v-if="getShowQuick" />
<FoldButton v-if="getShowFold" /> <FoldButton v-if="getShowFold" />
...@@ -127,8 +127,6 @@ ...@@ -127,8 +127,6 @@
tabStore.closeTabByKey(targetKey, router); tabStore.closeTabByKey(targetKey, router);
} }
return { return {
prefixCls,
unClose,
getWrapClass, getWrapClass,
handleEdit, handleEdit,
handleChange, handleChange,
......
import { genMessage } from '../helper'; import { genMessage } from '../helper';
import antdLocale from 'ant-design-vue/es/locale/en_US'; 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'); const modules = import.meta.globEager('./en/**/*.ts');
export default { export default {
...@@ -8,6 +7,6 @@ export default { ...@@ -8,6 +7,6 @@ export default {
...genMessage(modules, 'en'), ...genMessage(modules, 'en'),
antdLocale, antdLocale,
}, },
momentLocale: null, dateLocale: null,
momentLocaleName: 'en', dateLocaleName: 'en',
}; };
import { genMessage } from '../helper'; import { genMessage } from '../helper';
import antdLocale from 'ant-design-vue/es/locale/zh_CN'; 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'); const modules = import.meta.globEager('./zh-CN/**/*.ts');
export default { export default {
...@@ -8,6 +7,4 @@ export default { ...@@ -8,6 +7,4 @@ export default {
...genMessage(modules, 'zh-CN'), ...genMessage(modules, 'zh-CN'),
antdLocale, antdLocale,
}, },
momentLocale,
momentLocaleName: 'zh-cn',
}; };
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
*/ */
import type { LocaleType } from '/#/config'; import type { LocaleType } from '/#/config';
import moment from 'moment';
import { i18n } from './setupI18n'; import { i18n } from './setupI18n';
import { useLocaleStoreWithOut } from '/@/store/modules/locale'; import { useLocaleStoreWithOut } from '/@/store/modules/locale';
import { unref, computed } from 'vue'; import { unref, computed } from 'vue';
...@@ -12,8 +10,8 @@ import { loadLocalePool, setHtmlPageLang } from './helper'; ...@@ -12,8 +10,8 @@ import { loadLocalePool, setHtmlPageLang } from './helper';
interface LangModule { interface LangModule {
message: Recordable; message: Recordable;
momentLocale: Recordable; dateLocale: Recordable;
momentLocaleName: string; dateLocaleName: string;
} }
function setI18nLanguage(locale: LocaleType) { function setI18nLanguage(locale: LocaleType) {
...@@ -53,10 +51,9 @@ export function useLocale() { ...@@ -53,10 +51,9 @@ export function useLocale() {
const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule; const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule;
if (!langModule) return; if (!langModule) return;
const { message, momentLocale, momentLocaleName } = langModule; const { message } = langModule;
globalI18n.setLocaleMessage(locale, message); globalI18n.setLocaleMessage(locale, message);
moment.updateLocale(momentLocaleName, momentLocale);
loadLocalePool.push(locale); loadLocalePool.push(locale);
setI18nLanguage(locale); setI18nLanguage(locale);
......
/** /**
* Independent time operation tool to facilitate subsequent switch to dayjs * 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:ss'; const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
const DATE_FORMAT = 'YYYY-MM-DD'; const DATE_FORMAT = 'YYYY-MM-DD';
export function formatToDateTime( export function formatToDateTime(
date: moment.MomentInput = undefined, date: dayjs.Dayjs | undefined = undefined,
format = DATE_TIME_FORMAT, format = DATE_TIME_FORMAT,
): string { ): string {
return moment(date).format(format); return dayjs(date).format(format);
} }
export function formatToDate(date: moment.MomentInput = undefined, format = DATE_FORMAT): string { export function formatToDate(
return moment(date).format(format); date: dayjs.Dayjs | undefined = undefined,
format = DATE_FORMAT,
): string {
return dayjs(date).format(format);
} }
export const dateUtil = moment; export const dateUtil = dayjs;
...@@ -27,7 +27,8 @@ export function formatRequestDate(params: Recordable) { ...@@ -27,7 +27,8 @@ export function formatRequestDate(params: Recordable) {
} }
for (const key in params) { for (const key in params) {
if (params[key] && params[key]._isAMomentObject) { const format = params[key]?.format ?? null;
if (format && typeof format === 'function') {
params[key] = params[key].format(DATE_TIME_FORMAT); params[key] = params[key].format(DATE_TIME_FORMAT);
} }
if (isString(key)) { if (isString(key)) {
......
...@@ -11,29 +11,30 @@ ...@@ -11,29 +11,30 @@
<div class="mt-4"> <div class="mt-4">
权限切换(请先切换权限模式为后台权限模式): 权限切换(请先切换权限模式为后台权限模式):
<a-button-group> <Space>
<a-button @click="switchToken(1)" :disabled="!isBackPremissionMode"> <a-button @click="switchToken(1)" :disabled="!isBackPremissionMode">
获取用户id为1的菜单 获取用户id为1的菜单
</a-button> </a-button>
<a-button @click="switchToken(2)" :disabled="!isBackPremissionMode"> <a-button @click="switchToken(2)" :disabled="!isBackPremissionMode">
获取用户id为2的菜单 获取用户id为2的菜单
</a-button> </a-button>
</a-button-group> </Space>
</div> </div>
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, computed } from 'vue'; import { defineComponent, computed } from 'vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue';
import { RoleEnum } from '/@/enums/roleEnum'; import { RoleEnum } from '/@/enums/roleEnum';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import { PageWrapper } from '/@/components/Page'; import { PageWrapper } from '/@/components/Page';
import { PermissionModeEnum } from '/@/enums/appEnum'; import { PermissionModeEnum } from '/@/enums/appEnum';
import { useAppStore } from '/@/store/modules/app'; import { useAppStore } from '/@/store/modules/app';
import { Alert } from 'ant-design-vue'; import { Alert, Space } from 'ant-design-vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue';
export default defineComponent({ export default defineComponent({
components: { Alert, CurrentPermissionMode, PageWrapper }, components: { Space, Alert, CurrentPermissionMode, PageWrapper },
setup() { setup() {
const { refreshMenu } = usePermission(); const { refreshMenu } = usePermission();
const userStore = useUserStore(); const userStore = useUserStore();
......
...@@ -14,14 +14,14 @@ ...@@ -14,14 +14,14 @@
<div class="mt-4"> <div class="mt-4">
权限切换(请先切换权限模式为前端角色权限模式): 权限切换(请先切换权限模式为前端角色权限模式):
<a-button-group> <Space>
<a-button @click="changeRole(RoleEnum.SUPER)" :type="isSuper ? 'primary' : 'default'"> <a-button @click="changeRole(RoleEnum.SUPER)" :type="isSuper ? 'primary' : 'default'">
{{ RoleEnum.SUPER }} {{ RoleEnum.SUPER }}
</a-button> </a-button>
<a-button @click="changeRole(RoleEnum.TEST)" :type="isTest ? 'primary' : 'default'"> <a-button @click="changeRole(RoleEnum.TEST)" :type="isTest ? 'primary' : 'default'">
{{ RoleEnum.TEST }} {{ RoleEnum.TEST }}
</a-button> </a-button>
</a-button-group> </Space>
</div> </div>
<Divider>组件方式判断权限(有需要可以自行全局注册)</Divider> <Divider>组件方式判断权限(有需要可以自行全局注册)</Divider>
<Authority :value="RoleEnum.SUPER"> <Authority :value="RoleEnum.SUPER">
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent } from 'vue'; import { computed, defineComponent } from 'vue';
import { Alert, Divider } from 'ant-design-vue'; import { Alert, Divider, Space } from 'ant-design-vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue'; import CurrentPermissionMode from '../CurrentPermissionMode.vue';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import { RoleEnum } from '/@/enums/roleEnum'; import { RoleEnum } from '/@/enums/roleEnum';
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
import { PageWrapper } from '/@/components/Page'; import { PageWrapper } from '/@/components/Page';
export default defineComponent({ export default defineComponent({
components: { Alert, PageWrapper, CurrentPermissionMode, Divider, Authority }, components: { Alert, PageWrapper, Space, CurrentPermissionMode, Divider, Authority },
setup() { setup() {
const { changeRole, hasPermission } = usePermission(); const { changeRole, hasPermission } = usePermission();
const userStore = useUserStore(); const userStore = useUserStore();
......
...@@ -14,28 +14,28 @@ ...@@ -14,28 +14,28 @@
<div class="mt-4"> <div class="mt-4">
权限切换(请先切换权限模式为前端角色权限模式): 权限切换(请先切换权限模式为前端角色权限模式):
<a-button-group> <Space>
<a-button @click="changeRole(RoleEnum.SUPER)" :type="isSuper ? 'primary' : 'default'"> <a-button @click="changeRole(RoleEnum.SUPER)" :type="isSuper ? 'primary' : 'default'">
{{ RoleEnum.SUPER }} {{ RoleEnum.SUPER }}
</a-button> </a-button>
<a-button @click="changeRole(RoleEnum.TEST)" :type="isTest ? 'primary' : 'default'"> <a-button @click="changeRole(RoleEnum.TEST)" :type="isTest ? 'primary' : 'default'">
{{ RoleEnum.TEST }} {{ RoleEnum.TEST }}
</a-button> </a-button>
</a-button-group> </Space>
</div> </div>
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent } from 'vue'; import { computed, defineComponent } from 'vue';
import { Alert } from 'ant-design-vue'; import { Alert, Space } from 'ant-design-vue';
import CurrentPermissionMode from '../CurrentPermissionMode.vue';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import { RoleEnum } from '/@/enums/roleEnum'; import { RoleEnum } from '/@/enums/roleEnum';
import { usePermission } from '/@/hooks/web/usePermission'; import { usePermission } from '/@/hooks/web/usePermission';
import { PageWrapper } from '/@/components/Page'; import { PageWrapper } from '/@/components/Page';
import CurrentPermissionMode from '../CurrentPermissionMode.vue';
export default defineComponent({ export default defineComponent({
components: { Alert, CurrentPermissionMode, PageWrapper }, components: { Space, Alert, CurrentPermissionMode, PageWrapper },
setup() { setup() {
const { changeRole } = usePermission(); const { changeRole } = usePermission();
const userStore = useUserStore(); const userStore = useUserStore();
......
import { dateUtil } from '/@/utils/dateUtil'; import { dateUtil } from '/@/utils/dateUtil';
import { reactive, toRefs } from 'vue'; import { reactive, toRefs } from 'vue';
import { useLocaleStore } from '/@/store/modules/locale';
import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'; import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';
export function useNow(immediate = true) { export function useNow(immediate = true) {
const localeStore = useLocaleStore();
const localData = dateUtil.localeData(localeStore.getLocale);
let timer: IntervalHandle; let timer: IntervalHandle;
const state = reactive({ const state = reactive({
...@@ -28,13 +25,13 @@ export function useNow(immediate = true) { ...@@ -28,13 +25,13 @@ export function useNow(immediate = true) {
state.year = now.get('y'); state.year = now.get('y');
state.month = now.get('M') + 1; state.month = now.get('M') + 1;
state.week = localData.weekdays()[now.day()]; state.week = '星期' + ['一', '二', '三', '四', '五', '六', '日'][now.day() - 1];
state.day = now.get('D'); state.day = now.get('d');
state.hour = h; state.hour = h;
state.minute = m; state.minute = m;
state.second = s; state.second = s;
state.meridiem = localData.meridiem(Number(h), Number(h), true); state.meridiem = now.format('A');
}; };
function start() { function start() {
......
module.exports = { module.exports = {
root: true, root: true,
plugins: ['stylelint-order'], plugins: ['stylelint-order'],
customSyntax: 'postcss-less', customSyntax: 'postcss-html',
extends: ['stylelint-config-standard', 'stylelint-config-prettier'], extends: ['stylelint-config-standard', 'stylelint-config-prettier'],
rules: { rules: {
'selector-class-pattern': null, 'selector-class-pattern': null,
......
...@@ -24,13 +24,13 @@ ...@@ -24,13 +24,13 @@
"@types/koa": "^2.13.4", "@types/koa": "^2.13.4",
"@types/koa-bodyparser": "^5.0.2", "@types/koa-bodyparser": "^5.0.2",
"@types/koa-router": "^7.4.4", "@types/koa-router": "^7.4.4",
"@types/node": "^16.11.7", "@types/node": "^16.11.10",
"nodemon": "^2.0.15", "nodemon": "^2.0.15",
"pm2": "^5.1.2", "pm2": "^5.1.2",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"ts-node": "^10.4.0", "ts-node": "^10.4.0",
"tsconfig-paths": "^3.11.0", "tsconfig-paths": "^3.12.0",
"tsup": "^5.6.0", "tsup": "^5.9.1",
"typescript": "^4.4.4" "typescript": "^4.5.2"
} }
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
"module": "esnext", "module": "esnext",
"moduleResolution": "node", "moduleResolution": "node",
"strict": true, "strict": true,
"noLib": false,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"strictFunctionTypes": false, "strictFunctionTypes": false,
...@@ -17,10 +18,9 @@ ...@@ -17,10 +18,9 @@
"noUnusedParameters": true, "noUnusedParameters": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"lib": ["dom", "esnext"], "lib": ["dom", "esnext"],
"types": ["vite/client", "jest"],
"typeRoots": ["./node_modules/@types/", "./types"],
"noImplicitAny": false, "noImplicitAny": false,
"skipLibCheck": true, "skipLibCheck": true,
"removeComments": true,
"paths": { "paths": {
"/@/*": ["src/*"], "/@/*": ["src/*"],
"/#/*": ["types/*"] "/#/*": ["types/*"]
......
...@@ -10,12 +10,6 @@ declare module 'ant-design-vue/es/locale/*' { ...@@ -10,12 +10,6 @@ declare module 'ant-design-vue/es/locale/*' {
export default locale as Locale & ReadonlyRecordable; export default locale as Locale & ReadonlyRecordable;
} }
declare module 'moment/dist/locale/*' {
import { LocaleSpecification } from 'moment';
const locale: LocaleSpecification & ReadonlyRecordable;
export default locale;
}
declare module 'virtual:*' { declare module 'virtual:*' {
const result: any; const result: any;
export default result; export default result;
......
import type { UserConfig, ConfigEnv } from 'vite'; import type { UserConfig, ConfigEnv } from 'vite';
import pkg from './package.json'; import pkg from './package.json';
import moment from 'moment'; import dayjs from 'dayjs';
import { loadEnv } from 'vite'; import { loadEnv } from 'vite';
import { resolve } from 'path'; import { resolve } from 'path';
import { generateModifyVars } from './build/generate/generateModifyVars'; import { generateModifyVars } from './build/generate/generateModifyVars';
...@@ -16,7 +16,7 @@ function pathResolve(dir: string) { ...@@ -16,7 +16,7 @@ function pathResolve(dir: string) {
const { dependencies, devDependencies, name, version } = pkg; const { dependencies, devDependencies, name, version } = pkg;
const __APP_INFO__ = { const __APP_INFO__ = {
pkg: { dependencies, devDependencies, name, version }, pkg: { dependencies, devDependencies, name, version },
lastBuildTime: moment().format('YYYY-MM-DD HH:mm:ss'), lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
}; };
export default ({ command, mode }: ConfigEnv): UserConfig => { export default ({ command, mode }: ConfigEnv): UserConfig => {
...@@ -97,9 +97,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { ...@@ -97,9 +97,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
include: [ include: [
'@iconify/iconify', '@iconify/iconify',
'ant-design-vue/es/locale/zh_CN', 'ant-design-vue/es/locale/zh_CN',
'moment/dist/locale/zh-cn',
'ant-design-vue/es/locale/en_US', 'ant-design-vue/es/locale/en_US',
'moment/dist/locale/eu',
], ],
exclude: ['vue-demi'], exclude: ['vue-demi'],
}, },
......
...@@ -24,8 +24,8 @@ export default defineConfig({ ...@@ -24,8 +24,8 @@ export default defineConfig({
}); });
/** /**
* Used for animation when the element is displayed * Used for animation when the element is displayed.
* @param maxOutput The larger the maxOutput output, the larger the generated css volume * @param maxOutput The larger the maxOutput output, the larger the generated css volume.
*/ */
function createEnterPlugin(maxOutput = 6) { function createEnterPlugin(maxOutput = 6) {
const createCss = (index: number, d = 'x') => { const createCss = (index: number, d = 'x') => {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论