!141 发布 vue 版本 5.2.2 与 cloud 版本 2.2.1
Merge pull request !141 from 疯狂的狮子Li/dev
| | |
| | | # 客æ·ç«¯id |
| | | VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e' |
| | | |
| | | # websocket å¼å
³ |
| | | VITE_APP_WEBSOCKET = true |
| | | # websocket å¼å
³ é»è®¤ä½¿ç¨sseæ¨é |
| | | VITE_APP_WEBSOCKET = false |
| | |
| | | # 客æ·ç«¯id |
| | | VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e' |
| | | |
| | | # websocket å¼å
³ |
| | | VITE_APP_WEBSOCKET = true |
| | | # websocket å¼å
³ é»è®¤ä½¿ç¨sseæ¨é |
| | | VITE_APP_WEBSOCKET = false |
| | |
| | | { |
| | | "name": "ruoyi-vue-plus", |
| | | "version": "5.2.1", |
| | | "version": "5.2.2", |
| | | "description": "RuoYi-Vue-Pluså¤ç§æ·ç®¡çç³»ç»", |
| | | "author": "LionLi", |
| | | "license": "MIT", |
| | |
| | | "diagram-js": "12.3.0", |
| | | "didi": "9.0.2", |
| | | "echarts": "5.5.0", |
| | | "element-plus": "2.7.5", |
| | | "element-plus": "2.7.8", |
| | | "file-saver": "2.0.5", |
| | | "fuse.js": "7.0.0", |
| | | "highlight.js": "11.9.0", |
| | |
| | | "nprogress": "0.2.0", |
| | | "pinia": "2.1.7", |
| | | "screenfull": "6.0.2", |
| | | "vue": "3.4.25", |
| | | "vue": "3.4.34", |
| | | "vue-cropper": "1.1.1", |
| | | "vue-i18n": "9.10.2", |
| | | "vue-router": "4.3.2", |
| | |
| | | "unplugin-icons": "0.18.5", |
| | | "unplugin-vue-components": "0.26.0", |
| | | "unplugin-vue-setup-extend-plus": "1.0.1", |
| | | "vite": "5.2.10", |
| | | "vite": "5.2.12", |
| | | "vite-plugin-compression": "0.5.1", |
| | | "vite-plugin-svg-icons": "2.0.1", |
| | | "vitest": "1.5.0", |
| | |
| | | * 注é |
| | | */ |
| | | export function logout() { |
| | | request({ |
| | | url: '/resource/sse/close', |
| | | method: 'get' |
| | | }); |
| | | return request({ |
| | | url: '/auth/logout', |
| | | method: 'post' |
| | |
| | | dynamic.value = true; |
| | | proxy?.$tab.closeAllPage(); |
| | | proxy?.$router.push('/'); |
| | | proxy?.$tab.refreshPage(); |
| | | } |
| | | }; |
| | | |
| | |
| | | dynamic.value = false; |
| | | proxy?.$tab.closeAllPage(); |
| | | proxy?.$router.push('/'); |
| | | proxy?.$tab.refreshPage(); |
| | | }; |
| | | |
| | | /** ç§æ·å表 */ |
| | |
| | | import useAppStore from '@/store/modules/app'; |
| | | import useSettingsStore from '@/store/modules/settings'; |
| | | import { initWebSocket } from '@/utils/websocket'; |
| | | import { initSSE } from "@/utils/sse"; |
| | | |
| | | const settingsStore = useSettingsStore(); |
| | | const theme = computed(() => settingsStore.theme); |
| | |
| | | initWebSocket(protocol + window.location.host + import.meta.env.VITE_APP_BASE_API + '/resource/websocket'); |
| | | }); |
| | | |
| | | onMounted(() => { |
| | | initSSE(import.meta.env.VITE_APP_BASE_API + '/resource/sse') |
| | | }); |
| | | |
| | | const handleClickOutside = () => { |
| | | useAppStore().closeSideBar({ withoutAnimation: false }); |
| | | }; |
| | |
| | | router.addRoute(route); // å¨ææ·»å å¯è®¿é®è·¯ç±è¡¨ |
| | | } |
| | | }); |
| | | // @ts-ignore |
| | | next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hackæ¹æ³ ç¡®ä¿addRoutes已宿 |
| | | } |
| | | } else { |
| | |
| | | import router from '@/router'; |
| | | import { RouteLocationMatched, RouteLocationNormalized } from 'vue-router'; |
| | | import {RouteLocationMatched, RouteLocationNormalized, RouteLocationRaw} from 'vue-router'; |
| | | import useTagsViewStore from '@/store/modules/tagsView'; |
| | | |
| | | export default { |
| | |
| | | }); |
| | | }, |
| | | // å
³éå½åtab页ç¾ï¼æå¼æ°é¡µç¾ |
| | | closeOpenPage(obj: RouteLocationNormalized): void { |
| | | closeOpenPage(obj: RouteLocationRaw): void { |
| | | useTagsViewStore().delView(router.currentRoute.value); |
| | | if (obj !== undefined) { |
| | | router.push(obj); |
| | |
| | | path: 'index/:tableId(\\d+)', |
| | | component: () => import('@/views/tool/gen/editTable.vue'), |
| | | name: 'GenEdit', |
| | | meta: { title: 'ä¿®æ¹çæé
ç½®', activeMenu: '/tool/gen', icon: '' } |
| | | meta: { title: 'ä¿®æ¹çæé
ç½®', activeMenu: '/tool/gen', icon: '', noCache: true } |
| | | } |
| | | ] |
| | | }, |
| | |
| | | const sidebarRouters = ref<RouteRecordRaw[]>([]); |
| | | |
| | | const getRoutes = (): RouteRecordRaw[] => { |
| | | return routes.value; |
| | | return routes.value as RouteRecordRaw[]; |
| | | }; |
| | | const getSidebarRoutes = (): RouteRecordRaw[] => { |
| | | return sidebarRouters.value; |
| | | return sidebarRouters.value as RouteRecordRaw[]; |
| | | }; |
| | | const getTopbarRoutes = (): RouteRecordRaw[] => { |
| | | return topbarRouters.value; |
| | | return topbarRouters.value as RouteRecordRaw[]; |
| | | }; |
| | | |
| | | const setRoutes = (newRoutes: RouteRecordRaw[]): void => { |
| | |
| | | const iframeViews = ref<RouteLocationNormalized[]>([]); |
| | | |
| | | const getVisitedViews = (): RouteLocationNormalized[] => { |
| | | return visitedViews.value; |
| | | return visitedViews.value as RouteLocationNormalized[]; |
| | | }; |
| | | const getIframeViews = (): RouteLocationNormalized[] => { |
| | | return iframeViews.value; |
| | | return iframeViews.value as RouteLocationNormalized[]; |
| | | }; |
| | | const getCachedViews = (): string[] => { |
| | | return cachedViews.value; |
| | |
| | | const delIframeView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => { |
| | | return new Promise((resolve) => { |
| | | iframeViews.value = iframeViews.value.filter((item: RouteLocationNormalized) => item.path !== view.path); |
| | | resolve([...iframeViews.value]); |
| | | resolve([...iframeViews.value as RouteLocationNormalized[]]); |
| | | }); |
| | | }; |
| | | const addVisitedView = (view: RouteLocationNormalized): void => { |
| | |
| | | delCachedView(view); |
| | | } |
| | | resolve({ |
| | | visitedViews: [...visitedViews.value], |
| | | visitedViews: [...visitedViews.value as RouteLocationNormalized[]], |
| | | cachedViews: [...cachedViews.value] |
| | | }); |
| | | }); |
| | |
| | | break; |
| | | } |
| | | } |
| | | resolve([...visitedViews.value]); |
| | | resolve([...visitedViews.value as RouteLocationNormalized[]]); |
| | | }); |
| | | }; |
| | | const delCachedView = (view?: RouteLocationNormalized): Promise<string[]> => { |
| | |
| | | delOthersVisitedViews(view); |
| | | delOthersCachedViews(view); |
| | | resolve({ |
| | | visitedViews: [...visitedViews.value], |
| | | visitedViews: [...visitedViews.value as RouteLocationNormalized[]], |
| | | cachedViews: [...cachedViews.value] |
| | | }); |
| | | }); |
| | |
| | | visitedViews.value = visitedViews.value.filter((v: RouteLocationNormalized) => { |
| | | return v.meta?.affix || v.path === view.path; |
| | | }); |
| | | resolve([...visitedViews.value]); |
| | | resolve([...visitedViews.value as RouteLocationNormalized[]]); |
| | | }); |
| | | }; |
| | | const delOthersCachedViews = (view: RouteLocationNormalized): Promise<string[]> => { |
| | |
| | | delAllVisitedViews(); |
| | | delAllCachedViews(); |
| | | resolve({ |
| | | visitedViews: [...visitedViews.value], |
| | | visitedViews: [...visitedViews.value as RouteLocationNormalized[]], |
| | | cachedViews: [...cachedViews.value] |
| | | }); |
| | | }); |
| | |
| | | const delAllVisitedViews = (): Promise<RouteLocationNormalized[]> => { |
| | | return new Promise((resolve) => { |
| | | visitedViews.value = visitedViews.value.filter((tag: RouteLocationNormalized) => tag.meta?.affix); |
| | | resolve([...visitedViews.value]); |
| | | resolve([...visitedViews.value as RouteLocationNormalized[]]); |
| | | }); |
| | | }; |
| | | |
| | |
| | | } |
| | | return false; |
| | | }); |
| | | resolve([...visitedViews.value]); |
| | | resolve([...visitedViews.value as RouteLocationNormalized[]]); |
| | | }); |
| | | }; |
| | | const delLeftTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => { |
| | |
| | | } |
| | | return false; |
| | | }); |
| | | resolve([...visitedViews.value]); |
| | | resolve([...visitedViews.value as RouteLocationNormalized[]]); |
| | | }); |
| | | }; |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import { getToken } from '@/utils/auth'; |
| | | import { ElNotification } from 'element-plus'; |
| | | import useNoticeStore from '@/store/modules/notice'; |
| | | |
| | | let message = ''; |
| | | |
| | | // åå§å |
| | | export const initSSE = (url: any) => { |
| | | url = url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID |
| | | const { |
| | | data, |
| | | error |
| | | } = useEventSource(url, [], { |
| | | autoReconnect: { |
| | | retries: 10, |
| | | delay: 3000, |
| | | onFailed() { |
| | | console.log('Failed to connect after 10 retries') |
| | | }, |
| | | } |
| | | }); |
| | | |
| | | watch(error, () => { |
| | | console.log('SSE connection error:', error.value) |
| | | error.value = null; |
| | | }); |
| | | |
| | | watch(data, () => { |
| | | if (!data.value) return; |
| | | useNoticeStore().addNotice({ |
| | | message: data.value, |
| | | read: false, |
| | | time: new Date().toLocaleString() |
| | | }); |
| | | ElNotification({ |
| | | title: 'æ¶æ¯', |
| | | message: data.value, |
| | | type: 'success', |
| | | duration: 3000 |
| | | }); |
| | | data.value = null; |
| | | }); |
| | | }; |
| | | |
| | | |
| | |
| | | /** |
| | | * @module initWebSocket åå§å |
| | | * @module websocketonopen è¿æ¥æå |
| | | * @module websocketonerror è¿æ¥å¤±è´¥ |
| | | * @module websocketclose æå¼è¿æ¥ |
| | | * @module resetHeart éç½®å¿è·³ |
| | | * @module sendSocketHeart å¿è·³åé |
| | | * @module reconnect éè¿ |
| | | * @module sendMsg åéæ°æ® |
| | | * @module websocketonmessage æ¥æ¶æ°æ® |
| | | * @module test æµè¯æ¶å°æ¶æ¯ä¼ é |
| | | * @description socket éä¿¡ |
| | | * @param {any} url socketå°å |
| | | * @param {any} websocket websocket å®ä¾ |
| | | * @param {any} heartTime å¿è·³å®æ¶å¨å®ä¾ |
| | | * @param {number} socketHeart å¿è·³æ¬¡æ° |
| | | * @param {number} HeartTimeOut å¿è·³è¶
æ¶æ¶é´ |
| | | * @param {number} socketError éè¯¯æ¬¡æ° |
| | | */ |
| | | |
| | | import { getToken } from '@/utils/auth'; |
| | | import { ElNotification } from 'element-plus'; |
| | | import useNoticeStore from '@/store/modules/notice'; |
| | | |
| | | let socketUrl: any = ''; // socketå°å |
| | | let websocket: any = null; // websocket å®ä¾ |
| | | let heartTime: any = null; // å¿è·³å®æ¶å¨å®ä¾ |
| | | let socketHeart = 0 as number; // å¿è·³æ¬¡æ° |
| | | const HeartTimeOut = 10000; // å¿è·³è¶
æ¶æ¶é´ 10000 = 10s |
| | | let socketError = 0 as number; // éè¯¯æ¬¡æ° |
| | | |
| | | // åå§åsocket |
| | | export const initWebSocket = (url: any) => { |
| | | if (import.meta.env.VITE_APP_WEBSOCKET === 'false') { |
| | | return; |
| | | } |
| | | socketUrl = url; |
| | | // åå§å websocket |
| | | websocket = new WebSocket(url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID); |
| | | websocketonopen(); |
| | | websocketonmessage(); |
| | | websocketonerror(); |
| | | websocketclose(); |
| | | sendSocketHeart(); |
| | | return websocket; |
| | | }; |
| | | |
| | | // socket è¿æ¥æå |
| | | export const websocketonopen = () => { |
| | | websocket.onopen = function () { |
| | | console.log('è¿æ¥ websocket æå'); |
| | | resetHeart(); |
| | | }; |
| | | }; |
| | | |
| | | // socket è¿æ¥å¤±è´¥ |
| | | export const websocketonerror = () => { |
| | | websocket.onerror = function (e: any) { |
| | | console.log('è¿æ¥ websocket 失败', e); |
| | | }; |
| | | }; |
| | | |
| | | // socket æå¼é¾æ¥ |
| | | export const websocketclose = () => { |
| | | websocket.onclose = function (e: any) { |
| | | console.log('æå¼è¿æ¥', e); |
| | | }; |
| | | }; |
| | | |
| | | // socket éç½®å¿è·³ |
| | | export const resetHeart = () => { |
| | | socketHeart = 0; |
| | | socketError = 0; |
| | | clearInterval(heartTime); |
| | | sendSocketHeart(); |
| | | }; |
| | | |
| | | // socketå¿è·³åé |
| | | export const sendSocketHeart = () => { |
| | | heartTime = setInterval(() => { |
| | | // å¦æè¿æ¥æ£å¸¸ååéå¿è·³ |
| | | if (websocket.readyState == 1) { |
| | | // if (socketHeart <= 30) { |
| | | websocket.send( |
| | | JSON.stringify({ |
| | | type: 'ping' |
| | | }) |
| | | ); |
| | | socketHeart = socketHeart + 1; |
| | | } else { |
| | | // éè¿ |
| | | reconnect(); |
| | | url = url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID |
| | | useWebSocket(url, { |
| | | autoReconnect: { |
| | | // éè¿æå¤§æ¬¡æ° |
| | | retries: 3, |
| | | // éè¿é´é |
| | | delay: 1000, |
| | | onFailed() { |
| | | console.log('websocketéè¿å¤±è´¥'); |
| | | }, |
| | | }, |
| | | heartbeat: { |
| | | message: JSON.stringify({type: 'ping'}), |
| | | // åéå¿è·³çé´é |
| | | interval: 10000, |
| | | // æ¥æ¶å°å¿è·³responseçè¶
æ¶æ¶é´ |
| | | pongTimeout: 2000, |
| | | }, |
| | | onConnected() { |
| | | console.log('websocketå·²ç»è¿æ¥'); |
| | | }, |
| | | onDisconnected() { |
| | | console.log('websocketå·²ç»æå¼'); |
| | | }, |
| | | onMessage: (_, e) => { |
| | | if (e.data.indexOf('ping') > 0) { |
| | | return; |
| | | } |
| | | useNoticeStore().addNotice({ |
| | | message: e.data, |
| | | read: false, |
| | | time: new Date().toLocaleString() |
| | | }); |
| | | ElNotification({ |
| | | title: 'æ¶æ¯', |
| | | message: e.data, |
| | | type: 'success', |
| | | duration: 3000 |
| | | }); |
| | | } |
| | | }, HeartTimeOut); |
| | | }; |
| | | |
| | | // socketéè¿ |
| | | export const reconnect = () => { |
| | | if (socketError <= 2) { |
| | | clearInterval(heartTime); |
| | | initWebSocket(socketUrl); |
| | | socketError = socketError + 1; |
| | | // eslint-disable-next-line prettier/prettier |
| | | console.log('socketéè¿', socketError); |
| | | } else { |
| | | // eslint-disable-next-line prettier/prettier |
| | | console.log('éè¯æ¬¡æ°å·²ç¨å®'); |
| | | clearInterval(heartTime); |
| | | } |
| | | }; |
| | | |
| | | // socket åéæ°æ® |
| | | export const sendMsg = (data: any) => { |
| | | websocket.send(data); |
| | | }; |
| | | |
| | | // socket æ¥æ¶æ°æ® |
| | | export const websocketonmessage = () => { |
| | | websocket.onmessage = function (e: any) { |
| | | if (e.data.indexOf('heartbeat') > 0) { |
| | | resetHeart(); |
| | | } |
| | | if (e.data.indexOf('ping') > 0) { |
| | | return; |
| | | } |
| | | useNoticeStore().addNotice({ |
| | | message: e.data, |
| | | read: false, |
| | | time: new Date().toLocaleString() |
| | | }); |
| | | ElNotification({ |
| | | title: 'æ¶æ¯', |
| | | message: e.data, |
| | | type: 'success', |
| | | duration: 3000 |
| | | }); |
| | | return e.data; |
| | | }; |
| | | }); |
| | | }; |
| | |
| | | * é¨ç½²æ¹å¼ Docker 容å¨ç¼æ ä¸é®é¨ç½²ä¸å¡é群<br /> |
| | | * å½é
å SpringMessage Springæ åå½é
åæ¹æ¡<br /> |
| | | </p> |
| | | <p><b>å½åçæ¬:</b> <span>v5.2.1</span></p> |
| | | <p><b>å½åçæ¬:</b> <span>v5.2.2</span></p> |
| | | <p> |
| | | <el-tag type="danger">¥å
è´¹å¼æº</el-tag> |
| | | </p> |
| | |
| | | * åå¸å¼çæ§ PrometheusãGrafana å
¨æ¹ä½æ§è½çæ§<br /> |
| | | * å
¶ä½ä¸ Vue çæ¬ä¸è´<br /> |
| | | </p> |
| | | <p><b>å½åçæ¬:</b> <span>v2.2.0</span></p> |
| | | <p><b>å½åçæ¬:</b> <span>v2.2.1</span></p> |
| | | <p> |
| | | <el-tag type="danger">¥å
è´¹å¼æº</el-tag> |
| | | </p> |
| | |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button v-hasPermi="['system:oss:list']" type="info" plain icon="Operation" @click="handleOssConfig">é
置管ç</el-button> |
| | | <el-button v-hasPermi="['system:ossConfig:list']" type="info" plain icon="Operation" @click="handleOssConfig">é
置管ç</el-button> |
| | | </el-col> |
| | | <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar> |
| | | </el-row> |
| | |
| | | <el-form-item label="å建æ¶é´" style="width: 308px"> |
| | | <el-date-picker |
| | | v-model="dateRange" |
| | | value-format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="å¼å§æ¥æ" |
| | |
| | | /** å¯¼åºæé®æä½ */ |
| | | const handleExport = () => { |
| | | proxy?.download( |
| | | 'system/tenantPackage/export', |
| | | 'system/package/export', |
| | | { |
| | | ...queryParams.value |
| | | }, |
| | |
| | | |
| | | /** åå»éä¸è¡æ°æ® */ |
| | | const clickRow = (row: RoleVO) => { |
| | | // eleçæ¹æ³æé®é¢ï¼selectedåºè¯¥ä¸ºå¯éåæ° |
| | | tableRef.value?.toggleRowSelection(row, false); |
| | | row.flag = !row.flag |
| | | tableRef.value?.toggleRowSelection(row, row.flag); |
| | | }; |
| | | /** å¤éæ¡é䏿°æ® */ |
| | | const handleSelectionChange = (selection: RoleVO[]) => { |
| | |
| | | <el-form-item label="å建æ¶é´" style="width: 308px"> |
| | | <el-date-picker |
| | | v-model="dateRange" |
| | | value-format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | /** æ°å¢æé®æä½ */ |
| | | const handleAdd = () => { |
| | | proxy.$tab.closePage(proxy.$route); |
| | | proxy.$router.push(`/workflow/leaveEdit/index/add/add`); |
| | | proxy.$router.push({ |
| | | path: `/workflow/leaveEdit/index`, |
| | | query: { |
| | |
| | | 'diagram-js/lib/draw/BaseRenderer', |
| | | 'tiny-svg', |
| | | 'image-conversion', |
| | | |
| | | 'element-plus/es/components/text/style/css', |
| | | 'element-plus/es/components/collapse-item/style/css', |
| | | 'element-plus/es/components/collapse/style/css', |
| | | 'element-plus/es/components/space/style/css', |
| | | 'element-plus/es/components/container/style/css', |
| | | 'element-plus/es/components/aside/style/css', |
| | | 'element-plus/es/components/main/style/css', |
| | | 'element-plus/es/components/header/style/css', |
| | | 'element-plus/es/components/button-group/style/css', |
| | | 'element-plus/es/components/radio-button/style/css', |
| | | 'element-plus/es/components/checkbox-group/style/css', |
| | | 'element-plus/es/components/form/style/css', |
| | | 'element-plus/es/components/form-item/style/css', |
| | | 'element-plus/es/components/button/style/css', |
| | | 'element-plus/es/components/input/style/css', |
| | | 'element-plus/es/components/input-number/style/css', |
| | | 'element-plus/es/components/switch/style/css', |
| | | 'element-plus/es/components/upload/style/css', |
| | | 'element-plus/es/components/menu/style/css', |
| | | 'element-plus/es/components/col/style/css', |
| | | 'element-plus/es/components/icon/style/css', |
| | | 'element-plus/es/components/row/style/css', |
| | | 'element-plus/es/components/tag/style/css', |
| | | 'element-plus/es/components/dialog/style/css', |
| | | 'element-plus/es/components/loading/style/css', |
| | | 'element-plus/es/components/radio/style/css', |
| | | 'element-plus/es/components/radio-group/style/css', |
| | | 'element-plus/es/components/popover/style/css', |
| | | 'element-plus/es/components/scrollbar/style/css', |
| | | 'element-plus/es/components/tooltip/style/css', |
| | | 'element-plus/es/components/dropdown/style/css', |
| | | 'element-plus/es/components/dropdown-menu/style/css', |
| | | 'element-plus/es/components/dropdown-item/style/css', |
| | | 'element-plus/es/components/sub-menu/style/css', |
| | | 'element-plus/es/components/menu-item/style/css', |
| | | 'element-plus/es/components/divider/style/css', |
| | | 'element-plus/es/components/card/style/css', |
| | | 'element-plus/es/components/link/style/css', |
| | | 'element-plus/es/components/breadcrumb/style/css', |
| | | 'element-plus/es/components/breadcrumb-item/style/css', |
| | | 'element-plus/es/components/table/style/css', |
| | | 'element-plus/es/components/tree-select/style/css', |
| | | 'element-plus/es/components/table-column/style/css', |
| | | 'element-plus/es/components/select/style/css', |
| | | 'element-plus/es/components/option/style/css', |
| | | 'element-plus/es/components/pagination/style/css', |
| | | 'element-plus/es/components/tree/style/css', |
| | | 'element-plus/es/components/alert/style/css', |
| | | 'element-plus/es/components/checkbox/style/css', |
| | | 'element-plus/es/components/date-picker/style/css', |
| | | 'element-plus/es/components/transfer/style/css', |
| | | 'element-plus/es/components/tabs/style/css', |
| | | 'element-plus/es/components/image/style/css', |
| | | 'element-plus/es/components/tab-pane/style/css' |
| | | 'element-plus/es/components/**/css' |
| | | ] |
| | | } |
| | | }; |