🎨 feat: 修改代码格式;适配后端文件

This commit is contained in:
bunny 2025-05-09 17:50:37 +08:00
parent a47ff8d3e1
commit 0b2ad00cfe
37 changed files with 530 additions and 745 deletions

View File

@ -23,6 +23,14 @@ server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 后端跨域请求
location ~/peiqi/ {
proxy_pass http://172.17.0.1:8000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 404.html;

View File

@ -29,11 +29,6 @@ export const downloadFilesByFileId = (data: any) => {
});
};
/** 系统文件管理---获取所有文件类型 */
export const getMediaTypeList = () => {
return http.request<BaseResult<any>>('get', `files/private/getMediaTypeList`);
};
/** 系统文件管理---获取所有文件存储基础路径 */
export const getFilesStoragePath = () => {
return http.request<BaseResult<any>>('get', `files/private/getAllFilesStoragePath`);

View File

@ -10,3 +10,8 @@ export const fetchRouterAsync = () => {
export const uploadFile = (data: any) => {
return http.request<BaseResult<any>>('post', '/files/private/upload', { data }, { headers: { 'Content-Type': 'multipart/form-data' } });
};
/** 上传文件 */
export const uploadImage = (data: any) => {
return http.request<BaseResult<any>>('post', '/files/private/uploadImage', { data }, { headers: { 'Content-Type': 'multipart/form-data' } });
};

View File

@ -17,7 +17,7 @@ import { Plus } from '@element-plus/icons-vue';
import { ElMessage, UploadRawFile, UploadRequestOptions } from 'element-plus';
import { onMounted, ref } from 'vue';
import { SystemEnum } from '@/enums/upload';
import { uploadFile } from '@/api/v1/system/system';
import { uploadImage } from '@/api/v1/system/system';
import ImageLoading from '@/components/Upload/ImageLoading.vue';
const props = defineProps({
@ -28,10 +28,7 @@ const emits = defineEmits(['uploadCallback']);
const imageSrc = ref('');
/**
* * 上传时
* @param options
*/
/* 上传图片 */
const onUpload = async (options: UploadRequestOptions) => {
//
const file = options.file;
@ -39,14 +36,12 @@ const onUpload = async (options: UploadRequestOptions) => {
const data = { file, type };
//
const result: any = await uploadFile(data);
imageSrc.value = result.data.url;
const result: any = await uploadImage(data);
imageSrc.value = result.data.thUrl;
emits('uploadCallback', result);
};
/**
* * 删除图片
*/
/* 删除图片 */
const onRemoveImage = () => {
//
imageSrc.value = '';
@ -63,9 +58,7 @@ const onRemoveImage = () => {
emits('uploadCallback', data);
};
/**
* * 上传之前
*/
/* 上传之前 */
const beforeUpload = (file: UploadRawFile) => {
if (file.size > SystemEnum.IMAGE_SIZE) {
ElMessage.error(SystemEnum.IMAGE_MESSAGE);
@ -73,9 +66,7 @@ const beforeUpload = (file: UploadRawFile) => {
}
};
/**
* * 初始化图片地址
*/
/* 初始化图片地址 */
const handleInitiateImageSrc = () => {
const value = props.imageUrl;
if (value) imageSrc.value = value;
@ -85,17 +76,3 @@ onMounted(() => {
handleInitiateImageSrc();
});
</script>
<style lang="scss" scoped>
//.el-upload {
// width: 128px;
// height: 128px;
//}
//
//.el-upload-dragger {
// display: flex;
// align-items: center;
// justify-content: center;
// height: 100%;
//}
</style>

View File

@ -1,5 +1,5 @@
import { defineStore } from 'pinia';
import { deleteFiles, fetchAddFiles, getFilesPage, getFilesStoragePath, getMediaTypeList, updateFiles } from '@/api/v1/files';
import { deleteFiles, fetchAddFiles, getFilesPage, getFilesStoragePath, updateFiles } from '@/api/v1/files';
import { pageSizes } from '@/enums/baseConstant';
import { storeMessage } from '@/utils/message';
import { storePagination } from '@/store/useStorePagination';
@ -12,8 +12,6 @@ export const useFilesStore = defineStore('filesStore', {
return {
// 系统文件表列表
datalist: [],
// 所有文件类型
allMediaTypes: [],
// 所有文件存储路径
allFilesStoragePath: [],
// 查询表单
@ -23,7 +21,11 @@ export const useFilesStore = defineStore('filesStore', {
// 文件在服务器上的存储路径
filepath: undefined,
// 文件的MIME类型
fileType: undefined,
contentType: undefined,
// 扩展名
ext: undefined,
// 存储平台
platform: undefined,
// 下载数量
downloadCount: undefined,
},
@ -46,7 +48,6 @@ export const useFilesStore = defineStore('filesStore', {
const data = { ...this.pagination, ...this.form };
delete data.pageSizes;
delete data.total;
delete data.background;
// 获取系统文件表列表
const result = await getFilesPage(data);
@ -74,14 +75,6 @@ export const useFilesStore = defineStore('filesStore', {
return storeMessage(result);
},
/** 获取所有文件类型 */
async loadMediaTypeList() {
const result = await getMediaTypeList();
if (result.code === 200) {
this.allMediaTypes = result.data;
}
},
/** 获取所有文件类型 */
async loadFilesStoragePath() {
const result = await getFilesStoragePath();

View File

@ -22,6 +22,17 @@ export const useUserStore = defineStore('system-user', {
isRemembered: true,
// 登录页的免登录存储几天默认7天
readMeDay: 7,
// 用户修改信息列表
userinfoForm: {
avatar: '',
username: '',
nickname: '',
email: '',
phone: '',
summary: '',
password: '',
sex: '',
},
}),
actions: {
/** 登入 */

View File

@ -44,4 +44,14 @@ export type userType = {
permissions?: Array<string>;
isRemembered?: boolean;
readMeDay?: number;
userinfoForm?: {
avatar: string;
username: string;
nickname: string;
email: string;
phone: string;
summary: string;
password: string;
sex: string;
};
};

View File

@ -4,14 +4,19 @@ import { sexConstant } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n';
import { useAdminUserStore } from '@/store/system/adminUser';
import { message } from '@/utils/message';
import { cropperBlob, handleSubmitImage, isShow, onSearchByUserinfo, rules, uploadAvatarSrc, userInfos } from '@/views/account-settings/utils';
import { rules } from '@/views/account-settings/utils/columns';
import uploadLine from '~icons/ri/upload-line';
import { deviceDetection } from '@pureadmin/utils';
import { createFormData, deviceDetection } from '@pureadmin/utils';
import type { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue';
import { useUserStore } from '@/store/system/user';
import { uploadImage } from '@/api/v1/system/system';
import { storeToRefs } from 'pinia';
const adminUserStore = useAdminUserStore();
const userStore = useUserStore();
const { userinfoForm } = storeToRefs(userStore);
// Ref
const userInfoFormRef = ref<FormInstance>();
// Ref
@ -20,6 +25,12 @@ const uploadRef = ref();
const cropRef = ref();
// base64
const imgBase64Src = ref('');
//
const isShow = ref(false);
//
const cropperBlob = ref();
//
const uploadAvatarSrc = ref();
/** 关闭弹窗 */
const handleClose = () => {
@ -41,16 +52,50 @@ const onChange = (uploadFile: any) => {
reader.readAsDataURL(uploadFile.raw);
};
/** 获取用户信息内容 */
const onSearchByUserinfo = async () => {
const data = await userStore.loadUserinfo();
userinfoForm.value.summary = data.personDescription;
userinfoForm.value.avatar = data.avatar;
userinfoForm.value.username = data.username;
userinfoForm.value.nickname = data.nickname;
userinfoForm.value.email = data.email;
userinfoForm.value.phone = data.phone;
userinfoForm.value.nickname = data.nickname;
userinfoForm.value.password = data.password;
userinfoForm.value.sex = data.sex;
};
/** 修改头像 */
const handleSubmitImage = async () => {
//
const formData = createFormData({
files: new File([cropperBlob.value], 'avatar'),
type: 'avatar',
});
//
const result = await uploadImage(formData);
//
if (result.code === 200) {
uploadAvatarSrc.value = result.data.url;
userinfoForm.value.avatar = result.data.thUrl;
message($t('upload_success'), { type: 'success' });
isShow.value = false;
}
};
/** 提交表单 */
const onSubmit = async (formEl: FormInstance) => {
await formEl.validate(async (valid) => {
if (valid) {
//
const avatar = uploadAvatarSrc.value;
if (avatar) userInfos.avatar = avatar;
if (avatar) userinfoForm.value.avatar = avatar;
//
const result = await adminUserStore.editUserinfo(userInfos);
const result = await adminUserStore.editUserinfo(userinfoForm.value);
if (!result) return;
//
@ -71,9 +116,9 @@ onMounted(() => {
<h3 class="my-8">个人信息</h3>
<!-- 头像 -->
<el-form ref="userInfoFormRef" :model="userInfos" :rules="rules" label-position="top">
<el-form ref="userInfoFormRef" :model="userinfoForm" :rules="rules" label-position="top">
<el-form-item :label="$t('avatar')">
<el-avatar :size="80" :src="userInfos.avatar" />
<el-avatar :size="80" :src="userinfoForm.avatar" />
<el-upload ref="uploadRef" :auto-upload="false" :limit="1" :on-change="onChange" :show-file-list="false" accept="image/*">
<el-button class="ml-4" plain>
<IconifyIconOffline :icon="uploadLine" />
@ -89,27 +134,27 @@ onMounted(() => {
<!-- 用户名 -->
<el-form-item :label="$t('adminUser_username')" prop="username">
<el-input v-model="userInfos.username" :placeholder="$t('adminUser_username')" autocomplete="off" disabled type="text" />
<el-input v-model="userinfoForm.username" :placeholder="$t('adminUser_username')" autocomplete="off" disabled type="text" />
</el-form-item>
<!-- 昵称 -->
<el-form-item :label="$t('adminUser_nickname')" prop="nickname">
<el-input v-model="userInfos.nickname" :placeholder="$t('adminUser_nickname')" autocomplete="off" type="text" />
<el-input v-model="userinfoForm.nickname" :placeholder="$t('adminUser_nickname')" autocomplete="off" type="text" />
</el-form-item>
<!-- 邮箱 -->
<el-form-item :label="$t('adminUser_email')" prop="email">
<el-input v-model="userInfos.email" :placeholder="$t('adminUser_email')" autocomplete="off" type="text" />
<el-input v-model="userinfoForm.email" :placeholder="$t('adminUser_email')" autocomplete="off" type="text" />
</el-form-item>
<!-- 手机号 -->
<el-form-item :label="$t('adminUser_phone')" prop="phone">
<el-input v-model="userInfos.phone" :placeholder="$t('adminUser_phone')" autocomplete="off" type="text" />
<el-input v-model="userinfoForm.phone" :placeholder="$t('adminUser_phone')" autocomplete="off" type="text" />
</el-form-item>
<!-- 性别 -->
<el-form-item :label="$t('adminUser_sex')" prop="sex">
<el-select v-model="userInfos.sex" :placeholder="$t('adminUser_sex')" clearable filterable>
<el-select v-model="userinfoForm.sex" :placeholder="$t('adminUser_sex')" clearable filterable>
<el-option v-for="(item, index) in sexConstant" :key="index" :label="item.label" :navigationBar="false" :value="item.value" />
</el-select>
</el-form-item>
@ -117,7 +162,7 @@ onMounted(() => {
<!-- 用户简介 -->
<el-form-item :label="$t('adminUser_summary')" prop="summary">
<el-input
v-model="userInfos.summary"
v-model="userinfoForm.summary"
:autosize="{ minRows: 3, maxRows: 6 }"
:placeholder="$t('adminUser_summary')"
autocomplete="off"

View File

@ -1,7 +1,7 @@
<script lang="ts" setup>
import { $t } from '@/plugins/i18n';
import { useUserLoginLogStore } from '@/store/monitor/userLoginLog';
import { columns } from '@/views/account-settings/utils';
import { columns } from '@/views/account-settings/utils/columns';
import { PureTable } from '@pureadmin/table';
import { deviceDetection } from '@pureadmin/utils';
import { onMounted, reactive } from 'vue';

View File

@ -3,14 +3,18 @@ import Text from '@/components/ReText';
import LaySidebarTopCollapse from '@/layout/components/lay-sidebar/components/SidebarTopCollapse.vue';
import { useDataThemeChange } from '@/layout/hooks/useDataThemeChange';
import { $t } from '@/plugins/i18n';
import { panes, userInfos } from '@/views/account-settings/utils';
import { panes } from '@/views/account-settings/utils/columns';
import leftLine from '~icons/ri/arrow-left-s-line';
import { deviceDetection, useGlobal } from '@pureadmin/utils';
import { onBeforeMount, ref } from 'vue';
import { useRouter } from 'vue-router';
import { useUserStore } from '@/store/system/user';
import { storeToRefs } from 'pinia';
const router = useRouter();
const isOpen = ref(!deviceDetection());
const userStore = useUserStore();
const { userinfoForm } = storeToRefs(userStore);
const { $storage } = useGlobal<GlobalPropertiesApi>();
const witchPane = ref('profile');
@ -36,13 +40,13 @@ onBeforeMount(() => {
</el-menu-item>
<div class="flex items-center ml-8 mt-4 mb-4">
<el-avatar :size="48" :src="userInfos.avatar" />
<el-avatar :size="48" :src="userinfoForm.avatar" />
<div class="ml-4 flex flex-col max-w-[130px]">
<Text class="font-bold !self-baseline">
{{ userInfos.nickname }}
{{ userinfoForm.nickname }}
</Text>
<Text class="!self-baseline" type="info">
{{ userInfos.username }}
{{ userinfoForm.username }}
</Text>
</div>
</div>

View File

@ -1,62 +0,0 @@
import { useUserStore } from '@/store/system/user';
import { reactive, ref } from 'vue';
import { createFormData } from '@pureadmin/utils';
import { uploadFile } from '@/api/v1/system/system';
import { message } from '@/utils/message';
import { $t } from '@/plugins/i18n';
const userStore = useUserStore();
// 剪裁完成后头像数据
export const cropperBlob = ref();
// 上传地址路径
export const uploadAvatarSrc = ref();
// 剪裁头像是否显示
export const isShow = ref(false);
// 用户信息内容
export const userInfos = reactive({
avatar: '',
username: '',
nickname: '',
email: '',
phone: '',
summary: '',
password: '',
sex: '',
});
/** 获取用户信息内容 */
export const onSearchByUserinfo = async () => {
const data = await userStore.loadUserinfo();
userInfos.summary = data.personDescription;
userInfos.avatar = data.avatar;
userInfos.username = data.username;
userInfos.nickname = data.nickname;
userInfos.email = data.email;
userInfos.phone = data.phone;
userInfos.nickname = data.nickname;
userInfos.password = data.password;
userInfos.sex = data.sex;
};
/** 修改头像 */
export const handleSubmitImage = async () => {
// 上传头像表单
const formData = createFormData({
files: new File([cropperBlob.value], 'avatar'),
type: 'avatar',
});
// 上传头像
const result = await uploadFile(formData);
// 上传成功后关闭弹窗
if (result.code === 200) {
uploadAvatarSrc.value = result.data.filepath;
userInfos.avatar = result.data.url;
message($t('upload_success'), { type: 'success' });
isShow.value = false;
}
};

View File

@ -1,2 +0,0 @@
export * from './hooks';
export * from './columns';

View File

@ -21,34 +21,22 @@ export async function onSearch() {
/** 添加邮件模板表 */
export function onAdd() {
const formRef = ref();
const formInline = {
templateName: undefined,
emailUser: undefined,
subject: undefined,
isDefault: false,
body: undefined,
type: undefined,
};
addDialog({
title: `${$t('addNew')}${$t('emailTemplate')}`,
props: {
formInline: {
templateName: undefined,
emailUser: undefined,
subject: undefined,
isDefault: false,
body: undefined,
type: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(EmailTemplateDialog, {
ref: formRef,
formInline: {
templateName: undefined,
emailUser: undefined,
subject: undefined,
isDefault: false,
body: undefined,
type: undefined,
},
}),
contentRenderer: () => h(EmailTemplateDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -66,34 +54,22 @@ export function onAdd() {
/* 更新邮件模板表 */
export function onUpdate(row: any) {
const formRef = ref();
const formInline = {
templateName: row.templateName,
emailUser: row.emailUser,
subject: row.subject,
isDefault: row.isDefault,
body: row.body,
type: row.type,
};
addDialog({
title: `${$t('modify')}${$t('emailTemplate')}`,
props: {
formInline: {
templateName: row.templateName,
emailUser: row.emailUser,
subject: row.subject,
isDefault: row.isDefault,
body: row.body,
type: row.type,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(EmailTemplateDialog, {
ref: formRef,
formInline: {
templateName: row.templateName,
emailUser: row.emailUser,
subject: row.subject,
isDefault: row.isDefault,
body: row.body,
type: row.type,
},
}),
contentRenderer: () => h(EmailTemplateDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;

View File

@ -22,24 +22,23 @@ export async function onSearch() {
/** 添加邮箱用户发送配置 */
export function onAdd() {
const formInline = {
email: undefined,
password: undefined,
host: undefined,
port: undefined,
smtpAgreement: undefined,
openSSL: true,
isDefault: false,
};
addDialog({
title: `${$t('addNew')}${$t('emailUsers')}`,
props: {
formInline: {
email: undefined,
password: undefined,
host: undefined,
port: undefined,
smtpAgreement: undefined,
openSSL: true,
isDefault: false,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(EmailUsersDialog, { ref: formRef }),
contentRenderer: () => h(EmailUsersDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -56,24 +55,23 @@ export function onAdd() {
/* 更新邮箱用户发送配置 */
export function onUpdate(row: any) {
const formInline = {
email: row.email,
password: row.password,
host: row.host,
port: row.port,
smtpAgreement: row.smtpAgreement,
openSSL: row.openSSL,
isDefault: row.isDefault,
};
addDialog({
title: `${$t('modify')}${$t('emailUsers')}`,
props: {
formInline: {
email: row.email,
password: row.password,
host: row.host,
port: row.port,
smtpAgreement: row.smtpAgreement,
openSSL: row.openSSL,
isDefault: row.isDefault,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(EmailUsersDialog, { ref: formRef }),
contentRenderer: () => h(EmailUsersDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -19,14 +19,15 @@ export async function onSearch() {
/** 添加系统菜单图标 */
export function onAdd() {
const formInline = { iconCode: undefined, iconName: undefined };
addDialog({
title: `${$t('addNew')} ${$t('menuIcon')}`,
props: { formInline: { confirmText: '' } },
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(MenuIconDialog, { ref: formRef }),
contentRenderer: () => h(MenuIconDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -43,19 +44,15 @@ export function onAdd() {
/* 更新系统菜单图标 */
export function onUpdate(row: any) {
const formInline = { iconCode: row.iconCode, iconName: row.iconName };
addDialog({
title: `${$t('modify')} ${$t('menuIcon')}`,
props: {
formInline: {
iconCode: row.iconCode,
iconName: row.iconName,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(MenuIconDialog, { ref: formRef }),
contentRenderer: () => h(MenuIconDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -26,14 +26,15 @@ export const downloadI18nSetting = (type: string) => {
/* 上传多语言配置 */
export const updateI18nSetting = (fileType: string) => {
const uploadFormRef = ref();
const form = { type: '', file: undefined, fileType, isAppend: true };
addDialog({
title: $t('update_multilingual'),
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
props: { form: { type: undefined, file: undefined, fileType, isAppend: true } },
contentRenderer: () => h(I18NUploadDialog, { ref: uploadFormRef, form: { type: '', file: undefined, fileType, isAppend: true } }),
props: { form },
contentRenderer: () => h(I18NUploadDialog, { ref: uploadFormRef, form }),
beforeSure: async (done, { options }) => {
uploadFormRef.value.formRef.validate(async (valid: any) => {
if (!valid) return;
@ -48,13 +49,15 @@ export const updateI18nSetting = (fileType: string) => {
/* 行内容添加 打开添加弹窗 */
export const onAdd = () => {
const formInline = { keyName: '', translation: '', typeName: '' };
addDialog({
title: $t('addMultilingual'),
props: { formInline: { keyName: '', translation: '', typeName: '' } },
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(I18nDialog, { ref: formRef, formInline: { keyName: '', translation: '', typeName: '' } }),
contentRenderer: () => h(I18nDialog, { ref: formRef, formInline }),
footerButtons: [
{
label: $t('cancel'),
@ -102,21 +105,14 @@ export const onAdd = () => {
/* 当表格修改时 */
export const onUpdate = (row: any) => {
const id = row.id;
const formInline = { keyName: row.keyName, translation: row.translation, typeName: row.typeName };
addDialog({
title: $t('update_multilingual'),
props: {
formInline: { keyName: row.keyName, translation: row.translation, typeName: row.typeName },
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(I18nDialog, {
ref: formRef,
formInline: { keyName: row.keyName, translation: row.translation, typeName: row.typeName },
}),
contentRenderer: () => h(I18nDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormProps;
formRef.value.ruleFormRef.validate(async (valid: any) => {

View File

@ -17,16 +17,15 @@ export async function onSearch() {
/* 添加多语言 */
export function onAdd() {
const formInline = { typeName: '', summary: '', isDefault: false };
addDialog({
title: `添加多语言类型`,
props: {
formInline: { typeName: '', summary: '', isDefault: false },
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(AddI18nType, { ref: formRef }),
contentRenderer: () => h(AddI18nType, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -43,20 +42,15 @@ export function onAdd() {
/* 更新内容 */
export function onUpdate(row: any) {
const formInline = { typeName: row.typeName, summary: row.summary, isDefault: row.isDefault };
addDialog({
title: `修改多语言类型`,
props: {
formInline: {
typeName: row.typeName,
summary: row.summary,
isDefault: row.isDefault,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(AddI18nType, { ref: formRef }),
contentRenderer: () => h(AddI18nType, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -4,11 +4,7 @@ import 'md-editor-v3/lib/style.css';
import { uploadFile } from '@/api/v1/system/system';
import { formState } from '@/views/message-manger/message-editing/utils';
/**
* * 上传图片
* @param files
* @param callback
*/
/* 上传图片 */
const onUploadImg = async (files: any, callback: any) => {
//
const res = await Promise.all(
@ -17,6 +13,9 @@ const onUploadImg = async (files: any, callback: any) => {
const form = new FormData();
form.append('file', file);
form.append('type', 'message');
// markdown使
// md
resolve(await uploadFile(form));
});
})

View File

@ -163,7 +163,7 @@ onMounted(() => {
<!-- 消息等级简介 -->
<el-form-item :label="$t('extra')" prop="extra">
<el-input v-model="formState.extra" maxlength="5" show-word-limit type="text" />
<el-input v-model="formState.extra" maxlength="4" show-word-limit type="text" />
</el-form-item>
<!-- 提交 -->

View File

@ -27,10 +27,8 @@ editorConfig.MENU_CONF['uploadImage'] = {
customInsert(res: any, insertFn) {
// res.data.url
if (res.data.url) {
setTimeout(() => {
// insertFn
insertFn(res.data.url);
}, 2000);
// insertFn
insertFn(res.data.url);
}
},
};

View File

@ -2,7 +2,7 @@ import { reactive, ref } from 'vue';
import type { UploadRawFile, UploadRequestOptions } from 'element-plus';
import { SystemEnum } from '@/enums/upload';
import { message } from '@/utils/message';
import { uploadFile } from '@/api/v1/system/system';
import { uploadImage } from '@/api/v1/system/system';
import { useAdminUserStore } from '@/store/system/adminUser';
// 用户信息列表
@ -36,9 +36,9 @@ export const onSearchUserinfo = async (keyword: string) => {
/** 上传时 */
export const onUpload = async (options: UploadRequestOptions) => {
const data = { file: options.file, type: 'message' };
const result: any = await uploadFile(data);
coverUrl.value = result.data.url;
formState.cover = result.data.filepath;
const result: any = await uploadImage(data);
coverUrl.value = result.data.thUrl;
formState.cover = result.data.thUrl;
};
/** 上传之前 */

View File

@ -1,7 +1,7 @@
<script lang="ts" setup>
import { MdEditor } from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
import { uploadFile } from '@/api/v1/system/system';
import { uploadImage } from '@/api/v1/system/system';
import { updateMessage } from '@/views/message-manger/message-send/utils';
/* 上传图片 */
@ -13,7 +13,7 @@ const onUploadImg = async (files: any, callback: any) => {
const form = new FormData();
form.append('file', file);
form.append('type', 'message');
resolve(await uploadFile(form));
resolve(await uploadImage(form));
});
})
);

View File

@ -6,7 +6,7 @@ import { $t } from '@/plugins/i18n';
import { useAdminUserStore } from '@/store/system/adminUser';
import { decode, encode } from 'js-base64';
import type { UploadRequestOptions } from 'element-plus';
import { uploadFile } from '@/api/v1/system/system';
import { uploadImage } from '@/api/v1/system/system';
import { useMessageSendStore } from '@/store/message/messageSend';
export const formRef = ref();
@ -150,7 +150,7 @@ export const onDeleteBatch = async () => {
/** 上传时 */
export const onUpload = async (options: UploadRequestOptions) => {
const data = { file: options.file, type: 'message' };
const result: any = await uploadFile(data);
coverUrl.value = result.data.url;
updateMessage.cover = result.data.filepath;
const result: any = await uploadImage(data);
coverUrl.value = result.data.thUrl;
updateMessage.cover = result.data.thUrl;
};

View File

@ -20,21 +20,14 @@ export async function onSearch() {
/** 添加系统消息类型 */
export function onAdd() {
const formInline = { status: true, messageName: undefined, messageType: undefined, summary: undefined };
addDialog({
title: `${$t('addNew')}${$t('messageType')}`,
props: {
formInline: {
status: true,
messageName: undefined,
messageType: undefined,
summary: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(MessageTypeDialog, { ref: formRef }),
contentRenderer: () => h(MessageTypeDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -51,21 +44,15 @@ export function onAdd() {
/* 更新系统消息类型 */
export function onUpdate(row: any) {
const formInline = { status: row.status, messageName: row.messageName, messageType: row.messageType, summary: row.summary };
addDialog({
title: `${$t('modify')}${$t('messageType')}`,
props: {
formInline: {
status: row.status,
messageName: row.messageName,
messageType: row.messageType,
summary: row.summary,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(MessageTypeDialog, { ref: formRef }),
contentRenderer: () => h(MessageTypeDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -20,19 +20,15 @@ export async function onSearch() {
/** 添加任务调度分组 */
export function onAdd() {
const formInline = { groupName: undefined, description: undefined };
addDialog({
title: `${$t('addNew')}${$t('schedulersGroup')}`,
props: {
formInline: {
groupName: undefined,
description: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(SchedulersGroupDialog, { ref: formRef }),
contentRenderer: () => h(SchedulersGroupDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -49,19 +45,14 @@ export function onAdd() {
/* 更新任务调度分组 */
export function onUpdate(row: any) {
const formInline = { groupName: row.groupName, description: row.description };
addDialog({
title: `${$t('modify')}${$t('schedulersGroup')}`,
props: {
formInline: {
groupName: row.groupName,
description: row.description,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(SchedulersGroupDialog, { ref: formRef }),
contentRenderer: () => h(SchedulersGroupDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -18,22 +18,22 @@ export async function onSearch() {
/** 添加Schedulers视图 */
export function onAdd() {
const formInline = {
jobName: undefined,
jobGroup: undefined,
description: undefined,
jobClassName: undefined,
cronExpression: undefined,
isUpdate: false,
};
addDialog({
title: `${$t('addNew')}${$t('schedulers')}`,
props: {
formInline: {
jobName: undefined,
jobGroup: undefined,
description: undefined,
jobClassName: undefined,
cronExpression: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(SchedulersDialog, { ref: formRef }),
contentRenderer: () => h(SchedulersDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -50,23 +50,22 @@ export function onAdd() {
/* 更新Schedulers视图 */
export function onUpdate(row: any) {
const formInline = {
jobName: row.jobName,
jobGroup: row.jobGroup,
description: row.description,
jobClassName: row.jobClassName,
cronExpression: row.cronExpression,
isUpdate: true,
};
addDialog({
title: `${$t('modify')}${$t('schedulers')}`,
props: {
formInline: {
jobName: row.jobName,
jobGroup: row.jobGroup,
description: row.description,
jobClassName: row.jobClassName,
cronExpression: row.cronExpression,
isUpdate: true,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(SchedulersDialog, { ref: formRef }),
contentRenderer: () => h(SchedulersDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -50,41 +50,27 @@ export async function onSearch() {
/** 添加用户信息 */
export function onAdd() {
isAddUserinfo.value = true;
const formInline = {
username: undefined,
nickname: undefined,
email: undefined,
phone: undefined,
password: undefined,
avatar: undefined,
sex: undefined,
summary: undefined,
status: false,
deptId: undefined,
};
addDialog({
title: `${$t('addNew')}${$t('adminUser')}`,
props: {
formInline: {
username: undefined,
nickname: undefined,
email: undefined,
phone: undefined,
password: undefined,
avatar: undefined,
sex: undefined,
summary: undefined,
status: false,
deptId: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(AdminUserDialog, {
ref: formRef,
formInline: {
username: undefined,
nickname: undefined,
email: undefined,
phone: undefined,
password: undefined,
avatar: undefined,
sex: undefined,
summary: undefined,
status: false,
deptId: undefined,
},
}),
contentRenderer: () => h(AdminUserDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -102,41 +88,26 @@ export function onAdd() {
/* 更新用户信息 */
export function onUpdate(row: any) {
isAddUserinfo.value = false;
const formInline = {
username: row.username,
nickname: row.nickname,
email: row.email,
phone: row.phone,
password: row.password,
avatar: row.avatar,
sex: row.sex,
summary: row.summary,
status: row.status,
deptId: row.deptId,
};
addDialog({
title: `${$t('modify')}${$t('adminUser')}`,
props: {
formInline: {
username: row.username,
nickname: row.nickname,
email: row.email,
phone: row.phone,
password: row.password,
avatar: row.avatar,
sex: row.sex,
summary: row.summary,
status: row.status,
deptId: row.deptId,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(AdminUserDialog, {
ref: formRef,
formInline: {
username: row.username,
nickname: row.nickname,
email: row.email,
phone: row.phone,
password: row.password,
avatar: row.avatar,
sex: row.sex,
summary: row.summary,
status: row.status,
deptId: row.deptId,
},
}),
contentRenderer: () => h(AdminUserDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -177,7 +148,6 @@ export const onDeleteBatch = async () => {
addDialog({
title: $t('deleteBatchTip'),
props: { formInline: { confirmText: '' } },
draggable: true,
fullscreenIcon: true,

View File

@ -19,29 +19,20 @@ export async function onSearch() {
/** 添加部门 */
export function onAdd(parentId: string = '0') {
const formInline = {
parentId,
manager: undefined,
deptName: undefined,
summary: undefined,
};
addDialog({
title: `${$t('addNew')}${$t('dept')}`,
props: {
formInline: {
parentId,
manager: undefined,
deptName: undefined,
summary: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(DeptDialog, {
ref: formRef,
formInline: {
parentId,
manager: undefined,
deptName: undefined,
summary: undefined,
},
}),
contentRenderer: () => h(DeptDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -58,30 +49,19 @@ export function onAdd(parentId: string = '0') {
/* 更新部门 */
export function onUpdate(row: any) {
const formInline = {
parentId: row.parentId,
manager: row.manager ? row.manager.split(',') : row.manager,
deptName: row.deptName,
summary: row.summary,
};
addDialog({
title: `${$t('modify')}${$t('dept')}`,
props: {
formInline: {
parentId: row.parentId,
manager: row.manager ? row.manager.split(',') : row.manager,
deptName: row.deptName,
summary: row.summary,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(DeptDialog, {
ref: formRef,
formInline: {
parentId: row.parentId,
manager: row.manager ? row.manager.split(',') : row.manager,
deptName: row.deptName,
summary: row.summary,
},
}),
contentRenderer: () => h(DeptDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -8,12 +8,8 @@ import { UploadFilled } from '@element-plus/icons-vue';
const props = withDefaults(defineProps<FormProps>(), {
formInline: () => ({
//
filename: undefined,
//
filepath: undefined,
// MIME
fileType: undefined,
//
downloadCount: undefined,
//
@ -37,7 +33,6 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
};
onMounted(() => {
filesStore.loadMediaTypeList();
filesStore.loadFilesStoragePath();
});
@ -46,11 +41,6 @@ defineExpose({ formRef });
<template>
<el-form ref="formRef" :model="form" :rules="form.isUpload ? uploadRules : addRules" label-width="auto">
<!-- 文件名称---上传显示 -->
<el-form-item v-show="form.isUpload" :label="$t('files_filename')" prop="filename">
<el-input v-model="form.filename" autocomplete="off" type="text" />
</el-form-item>
<!-- 文件路径---上传显示文本框 -->
<el-form-item :label="$t('files_filepath')" prop="filepath">
<el-input v-if="form.isUpload" v-model="form.filepath" autocomplete="off" disabled type="text" />
@ -61,12 +51,6 @@ defineExpose({ formRef });
</el-form-item>
<!-- 文件类型---上传显示 -->
<el-form-item v-show="form.isUpload" :label="$t('files_fileType')" prop="fileType">
<el-select v-model="form.fileType" :placeholder="$t('select') + $t('files_fileType')" clearable filterable>
<el-option v-for="(item, index) in filesStore.allMediaTypes" :key="index" :label="item" :navigationBar="false" :value="item" />
</el-select>
</el-form-item>
<el-form-item :label="$t('files_downloadCount')" prop="downloadCount">
<el-input v-model="form.downloadCount" :min="0" autocomplete="off" type="number" />
</el-form-item>

View File

@ -55,15 +55,27 @@ onMounted(() => {
<div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="filesStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!--文件的名称-->
<el-form-item :label="$t('files_filename')" prop="filename">
<el-input v-model="filesStore.form.filename" :placeholder="`${$t('input')}${$t('files_filename')}`" class="!w-[180px]" clearable />
</el-form-item>
<!--文件在服务器上的存储路径-->
<el-form-item :label="$t('files_filepath')" prop="filepath">
<el-input v-model="filesStore.form.filepath" :placeholder="`${$t('input')}${$t('files_filepath')}`" class="!w-[180px]" clearable />
</el-form-item>
<el-form-item :label="$t('files_fileType')" prop="fileType">
<el-input v-model="filesStore.form.fileType" :placeholder="`${$t('input')}${$t('files_fileType')}`" class="!w-[180px]" clearable />
<!--文件的MIME类型-->
<el-form-item :label="$t('files_fileType')" prop="contentType">
<el-input v-model="filesStore.form.contentType" :placeholder="`${$t('input')}${$t('files_fileType')}`" class="!w-[180px]" clearable />
</el-form-item>
<!--扩展名-->
<el-form-item :label="$t('ext')" prop="ext">
<el-input v-model="filesStore.form.ext" :placeholder="`${$t('input')}${$t('ext')}`" class="!w-[180px]" clearable />
</el-form-item>
<!--平台-->
<el-form-item :label="$t('platform')" prop="platform">
<el-input v-model="filesStore.form.platform" :placeholder="`${$t('input')}${$t('platform')}`" class="!w-[180px]" clearable />
</el-form-item>
<!--下载量-->
<el-form-item :label="$t('files_downloadCount')" prop="downloadCount">
<el-input
v-model="filesStore.form.downloadCount"
@ -74,6 +86,7 @@ onMounted(() => {
type="number"
/>
</el-form-item>
<el-form-item>
<el-button :icon="useRenderIcon('ri/search-line')" :loading="filesStore.loading" type="primary" @click="onSearch">
{{ $t('search') }}

View File

@ -25,13 +25,11 @@ export async function onSearch() {
export function onAdd() {
addDialog({
title: `${$t('addNew')}${$t('files')}`,
props: {
formInline: {
filename: undefined,
fileType: undefined,
filepath: undefined,
downloadCount: 0,
// 上传为 files更新时为 file
files: [],
isUpload: false,
},
@ -43,10 +41,9 @@ export function onAdd() {
const dialog = h(FilesDialog, {
ref: formRef,
formInline: {
filename: undefined,
fileType: undefined,
filepath: undefined,
downloadCount: 0,
// 上传为 files更新时为 file
files: [],
isUpload: false,
},
@ -58,14 +55,17 @@ export function onAdd() {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
if (!valid) return;
// 添加文件
form.files = (form.files as UploadFiles).map((file) => file.raw);
const data = {
filepath: form.filepath,
downloadCount: form.downloadCount,
files: form.files,
files: [],
};
// 判断是否更新了文件
if (form.files) {
data.files = (form.files as UploadFiles).map((file) => file.raw);
}
const result = await filesStore.addFiles(data);
// 成功后关闭窗口
@ -79,33 +79,22 @@ export function onAdd() {
/* 更新系统文件表 */
export function onUpdate(row: any) {
const formInline = {
filepath: row.filepath,
downloadCount: row.downloadCount,
// 上传为 files更新时为 file
files: undefined,
isUpload: true,
};
addDialog({
title: `${$t('modify')}${$t('files')}`,
props: {
formInline: {
filename: row.filename,
fileType: row.fileType,
filepath: row.filepath,
downloadCount: row.downloadCount,
isUpload: true,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => {
const dialog = h(FilesDialog, {
ref: formRef,
formInline: {
filename: row.filename,
fileType: row.fileType,
filepath: row.filepath,
downloadCount: row.downloadCount,
isUpload: true,
files: undefined,
},
});
const dialog = h(FilesDialog, { ref: formRef, formInline });
formRef.value = dialog;
return dialog;
},
@ -114,13 +103,21 @@ export function onUpdate(row: any) {
formRef.value.formRef.validate(async (valid: any) => {
if (!valid) return;
const data = {
id: row.id,
filepath: form.filepath,
downloadCount: form.downloadCount,
file: undefined,
isUpload: true,
};
// 判断是否更新了文件
if (form.files) {
form.files = (form.files as UploadFiles).map((file) => file.raw);
data.file = (form.files as UploadFiles).map((file) => file.raw)[0];
}
// 更新文件
const result = await filesStore.editFiles({ ...form, id: row.id });
const result = await filesStore.editFiles(data);
// 更新完成
if (!result) return;

View File

@ -1,14 +1,10 @@
// 添加或者修改表单元素
export interface FormItemProps {
// 文件的名称
filename: string;
// 文件在服务器上的存储路径
filepath: string;
// 文件的MIME类型
fileType: string;
// 下载数量
downloadCount: number;
// 文件内容
// 文件内容,添加是 files上传是file
files: any;
// 是否是上传
isUpload: boolean;

View File

@ -105,6 +105,7 @@ onMounted(() => {
row-key="id"
showOverflowTooltip
table-layout="auto"
@row-dblclick="(row) => onUpdate(row)"
@selection-change="onSelectionChange"
>
<template #rank="{ row }">

View File

@ -25,68 +25,39 @@ async function onSearch() {
/** 添加菜单 */
function onAdd(parentId: any = 0) {
const formInline = {
menuType: 0,
higherMenuOptions: formatHigherMenuOptions(cloneDeep(menuStore.datalist)),
parentId,
title: '',
name: '',
path: '',
component: '',
rank: 99,
icon: '',
id: '',
extraIcon: '',
enterTransition: '',
leaveTransition: '',
activePath: '',
redirect: '',
roles: [],
frameSrc: '',
frameLoading: true,
keepAlive: false,
hiddenTag: false,
fixedTag: false,
showLink: true,
showParent: true,
};
addDialog({
title: $t('addNew') + $t('menu'),
props: {
formInline: {
menuType: 0,
higherMenuOptions: formatHigherMenuOptions(cloneDeep(menuStore.datalist)),
parentId,
title: '',
name: '',
path: '',
component: '',
rank: 99,
icon: '',
id: '',
extraIcon: '',
enterTransition: '',
leaveTransition: '',
activePath: '',
redirect: '',
roles: [],
frameSrc: '',
frameLoading: true,
keepAlive: false,
hiddenTag: false,
fixedTag: false,
showLink: true,
showParent: true,
},
},
props: { formInline },
width: '45%',
draggable: true,
closeOnClickModal: false,
fullscreenIcon: true,
contentRenderer: () =>
h(EditForm, {
ref: dialogFormRef,
formInline: {
menuType: 0,
higherMenuOptions: formatHigherMenuOptions(cloneDeep(menuStore.datalist)),
parentId,
title: '',
name: '',
path: '',
component: '',
rank: 99,
icon: '',
id: '',
extraIcon: '',
enterTransition: '',
leaveTransition: '',
activePath: '',
redirect: '',
roles: [],
frameSrc: '',
frameLoading: true,
keepAlive: false,
hiddenTag: false,
fixedTag: false,
showLink: true,
showParent: true,
},
}),
contentRenderer: () => h(EditForm, { ref: dialogFormRef, formInline }),
beforeSure: (done, { options }) => {
const menuFormRef = dialogFormRef.value.menuFormRef;
const curData = options.props.formInline as FormItemProps;
@ -108,71 +79,42 @@ function onAdd(parentId: any = 0) {
/* 更新菜单 */
function onUpdate(row?: FormItemProps) {
const formInline = {
id: row?.id,
menuType: row?.menuType,
higherMenuOptions: formatHigherMenuOptions(cloneDeep(menuStore.datalist)),
parentId: row?.parentId,
title: row?.title,
name: row?.name,
path: row?.path,
component: row?.component,
rank: row?.rank,
icon: row?.icon,
frameSrc: row?.frameSrc,
extraIcon: row?.extraIcon,
// 因为要使用动画需要在前面加上 animate__ 修改时需要手动去除
enterTransition: row?.enterTransition?.replace('animate__', ''),
// 因为要使用动画需要在前面加上 animate__ 修改时需要手动去除
leaveTransition: row?.leaveTransition?.replace('animate__', ''),
roles: row.roles,
activePath: row?.activePath,
frameLoading: row?.frameLoading,
keepAlive: row?.keepAlive,
hiddenTag: row?.hiddenTag,
fixedTag: row?.fixedTag,
showLink: row?.showLink,
showParent: row?.showParent,
redirect: row?.redirect,
};
addDialog({
title: $t('update') + $t('menu'),
props: {
formInline: {
id: row?.id,
menuType: row?.menuType,
higherMenuOptions: formatHigherMenuOptions(cloneDeep(menuStore.datalist)),
parentId: row?.parentId,
title: row?.title,
name: row?.name,
path: row?.path,
component: row?.component,
rank: row?.rank,
icon: row?.icon,
frameSrc: row?.frameSrc,
extraIcon: row?.extraIcon,
// 因为要使用动画需要在前面加上 animate__ 修改时需要手动去除
enterTransition: row?.enterTransition?.replace('animate__', ''),
// 因为要使用动画需要在前面加上 animate__ 修改时需要手动去除
leaveTransition: row?.leaveTransition?.replace('animate__', ''),
activePath: row?.activePath,
frameLoading: row?.frameLoading,
keepAlive: row?.keepAlive,
hiddenTag: row?.hiddenTag,
fixedTag: row?.fixedTag,
showLink: row?.showLink,
showParent: row?.showParent,
redirect: row?.redirect,
},
},
props: { formInline },
width: '45%',
draggable: true,
fullscreen: deviceDetection(),
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(EditForm, {
ref: dialogFormRef,
formInline: {
id: row?.id,
menuType: row?.menuType,
higherMenuOptions: formatHigherMenuOptions(cloneDeep(menuStore.datalist)),
parentId: row?.parentId,
title: row?.title,
name: row?.name,
path: row?.path,
component: row?.component,
rank: row?.rank,
icon: row?.icon,
frameSrc: row?.frameSrc,
extraIcon: row?.extraIcon,
// 因为要使用动画需要在前面加上 animate__ 修改时需要手动去除
enterTransition: row?.enterTransition?.replace('animate__', ''),
// 因为要使用动画需要在前面加上 animate__ 修改时需要手动去除
leaveTransition: row?.leaveTransition?.replace('animate__', ''),
activePath: row?.activePath,
frameLoading: row?.frameLoading,
keepAlive: row?.keepAlive,
hiddenTag: row?.hiddenTag,
fixedTag: row?.fixedTag,
showLink: row?.showLink,
showParent: row?.showParent,
redirect: row?.redirect,
},
}),
contentRenderer: () => h(EditForm, { ref: dialogFormRef, formInline }),
beforeSure: (done, { options }) => {
const menuFormRef = dialogFormRef.value.menuFormRef;
const curData = options.props.formInline as FormItemProps;

View File

@ -23,31 +23,24 @@ export async function onSearch() {
/** 添加权限 */
export function onAdd(parentId = 0) {
const formInline = {
parentId,
powerCode: undefined,
powerName: undefined,
requestUrl: undefined,
requestMethod: undefined,
};
addDialog({
title: `${$t('addNew')}${$t('power')}`,
props: {
formInline: {
parentId,
powerCode: undefined,
powerName: undefined,
requestUrl: undefined,
requestMethod: undefined,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(PermissionFromDialog, {
ref: formRef,
formInline: {
parentId,
powerCode: undefined,
powerName: undefined,
requestUrl: undefined,
requestMethod: undefined,
},
formInline,
}),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
@ -65,32 +58,21 @@ export function onAdd(parentId = 0) {
/* 更新权限 */
export function onUpdate(row: any) {
const formInline = {
parentId: row.parentId,
powerCode: row.powerCode,
powerName: row.powerName,
requestUrl: row.requestUrl,
requestMethod: row.requestMethod,
};
addDialog({
title: `${$t('modify')}${$t('power')}`,
props: {
formInline: {
parentId: row.parentId,
powerCode: row.powerCode,
powerName: row.powerName,
requestUrl: row.requestUrl,
requestMethod: row.requestMethod,
},
},
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () =>
h(PermissionFromDialog, {
ref: formRef,
formInline: {
parentId: row.parentId,
powerCode: row.powerCode,
powerName: row.powerName,
requestUrl: row.requestUrl,
requestMethod: row.requestMethod,
},
}),
contentRenderer: () => h(PermissionFromDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -32,14 +32,14 @@ export async function onSearch() {
/** 添加角色 */
export function onAdd() {
const formInline = { roleCode: undefined, description: undefined };
addDialog({
title: `${$t('addNew')}${$t('role')}`,
props: { formInline: { roleCode: undefined, description: undefined } },
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(RoleDialog, { ref: formRef, formInline: { roleCode: undefined, description: undefined } }),
contentRenderer: () => h(RoleDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {
@ -56,14 +56,15 @@ export function onAdd() {
/* 更新角色 */
export function onUpdate(row: any) {
const formInline = { roleCode: row.roleCode, description: row.description };
addDialog({
title: `${$t('modify')}${$t('role')}`,
props: { formInline: { roleCode: row.roleCode, description: row.description } },
props: { formInline },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(RoleDialog, { ref: formRef, formInline: { roleCode: row.roleCode, description: row.description } }),
contentRenderer: () => h(RoleDialog, { ref: formRef, formInline }),
beforeSure: (done, { options }) => {
const form = options.props.formInline as FormItemProps;
formRef.value.formRef.validate(async (valid: any) => {

View File

@ -1,134 +1,134 @@
declare module "vue" {
declare module 'vue' {
/**
* Volar Volar
*/
export interface GlobalComponents {
IconifyIconOffline: (typeof import("../src/components/ReIcon"))["IconifyIconOffline"];
IconifyIconOnline: (typeof import("../src/components/ReIcon"))["IconifyIconOnline"];
FontIcon: (typeof import("../src/components/ReIcon"))["FontIcon"];
Auth: (typeof import("../src/components/ReAuth"))["Auth"];
Perms: (typeof import("../src/components/RePerms"))["Perms"];
IconifyIconOffline: (typeof import('../src/components/ReIcon'))['IconifyIconOffline'];
IconifyIconOnline: (typeof import('../src/components/ReIcon'))['IconifyIconOnline'];
FontIcon: (typeof import('../src/components/ReIcon'))['FontIcon'];
Auth: (typeof import('../src/components/ReAuth'))['Auth'];
Perms: (typeof import('../src/components/RePerms'))['Perms'];
}
}
/**
* TODO https://github.com/element-plus/element-plus/blob/dev/global.d.ts#L2
* https://github.com/element-plus/element-plus/blob/dev/global.d.ts#L2
* No need to install @vue/runtime-core
*/
declare module "vue" {
declare module 'vue' {
export interface GlobalComponents {
ElAffix: (typeof import("element-plus"))["ElAffix"];
ElAlert: (typeof import("element-plus"))["ElAlert"];
ElAside: (typeof import("element-plus"))["ElAside"];
ElAutocomplete: (typeof import("element-plus"))["ElAutocomplete"];
ElAvatar: (typeof import("element-plus"))["ElAvatar"];
ElAnchor: (typeof import("element-plus"))["ElAnchor"];
ElAnchorLink: (typeof import("element-plus"))["ElAnchorLink"];
ElBacktop: (typeof import("element-plus"))["ElBacktop"];
ElBadge: (typeof import("element-plus"))["ElBadge"];
ElBreadcrumb: (typeof import("element-plus"))["ElBreadcrumb"];
ElBreadcrumbItem: (typeof import("element-plus"))["ElBreadcrumbItem"];
ElButton: (typeof import("element-plus"))["ElButton"];
ElButtonGroup: (typeof import("element-plus"))["ElButtonGroup"];
ElCalendar: (typeof import("element-plus"))["ElCalendar"];
ElCard: (typeof import("element-plus"))["ElCard"];
ElCarousel: (typeof import("element-plus"))["ElCarousel"];
ElCarouselItem: (typeof import("element-plus"))["ElCarouselItem"];
ElCascader: (typeof import("element-plus"))["ElCascader"];
ElCascaderPanel: (typeof import("element-plus"))["ElCascaderPanel"];
ElCheckbox: (typeof import("element-plus"))["ElCheckbox"];
ElCheckboxButton: (typeof import("element-plus"))["ElCheckboxButton"];
ElCheckboxGroup: (typeof import("element-plus"))["ElCheckboxGroup"];
ElCol: (typeof import("element-plus"))["ElCol"];
ElCollapse: (typeof import("element-plus"))["ElCollapse"];
ElCollapseItem: (typeof import("element-plus"))["ElCollapseItem"];
ElCollapseTransition: (typeof import("element-plus"))["ElCollapseTransition"];
ElColorPicker: (typeof import("element-plus"))["ElColorPicker"];
ElContainer: (typeof import("element-plus"))["ElContainer"];
ElConfigProvider: (typeof import("element-plus"))["ElConfigProvider"];
ElDatePicker: (typeof import("element-plus"))["ElDatePicker"];
ElDialog: (typeof import("element-plus"))["ElDialog"];
ElDivider: (typeof import("element-plus"))["ElDivider"];
ElDrawer: (typeof import("element-plus"))["ElDrawer"];
ElDropdown: (typeof import("element-plus"))["ElDropdown"];
ElDropdownItem: (typeof import("element-plus"))["ElDropdownItem"];
ElDropdownMenu: (typeof import("element-plus"))["ElDropdownMenu"];
ElEmpty: (typeof import("element-plus"))["ElEmpty"];
ElFooter: (typeof import("element-plus"))["ElFooter"];
ElForm: (typeof import("element-plus"))["ElForm"];
ElFormItem: (typeof import("element-plus"))["ElFormItem"];
ElHeader: (typeof import("element-plus"))["ElHeader"];
ElIcon: (typeof import("element-plus"))["ElIcon"];
ElImage: (typeof import("element-plus"))["ElImage"];
ElImageViewer: (typeof import("element-plus"))["ElImageViewer"];
ElInput: (typeof import("element-plus"))["ElInput"];
ElInputNumber: (typeof import("element-plus"))["ElInputNumber"];
ElLink: (typeof import("element-plus"))["ElLink"];
ElMain: (typeof import("element-plus"))["ElMain"];
ElMenu: (typeof import("element-plus"))["ElMenu"];
ElMenuItem: (typeof import("element-plus"))["ElMenuItem"];
ElMenuItemGroup: (typeof import("element-plus"))["ElMenuItemGroup"];
ElOption: (typeof import("element-plus"))["ElOption"];
ElOptionGroup: (typeof import("element-plus"))["ElOptionGroup"];
ElPageHeader: (typeof import("element-plus"))["ElPageHeader"];
ElPagination: (typeof import("element-plus"))["ElPagination"];
ElPopconfirm: (typeof import("element-plus"))["ElPopconfirm"];
ElPopper: (typeof import("element-plus"))["ElPopper"];
ElPopover: (typeof import("element-plus"))["ElPopover"];
ElProgress: (typeof import("element-plus"))["ElProgress"];
ElRadio: (typeof import("element-plus"))["ElRadio"];
ElRadioButton: (typeof import("element-plus"))["ElRadioButton"];
ElRadioGroup: (typeof import("element-plus"))["ElRadioGroup"];
ElRate: (typeof import("element-plus"))["ElRate"];
ElRow: (typeof import("element-plus"))["ElRow"];
ElScrollbar: (typeof import("element-plus"))["ElScrollbar"];
ElSelect: (typeof import("element-plus"))["ElSelect"];
ElSlider: (typeof import("element-plus"))["ElSlider"];
ElStep: (typeof import("element-plus"))["ElStep"];
ElSteps: (typeof import("element-plus"))["ElSteps"];
ElSubMenu: (typeof import("element-plus"))["ElSubMenu"];
ElSwitch: (typeof import("element-plus"))["ElSwitch"];
ElTabPane: (typeof import("element-plus"))["ElTabPane"];
ElTable: (typeof import("element-plus"))["ElTable"];
ElTableColumn: (typeof import("element-plus"))["ElTableColumn"];
ElTabs: (typeof import("element-plus"))["ElTabs"];
ElTag: (typeof import("element-plus"))["ElTag"];
ElText: (typeof import("element-plus"))["ElText"];
ElTimePicker: (typeof import("element-plus"))["ElTimePicker"];
ElTimeSelect: (typeof import("element-plus"))["ElTimeSelect"];
ElTimeline: (typeof import("element-plus"))["ElTimeline"];
ElTimelineItem: (typeof import("element-plus"))["ElTimelineItem"];
ElTooltip: (typeof import("element-plus"))["ElTooltip"];
ElTransfer: (typeof import("element-plus"))["ElTransfer"];
ElTree: (typeof import("element-plus"))["ElTree"];
ElTreeV2: (typeof import("element-plus"))["ElTreeV2"];
ElTreeSelect: (typeof import("element-plus"))["ElTreeSelect"];
ElUpload: (typeof import("element-plus"))["ElUpload"];
ElSpace: (typeof import("element-plus"))["ElSpace"];
ElSkeleton: (typeof import("element-plus"))["ElSkeleton"];
ElSkeletonItem: (typeof import("element-plus"))["ElSkeletonItem"];
ElStatistic: (typeof import("element-plus"))["ElStatistic"];
ElCheckTag: (typeof import("element-plus"))["ElCheckTag"];
ElDescriptions: (typeof import("element-plus"))["ElDescriptions"];
ElDescriptionsItem: (typeof import("element-plus"))["ElDescriptionsItem"];
ElResult: (typeof import("element-plus"))["ElResult"];
ElSelectV2: (typeof import("element-plus"))["ElSelectV2"];
ElWatermark: (typeof import("element-plus"))["ElWatermark"];
ElTour: (typeof import("element-plus"))["ElTour"];
ElTourStep: (typeof import("element-plus"))["ElTourStep"];
ElSegmented: (typeof import("element-plus"))["ElSegmented"];
ElAffix: (typeof import('element-plus'))['ElAffix'];
ElAlert: (typeof import('element-plus'))['ElAlert'];
ElAside: (typeof import('element-plus'))['ElAside'];
ElAutocomplete: (typeof import('element-plus'))['ElAutocomplete'];
ElAvatar: (typeof import('element-plus'))['ElAvatar'];
ElAnchor: (typeof import('element-plus'))['ElAnchor'];
ElAnchorLink: (typeof import('element-plus'))['ElAnchorLink'];
ElBacktop: (typeof import('element-plus'))['ElBacktop'];
ElBadge: (typeof import('element-plus'))['ElBadge'];
ElBreadcrumb: (typeof import('element-plus'))['ElBreadcrumb'];
ElBreadcrumbItem: (typeof import('element-plus'))['ElBreadcrumbItem'];
ElButton: (typeof import('element-plus'))['ElButton'];
ElButtonGroup: (typeof import('element-plus'))['ElButtonGroup'];
ElCalendar: (typeof import('element-plus'))['ElCalendar'];
ElCard: (typeof import('element-plus'))['ElCard'];
ElCarousel: (typeof import('element-plus'))['ElCarousel'];
ElCarouselItem: (typeof import('element-plus'))['ElCarouselItem'];
ElCascader: (typeof import('element-plus'))['ElCascader'];
ElCascaderPanel: (typeof import('element-plus'))['ElCascaderPanel'];
ElCheckbox: (typeof import('element-plus'))['ElCheckbox'];
ElCheckboxButton: (typeof import('element-plus'))['ElCheckboxButton'];
ElCheckboxGroup: (typeof import('element-plus'))['ElCheckboxGroup'];
ElCol: (typeof import('element-plus'))['ElCol'];
ElCollapse: (typeof import('element-plus'))['ElCollapse'];
ElCollapseItem: (typeof import('element-plus'))['ElCollapseItem'];
ElCollapseTransition: (typeof import('element-plus'))['ElCollapseTransition'];
ElColorPicker: (typeof import('element-plus'))['ElColorPicker'];
ElContainer: (typeof import('element-plus'))['ElContainer'];
ElConfigProvider: (typeof import('element-plus'))['ElConfigProvider'];
ElDatePicker: (typeof import('element-plus'))['ElDatePicker'];
ElDialog: (typeof import('element-plus'))['ElDialog'];
ElDivider: (typeof import('element-plus'))['ElDivider'];
ElDrawer: (typeof import('element-plus'))['ElDrawer'];
ElDropdown: (typeof import('element-plus'))['ElDropdown'];
ElDropdownItem: (typeof import('element-plus'))['ElDropdownItem'];
ElDropdownMenu: (typeof import('element-plus'))['ElDropdownMenu'];
ElEmpty: (typeof import('element-plus'))['ElEmpty'];
ElFooter: (typeof import('element-plus'))['ElFooter'];
ElForm: (typeof import('element-plus'))['ElForm'];
ElFormItem: (typeof import('element-plus'))['ElFormItem'];
ElHeader: (typeof import('element-plus'))['ElHeader'];
ElIcon: (typeof import('element-plus'))['ElIcon'];
ElImage: (typeof import('element-plus'))['ElImage'];
ElImageViewer: (typeof import('element-plus'))['ElImageViewer'];
ElInput: (typeof import('element-plus'))['ElInput'];
ElInputNumber: (typeof import('element-plus'))['ElInputNumber'];
ElLink: (typeof import('element-plus'))['ElLink'];
ElMain: (typeof import('element-plus'))['ElMain'];
ElMenu: (typeof import('element-plus'))['ElMenu'];
ElMenuItem: (typeof import('element-plus'))['ElMenuItem'];
ElMenuItemGroup: (typeof import('element-plus'))['ElMenuItemGroup'];
ElOption: (typeof import('element-plus'))['ElOption'];
ElOptionGroup: (typeof import('element-plus'))['ElOptionGroup'];
ElPageHeader: (typeof import('element-plus'))['ElPageHeader'];
ElPagination: (typeof import('element-plus'))['ElPagination'];
ElPopconfirm: (typeof import('element-plus'))['ElPopconfirm'];
ElPopper: (typeof import('element-plus'))['ElPopper'];
ElPopover: (typeof import('element-plus'))['ElPopover'];
ElProgress: (typeof import('element-plus'))['ElProgress'];
ElRadio: (typeof import('element-plus'))['ElRadio'];
ElRadioButton: (typeof import('element-plus'))['ElRadioButton'];
ElRadioGroup: (typeof import('element-plus'))['ElRadioGroup'];
ElRate: (typeof import('element-plus'))['ElRate'];
ElRow: (typeof import('element-plus'))['ElRow'];
ElScrollbar: (typeof import('element-plus'))['ElScrollbar'];
ElSelect: (typeof import('element-plus'))['ElSelect'];
ElSlider: (typeof import('element-plus'))['ElSlider'];
ElStep: (typeof import('element-plus'))['ElStep'];
ElSteps: (typeof import('element-plus'))['ElSteps'];
ElSubMenu: (typeof import('element-plus'))['ElSubMenu'];
ElSwitch: (typeof import('element-plus'))['ElSwitch'];
ElTabPane: (typeof import('element-plus'))['ElTabPane'];
ElTable: (typeof import('element-plus'))['ElTable'];
ElTableColumn: (typeof import('element-plus'))['ElTableColumn'];
ElTabs: (typeof import('element-plus'))['ElTabs'];
ElTag: (typeof import('element-plus'))['ElTag'];
ElText: (typeof import('element-plus'))['ElText'];
ElTimePicker: (typeof import('element-plus'))['ElTimePicker'];
ElTimeSelect: (typeof import('element-plus'))['ElTimeSelect'];
ElTimeline: (typeof import('element-plus'))['ElTimeline'];
ElTimelineItem: (typeof import('element-plus'))['ElTimelineItem'];
ElTooltip: (typeof import('element-plus'))['ElTooltip'];
ElTransfer: (typeof import('element-plus'))['ElTransfer'];
ElTree: (typeof import('element-plus'))['ElTree'];
ElTreeV2: (typeof import('element-plus'))['ElTreeV2'];
ElTreeSelect: (typeof import('element-plus'))['ElTreeSelect'];
ElUpload: (typeof import('element-plus'))['ElUpload'];
ElSpace: (typeof import('element-plus'))['ElSpace'];
ElSkeleton: (typeof import('element-plus'))['ElSkeleton'];
ElSkeletonItem: (typeof import('element-plus'))['ElSkeletonItem'];
ElStatistic: (typeof import('element-plus'))['ElStatistic'];
ElCheckTag: (typeof import('element-plus'))['ElCheckTag'];
ElDescriptions: (typeof import('element-plus'))['ElDescriptions'];
ElDescriptionsItem: (typeof import('element-plus'))['ElDescriptionsItem'];
ElResult: (typeof import('element-plus'))['ElResult'];
ElSelectV2: (typeof import('element-plus'))['ElSelectV2'];
ElWatermark: (typeof import('element-plus'))['ElWatermark'];
ElTour: (typeof import('element-plus'))['ElTour'];
ElTourStep: (typeof import('element-plus'))['ElTourStep'];
ElSegmented: (typeof import('element-plus'))['ElSegmented'];
}
interface ComponentCustomProperties {
$storage: ResponsiveStorage;
$message: (typeof import("element-plus"))["ElMessage"];
$notify: (typeof import("element-plus"))["ElNotification"];
$msgbox: (typeof import("element-plus"))["ElMessageBox"];
$messageBox: (typeof import("element-plus"))["ElMessageBox"];
$alert: (typeof import("element-plus"))["ElMessageBox"]["alert"];
$confirm: (typeof import("element-plus"))["ElMessageBox"]["confirm"];
$prompt: (typeof import("element-plus"))["ElMessageBox"]["prompt"];
$loading: (typeof import("element-plus"))["ElLoadingService"];
$message: (typeof import('element-plus'))['ElMessage'];
$notify: (typeof import('element-plus'))['ElNotification'];
$msgbox: (typeof import('element-plus'))['ElMessageBox'];
$messageBox: (typeof import('element-plus'))['ElMessageBox'];
$alert: (typeof import('element-plus'))['ElMessageBox']['alert'];
$confirm: (typeof import('element-plus'))['ElMessageBox']['confirm'];
$prompt: (typeof import('element-plus'))['ElMessageBox']['prompt'];
$loading: (typeof import('element-plus'))['ElLoadingService'];
}
}