refactor: ♻️ aPI 文件根据模块划分

This commit is contained in:
ray
2024-10-18 22:28:02 +08:00
parent 0cc300a032
commit af460b5dc3
43 changed files with 150 additions and 297 deletions

View File

@@ -1,148 +0,0 @@
import request from "@/utils/request";
const DICT_BASE_URL = "/api/v1/dict";
const DictAPI = {
/**
* 获取字典分页列表
*
* @param queryParams 查询参数
* @returns 字典分页结果
*/
getPage(queryParams: DictPageQuery) {
return request<any, PageResult<DictPageVO[]>>({
url: `${DICT_BASE_URL}/page`,
method: "get",
params: queryParams,
});
},
/**
* 获取字典表单数据
*
* @param id 字典ID
* @returns 字典表单数据
*/
getFormData(id: number) {
return request<any, ResponseData<DictForm>>({
url: `${DICT_BASE_URL}/${id}/form`,
method: "get",
});
},
/**
* 新增字典
*
* @param data 字典表单数据
*/
add(data: DictForm) {
return request({
url: `${DICT_BASE_URL}`,
method: "post",
data: data,
});
},
/**
* 修改字典
*
* @param id 字典ID
* @param data 字典表单数据
*/
update(id: number, data: DictForm) {
return request({
url: `${DICT_BASE_URL}/${id}`,
method: "put",
data: data,
});
},
/**
* 删除字典
*
* @param ids 字典ID多个以英文逗号(,)分隔
*/
deleteByIds(ids: string) {
return request({
url: `${DICT_BASE_URL}/${ids}`,
method: "delete",
});
},
/**
* 获取字典列表
*
* @returns 字典列表
*/
getList() {
return request<any, OptionType[]>({
url: `${DICT_BASE_URL}/list`,
method: "get",
});
},
};
export default DictAPI;
/**
* 字典查询参数
*/
export interface DictPageQuery extends PageQuery {
/**
* 关键字(字典名称/编码)
*/
keywords?: string;
/**
* 字典状态1:启用0:禁用)
*/
status?: number;
}
/**
* 字典分页对象
*/
export interface DictPageVO {
/**
* 字典ID
*/
id: number;
/**
* 字典名称
*/
name: string;
/**
* 字典编码
*/
dictCode: string;
/**
* 字典状态1:启用0:禁用)
*/
status: number;
}
/**
* 字典
*/
export interface DictForm {
/**
* 字典ID
*/
id?: number;
/**
* 字典名称
*/
name?: string;
/**
* 字典编码
*/
dictCode?: string;
/**
* 字典状态1-启用0-禁用)
*/
status?: number;
/**
* 备注
*/
remark?: string;
}

View File

@@ -184,7 +184,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import NoticeAPI, { NoticePageVO } from "@/api/notice"; import NoticeAPI, { NoticePageVO } from "@/api/system/notice";
import WebSocketManager from "@/utils/websocket"; import WebSocketManager from "@/utils/websocket";
import router from "@/router"; import router from "@/router";

View File

