update 依赖升级
This commit is contained in:
parent
498e71f8b6
commit
bd2ed0903a
@ -22,6 +22,8 @@ module.exports = {
|
||||
rules: {
|
||||
'@typescript-eslint/no-empty-function': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-this-alias': 'off',
|
||||
|
||||
// vue
|
||||
'vue/multi-word-component-names': 'off',
|
||||
|
@ -33,9 +33,9 @@ const isDashboard = (route: RouteLocationMatched) => {
|
||||
}
|
||||
return name.trim() === 'Index';
|
||||
};
|
||||
const handleLink = (item: RouteLocationMatched) => {
|
||||
const handleLink = (item) => {
|
||||
const { redirect, path } = item;
|
||||
redirect ? router.push(redirect as string) : router.push(path);
|
||||
redirect ? router.push(redirect) : router.push(path);
|
||||
};
|
||||
|
||||
watchEffect(() => {
|
||||
|
@ -27,11 +27,14 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { QuillEditor, Quill } from '@vueup/vue-quill';
|
||||
import '@vueup/vue-quill/dist/vue-quill.snow.css';
|
||||
|
||||
import { QuillEditor, Quill } from '@vueup/vue-quill';
|
||||
import { propTypes } from '@/utils/propTypes';
|
||||
import { globalHeaders } from '@/utils/request';
|
||||
|
||||
defineEmits(['update:modelValue']);
|
||||
|
||||
const props = defineProps({
|
||||
/* 编辑器的内容 */
|
||||
modelValue: propTypes.string,
|
||||
@ -55,7 +58,7 @@ const upload = reactive<UploadOption>({
|
||||
});
|
||||
const quillEditorRef = ref();
|
||||
|
||||
const options = ref({
|
||||
const options = ref<any>({
|
||||
theme: 'snow',
|
||||
bounds: document.body,
|
||||
debug: 'warn',
|
||||
|
@ -48,7 +48,10 @@ import { propTypes } from '@/utils/propTypes';
|
||||
import { globalHeaders } from '@/utils/request';
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: [String, Object, Array],
|
||||
modelValue: {
|
||||
type: [String, Object, Array],
|
||||
default: () => []
|
||||
},
|
||||
// 数量限制
|
||||
limit: propTypes.number.def(5),
|
||||
// 大小限制(MB)
|
||||
@ -79,11 +82,11 @@ watch(
|
||||
if (val) {
|
||||
let temp = 1;
|
||||
// 首先将值转为数组
|
||||
let list = [];
|
||||
let list: any[] = [];
|
||||
if (Array.isArray(val)) {
|
||||
list = val;
|
||||
} else {
|
||||
const res = await listByIds(val as string);
|
||||
const res = await listByIds(val);
|
||||
list = res.data.map((oss) => {
|
||||
const data = {
|
||||
name: oss.originalName,
|
||||
|
@ -33,7 +33,7 @@ const realSrc = computed(() => {
|
||||
|
||||
const realSrcList = computed(() => {
|
||||
if (!props.src) {
|
||||
return;
|
||||
return [];
|
||||
}
|
||||
let real_src_list = props.src.split(',');
|
||||
let srcList: string[] = [];
|
||||
|
@ -46,7 +46,10 @@ import { propTypes } from '@/utils/propTypes';
|
||||
import { globalHeaders } from '@/utils/request';
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: [String, Object, Array],
|
||||
modelValue: {
|
||||
type: [String, Object, Array],
|
||||
default: () => []
|
||||
},
|
||||
// 图片数量限制
|
||||
limit: propTypes.number.def(5),
|
||||
// 大小限制(MB)
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div :style="'height:' + height">
|
||||
<iframe :id="iframeId" style="width: 100%; height: 100%" :src="src" frameborder="no"></iframe>
|
||||
<iframe :id="iframeId" style="width: 100%; height: 100%; border: 0" :src="src"></iframe>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -123,7 +123,7 @@ watch(isDark, () => {
|
||||
});
|
||||
const toggleDark = () => useToggle(isDark);
|
||||
|
||||
const topNavChange = (val) => {
|
||||
const topNavChange = (val: any) => {
|
||||
if (!val) {
|
||||
appStore.toggleSideBarHide(false);
|
||||
permissionStore.setSidebarRouters(permissionStore.defaultRoutes);
|
||||
|
@ -36,7 +36,6 @@ import { getNormalPath } from '@/utils/ruoyi';
|
||||
import { RouteRecordRaw } from 'vue-router';
|
||||
|
||||
const props = defineProps({
|
||||
// route object
|
||||
item: {
|
||||
type: Object as PropType<RouteRecordRaw>,
|
||||
required: true
|
||||
@ -85,7 +84,7 @@ const resolvePath = (routePath: string, routeQuery?: string): any => {
|
||||
if (isExternal(routePath)) {
|
||||
return routePath;
|
||||
}
|
||||
if (isExternal(props.basePath)) {
|
||||
if (isExternal(props.basePath as string)) {
|
||||
return props.basePath;
|
||||
}
|
||||
if (routeQuery) {
|
||||
|
@ -13,7 +13,7 @@
|
||||
:collapse-transition="false"
|
||||
mode="vertical"
|
||||
>
|
||||
<sidebar-item v-for="(route, index) in sidebarRouters" :key="route.path + index" :item="route" :base-path="route.path" />
|
||||
<sidebar-item v-for="(r, index) in sidebarRouters" :key="r.path + index" :item="r" :base-path="r.path" />
|
||||
</el-menu>
|
||||
</transition>
|
||||
</el-scrollbar>
|
||||
@ -28,7 +28,8 @@ import useAppStore from '@/store/modules/app';
|
||||
import useSettingsStore from '@/store/modules/settings';
|
||||
import usePermissionStore from '@/store/modules/permission';
|
||||
import { RouteRecordRaw } from 'vue-router';
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const route = useRoute();
|
||||
const appStore = useAppStore();
|
||||
|
@ -7,6 +7,7 @@
|
||||
<script setup lang="ts">
|
||||
import useTagsViewStore from '@/store/modules/tagsView';
|
||||
import { TagView } from 'vue-router';
|
||||
|
||||
const tagAndTagSpacing = ref(4);
|
||||
|
||||
const scrollContainerRef = ref<ElScrollbarInstance>();
|
||||
|
@ -143,7 +143,7 @@ const moveToCurrentTag = () => {
|
||||
scrollPaneRef.value?.moveToTarget(r);
|
||||
// when query is different then update
|
||||
if (r.fullPath !== route.fullPath) {
|
||||
useTagsViewStore().updateVisitedView(route);
|
||||
useTagsViewStore().updateVisitedView(route as any);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -163,14 +163,14 @@ const closeSelectedTag = (view: TagView) => {
|
||||
});
|
||||
};
|
||||
const closeRightTags = () => {
|
||||
proxy?.$tab.closeRightPage(selectedTag.value).then((visitedViews) => {
|
||||
if (!visitedViews.find((i) => i.fullPath === route.fullPath)) {
|
||||
proxy?.$tab.closeRightPage(selectedTag.value).then((visitedViews: TagView[]) => {
|
||||
if (!visitedViews.find((i: TagView) => i.fullPath === route.fullPath)) {
|
||||
toLastView(visitedViews);
|
||||
}
|
||||
});
|
||||
};
|
||||
const closeLeftTags = () => {
|
||||
proxy?.$tab.closeLeftPage(selectedTag.value).then((visitedViews) => {
|
||||
proxy?.$tab.closeLeftPage(selectedTag.value).then((visitedViews: TagView[]) => {
|
||||
if (!visitedViews.find((i: TagView) => i.fullPath === route.fullPath)) {
|
||||
toLastView(visitedViews);
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import { isRelogin } from '@/utils/request';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import useSettingsStore from '@/store/modules/settings';
|
||||
import usePermissionStore from '@/store/modules/permission';
|
||||
import { RouteRecordRaw } from 'vue-router';
|
||||
|
||||
NProgress.configure({ showSpinner: false });
|
||||
const whiteList = ['/login', '/register', '/social-callback'];
|
||||
@ -36,12 +35,14 @@ router.beforeEach(async (to, from, next) => {
|
||||
isRelogin.show = false;
|
||||
const accessRoutes = await usePermissionStore().generateRoutes();
|
||||
// 根据roles权限生成可访问的路由表
|
||||
accessRoutes.forEach((route: RouteRecordRaw) => {
|
||||
accessRoutes.forEach((route) => {
|
||||
if (!isHttp(route.path)) {
|
||||
router.addRoute(route); // 动态添加可访问路由表
|
||||
}
|
||||
});
|
||||
next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
|
||||
const n = { ...to, replace: true };
|
||||
console.log(n);
|
||||
next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 确保addRoutes已完成
|
||||
}
|
||||
} else {
|
||||
next();
|
||||
|
@ -123,7 +123,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
||||
});
|
||||
};
|
||||
|
||||
const updateVisitedView = (view: TagView | RouteLocationNormalized): void => {
|
||||
const updateVisitedView = (view: TagView): void => {
|
||||
for (let v of visitedViews.value) {
|
||||
if (v.path === view.path) {
|
||||
v = Object.assign(v, view);
|
||||
@ -170,7 +170,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
||||
});
|
||||
};
|
||||
|
||||
const addCachedView = (view: TagView | RouteLocationNormalized): void => {
|
||||
const addCachedView = (view: TagView): void => {
|
||||
const viewName = view.name as string;
|
||||
if (!viewName) return;
|
||||
if (cachedViews.value.includes(viewName)) return;
|
||||
|
2
src/types/axios.d.ts
vendored
2
src/types/axios.d.ts
vendored
@ -1,7 +1,7 @@
|
||||
import axios from 'axios';
|
||||
|
||||
declare module 'axios' {
|
||||
export interface AxiosResponse<T = any> {
|
||||
interface AxiosResponse<T = any> {
|
||||
code: number;
|
||||
msg: string;
|
||||
rows: T;
|
||||
|
2
src/types/element.d.ts
vendored
2
src/types/element.d.ts
vendored
@ -4,6 +4,7 @@ declare global {
|
||||
declare type ElFormInstance = ep.FormInstance;
|
||||
declare type ElTableInstance = ep.TableInstance;
|
||||
declare type ElUploadInstance = ep.UploadInstance;
|
||||
declare type ElScrollbarInstance = ep.ScrollbarInstance;
|
||||
declare type ElTreeInstance = InstanceType<typeof ep.ElTree>;
|
||||
declare type ElTreeSelectInstance = InstanceType<typeof ep.ElTreeSelect>;
|
||||
declare type ElSelectInstance = InstanceType<typeof ep.ElSelect>;
|
||||
@ -24,7 +25,6 @@ declare global {
|
||||
declare type ElColorPickerInstance = InstanceType<typeof ep.ElColorPicker>;
|
||||
declare type ElRateInstance = InstanceType<typeof ep.ElRate>;
|
||||
declare type ElSliderInstance = InstanceType<typeof ep.ElSlider>;
|
||||
declare type ElScrollbarInstance = InstanceType<typeof ep.ElScrollbar>;
|
||||
|
||||
declare type TransferKey = ep.TransferKey;
|
||||
declare type CheckboxValueType = ep.CheckboxValueType;
|
||||
|
54
src/types/env.d.ts
vendored
54
src/types/env.d.ts
vendored
@ -4,60 +4,6 @@ declare module '*.vue' {
|
||||
export default Component;
|
||||
}
|
||||
|
||||
declare module '*.avif' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.bmp' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.gif' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.jpg' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.jpeg' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.png' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.webp' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.svg' {
|
||||
const src: string;
|
||||
export default src;
|
||||
}
|
||||
|
||||
declare module '*.module.css' {
|
||||
const classes: { readonly [key: string]: string };
|
||||
export default classes;
|
||||
}
|
||||
|
||||
declare module '*.module.scss' {
|
||||
const classes: { readonly [key: string]: string };
|
||||
export default classes;
|
||||
}
|
||||
|
||||
declare module '*.module.sass' {
|
||||
const classes: { readonly [key: string]: string };
|
||||
export default classes;
|
||||
}
|
||||
// 环境变量
|
||||
interface ImportMetaEnv {
|
||||
VITE_APP_TITLE: string;
|
||||
|
3
src/types/global.d.ts
vendored
3
src/types/global.d.ts
vendored
@ -1,4 +1,5 @@
|
||||
import type { ComponentInternalInstance as ComponentInstance, PropType as VuePropType } from 'vue/runtime-core';
|
||||
import type { ComponentInternalInstance as ComponentInstance } from 'vue/runtime-core';
|
||||
import type { PropType as VuePropType } from 'vue';
|
||||
import { LanguageEnum } from '@/enums/LanguageEnum';
|
||||
|
||||
declare global {
|
||||
|
5
src/types/module.d.ts
vendored
5
src/types/module.d.ts
vendored
@ -30,3 +30,8 @@ declare module '@vue/runtime-core' {
|
||||
parseTime: typeof parseTime;
|
||||
}
|
||||
}
|
||||
|
||||
declare module 'vform3-builds' {
|
||||
const content: any;
|
||||
export = content;
|
||||
}
|
||||
|
1
src/types/router.d.ts
vendored
1
src/types/router.d.ts
vendored
@ -16,6 +16,7 @@ declare module 'vue-router' {
|
||||
roles?: string[];
|
||||
alwaysShow?: boolean;
|
||||
query?: string;
|
||||
parentPath?: string;
|
||||
}
|
||||
|
||||
interface _RouteLocationBase {
|
||||
|
4
src/types/vform3-builds.d.ts
vendored
4
src/types/vform3-builds.d.ts
vendored
@ -1,4 +0,0 @@
|
||||
declare module 'vform3-builds' {
|
||||
const content: any;
|
||||
export = content;
|
||||
}
|
@ -89,7 +89,7 @@ export const byteLength = (str: string) => {
|
||||
* @returns {Array}
|
||||
*/
|
||||
export const cleanArray = (actual: Array<any>) => {
|
||||
const newArray = [];
|
||||
const newArray: any[] = [];
|
||||
for (let i = 0; i < actual.length; i++) {
|
||||
if (actual[i]) {
|
||||
newArray.push(actual[i]);
|
||||
|
@ -68,7 +68,7 @@ export const selectDictLabel = (datas: any, value: number | string) => {
|
||||
if (value === undefined) {
|
||||
return '';
|
||||
}
|
||||
const actions = [];
|
||||
const actions: Array<string | number> = [];
|
||||
Object.keys(datas).some((key) => {
|
||||
if (datas[key].value == '' + value) {
|
||||
actions.push(datas[key].label);
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div class="mb-[10px]">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="68px">
|
||||
<el-form-item label="操作地址" prop="operIp">
|
||||
|
@ -50,7 +50,8 @@ import { UserQuery } from '@/api/system/user/types';
|
||||
|
||||
const props = defineProps({
|
||||
roleId: {
|
||||
type: [Number, String]
|
||||
type: [Number, String],
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -372,7 +372,42 @@ const initFormData: UserForm = {
|
||||
postIds: [],
|
||||
roleIds: []
|
||||
};
|
||||
const data = reactive<PageData<UserForm, UserQuery>>({
|
||||
const rules2: ElFormRules = {
|
||||
userName: [
|
||||
{ required: true, message: '用户名称不能为空', trigger: 'blur' },
|
||||
{
|
||||
min: 2,
|
||||
max: 20,
|
||||
message: '用户名称长度必须介于 2 和 20 之间',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
||||
password: [
|
||||
{ required: true, message: '用户密码不能为空', trigger: 'blur' },
|
||||
{
|
||||
min: 5,
|
||||
max: 20,
|
||||
message: '用户密码长度必须介于 5 和 20 之间',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
email: [
|
||||
{
|
||||
type: 'email',
|
||||
message: '请输入正确的邮箱地址',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
phonenumber: [
|
||||
{
|
||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||
message: '请输入正确的手机号码',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
};
|
||||
const initData: PageData<UserForm, UserQuery> = {
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
@ -380,7 +415,8 @@ const data = reactive<PageData<UserForm, UserQuery>>({
|
||||
userName: '',
|
||||
phonenumber: '',
|
||||
status: '',
|
||||
deptId: ''
|
||||
deptId: '',
|
||||
roleId: ''
|
||||
},
|
||||
rules: {
|
||||
userName: [
|
||||
@ -417,7 +453,8 @@ const data = reactive<PageData<UserForm, UserQuery>>({
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
};
|
||||
const data = reactive<PageData<UserForm, UserQuery>>(initData);
|
||||
|
||||
const { queryParams, form, rules } = toRefs<PageData<UserForm, UserQuery>>(data);
|
||||
|
||||
|
@ -51,14 +51,12 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { authUnlock, authBinding } from '@/api/system/social/auth';
|
||||
import { PropType } from 'vue';
|
||||
import { propTypes } from '@/utils/propTypes';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const props = defineProps({
|
||||
auths: {
|
||||
type: Object as PropType<any>
|
||||
}
|
||||
auths: propTypes.any.isRequired
|
||||
});
|
||||
const auths = computed(() => props.auths);
|
||||
|
||||
|
@ -32,7 +32,7 @@ const props = defineProps({
|
||||
const userForm = computed(() => props.user);
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const userRef = ref<ElFormInstance>();
|
||||
const rules = ref<ElFormRules>({
|
||||
const rule: ElFormRules = {
|
||||
nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
||||
email: [
|
||||
{ required: true, message: '邮箱地址不能为空', trigger: 'blur' },
|
||||
@ -50,7 +50,8 @@ const rules = ref<ElFormRules>({
|
||||
},
|
||||
{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }
|
||||
]
|
||||
});
|
||||
};
|
||||
const rules = ref<ElFormRules>(rule);
|
||||
|
||||
/** 提交按钮 */
|
||||
const submit = () => {
|
||||
|
@ -228,16 +228,16 @@ import { propTypes } from '@/utils/propTypes';
|
||||
interface MenuOptionsType {
|
||||
menuId: number | string;
|
||||
menuName: string;
|
||||
children: MenuOptionsType[] | undefined;
|
||||
children?: MenuOptionsType[];
|
||||
}
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const subColumns = ref<any>([]);
|
||||
const menuOptions = ref<Array<MenuOptionsType>>([]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const props = defineProps({
|
||||
info: propTypes.any.def(null),
|
||||
tables: propTypes.any.def(null)
|
||||
info: propTypes.any.isRequired,
|
||||
tables: propTypes.any.isRequired
|
||||
});
|
||||
|
||||
const infoForm = computed(() => props.info);
|
||||
@ -276,6 +276,7 @@ const getMenuTreeselect = async () => {
|
||||
const res = await listMenu();
|
||||
res.data.forEach((m) => (m.menuId = m.menuId.toString()));
|
||||
const data = proxy?.handleTree<MenuOptionsType>(res.data, 'menuId');
|
||||
|
||||
if (data) {
|
||||
menuOptions.value = data;
|
||||
}
|
||||
|
@ -2,21 +2,25 @@
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"useDefineForClassFields": true,
|
||||
"moduleResolution": "node",
|
||||
// "useDefineForClassFields": true,
|
||||
"moduleResolution": "bundler",
|
||||
"strict": true,
|
||||
"jsx": "preserve",
|
||||
"sourceMap": true,
|
||||
"resolveJsonModule": true,
|
||||
"esModuleInterop": true,
|
||||
"strictFunctionTypes": false,
|
||||
"lib": ["esnext", "dom"],
|
||||
"noImplicitAny": false,
|
||||
"baseUrl": ".",
|
||||
"allowJs": true,
|
||||
"experimentalDecorators": true,
|
||||
"paths": {
|
||||
"@/*": ["src/*"]
|
||||
},
|
||||
"types": ["vite/client"],
|
||||
"skipLibCheck": true,
|
||||
"removeComments": true,
|
||||
// 允许默认导入
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
|
Loading…
x
Reference in New Issue
Block a user