feat: 更新配置 API

This commit is contained in:
bunny 2025-04-26 10:25:12 +08:00
parent a461e0d1dd
commit cc209888f6
14 changed files with 74 additions and 50 deletions

View File

@ -2,11 +2,11 @@ import { http } from '@/api/service/request';
import type { BaseResult } from '@/api/service/types'; import type { BaseResult } from '@/api/service/types';
/** 获取修改前端配置文件 */ /** 获取修改前端配置文件 */
export const fetchGetWebConfig = () => { export const getWebConfig = () => {
return http.request<BaseResult<any>>('get', '/config/getWebConfig'); return http.request<BaseResult<any>>('get', '/config');
}; };
/** 更新web配置文件 */ /** 更新web配置文件 */
export const fetchUpdateWebConfiguration = (data: any) => { export const updateWebConfiguration = (data: any) => {
return http.request<BaseResult<any>>('put', '/config/updateWebConfiguration', { data }); return http.request<BaseResult<any>>('put', '/config', { data });
}; };

View File

@ -2,22 +2,20 @@ import { http } from '@/api/service/request';
import type { BaseResult, ResultTable } from '@/api/service/types'; import type { BaseResult, ResultTable } from '@/api/service/types';
/** 邮件模板表---获取邮件模板表列表 */ /** 邮件模板表---获取邮件模板表列表 */
export const fetchGetEmailTemplateList = (data: any) => { export const getEmailTemplatePage = (data: any) => {
return http.request<BaseResult<ResultTable>>( return http.request<BaseResult<ResultTable>>('get', `emailTemplate/query/page/${data.currentPage}/${data.pageSize}`, {
'get', params: data,
`emailTemplate/getEmailTemplateList/${data.currentPage}/${data.pageSize}`, });
{ params: data }
);
}; };
/** 邮件模板表---获取模板类型字段 */ /** 邮件模板表---获取模板类型字段 */
export const fetchGetEmailTypes = () => { export const getEmailTypeList = () => {
return http.request<BaseResult<any>>('get', 'emailTemplate/getEmailTypes'); return http.request<BaseResult<any>>('get', 'emailTemplate/query/emailTypes');
}; };
/** 邮件模板表---添加邮件模板表 */ /** 邮件模板表---添加邮件模板表 */
export const fetchAddEmailTemplate = (data: any) => { export const addEmailTemplate = (data: any) => {
return http.request<BaseResult<object>>('post', 'emailTemplate/addEmailTemplate', { data }); return http.request<BaseResult<object>>('post', 'emailTemplate/add/emailTemplate', { data });
}; };
/** 邮件模板表---更新邮件模板表 */ /** 邮件模板表---更新邮件模板表 */

View File