@@ -1,5 +1,5 @@
export default { export default {
// 路由国际化 // 菜单国际化
route: { route: {
dashboard: "Dashboard", dashboard: "Dashboard",
document: "Document", document: "Document",

View File

@@ -13,4 +13,5 @@ export * from "./modules/permission";
export * from "./modules/settings"; export * from "./modules/settings";
export * from "./modules/tagsView"; export * from "./modules/tagsView";
export * from "./modules/user"; export * from "./modules/user";
export * from "./modules/dict";
export { store }; export { store };

View File

@@ -8,12 +8,8 @@ function setToken(token: string) {
return localStorage.setItem(TOKEN_KEY, token); return localStorage.setItem(TOKEN_KEY, token);
} }
function removeToken() { function clearToken() {
return localStorage.removeItem(TOKEN_KEY); return localStorage.removeItem(TOKEN_KEY);
} }
function isLogin(): boolean { export { getToken, setToken, clearToken };
return !!getToken();
}
export { getToken, setToken, removeToken, isLogin };

View File

@@ -2,10 +2,10 @@ import axios, {
type InternalAxiosRequestConfig, type InternalAxiosRequestConfig,
type AxiosResponse, type AxiosResponse,
} from "axios"; } from "axios";
import qs from "qs";
import { useUserStoreHook } from "@/store/modules/user"; import { useUserStoreHook } from "@/store/modules/user";
import { ResultEnum } from "@/enums/ResultEnum"; import { ResultEnum } from "@/enums/ResultEnum";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import qs from "qs";
// 创建 axios 实例 // 创建 axios 实例
const service = axios.create({ const service = axios.create({
@@ -51,7 +51,7 @@ service.interceptors.response.use(
return Promise.reject(new Error(msg || "Error")); return Promise.reject(new Error(msg || "Error"));
}, },
(error: any) => { (error: any) => {
// 异常处理 // 异常处理 非 2xx 状态码 会进入这里
if (error.response.data) { if (error.response.data) {
const { code, msg } = error.response.data; const { code, msg } = error.response.data;
if (code === ResultEnum.TOKEN_INVALID) { if (code === ResultEnum.TOKEN_INVALID) {
@@ -61,7 +61,7 @@ service.interceptors.response.use(
type: "info", type: "info",
}); });
useUserStoreHook() useUserStoreHook()
.resetToken() .clearUserSession()
.then(() => { .then(() => {
location.reload(); location.reload();
}); });
@@ -73,5 +73,4 @@ service.interceptors.response.use(
} }
); );
// 导出 axios 实例
export default service; export default service;

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item prop="keywords" label="关键字"> <el-form-item prop="keywords" label="关键字">
<el-input <el-input
@@ -461,8 +461,8 @@ import GeneratorAPI, {
FieldConfig, FieldConfig,
} from "@/api/codegen"; } from "@/api/codegen";
import DictAPI from "@/api/dict"; import DictAPI from "@/api/system/dict";
import MenuAPI from "@/api/menu"; import MenuAPI from "@/api/system/menu";
interface TreeNode { interface TreeNode {
label: string; label: string;

View File

@@ -33,7 +33,7 @@
<script setup lang="ts"> <script setup lang="ts">
import * as echarts from "echarts"; import * as echarts from "echarts";
import LogAPI, { VisitTrendVO, VisitTrendQuery } from "@/api/log"; import LogAPI, { VisitTrendVO, VisitTrendQuery } from "@/api/system/log";
const dataRange = ref(1); const dataRange = ref(1);
const chart: Ref<echarts.ECharts | null> = ref(null); const chart: Ref<echarts.ECharts | null> = ref(null);

View File

@@ -8,7 +8,7 @@
<div class="flex h-full items-center"> <div class="flex h-full items-center">
<img <img
class="w-20 h-20 mr-5 rounded-full" class="w-20 h-20 mr-5 rounded-full"
:src="userStore.user.avatar + '?imageView2/1/w/80/h/80'" :src="userStore.userInfo.avatar + '?imageView2/1/w/80/h/80'"
/> />
<div> <div>
<p>{{ greetings }}</p> <p>{{ greetings }}</p>
@@ -195,12 +195,14 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import VisitTrend from "./components/VisitTrend.vue";
import WebSocketManager from "@/utils/websocket"; import WebSocketManager from "@/utils/websocket";
import router from "@/router"; import router from "@/router";
import { useUserStore } from "@/store/modules/user"; import { useUserStore } from "@/store/modules/user";
import StatsAPI, { VisitStatsVO } from "@/api/log"; import StatsAPI, { VisitStatsVO } from "@/api/system/log";
import NoticeAPI, { NoticePageVO } from "@/api/notice"; import NoticeAPI, { NoticePageVO } from "@/api/system/notice";
const noticeDetailRef = ref(); const noticeDetailRef = ref();
@@ -211,11 +213,11 @@ const greetings = computed(() => {
if (hours >= 6 && hours < 8) { if (hours >= 6 && hours < 8) {
return "晨起披衣出草堂,轩窗已自喜微凉🌅!"; return "晨起披衣出草堂,轩窗已自喜微凉🌅!";
} else if (hours >= 8 && hours < 12) { } else if (hours >= 8 && hours < 12) {
return "上午好," + userStore.user.nickname + ""; return "上午好," + userStore.userInfo.nickname + "";
} else if (hours >= 12 && hours < 18) { } else if (hours >= 12 && hours < 18) {
return "下午好," + userStore.user.nickname + ""; return "下午好," + userStore.userInfo.nickname + "";
} else if (hours >= 18 && hours < 24) { } else if (hours >= 18 && hours < 24) {
return "晚上好," + userStore.user.nickname + ""; return "晚上好," + userStore.userInfo.nickname + "";
} else { } else {
return "偷偷向银河要了一把碎星,只等你闭上眼睛撒入你的梦中,晚安🌛!"; return "偷偷向银河要了一把碎星,只等你闭上眼睛撒入你的梦中,晚安🌛!";
} }

View File

@@ -1,4 +1,4 @@
import UserAPI, { type UserForm } from "@/api/user"; import UserAPI, { type UserForm } from "@/api/system/user";
import type { IModalConfig } from "@/components/CURD/types"; import type { IModalConfig } from "@/components/CURD/types";
const modalConfig: IModalConfig<UserForm> = { const modalConfig: IModalConfig<UserForm> = {

View File

@@ -1,6 +1,6 @@
import UserAPI from "@/api/user"; import UserAPI from "@/api/system/user";
import RoleAPI from "@/api/role"; import RoleAPI from "@/api/role";
import type { UserPageQuery } from "@/api/user"; import type { UserPageQuery } from "@/api/system/user";
import type { IContentConfig } from "@/components/CURD/types"; import type { IContentConfig } from "@/components/CURD/types";
const contentConfig: IContentConfig<UserPageQuery> = { const contentConfig: IContentConfig<UserPageQuery> = {

View File

@@ -1,4 +1,4 @@
import UserAPI, { type UserForm } from "@/api/user"; import UserAPI, { type UserForm } from "@/api/system/user";
import type { IModalConfig } from "@/components/CURD/types"; import type { IModalConfig } from "@/components/CURD/types";
import { DeviceEnum } from "@/enums/DeviceEnum"; import { DeviceEnum } from "@/enums/DeviceEnum";
import { useAppStore } from "@/store"; import { useAppStore } from "@/store";

View File

@@ -1,4 +1,4 @@
import DeptAPI from "@/api/dept"; import DeptAPI from "@/api/system/dept";
import type { ISearchConfig } from "@/components/CURD/types"; import type { ISearchConfig } from "@/components/CURD/types";
const searchConfig: ISearchConfig = { const searchConfig: ISearchConfig = {

View File

@@ -57,7 +57,7 @@
@submit-click="handleSubmitClick" @submit-click="handleSubmitClick"
> >
<template #gender="scope"> <template #gender="scope">
<dictionary v-model="scope.formData[scope.prop]" code="gender" /> <Dict v-model="scope.formData[scope.prop]" code="gender" />
</template> </template>
</page-modal> </page-modal>
@@ -68,7 +68,7 @@
@submit-click="handleSubmitClick" @submit-click="handleSubmitClick"
> >
<template #gender="scope"> <template #gender="scope">
<dictionary v-model="scope.formData[scope.prop]" code="gender" /> <Dict v-model="scope.formData[scope.prop]" code="gender" />
</template> </template>
</page-modal> </page-modal>
</template> </template>
@@ -89,9 +89,9 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import UserAPI from "@/api/user"; import UserAPI from "@/api/system/user";
import DeptAPI from "@/api/dept"; import DeptAPI from "@/api/system/dept";
import RoleAPI from "@/api/role"; import RoleAPI from "@/api/system/role";
import type { IObject, IOperatData } from "@/components/CURD/types"; import type { IObject, IOperatData } from "@/components/CURD/types";
import usePage from "@/components/CURD/usePage"; import usePage from "@/components/CURD/usePage";
import addModalConfig from "./config/add"; import addModalConfig from "./config/add";

View File

@@ -6,7 +6,7 @@ const iconName = ref("edit");
<template> <template>
<div class="app-container"> <div class="app-container">
<el-link <el-link
href="https://gitee.com/youlaiorg/vue3-element-admin/blob/master/src/views/demo/icon-selector.vue" href="https://gitee.com/youlaiorg/vue3-element-admin/blob/master/src/views/demo/icon-select.vue"
type="primary" type="primary"
target="_blank" target="_blank"
class="mb-10" class="mb-10"

View File

@@ -1,4 +1,4 @@
import UserAPI from "@/api/user"; import UserAPI from "@/api/system/user";
import type { ISelectConfig } from "@/components/TableSelect/index.vue"; import type { ISelectConfig } from "@/components/TableSelect/index.vue";
const selectConfig: ISelectConfig = { const selectConfig: ISelectConfig = {

View File

@@ -1,8 +1,56 @@
<!-- 文件上传组件示例 --> <!-- 文件上传组件示例 -->
<script setup lang="ts"> <template>
import ImageUpload from "@/components/Upload/ImageUpload.vue"; <div class="app-container">
import FileUpload from "@/components/Upload/FileUpload.vue"; <el-link
href="https://gitee.com/youlaiorg/vue3-element-admin/blob/master/src/views/demo/upload.vue"
type="primary"
target="_blank"
class="mb-10"
>
示例源码 请点击>>>>
</el-link>
<el-form>
<el-form-item label="单图上传">
<SingleImageUpload v-model="picUrl" />
</el-form-item>
<el-form-item label="参数说明">
<el-table :data="singleImageUploadArgData" border>
<el-table-column prop="argsName" label="参数名称" width="300" />
<el-table-column prop="type" label="参数类型" width="200" />
<el-table-column prop="default" label="默认值" width="400" />
<el-table-column prop="desc" label="描述" width="300" />
</el-table>
</el-form-item>
<el-form-item label="多图上传">
<MultiImageUpload v-model="picUrls" />
</el-form-item>
<el-form-item label="参数说明">
<el-table :data="imageUploadArgData" border>
<el-table-column prop="argsName" label="参数名称" width="300" />
<el-table-column prop="type" label="参数类型" width="200" />
<el-table-column prop="default" label="默认值" width="400" />
<el-table-column prop="desc" label="描述" width="300" />
</el-table>
</el-form-item>
<el-form-item label="文件上传">
<FileUpload v-model="fileUrls" />
</el-form-item>
<el-form-item label="参数说明">
<el-table :data="fileUploadArgData" border>
<el-table-column prop="argsName" label="参数名称" width="300" />
<el-table-column prop="type" label="参数类型" width="200" />
<el-table-column prop="default" label="默认值" width="400" />
<el-table-column prop="desc" label="描述" width="300" />
</el-table>
</el-form-item>
</el-form>
</div>
</template>
<script setup lang="ts">
// 单图 // 单图
const picUrl = ref("https://s2.loli.net/2023/05/24/yNsxFC8rLHMZQcK.jpg"); const picUrl = ref("https://s2.loli.net/2023/05/24/yNsxFC8rLHMZQcK.jpg");
@@ -16,11 +64,11 @@ const singleImageUploadArgData = [
{ {
argsName: "size", argsName: "size",
type: "String", type: "String",
default: "148px", default: "150px",
desc: "图片上传组件的尺寸大小", desc: "图片上传组件的尺寸大小",
}, },
{ {
argsName: "maxSize", argsName: "max-size",
type: "Number", type: "Number",
default: "10", default: "10",
desc: "单个图片上传大小限制(单位M)", desc: "单个图片上传大小限制(单位M)",
@@ -92,10 +140,10 @@ const imageUploadArgData = [
desc: "是否显示上传按钮", desc: "是否显示上传按钮",
}, },
{ {
argsName: "upload-max-size", argsName: "max-size",
type: "Number", type: "Number",
default: "2 * 1024 * 1024", default: "10",
desc: "单个图片上传大小限制(单位byte)", desc: "单个图片上传大小限制(单位MB)",
}, },
{ {
argsName: "accept", argsName: "accept",
@@ -148,10 +196,10 @@ const fileUploadArgData = [
desc: "是否显示上传按钮", desc: "是否显示上传按钮",
}, },
{ {
argsName: "upload-max-size", argsName: "max-size",
type: "Number", type: "Number",
default: "2 * 1024 * 1024", default: "10",
desc: "单个文件上传大小限制(单位byte)", desc: "单个文件上传大小限制(单位MB)",
}, },
{ {
argsName: "accept", argsName: "accept",
@@ -203,53 +251,3 @@ const fileUploadArgData = [
}, },
]; ];
</script> </script>
<template>
<div class="app-container">
<el-link
href="https://gitee.com/youlaiorg/vue3-element-admin/blob/master/src/views/demo/upload.vue"
type="primary"
target="_blank"
class="mb-10"
>
示例源码 请点击>>>>
</el-link>
<el-form>
<el-form-item label="单图上传">
<SingleImageUpload v-model="picUrl" />
</el-form-item>
<el-form-item label="参数说明">
<el-table :data="singleImageUploadArgData" border>
<el-table-column prop="argsName" label="参数名称" width="300" />
<el-table-column prop="type" label="参数类型" width="200" />
<el-table-column prop="default" label="默认值" width="400" />
<el-table-column prop="desc" label="描述" width="300" />
</el-table>
</el-form-item>
<el-form-item label="多图上传">
<image-upload v-model="picUrls" />
</el-form-item>
<el-form-item label="参数说明">
<el-table :data="imageUploadArgData" border>
<el-table-column prop="argsName" label="参数名称" width="300" />
<el-table-column prop="type" label="参数类型" width="200" />
<el-table-column prop="default" label="默认值" width="400" />
<el-table-column prop="desc" label="描述" width="300" />
</el-table>
</el-form-item>
<el-form-item label="文件上传">
<file-upload v-model="fileUrls" />
</el-form-item>
<el-form-item label="参数说明">
<el-table :data="fileUploadArgData" border>
<el-table-column prop="argsName" label="参数名称" width="300" />
<el-table-column prop="type" label="参数类型" width="200" />
<el-table-column prop="default" label="默认值" width="400" />
<el-table-column prop="desc" label="描述" width="300" />
</el-table>
</el-form-item>
</el-form>
</div>
</template>

View File

@@ -77,17 +77,18 @@
:class="{ :class="{
'tip-message': message.type === 'tip', 'tip-message': message.type === 'tip',
message: message.type !== 'tip', message: message.type !== 'tip',
'message--sent': message.sender === userStore.user.username, 'message--sent': message.sender === userStore.userInfo.username,
'message--received': message.sender !== userStore.user.username, 'message--received':
message.sender !== userStore.userInfo.username,
}" }"
> >
<div v-if="message.type != 'tip'" class="message-content"> <div v-if="message.type != 'tip'" class="message-content">
<div <div
:class="{ :class="{
'message-sender': 'message-sender':
message.sender === userStore.user.username, message.sender === userStore.userInfo.username,
'message-receiver': 'message-receiver':
message.sender !== userStore.user.username, message.sender !== userStore.userInfo.username,
}" }"
> >
{{ message.sender }} {{ message.sender }}
@@ -131,7 +132,7 @@ const queneMessage = ref(
"hi , " + "hi , " +
receiver.value + receiver.value +
" , 我是" + " , 我是" +
userStore.user.username + userStore.userInfo.username +
" , 想和你交个朋友 ! " " , 想和你交个朋友 ! "
); );
@@ -206,7 +207,7 @@ function sendToAll() {
body: topicMessage.value, body: topicMessage.value,
}); });
messages.value.push({ messages.value.push({
sender: userStore.user.username, sender: userStore.userInfo.username,
content: topicMessage.value, content: topicMessage.value,
}); });
} }
@@ -219,7 +220,7 @@ function sendToUser() {
body: queneMessage.value, body: queneMessage.value,
}); });
messages.value.push({ messages.value.push({
sender: userStore.user.username, sender: userStore.userInfo.username,
content: queneMessage.value, content: queneMessage.value,
}); });
} }

View File

@@ -190,7 +190,7 @@
<el-input v-model="userProfileForm.nickname" /> <el-input v-model="userProfileForm.nickname" />
</el-form-item> </el-form-item>
<el-form-item label="性别"> <el-form-item label="性别">
<dictionary v-model="userProfileForm.gender" code="gender" /> <Dict v-model="userProfileForm.gender" code="gender" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -300,7 +300,7 @@ import UserAPI, {
MobileBindingForm, MobileBindingForm,
EmailBindingForm, EmailBindingForm,
UserProfileForm, UserProfileForm,
} from "@/api/user"; } from "@/api/system/user";
import FileAPI from "@/api/file"; import FileAPI from "@/api/file";

View File

@@ -1,7 +1,7 @@
<!-- 系统配置 --> <!-- 系统配置 -->
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="关键字" prop="keywords"> <el-form-item label="关键字" prop="keywords">
<el-input <el-input
@@ -28,7 +28,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<template #header> <template #header>
<el-button <el-button
v-hasPerm="['sys:config:add']" v-hasPerm="['sys:config:add']"
@@ -187,7 +187,7 @@ import ConfigAPI, {
ConfigPageVO, ConfigPageVO,
ConfigForm, ConfigForm,
ConfigPageQuery, ConfigPageQuery,
} from "@/api/config"; } from "@/api/system/config";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);
const dataFormRef = ref(ElForm); const dataFormRef = ref(ElForm);

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="关键字" prop="keywords"> <el-form-item label="关键字" prop="keywords">
<el-input <el-input
@@ -38,7 +38,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<template #header> <template #header>
<el-button <el-button
v-hasPerm="['sys:dept:add']" v-hasPerm="['sys:dept:add']"
@@ -186,7 +186,7 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import DeptAPI, { DeptVO, DeptForm, DeptQuery } from "@/api/dept"; import DeptAPI, { DeptVO, DeptForm, DeptQuery } from "@/api/system/dept";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);
const deptFormRef = ref(ElForm); const deptFormRef = ref(ElForm);

View File

@@ -1,7 +1,7 @@
<!-- 字典数据 --> <!-- 字典数据 -->
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container mt-5"> <div class="search-bar mt-5">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="关键字" prop="keywords"> <el-form-item label="关键字" prop="keywords">
<el-input <el-input
@@ -176,7 +176,7 @@ import DictDataAPI, {
DictDataPageQuery, DictDataPageQuery,
DictDataPageVO, DictDataPageVO,
DictDataForm, DictDataForm,
} from "@/api/dict-data"; } from "@/api/system/dict-data";
const route = useRoute(); const route = useRoute();

View File

@@ -1,7 +1,7 @@
<!-- 字典 --> <!-- 字典 -->
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="关键字" prop="keywords"> <el-form-item label="关键字" prop="keywords">
<el-input <el-input
@@ -172,7 +172,11 @@ defineOptions({
inherititems: false, inherititems: false,
}); });
import DictAPI, { DictPageQuery, DictPageVO, DictForm } from "@/api/dict"; import DictAPI, {
DictPageQuery,
DictPageVO,
DictForm,
} from "@/api/system/dict";
import router from "@/router"; import router from "@/router";

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item prop="keywords" label="关键字"> <el-form-item prop="keywords" label="关键字">
<el-input <el-input
@@ -84,7 +84,7 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import LogAPI, { LogPageVO, LogPageQuery } from "@/api/log"; import LogAPI, { LogPageVO, LogPageQuery } from "@/api/system/log";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="关键字" prop="keywords"> <el-form-item label="关键字" prop="keywords">
<el-input <el-input
@@ -23,7 +23,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<template #header> <template #header>
<el-button <el-button
v-hasPerm="['sys:menu:add']" v-hasPerm="['sys:menu:add']"
@@ -463,7 +463,7 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import MenuAPI, { MenuQuery, MenuForm, MenuVO } from "@/api/menu"; import MenuAPI, { MenuQuery, MenuForm, MenuVO } from "@/api/system/menu";
import { MenuTypeEnum } from "@/enums/MenuTypeEnum"; import { MenuTypeEnum } from "@/enums/MenuTypeEnum";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);

