!131 ♥️发布 vue 版本 5.2.1 与 cloud 版本 2.2.0

Merge pull request !131 from 疯狂的狮子Li/dev
This commit is contained in:
疯狂的狮子Li 2024-07-09 03:02:34 +00:00 committed by Gitee
commit ba24afce52
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
32 changed files with 145 additions and 73 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "ruoyi-vue-plus", "name": "ruoyi-vue-plus",
"version": "5.2.0", "version": "5.2.1",
"description": "RuoYi-Vue-Plus多租户管理系统", "description": "RuoYi-Vue-Plus多租户管理系统",
"author": "LionLi", "author": "LionLi",
"license": "MIT", "license": "MIT",

View File

@ -25,7 +25,7 @@ export const listFormManage = (query?: FormManageQuery): AxiosPromise<FormManage
export const selectListFormManage = (): AxiosPromise<FormManageVO[]> => { export const selectListFormManage = (): AxiosPromise<FormManageVO[]> => {
return request({ return request({
url: '/workflow/formManage/list/selectList', url: '/workflow/formManage/list/selectList',
method: 'get', method: 'get'
}); });
}; };

View File

@ -26,7 +26,7 @@ export interface FormManageVO {
/** /**
* *
*/ */
remork: string; remark: string;
} }
export interface FormManageForm extends BaseEntity { export interface FormManageForm extends BaseEntity {
@ -53,7 +53,7 @@ export interface FormManageForm extends BaseEntity {
/** /**
* *
*/ */
remork?: string; remark?: string;
} }
export interface FormManageQuery extends PageQuery { export interface FormManageQuery extends PageQuery {

View File

@ -22,7 +22,7 @@ export const listModel = (query: ModelQuery): AxiosPromise<ModelVO[]> => {
*/ */
export const getInfo = (id: string): AxiosPromise<ModelForm> => { export const getInfo = (id: string): AxiosPromise<ModelForm> => {
return request({ return request({
url: '/workflow/model/getInfo/'+id, url: '/workflow/model/getInfo/' + id,
method: 'get' method: 'get'
}); });
}; };
@ -101,4 +101,4 @@ export const copyModel = (data: ModelForm): AxiosPromise<void> => {
method: 'post', method: 'post',
data: data data: data
}); });
}; };

View File

@ -1,10 +1,10 @@
export interface ModelForm { export interface ModelForm {
id: string, id: string;
name: string; name: string;
key: string; key: string;
categoryCode: string; categoryCode: string;
xml:string, xml: string;
svg:string, svg: string;
description: string; description: string;
} }

View File

@ -35,9 +35,4 @@ export interface NodeConfigVO {
* *
*/ */
wfFormManageVo: FormManageVO; wfFormManageVo: FormManageVO;
} }

View File