@ -50,3 +50,5 @@ export const tableSelectButtonClass = computed(() => [
export const UserAvatar = export const UserAvatar =
'https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132'; 'https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132';
export const RequestMethod = ['GET', 'PUT', 'POST', 'DELETE', 'HEAD', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'];

View File

@ -1,10 +1,10 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { import {
fetchAddEmailTemplate, addEmailTemplate,
fetchDeleteEmailTemplate, fetchDeleteEmailTemplate,
fetchGetEmailTemplateList,
fetchGetEmailTypes,
fetchUpdateEmailTemplate, fetchUpdateEmailTemplate,
getEmailTemplatePage,
getEmailTypeList,
} from '@/api/v1/email/emailTemplate'; } from '@/api/v1/email/emailTemplate';
import { pageSizes } from '@/enums/baseConstant'; import { pageSizes } from '@/enums/baseConstant';
import { storeMessage } from '@/utils/message'; import { storeMessage } from '@/utils/message';
@ -54,7 +54,7 @@ export const useEmailTemplateStore = defineStore('emailTemplateStore', {
}, },
actions: { actions: {
/** 获取邮件模板表 */ /** 获取邮件模板表 */
async getEmailTemplateList() { async fetchEmailTemplatePage() {
// 整理请求参数 // 整理请求参数
const data = { ...this.pagination, ...this.form }; const data = { ...this.pagination, ...this.form };
delete data.pageSizes; delete data.pageSizes;
@ -62,7 +62,7 @@ export const useEmailTemplateStore = defineStore('emailTemplateStore', {
delete data.background; delete data.background;
// 获取邮件模板表列表 // 获取邮件模板表列表
const result = await fetchGetEmailTemplateList(data); const result = await getEmailTemplatePage(data);
// 公共页面函数hook // 公共页面函数hook
const pagination = storePagination.bind(this); const pagination = storePagination.bind(this);
@ -78,15 +78,15 @@ export const useEmailTemplateStore = defineStore('emailTemplateStore', {
}, },
/** 获取模板类型字段 */ /** 获取模板类型字段 */
async getEmailTypes() { async loadEmailTypeList() {
const result = await fetchGetEmailTypes(); const result = await getEmailTypeList();
if (result.code !== 200) return; if (result.code !== 200) return;
this.allEmailTypes = result.data; this.allEmailTypes = result.data;
}, },
/** 添加邮件模板表 */ /** 添加邮件模板表 */
async addEmailTemplate(data: any) { async addEmailTemplate(data: any) {
const result = await fetchAddEmailTemplate(data); const result = await addEmailTemplate(data);
return storeMessage(result); return storeMessage(result);
}, },

View File

@ -29,6 +29,8 @@ export const usePowerStore = defineStore('powerStore', {
powerName: undefined, powerName: undefined,
// 请求路径 // 请求路径
requestUrl: undefined, requestUrl: undefined,
// 请求方法
requestMethod: undefined,
}, },
// 分页查询结果 // 分页查询结果
pagination: { pagination: {

View File

@ -31,7 +31,7 @@ const formRef = ref<FormInstance>();
const form = ref(props.formInline); const form = ref(props.formInline);
onMounted(() => { onMounted(() => {
emailTemplateStore.getEmailTypes(); emailTemplateStore.loadEmailTypeList();
}); });
defineExpose({ formRef }); defineExpose({ formRef });

View File

@ -15,7 +15,7 @@ export const selectRows = ref([]);
/** 搜索初始化邮件模板表 */ /** 搜索初始化邮件模板表 */
export async function onSearch() { export async function onSearch() {
emailTemplateStore.loading = true; emailTemplateStore.loading = true;
await emailTemplateStore.getEmailTemplateList(); await emailTemplateStore.fetchEmailTemplatePage();
emailTemplateStore.loading = false; emailTemplateStore.loading = false;
} }

View File

@ -1,6 +1,6 @@
import { ref } from 'vue'; import { ref } from 'vue';
import type { FormInstance } from 'element-plus'; import type { FormInstance } from 'element-plus';
import { fetchGetWebConfig, fetchUpdateWebConfiguration } from '@/api/v1/configuration'; import { getWebConfig, updateWebConfiguration } from '@/api/v1/configuration';
import { message, messageBox } from '@/utils/message'; import { message, messageBox } from '@/utils/message';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
@ -35,7 +35,7 @@ export const form = ref({
/** 获取前端配置文件 */ /** 获取前端配置文件 */
export const onSearch = async () => { export const onSearch = async () => {
const result = await fetchGetWebConfig(); const result = await getWebConfig();
if (result.code !== 200) return; if (result.code !== 200) return;
const data = result.data; const data = result.data;
@ -82,7 +82,7 @@ export const submitForm = async (formEl: FormInstance | undefined) => {
if (!confirm) return; if (!confirm) return;
// 修改内容 // 修改内容
const result = await fetchUpdateWebConfiguration(form.value); const result = await updateWebConfiguration(form.value);
if (result.code !== 200) return; if (result.code !== 200) return;
// 提交成功后刷新 // 提交成功后刷新

View File

@ -1,4 +1,4 @@
import editForm from '@/views/system/menu/components/menu-dialog.vue'; import EditForm from '@/views/system/menu/components/menu-dialog.vue';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { addDialog, closeAllDialog } from '@/components/ReDialog/index'; import { addDialog, closeAllDialog } from '@/components/ReDialog/index';
import { h, ref } from 'vue'; import { h, ref } from 'vue';
@ -40,8 +40,8 @@ function onAdd(parentId: any = 0) {
icon: '', icon: '',
id: '', id: '',
extraIcon: '', extraIcon: '',
enterTransition: 'fade', enterTransition: 'fade-transform',
leaveTransition: 'fade', leaveTransition: 'fade-transform',
activePath: '', activePath: '',
redirect: '', redirect: '',
roles: [], roles: [],
@ -58,7 +58,7 @@ function onAdd(parentId: any = 0) {
draggable: true, draggable: true,
closeOnClickModal: false, closeOnClickModal: false,
fullscreenIcon: true, fullscreenIcon: true,
contentRenderer: () => h(editForm, { ref: dialogFormRef }), contentRenderer: () => h(EditForm, { ref: dialogFormRef }),
beforeSure: (done, { options }) => { beforeSure: (done, { options }) => {
const menuFormRef = dialogFormRef.value.menuFormRef; const menuFormRef = dialogFormRef.value.menuFormRef;
const curData = options.props.formInline as FormItemProps; const curData = options.props.formInline as FormItemProps;
@ -115,7 +115,7 @@ function onUpdate(row?: FormItemProps) {
fullscreen: deviceDetection(), fullscreen: deviceDetection(),
fullscreenIcon: true, fullscreenIcon: true,
closeOnClickModal: false, closeOnClickModal: false,
contentRenderer: () => h(editForm, { ref: dialogFormRef }), contentRenderer: () => h(EditForm, { ref: dialogFormRef }),
beforeSure: (done, { options }) => { beforeSure: (done, { options }) => {
const menuFormRef = dialogFormRef.value.menuFormRef; const menuFormRef = dialogFormRef.value.menuFormRef;
const curData = options.props.formInline as FormItemProps; const curData = options.props.formInline as FormItemProps;
@ -193,12 +193,13 @@ export const clearAllRolesSelect = async () => {
/* 更新是整理后端参数 */ /* 更新是整理后端参数 */
export const mergeArgs = (curData: any) => { export const mergeArgs = (curData: any) => {
// 判断 入场 和 离场动画是否添加 // 判断 入场 和 离场动画是否添加
let transition = { enterTransition: 'fade', leaveTransition: 'fade' };
const enterTransition = curData.enterTransition; const enterTransition = curData.enterTransition;
const leaveTransition = curData.leaveTransition; const leaveTransition = curData.leaveTransition;
transition.enterTransition = enterTransition ? `animate__${enterTransition}` : 'fade'; let transition = { enterTransition: '', leaveTransition: '' };
transition.leaveTransition = leaveTransition ? `animate__${leaveTransition}` : 'fade';
transition.enterTransition = enterTransition ? `animate__${enterTransition}` : '';
transition.leaveTransition = leaveTransition ? `animate__${leaveTransition}` : '';
// 整理参数返回后端 // 整理参数返回后端
return { return {

View File

@ -5,6 +5,7 @@ import { FormProps, powerCascadeProps, rules } from '@/views/system/permission/u
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { handleTree } from '@pureadmin/utils'; import { handleTree } from '@pureadmin/utils';
import { usePowerStore } from '@/store/system/power'; import { usePowerStore } from '@/store/system/power';
import { RequestMethod } from '@/enums/baseConstant';
const props = withDefaults(defineProps<FormProps>(), { const props = withDefaults(defineProps<FormProps>(), {
formInline: () => ({ formInline: () => ({
@ -16,6 +17,8 @@ const props = withDefaults(defineProps<FormProps>(), {
powerName: undefined, powerName: undefined,
// //
requestUrl: undefined, requestUrl: undefined,
//
requestMethod: undefined,
}), }),
}); });
@ -52,5 +55,16 @@ defineExpose({ formRef });
<el-form-item :label="$t('power_requestUrl')" prop="requestUrl"> <el-form-item :label="$t('power_requestUrl')" prop="requestUrl">
<el-input v-model="form.requestUrl" :placeholder="$t('inputRequestUrlTip')" autocomplete="off" type="text" /> <el-input v-model="form.requestUrl" :placeholder="$t('inputRequestUrlTip')" autocomplete="off" type="text" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('requestMethod')" prop="requestMethod">
<el-select
v-model="form.requestMethod"
:placeholder="$t('requestMethod')"
autocomplete="off"
clearable
filterable
>
<el-option v-for="item in RequestMethod" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
</el-form> </el-form>
</template> </template>

View File

@ -25,6 +25,7 @@ import { handleTree } from '@pureadmin/utils';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { hasAuth } from '@/router/utils'; import { hasAuth } from '@/router/utils';
import ReAuth from '@/components/ReAuth/src/auth'; import ReAuth from '@/components/ReAuth/src/auth';
import { RequestMethod } from '@/enums/baseConstant';
defineOptions({ name: 'PermissionManger' }); defineOptions({ name: 'PermissionManger' });
@ -33,35 +34,24 @@ const formRef = ref();
const powerStore = usePowerStore(); const powerStore = usePowerStore();
const datalist = computed(() => handleTree(powerStore.datalist)); const datalist = computed(() => handleTree(powerStore.datalist));
/** /* 当前页改变时 */
* * 当前页改变时
*/
const onCurrentPageChange = async (value: number) => { const onCurrentPageChange = async (value: number) => {
powerStore.pagination.currentPage = value; powerStore.pagination.currentPage = value;
await onSearch(); await onSearch();
}; };
/** /* 当分页发生变化 */
* * 当分页发生变化
* @param value
*/
const onPageSizeChange = async (value: number) => { const onPageSizeChange = async (value: number) => {
powerStore.pagination.pageSize = value; powerStore.pagination.pageSize = value;
await onSearch(); await onSearch();
}; };
/** /* 选择多行 */
* * 选择多行
* @param rows
*/
const onSelectionChange = (rows: Array<any>) => { const onSelectionChange = (rows: Array<any>) => {
powerIds.value = rows.map((row: any) => row.id); powerIds.value = rows.map((row: any) => row.id);
}; };
/** /* 重置表单 */
* 重置表单
* @param formEl
*/
const resetForm = async (formEl: FormInstance) => { const resetForm = async (formEl: FormInstance) => {
if (!formEl) return; if (!formEl) return;
formEl.resetFields(); formEl.resetFields();
@ -106,6 +96,18 @@ onMounted(() => {
clearable clearable
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('requestMethod')" prop="requestMethod">
<el-select
v-model="powerStore.form.requestMethod"
:placeholder="$t('requestMethod')"
autocomplete="off"
class="!w-[180px]"
clearable
filterable
>
<el-option v-for="item in RequestMethod" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
:icon="useRenderIcon('ri:search-line')" :icon="useRenderIcon('ri:search-line')"

View File

@ -12,6 +12,7 @@ export const columns: TableColumnList = [
{ label: $t('power_powerName'), prop: 'powerName', minWidth: 320 }, { label: $t('power_powerName'), prop: 'powerName', minWidth: 320 },
// 请求路径 // 请求路径
{ label: $t('power_requestUrl'), prop: 'requestUrl', minWidth: 360 }, { label: $t('power_requestUrl'), prop: 'requestUrl', minWidth: 360 },
{ label: $t('requestMethod'), prop: 'requestMethod', minWidth: 360 },
{ label: $t('table.updateTime'), prop: 'updateTime', sortable: true, minWidth: 160 }, { label: $t('table.updateTime'), prop: 'updateTime', sortable: true, minWidth: 160 },
{ label: $t('table.createTime'), prop: 'createTime', sortable: true, minWidth: 160 }, { label: $t('table.createTime'), prop: 'createTime', sortable: true, minWidth: 160 },
{ label: $t('table.createUser'), prop: 'createUser', slot: 'createUser', minWidth: 130 }, { label: $t('table.createUser'), prop: 'createUser', slot: 'createUser', minWidth: 130 },

View File

@ -33,6 +33,7 @@ export function onAdd(parentId = 0) {
powerCode: undefined, powerCode: undefined,
powerName: undefined, powerName: undefined,
requestUrl: undefined, requestUrl: undefined,
requestMethod: undefined,
}, },
}, },
draggable: true, draggable: true,
@ -67,6 +68,7 @@ export function onUpdate(row: any) {
powerCode: row.powerCode, powerCode: row.powerCode,
powerName: row.powerName, powerName: row.powerName,
requestUrl: row.requestUrl, requestUrl: row.requestUrl,
requestMethod: row.requestMethod,
}, },
}, },
draggable: true, draggable: true,

View File

@ -8,6 +8,8 @@ export interface FormItemProps {
powerName: string; powerName: string;
// 请求路径 // 请求路径
requestUrl: string; requestUrl: string;
// 请求方法
requestMethod: string;
} }
// 添加或修改表单Props // 添加或修改表单Props