View File

@@ -53,7 +53,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import NoticeAPI, { NoticeDetailVO } from "@/api/notice"; import NoticeAPI, { NoticeDetailVO } from "@/api/system/notice";
const visible = ref(false); const visible = ref(false);
const notice = ref<NoticeDetailVO>({}); const notice = ref<NoticeDetailVO>({});

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form <el-form
ref="queryFormRef" ref="queryFormRef"
:model="queryParams" :model="queryParams"
@@ -40,7 +40,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<template #header> <template #header>
<el-button <el-button
v-hasPerm="['sys:notice:add']" v-hasPerm="['sys:notice:add']"
@@ -222,18 +222,10 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="通知类型" prop="type"> <el-form-item label="通知类型" prop="type">
<dictionary <Dict v-model="formData.type" type="button" code="notice_type" />
v-model="formData.type"
type="button"
code="notice_type"
/>
</el-form-item> </el-form-item>
<el-form-item label="通知等级" prop="level"> <el-form-item label="通知等级" prop="level">
<dictionary <Dict v-model="formData.level" type="button" code="notice_level" />
v-model="formData.level"
type="button"
code="notice_level"
/>
</el-form-item> </el-form-item>
<el-form-item label="目标类型" prop="targetType"> <el-form-item label="目标类型" prop="targetType">
<el-radio-group v-model="formData.targetType"> <el-radio-group v-model="formData.targetType">
@@ -283,8 +275,8 @@ import NoticeAPI, {
NoticePageVO, NoticePageVO,
NoticeForm, NoticeForm,
NoticePageQuery, NoticePageQuery,
} from "@/api/notice"; } from "@/api/system/notice";
import UserAPI from "@/api/user"; import UserAPI from "@/api/system/user";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);
const dataFormRef = ref(ElForm); const dataFormRef = ref(ElForm);

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="通知标题" prop="title"> <el-form-item label="通知标题" prop="title">
<el-input <el-input
@@ -27,7 +27,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<el-table <el-table
ref="dataTableRef" ref="dataTableRef"
v-loading="loading" v-loading="loading"
@@ -105,7 +105,7 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import NoticeAPI, { NoticePageVO, NoticePageQuery } from "@/api/notice"; import NoticeAPI, { NoticePageVO, NoticePageQuery } from "@/api/system/notice";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);
const noticeDetailRef = ref(); const noticeDetailRef = ref();

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item prop="keywords" label="关键字"> <el-form-item prop="keywords" label="关键字">
<el-input <el-input
@@ -24,7 +24,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<template #header> <template #header>
<el-button type="success" @click="handleOpenDialog()"> <el-button type="success" @click="handleOpenDialog()">
<template #icon><Plus /></template> <template #icon><Plus /></template>
@@ -237,8 +237,12 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import RoleAPI, { RolePageVO, RoleForm, RolePageQuery } from "@/api/role"; import RoleAPI, {
import MenuAPI from "@/api/menu"; RolePageVO,
RoleForm,
RolePageQuery,
} from "@/api/system/role";
import MenuAPI from "@/api/system/menu";
const queryFormRef = ref(ElForm); const queryFormRef = ref(ElForm);
const roleFormRef = ref(ElForm); const roleFormRef = ref(ElForm);