@ -40,7 +40,7 @@ class CustomContextPadProvider extends ContextPadProvider {
rules: Rules, rules: Rules,
translate translate
) { ) {
// @ts-ignore // @ts-expect-error 忽略异常
super(config, injector, eventBus, contextPad, modeling, elementFactory, connect, create, popupMenu, canvas, rules, translate); super(config, injector, eventBus, contextPad, modeling, elementFactory, connect, create, popupMenu, canvas, rules, translate);
this._contextPad = contextPad; this._contextPad = contextPad;

View File

@ -110,7 +110,7 @@ watch(
() => props.modelValue, () => props.modelValue,
(v: string) => { (v: string) => {
if (v !== content.value) { if (v !== content.value) {
content.value = v === undefined ? '<p></p>' : v; content.value = v || '<p></p>';
} }
}, },
{ immediate: true } { immediate: true }

View File

@ -38,7 +38,7 @@ const realSrcList = computed(() => {
let real_src_list = props.src.split(','); let real_src_list = props.src.split(',');
let srcList: string[] = []; let srcList: string[] = [];
real_src_list.forEach((item: string) => { real_src_list.forEach((item: string) => {
if(item.trim() === '') { if (item.trim() === '') {
return; return;
} }
return srcList.push(item); return srcList.push(item);

View File

@ -128,7 +128,7 @@ const props = defineProps({
//id //id
userIdList: { userIdList: {
type: Array, type: Array,
default: [] default: () => []
} }
}); });
const deptTreeRef = ref(ElTree); const deptTreeRef = ref(ElTree);

View File

@ -106,7 +106,7 @@ const multiInstanceUserRef = ref<InstanceType<typeof MultiInstanceUser>>();
const props = defineProps({ const props = defineProps({
taskVariables: { taskVariables: {
type: Object as () => Record<string, any>, type: Object as () => Record<string, any>,
default: {} default: () => {}
} }
}); });
// //

View File

@ -29,16 +29,11 @@
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phonenumber"> <el-form-item label="手机号码" prop="phonenumber">
<el-input <el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
v-model="queryParams.phonenumber"
placeholder="请输入手机号码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="() => resetQuery()">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -223,13 +218,13 @@ const handleQuery = () => {
getList(); getList();
}; };
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = (refresh = true) => {
dateRange.value = ['', '']; dateRange.value = ['', ''];
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
queryParams.value.deptId = undefined; queryParams.value.deptId = undefined;
deptTreeRef.value?.setCurrentKey(undefined); deptTreeRef.value?.setCurrentKey(undefined);
handleQuery(); refresh && handleQuery();
}; };
const handleCheckboxChange = (checked) => { const handleCheckboxChange = (checked) => {
@ -288,23 +283,20 @@ const close = () => {
watch( watch(
() => userDialog.visible.value, () => userDialog.visible.value,
(newValue: boolean) => { async (newValue: boolean) => {
if (newValue) { if (newValue) {
initSelectUser(); await getTreeSelect(); //
await getList(); //
await initSelectUser();
} else { } else {
tableRef.value.clearCheckboxReserve(); tableRef.value.clearCheckboxReserve();
tableRef.value.clearCheckboxRow(); tableRef.value.clearCheckboxRow();
resetQuery(); resetQuery(false);
selectUserList.value = []; selectUserList.value = [];
} }
} }
); );
onMounted(() => {
getTreeSelect(); //
getList(); //
});
defineExpose({ defineExpose({
open: userDialog.openDialog, open: userDialog.openDialog,
close: userDialog.closeDialog close: userDialog.closeDialog

View File

@ -28,4 +28,4 @@ export default (ops?: Options): Return => {
openDialog, openDialog,
closeDialog closeDialog
}; };
}; };

View File

@ -1,13 +1,13 @@
<template> <template>
<section class="app-main"> <section class="app-main">
<router-view v-slot="{ Component, route }"> <router-view v-slot="{ Component, route }">
<transition :enter-active-class="animante" mode="out-in"> <transition v-if="!route.meta.noCache" :enter-active-class="animante" mode="out-in">
<div> <keep-alive v-if="!route.meta.noCache" :include="tagsViewStore.cachedViews">
<keep-alive :include="tagsViewStore.cachedViews" v-if="!route.meta.noCache"> <component :is="Component" v-if="!route.meta.link" :key="route.path" />
<component v-if="!route.meta.link" :is="Component" :key="route.path" /> </keep-alive>
</keep-alive> </transition>
<component v-if="!route.meta.link && route.meta.noCache" :is="Component" :key="route.path" /> <transition v-if="route.meta.noCache" :enter-active-class="animante" mode="out-in">
</div> <component :is="Component" v-if="!route.meta.link && route.meta.noCache" :key="route.path" />
</transition> </transition>
</router-view> </router-view>
<iframe-toggle /> <iframe-toggle />

View File

@ -18,7 +18,7 @@ const code = route.query.code as string;
const state = route.query.state as string; const state = route.query.state as string;
const source = route.query.source as string; const source = route.query.source as string;
const stateJson = JSON.parse(atob(state)); const stateJson = JSON.parse(atob(state));
const tenantId = stateJson.tenantId as string ? stateJson.tenantId as string : '000000'; const tenantId = (stateJson.tenantId as string) ? (stateJson.tenantId as string) : '000000';
const domain = stateJson.domain as string; const domain = stateJson.domain as string;
const processResponse = async (res: any) => { const processResponse = async (res: any) => {

View File

@ -53,7 +53,7 @@ router.beforeEach(async (to, from, next) => {
next(); next();
} else { } else {
const redirect = encodeURIComponent(to.fullPath || '/'); const redirect = encodeURIComponent(to.fullPath || '/');
next(`/login?redirect=${redirect}`) // 否则全部重定向到登录页 next(`/login?redirect=${redirect}`); // 否则全部重定向到登录页
NProgress.done(); NProgress.done();
} }
} }

View File

@ -9,6 +9,8 @@ import Layout from '@/layout/index.vue';
import ParentView from '@/components/ParentView/index.vue'; import ParentView from '@/components/ParentView/index.vue';
import InnerLink from '@/layout/components/InnerLink/index.vue'; import InnerLink from '@/layout/components/InnerLink/index.vue';
import { createCustomNameComponent } from '@/utils/createCustomNameComponent';
// 匹配views里面所有的.vue文件 // 匹配views里面所有的.vue文件
const modules = import.meta.glob('./../../views/**/*.vue'); const modules = import.meta.glob('./../../views/**/*.vue');
export const usePermissionStore = defineStore('permission', () => { export const usePermissionStore = defineStore('permission', () => {
@ -58,6 +60,8 @@ export const usePermissionStore = defineStore('permission', () => {
setSidebarRouters(constantRoutes.concat(sidebarRoutes)); setSidebarRouters(constantRoutes.concat(sidebarRoutes));
setDefaultRoutes(sidebarRoutes); setDefaultRoutes(sidebarRoutes);
setTopbarRoutes(defaultRoutes); setTopbarRoutes(defaultRoutes);
// 路由name重复检查
duplicateRouteChecker(asyncRoutes, sidebarRoutes);
return new Promise<RouteRecordRaw[]>((resolve) => resolve(rewriteRoutes)); return new Promise<RouteRecordRaw[]>((resolve) => resolve(rewriteRoutes));
}; };
@ -80,7 +84,7 @@ export const usePermissionStore = defineStore('permission', () => {
} else if (route.component?.toString() === 'InnerLink') { } else if (route.component?.toString() === 'InnerLink') {
route.component = InnerLink; route.component = InnerLink;
} else { } else {
route.component = loadView(route.component); route.component = loadView(route.component, route.name as string);
} }
if (route.children != null && route.children && route.children.length) { if (route.children != null && route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, route, type); route.children = filterAsyncRouter(route.children, route, type);
@ -151,12 +155,12 @@ export const filterDynamicRoutes = (routes: RouteRecordRaw[]) => {
return res; return res;
}; };
export const loadView = (view: any) => { export const loadView = (view: any, name: string) => {
let res; let res;
for (const path in modules) { for (const path in modules) {
const dir = path.split('views/')[1].split('.vue')[0]; const dir = path.split('views/')[1].split('.vue')[0];
if (dir === view) { if (dir === view) {
res = () => modules[path](); res = createCustomNameComponent(modules[path], { name });
} }
} }
return res; return res;
@ -167,4 +171,48 @@ export const usePermissionStoreHook = () => {
return usePermissionStore(store); return usePermissionStore(store);
}; };
interface Route {
name?: string | symbol;
path: string;
children?: Route[];
}
/**
* name是否重复
* @param localRoutes
* @param routes
*/
function duplicateRouteChecker(localRoutes: Route[], routes: Route[]) {
// 展平
function flatRoutes(routes: Route[]) {
const res: Route[] = [];
routes.forEach((route) => {
if (route.children) {
res.push(...flatRoutes(route.children));
} else {
res.push(route);
}
});
return res;
}
const allRoutes = flatRoutes([...localRoutes, ...routes]);
const nameList: string[] = [];
allRoutes.forEach((route) => {
const name = route.name.toString();
if (name && nameList.includes(name)) {
const message = `路由名称: [${name}] 重复, 会造成 404`;
console.error(message);
ElNotification({
title: '路由名称重复',
message,
type: 'error'
});
return;
}
nameList.push(route.name.toString());
});
}
export default usePermissionStore; export default usePermissionStore;

View File

@ -0,0 +1,39 @@
/**
* name
* @fourteendp
* https://github.com/vbenjs/vue-vben-admin/issues/3927
*/
import { Component, defineComponent, h } from 'vue';
interface Options {
name?: string;
}
export function createCustomNameComponent(loader: () => Promise<any>, options: Options = {}): () => Promise<Component> {
const { name } = options;
let component: Component | null = null;
const load = async () => {
try {
const { default: loadedComponent } = await loader();
component = loadedComponent;
} catch (error) {
console.error(`Cannot resolve component ${name}, error:`, error);
}
};
return async () => {
if (!component) {
await load();
}
return Promise.resolve(
defineComponent({
name,
render() {
return h(component as Component);
}
})
);
};
}

View File

@ -33,7 +33,7 @@
* 部署方式 Docker 容器编排 一键部署业务集群<br /> * 部署方式 Docker 容器编排 一键部署业务集群<br />
* 国际化 SpringMessage Spring标准国际化方案<br /> * 国际化 SpringMessage Spring标准国际化方案<br />
</p> </p>
<p><b>当前版本:</b> <span>v5.2.0</span></p> <p><b>当前版本:</b> <span>v5.2.1</span></p>
<p> <p>
<el-tag type="danger">&yen;免费开源</el-tag> <el-tag type="danger">&yen;免费开源</el-tag>
</p> </p>

View File

@ -11,7 +11,7 @@
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="登录状态" clearable > <el-select v-model="queryParams.status" placeholder="登录状态" clearable>
<el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -14,12 +14,12 @@
<el-input v-model="queryParams.operName" placeholder="请输入操作人员" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.operName" placeholder="请输入操作人员" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="businessType"> <el-form-item label="类型" prop="businessType">
<el-select v-model="queryParams.businessType" placeholder="操作类型" clearable > <el-select v-model="queryParams.businessType" placeholder="操作类型" clearable>
<el-option v-for="dict in sys_oper_type" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_oper_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="操作状态" clearable > <el-select v-model="queryParams.status" placeholder="操作状态" clearable>
<el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -10,7 +10,7 @@
<el-input v-model="queryParams.clientSecret" placeholder="请输入客户端秘钥" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.clientSecret" placeholder="请输入客户端秘钥" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="状态" clearable > <el-select v-model="queryParams.status" placeholder="状态" clearable>
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -11,7 +11,7 @@
<el-input v-model="queryParams.configKey" placeholder="请输入参数键名" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.configKey" placeholder="请输入参数键名" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="系统内置" prop="configType"> <el-form-item label="系统内置" prop="configType">
<el-select v-model="queryParams.configType" placeholder="系统内置" clearable > <el-select v-model="queryParams.configType" placeholder="系统内置" clearable>
<el-option v-for="dict in sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -11,7 +11,7 @@
<el-input v-model="queryParams.deptCategory" placeholder="请输入类别编码" clearable style="width: 240px" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.deptCategory" placeholder="请输入类别编码" clearable style="width: 240px" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="部门状态" clearable > <el-select v-model="queryParams.status" placeholder="部门状态" clearable>
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -8,7 +8,7 @@
<el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="菜单状态" clearable > <el-select v-model="queryParams.status" placeholder="菜单状态" clearable>
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -13,7 +13,7 @@
<el-form-item label="文件后缀" prop="fileSuffix"> <el-form-item label="文件后缀" prop="fileSuffix">
<el-input v-model="queryParams.fileSuffix" placeholder="请输入文件后缀" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.fileSuffix" placeholder="请输入文件后缀" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="创建时间" style="width: 308px;"> <el-form-item label="创建时间" style="width: 308px">
<el-date-picker <el-date-picker
v-model="dateRangeCreateTime" v-model="dateRangeCreateTime"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@ -198,9 +198,9 @@ const getList = async () => {
showTable.value = true; showTable.value = true;
}; };
function checkFileSuffix(fileSuffix: string | string[]) { function checkFileSuffix(fileSuffix: string | string[]) {
const arr = [".png", ".jpg", ".jpeg"]; const arr = ['.png', '.jpg', '.jpeg'];
const suffixArray = Array.isArray(fileSuffix) ? fileSuffix : [fileSuffix]; const suffixArray = Array.isArray(fileSuffix) ? fileSuffix : [fileSuffix];
return suffixArray.some(suffix => arr.includes(suffix.toLowerCase())); return suffixArray.some((suffix) => arr.includes(suffix.toLowerCase()));
} }
/** 取消按钮 */ /** 取消按钮 */
function cancel() { function cancel() {

View File

@ -11,7 +11,7 @@
<el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="角色状态" clearable > <el-select v-model="queryParams.status" placeholder="角色状态" clearable>
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -58,8 +58,8 @@
<el-tab-pane label="第三方应用" name="thirdParty"> <el-tab-pane label="第三方应用" name="thirdParty">
<thirdParty :auths="state.auths" /> <thirdParty :auths="state.auths" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="在线设备" name="onlinDevice"> <el-tab-pane label="在线设备" name="onlineDevice">
<onlinDevice :devices="state.devices" /> <onlineDevice :devices="state.devices" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
@ -73,7 +73,7 @@ import UserAvatar from './userAvatar.vue';
import UserInfo from './userInfo.vue'; import UserInfo from './userInfo.vue';
import ResetPwd from './resetPwd.vue'; import ResetPwd from './resetPwd.vue';
import ThirdParty from './thirdParty.vue'; import ThirdParty from './thirdParty.vue';
import OnlinDevice from './onlineDevice.vue'; import OnlineDevice from './onlineDevice.vue';
import { getAuthList } from '@/api/system/social/auth'; import { getAuthList } from '@/api/system/social/auth';
import { getUserProfile } from '@/api/system/user'; import { getUserProfile } from '@/api/system/user';
import { getOnline } from '@/api/monitor/online'; import { getOnline } from '@/api/monitor/online';

View File

@ -18,8 +18,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handldDelOnline(scope.row)"> <el-button link type="primary" icon="Delete" @click="handldDelOnline(scope.row)"> </el-button>
</el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@ -55,5 +54,4 @@ const handldDelOnline = (row: any) => {
}) })
.catch(() => {}); .catch(() => {});
}; };
</script> </script>

View File

@ -45,7 +45,7 @@ const rules = ref({
message: '长度在 6 到 20 个字符', message: '长度在 6 到 20 个字符',
trigger: 'blur' trigger: 'blur'
}, },
{ pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\\ |', trigger: 'blur' }
], ],
confirmPassword: [ confirmPassword: [
{ required: true, message: '确认密码不能为空', trigger: 'blur' }, { required: true, message: '确认密码不能为空', trigger: 'blur' },

View File

@ -58,7 +58,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { authUnlock, authBinding } from '@/api/system/social/auth'; import { authUnlock, authBinding } from '@/api/system/social/auth';
import { propTypes } from '@/utils/propTypes'; import { propTypes } from '@/utils/propTypes';
import useUserStore from "@/store/modules/user"; import useUserStore from '@/store/modules/user';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@ -46,7 +46,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="地址" align="center" prop="router" /> <el-table-column label="地址" align="center" prop="router" />
<el-table-column label="备注" align="center" prop="remork" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
@ -82,8 +82,8 @@
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remork"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remork" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -123,7 +123,7 @@ const initFormData: FormManageForm = {
id: undefined, id: undefined,
formName: undefined, formName: undefined,
formType: 'static', formType: 'static',
remork: undefined remark: undefined
}; };
const data = reactive<PageData<FormManageForm, FormManageQuery>>({ const data = reactive<PageData<FormManageForm, FormManageQuery>>({
form: { ...initFormData }, form: { ...initFormData },