View File

@@ -21,7 +21,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import DeptAPI from "@/api/dept"; import DeptAPI from "@/api/system/dept";
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {
type: [Number], type: [Number],

View File

@@ -65,7 +65,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { type UploadUserFile } from "element-plus"; import { type UploadUserFile } from "element-plus";
import UserAPI from "@/api/user"; import UserAPI from "@/api/system/user";
const props = defineProps({ const props = defineProps({
visible: { visible: {

View File

@@ -9,7 +9,7 @@
<!-- 用户列表 --> <!-- 用户列表 -->
<el-col :lg="20" :xs="24"> <el-col :lg="20" :xs="24">
<div class="search-container"> <div class="search-bar">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="关键字" prop="keywords"> <el-form-item label="关键字" prop="keywords">
<el-input <el-input
@@ -59,7 +59,7 @@
</el-form> </el-form>
</div> </div>
<el-card shadow="never" class="table-container"> <el-card shadow="never" class="table-wrapper">
<template #header> <template #header>
<div class="flex-x-between"> <div class="flex-x-between">
<div> <div>
@@ -238,7 +238,7 @@
</el-form-item> </el-form-item>
<el-form-item label="性别" prop="gender"> <el-form-item label="性别" prop="gender">
<dictionary v-model="formData.gender" code="gender" /> <Dict v-model="formData.gender" code="gender" />
</el-form-item> </el-form-item>
<el-form-item label="角色" prop="roleIds"> <el-form-item label="角色" prop="roleIds">
@@ -302,9 +302,13 @@ defineOptions({
inheritAttrs: false, inheritAttrs: false,
}); });
import UserAPI, { UserForm, UserPageQuery, UserPageVO } from "@/api/user"; import UserAPI, {
import DeptAPI from "@/api/dept"; UserForm,
import RoleAPI from "@/api/role"; UserPageQuery,
UserPageVO,
} from "@/api/system/user";
import DeptAPI from "@/api/system/dept";
import RoleAPI from "@/api/system/role";
import DeptTree from "./dept-tree.vue"; import DeptTree from "./dept-tree.vue";
import UserImport from "./import.vue"; import UserImport from "./import.vue";