refactor: ♻️ eslint 代码规范调整
This commit is contained in:
@@ -2,9 +2,9 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const AUTH_BASE_URL = "/api/v1/auth";
|
const AUTH_BASE_URL = "/api/v1/auth";
|
||||||
|
|
||||||
class AuthAPI {
|
const AuthAPI = {
|
||||||
/** 登录 接口*/
|
/** 登录 接口*/
|
||||||
static login(data: LoginData) {
|
login(data: LoginData) {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("username", data.username);
|
formData.append("username", data.username);
|
||||||
formData.append("password", data.password);
|
formData.append("password", data.password);
|
||||||
@@ -18,24 +18,24 @@ class AuthAPI {
|
|||||||
"Content-Type": "multipart/form-data",
|
"Content-Type": "multipart/form-data",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 注销 接口*/
|
/** 注销 接口*/
|
||||||
static logout() {
|
logout() {
|
||||||
return request({
|
return request({
|
||||||
url: `${AUTH_BASE_URL}/logout`,
|
url: `${AUTH_BASE_URL}/logout`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取验证码 接口*/
|
/** 获取验证码 接口*/
|
||||||
static getCaptcha() {
|
getCaptcha() {
|
||||||
return request<any, CaptchaResult>({
|
return request<any, CaptchaResult>({
|
||||||
url: `${AUTH_BASE_URL}/captcha`,
|
url: `${AUTH_BASE_URL}/captcha`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default AuthAPI;
|
export default AuthAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,55 +2,55 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const GENERATOR_BASE_URL = "/api/v1/codegen";
|
const GENERATOR_BASE_URL = "/api/v1/codegen";
|
||||||
|
|
||||||
class GeneratorAPI {
|
const GeneratorAPI = {
|
||||||
/** 获取数据表分页列表 */
|
/** 获取数据表分页列表 */
|
||||||
static getTablePage(params: TablePageQuery) {
|
getTablePage(params: TablePageQuery) {
|
||||||
return request<any, PageResult<TablePageVO[]>>({
|
return request<any, PageResult<TablePageVO[]>>({
|
||||||
url: `${GENERATOR_BASE_URL}/table/page`,
|
url: `${GENERATOR_BASE_URL}/table/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: params,
|
params: params,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取代码生成配置 */
|
/** 获取代码生成配置 */
|
||||||
static getGenConfig(tableName: string) {
|
getGenConfig(tableName: string) {
|
||||||
return request<any, GenConfigForm>({
|
return request<any, GenConfigForm>({
|
||||||
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取代码生成配置 */
|
/** 获取代码生成配置 */
|
||||||
static saveGenConfig(tableName: string, data: GenConfigForm) {
|
saveGenConfig(tableName: string, data: GenConfigForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取代码生成预览数据 */
|
/** 获取代码生成预览数据 */
|
||||||
static getPreviewData(tableName: string) {
|
getPreviewData(tableName: string) {
|
||||||
return request<any, GeneratorPreviewVO[]>({
|
return request<any, GeneratorPreviewVO[]>({
|
||||||
url: `${GENERATOR_BASE_URL}/${tableName}/preview`,
|
url: `${GENERATOR_BASE_URL}/${tableName}/preview`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 重置代码生成配置 */
|
/** 重置代码生成配置 */
|
||||||
static resetGenConfig(tableName: string) {
|
resetGenConfig(tableName: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载 ZIP 文件
|
* 下载 ZIP 文件
|
||||||
* @param url
|
* @param url
|
||||||
* @param fileName
|
* @param fileName
|
||||||
*/
|
*/
|
||||||
static download(tableName: string) {
|
download(tableName: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${GENERATOR_BASE_URL}/${tableName}/download`,
|
url: `${GENERATOR_BASE_URL}/${tableName}/download`,
|
||||||
method: "get",
|
method: "get",
|
||||||
@@ -68,8 +68,8 @@ class GeneratorAPI {
|
|||||||
a.click();
|
a.click();
|
||||||
window.URL.revokeObjectURL(url);
|
window.URL.revokeObjectURL(url);
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default GeneratorAPI;
|
export default GeneratorAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,36 +2,36 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const CONFIG_BASE_URL = "/api/v1/config";
|
const CONFIG_BASE_URL = "/api/v1/config";
|
||||||
|
|
||||||
class ConfigAPI {
|
const ConfigAPI = {
|
||||||
/** 获取系统配置分页数据 */
|
/** 获取系统配置分页数据 */
|
||||||
static getPage(queryParams?: ConfigPageQuery) {
|
getPage(queryParams?: ConfigPageQuery) {
|
||||||
return request<any, PageResult<ConfigPageVO[]>>({
|
return request<any, PageResult<ConfigPageVO[]>>({
|
||||||
url: `${CONFIG_BASE_URL}/page`,
|
url: `${CONFIG_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
/**
|
/**
|
||||||
* 获取系统配置表单数据
|
* 获取系统配置表单数据
|
||||||
*
|
*
|
||||||
* @param id ConfigID
|
* @param id ConfigID
|
||||||
* @returns Config表单数据
|
* @returns Config表单数据
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, ConfigForm>({
|
return request<any, ConfigForm>({
|
||||||
url: `${CONFIG_BASE_URL}/${id}/form`,
|
url: `${CONFIG_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 添加系统配置*/
|
/** 添加系统配置*/
|
||||||
static add(data: ConfigForm) {
|
add(data: ConfigForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${CONFIG_BASE_URL}`,
|
url: `${CONFIG_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新系统配置
|
* 更新系统配置
|
||||||
@@ -39,33 +39,33 @@ class ConfigAPI {
|
|||||||
* @param id ConfigID
|
* @param id ConfigID
|
||||||
* @param data Config表单数据
|
* @param data Config表单数据
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: ConfigForm) {
|
update(id: number, data: ConfigForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${CONFIG_BASE_URL}/${id}`,
|
url: `${CONFIG_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除系统配置
|
* 删除系统配置
|
||||||
*
|
*
|
||||||
* @param ids 系统配置ID
|
* @param ids 系统配置ID
|
||||||
*/
|
*/
|
||||||
static deleteById(id: number) {
|
deleteById(id: number) {
|
||||||
return request({
|
return request({
|
||||||
url: `${CONFIG_BASE_URL}/${id}`,
|
url: `${CONFIG_BASE_URL}/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
static refreshCache() {
|
refreshCache() {
|
||||||
return request({
|
return request({
|
||||||
url: `${CONFIG_BASE_URL}`,
|
url: `${CONFIG_BASE_URL}`,
|
||||||
method: "patch",
|
method: "patch",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default ConfigAPI;
|
export default ConfigAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,28 +2,28 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const DEPT_BASE_URL = "/api/v1/dept";
|
const DEPT_BASE_URL = "/api/v1/dept";
|
||||||
|
|
||||||
class DeptAPI {
|
const DeptAPI = {
|
||||||
/**
|
/**
|
||||||
* 获取部门列表
|
* 获取部门列表
|
||||||
*
|
*
|
||||||
* @param queryParams 查询参数(可选)
|
* @param queryParams 查询参数(可选)
|
||||||
* @returns 部门树形表格数据
|
* @returns 部门树形表格数据
|
||||||
*/
|
*/
|
||||||
static getList(queryParams?: DeptQuery) {
|
getList(queryParams?: DeptQuery) {
|
||||||
return request<any, DeptVO[]>({
|
return request<any, DeptVO[]>({
|
||||||
url: `${DEPT_BASE_URL}`,
|
url: `${DEPT_BASE_URL}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取部门下拉列表 */
|
/** 获取部门下拉列表 */
|
||||||
static getOptions() {
|
getOptions() {
|
||||||
return request<any, OptionType[]>({
|
return request<any, OptionType[]>({
|
||||||
url: `${DEPT_BASE_URL}/options`,
|
url: `${DEPT_BASE_URL}/options`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取部门表单数据
|
* 获取部门表单数据
|
||||||
@@ -31,12 +31,12 @@ class DeptAPI {
|
|||||||
* @param id 部门ID
|
* @param id 部门ID
|
||||||
* @returns 部门表单数据
|
* @returns 部门表单数据
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, DeptForm>({
|
return request<any, DeptForm>({
|
||||||
url: `${DEPT_BASE_URL}/${id}/form`,
|
url: `${DEPT_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增部门
|
* 新增部门
|
||||||
@@ -44,13 +44,13 @@ class DeptAPI {
|
|||||||
* @param data 部门表单数据
|
* @param data 部门表单数据
|
||||||
* @returns 请求结果
|
* @returns 请求结果
|
||||||
*/
|
*/
|
||||||
static add(data: DeptForm) {
|
add(data: DeptForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DEPT_BASE_URL}`,
|
url: `${DEPT_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改部门
|
* 修改部门
|
||||||
@@ -59,13 +59,13 @@ class DeptAPI {
|
|||||||
* @param data 部门表单数据
|
* @param data 部门表单数据
|
||||||
* @returns 请求结果
|
* @returns 请求结果
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: DeptForm) {
|
update(id: number, data: DeptForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DEPT_BASE_URL}/${id}`,
|
url: `${DEPT_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除部门
|
* 删除部门
|
||||||
@@ -73,13 +73,13 @@ class DeptAPI {
|
|||||||
* @param ids 部门ID,多个以英文逗号(,)分隔
|
* @param ids 部门ID,多个以英文逗号(,)分隔
|
||||||
* @returns 请求结果
|
* @returns 请求结果
|
||||||
*/
|
*/
|
||||||
static deleteByIds(ids: string) {
|
deleteByIds(ids: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DEPT_BASE_URL}/${ids}`,
|
url: `${DEPT_BASE_URL}/${ids}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default DeptAPI;
|
export default DeptAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,20 +2,20 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const DICT_DATA_BASE_URL = "/api/v1/dict-data";
|
const DICT_DATA_BASE_URL = "/api/v1/dict-data";
|
||||||
|
|
||||||
class DictDataAPI {
|
const DictDataAPI = {
|
||||||
/**
|
/**
|
||||||
* 获取字典分页列表
|
* 获取字典分页列表
|
||||||
*
|
*
|
||||||
* @param queryParams 查询参数
|
* @param queryParams 查询参数
|
||||||
* @returns 字典分页结果
|
* @returns 字典分页结果
|
||||||
*/
|
*/
|
||||||
static getPage(queryParams: DictDataPageQuery) {
|
getPage(queryParams: DictDataPageQuery) {
|
||||||
return request<any, PageResult<DictDataPageVO[]>>({
|
return request<any, PageResult<DictDataPageVO[]>>({
|
||||||
url: `${DICT_DATA_BASE_URL}/page`,
|
url: `${DICT_DATA_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取字典数据表单
|
* 获取字典数据表单
|
||||||
@@ -23,25 +23,25 @@ class DictDataAPI {
|
|||||||
* @param id 字典ID
|
* @param id 字典ID
|
||||||
* @returns 字典数据表单
|
* @returns 字典数据表单
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, ResponseData<DictDataForm>>({
|
return request<any, ResponseData<DictDataForm>>({
|
||||||
url: `${DICT_DATA_BASE_URL}/${id}/form`,
|
url: `${DICT_DATA_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增字典数据
|
* 新增字典数据
|
||||||
*
|
*
|
||||||
* @param data 字典数据
|
* @param data 字典数据
|
||||||
*/
|
*/
|
||||||
static add(data: DictDataForm) {
|
add(data: DictDataForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DICT_DATA_BASE_URL}`,
|
url: `${DICT_DATA_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改字典数据
|
* 修改字典数据
|
||||||
@@ -49,25 +49,25 @@ class DictDataAPI {
|
|||||||
* @param id 字典ID
|
* @param id 字典ID
|
||||||
* @param data 字典数据
|
* @param data 字典数据
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: DictDataForm) {
|
update(id: number, data: DictDataForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DICT_DATA_BASE_URL}/${id}`,
|
url: `${DICT_DATA_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除字典
|
* 删除字典
|
||||||
*
|
*
|
||||||
* @param ids 字典ID,多个以英文逗号(,)分隔
|
* @param ids 字典ID,多个以英文逗号(,)分隔
|
||||||
*/
|
*/
|
||||||
static deleteByIds(ids: string) {
|
deleteByIds(ids: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DICT_DATA_BASE_URL}/${ids}`,
|
url: `${DICT_DATA_BASE_URL}/${ids}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取字典的数据项
|
* 获取字典的数据项
|
||||||
@@ -75,13 +75,13 @@ class DictDataAPI {
|
|||||||
* @param dictCode 字典编码
|
* @param dictCode 字典编码
|
||||||
* @returns 字典数据项
|
* @returns 字典数据项
|
||||||
*/
|
*/
|
||||||
static getOptions(dictCode: string) {
|
getOptions(dictCode: string) {
|
||||||
return request<any, OptionType[]>({
|
return request<any, OptionType[]>({
|
||||||
url: `${DICT_DATA_BASE_URL}/${dictCode}/options`,
|
url: `${DICT_DATA_BASE_URL}/${dictCode}/options`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default DictDataAPI;
|
export default DictDataAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,20 +2,20 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const DICT_BASE_URL = "/api/v1/dict";
|
const DICT_BASE_URL = "/api/v1/dict";
|
||||||
|
|
||||||
class DictAPI {
|
const DictAPI = {
|
||||||
/**
|
/**
|
||||||
* 获取字典分页列表
|
* 获取字典分页列表
|
||||||
*
|
*
|
||||||
* @param queryParams 查询参数
|
* @param queryParams 查询参数
|
||||||
* @returns 字典分页结果
|
* @returns 字典分页结果
|
||||||
*/
|
*/
|
||||||
static getPage(queryParams: DictPageQuery) {
|
getPage(queryParams: DictPageQuery) {
|
||||||
return request<any, PageResult<DictPageVO[]>>({
|
return request<any, PageResult<DictPageVO[]>>({
|
||||||
url: `${DICT_BASE_URL}/page`,
|
url: `${DICT_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取字典表单数据
|
* 获取字典表单数据
|
||||||
@@ -23,25 +23,25 @@ class DictAPI {
|
|||||||
* @param id 字典ID
|
* @param id 字典ID
|
||||||
* @returns 字典表单数据
|
* @returns 字典表单数据
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, ResponseData<DictForm>>({
|
return request<any, ResponseData<DictForm>>({
|
||||||
url: `${DICT_BASE_URL}/${id}/form`,
|
url: `${DICT_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增字典
|
* 新增字典
|
||||||
*
|
*
|
||||||
* @param data 字典表单数据
|
* @param data 字典表单数据
|
||||||
*/
|
*/
|
||||||
static add(data: DictForm) {
|
add(data: DictForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DICT_BASE_URL}`,
|
url: `${DICT_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改字典
|
* 修改字典
|
||||||
@@ -49,38 +49,38 @@ class DictAPI {
|
|||||||
* @param id 字典ID
|
* @param id 字典ID
|
||||||
* @param data 字典表单数据
|
* @param data 字典表单数据
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: DictForm) {
|
update(id: number, data: DictForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DICT_BASE_URL}/${id}`,
|
url: `${DICT_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除字典
|
* 删除字典
|
||||||
*
|
*
|
||||||
* @param ids 字典ID,多个以英文逗号(,)分隔
|
* @param ids 字典ID,多个以英文逗号(,)分隔
|
||||||
*/
|
*/
|
||||||
static deleteByIds(ids: string) {
|
deleteByIds(ids: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${DICT_BASE_URL}/${ids}`,
|
url: `${DICT_BASE_URL}/${ids}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取字典列表
|
* 获取字典列表
|
||||||
*
|
*
|
||||||
* @returns 字典列表
|
* @returns 字典列表
|
||||||
*/
|
*/
|
||||||
static getList() {
|
getList() {
|
||||||
return request<any, OptionType[]>({
|
return request<any, OptionType[]>({
|
||||||
url: `${DICT_BASE_URL}/list`,
|
url: `${DICT_BASE_URL}/list`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default DictAPI;
|
export default DictAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
|
|
||||||
class FileAPI {
|
const FileAPI = {
|
||||||
/**
|
/**
|
||||||
* 文件上传地址
|
* 文件上传地址
|
||||||
*/
|
*/
|
||||||
static uploadUrl = import.meta.env.VITE_APP_BASE_API + "/api/v1/files";
|
uploadUrl: import.meta.env.VITE_APP_BASE_API + "/api/v1/files",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传文件
|
* 上传文件
|
||||||
*
|
*
|
||||||
* @param file
|
* @param file
|
||||||
*/
|
*/
|
||||||
static upload(file: File) {
|
upload(file: File) {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("file", file);
|
formData.append("file", file);
|
||||||
return request<any, FileInfo>({
|
return request<any, FileInfo>({
|
||||||
@@ -22,27 +22,27 @@ class FileAPI {
|
|||||||
"Content-Type": "multipart/form-data",
|
"Content-Type": "multipart/form-data",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除文件
|
* 删除文件
|
||||||
*
|
*
|
||||||
* @param filePath 文件完整路径
|
* @param filePath 文件完整路径
|
||||||
*/
|
*/
|
||||||
static deleteByPath(filePath?: string) {
|
deleteByPath(filePath?: string) {
|
||||||
return request({
|
return request({
|
||||||
url: "/api/v1/files",
|
url: "/api/v1/files",
|
||||||
method: "delete",
|
method: "delete",
|
||||||
params: { filePath: filePath },
|
params: { filePath: filePath },
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载文件
|
* 下载文件
|
||||||
* @param url
|
* @param url
|
||||||
* @param fileName
|
* @param fileName
|
||||||
*/
|
*/
|
||||||
static downloadFile(url: string, fileName?: string) {
|
downloadFile(url: string, fileName?: string) {
|
||||||
return request({
|
return request({
|
||||||
url: url,
|
url: url,
|
||||||
method: "get",
|
method: "get",
|
||||||
@@ -56,8 +56,8 @@ class FileAPI {
|
|||||||
a.click();
|
a.click();
|
||||||
window.URL.revokeObjectURL(url);
|
window.URL.revokeObjectURL(url);
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default FileAPI;
|
export default FileAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,19 +2,19 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const LOG_BASE_URL = "/api/v1/logs";
|
const LOG_BASE_URL = "/api/v1/logs";
|
||||||
|
|
||||||
class LogAPI {
|
const LogAPI = {
|
||||||
/**
|
/**
|
||||||
* 获取日志分页列表
|
* 获取日志分页列表
|
||||||
*
|
*
|
||||||
* @param queryParams 查询参数
|
* @param queryParams 查询参数
|
||||||
*/
|
*/
|
||||||
static getPage(queryParams: LogPageQuery) {
|
getPage(queryParams: LogPageQuery) {
|
||||||
return request<any, PageResult<LogPageVO[]>>({
|
return request<any, PageResult<LogPageVO[]>>({
|
||||||
url: `${LOG_BASE_URL}/page`,
|
url: `${LOG_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取访问趋势
|
* 获取访问趋势
|
||||||
@@ -22,13 +22,13 @@ class LogAPI {
|
|||||||
* @param queryParams
|
* @param queryParams
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static getVisitTrend(queryParams: VisitTrendQuery) {
|
getVisitTrend(queryParams: VisitTrendQuery) {
|
||||||
return request<any, VisitTrendVO>({
|
return request<any, VisitTrendVO>({
|
||||||
url: `${LOG_BASE_URL}/visit-trend`,
|
url: `${LOG_BASE_URL}/visit-trend`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取访问统计
|
* 获取访问统计
|
||||||
@@ -36,13 +36,13 @@ class LogAPI {
|
|||||||
* @param queryParams
|
* @param queryParams
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static getVisitStats() {
|
getVisitStats() {
|
||||||
return request<any, VisitStatsVO[]>({
|
return request<any, VisitStatsVO[]>({
|
||||||
url: `${LOG_BASE_URL}/visit-stats`,
|
url: `${LOG_BASE_URL}/visit-stats`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default LogAPI;
|
export default LogAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import request from "@/utils/request";
|
|||||||
// 菜单基础URL
|
// 菜单基础URL
|
||||||
const MENU_BASE_URL = "/api/v1/menus";
|
const MENU_BASE_URL = "/api/v1/menus";
|
||||||
|
|
||||||
class MenuAPI {
|
const MenuAPI = {
|
||||||
/**
|
/**
|
||||||
* 获取当前用户的路由列表
|
* 获取当前用户的路由列表
|
||||||
* <p/>
|
* <p/>
|
||||||
@@ -10,12 +10,12 @@ class MenuAPI {
|
|||||||
*
|
*
|
||||||
* @returns 路由列表
|
* @returns 路由列表
|
||||||
*/
|
*/
|
||||||
static getRoutes() {
|
getRoutes() {
|
||||||
return request<any, RouteVO[]>({
|
return request<any, RouteVO[]>({
|
||||||
url: `${MENU_BASE_URL}/routes`,
|
url: `${MENU_BASE_URL}/routes`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单树形列表
|
* 获取菜单树形列表
|
||||||
@@ -23,38 +23,38 @@ class MenuAPI {
|
|||||||
* @param queryParams 查询参数
|
* @param queryParams 查询参数
|
||||||
* @returns 菜单树形列表
|
* @returns 菜单树形列表
|
||||||
*/
|
*/
|
||||||
static getList(queryParams: MenuQuery) {
|
getList(queryParams: MenuQuery) {
|
||||||
return request<any, MenuVO[]>({
|
return request<any, MenuVO[]>({
|
||||||
url: `${MENU_BASE_URL}`,
|
url: `${MENU_BASE_URL}`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单下拉数据源
|
* 获取菜单下拉数据源
|
||||||
*
|
*
|
||||||
* @returns 菜单下拉数据源
|
* @returns 菜单下拉数据源
|
||||||
*/
|
*/
|
||||||
static getOptions(onlyParent?: boolean) {
|
getOptions(onlyParent?: boolean) {
|
||||||
return request<any, OptionType[]>({
|
return request<any, OptionType[]>({
|
||||||
url: `${MENU_BASE_URL}/options`,
|
url: `${MENU_BASE_URL}/options`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { onlyParent: onlyParent },
|
params: { onlyParent: onlyParent },
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单表单数据
|
* 获取菜单表单数据
|
||||||
*
|
*
|
||||||
* @param id 菜单ID
|
* @param id 菜单ID
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, MenuForm>({
|
return request<any, MenuForm>({
|
||||||
url: `${MENU_BASE_URL}/${id}/form`,
|
url: `${MENU_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加菜单
|
* 添加菜单
|
||||||
@@ -62,13 +62,13 @@ class MenuAPI {
|
|||||||
* @param data 菜单表单数据
|
* @param data 菜单表单数据
|
||||||
* @returns 请求结果
|
* @returns 请求结果
|
||||||
*/
|
*/
|
||||||
static add(data: MenuForm) {
|
add(data: MenuForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${MENU_BASE_URL}`,
|
url: `${MENU_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改菜单
|
* 修改菜单
|
||||||
@@ -77,13 +77,13 @@ class MenuAPI {
|
|||||||
* @param data 菜单表单数据
|
* @param data 菜单表单数据
|
||||||
* @returns 请求结果
|
* @returns 请求结果
|
||||||
*/
|
*/
|
||||||
static update(id: string, data: MenuForm) {
|
update(id: string, data: MenuForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${MENU_BASE_URL}/${id}`,
|
url: `${MENU_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除菜单
|
* 删除菜单
|
||||||
@@ -91,17 +91,17 @@ class MenuAPI {
|
|||||||
* @param id 菜单ID
|
* @param id 菜单ID
|
||||||
* @returns 请求结果
|
* @returns 请求结果
|
||||||
*/
|
*/
|
||||||
static deleteById(id: number) {
|
deleteById(id: number) {
|
||||||
return request({
|
return request({
|
||||||
url: `${MENU_BASE_URL}/${id}`,
|
url: `${MENU_BASE_URL}/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default MenuAPI;
|
export default MenuAPI;
|
||||||
|
|
||||||
import { MenuTypeEnum } from "@/enums/MenuTypeEnum";
|
import type { MenuTypeEnum } from "@/enums/MenuTypeEnum";
|
||||||
|
|
||||||
/** 菜单查询参数 */
|
/** 菜单查询参数 */
|
||||||
export interface MenuQuery {
|
export interface MenuQuery {
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const NOTICE_BASE_URL = "/api/v1/notices";
|
const NOTICE_BASE_URL = "/api/v1/notices";
|
||||||
|
|
||||||
class NoticeAPI {
|
const NoticeAPI = {
|
||||||
/** 获取通知公告分页数据 */
|
/** 获取通知公告分页数据 */
|
||||||
static getPage(queryParams?: NoticePageQuery) {
|
getPage(queryParams?: NoticePageQuery) {
|
||||||
return request<any, PageResult<NoticePageVO[]>>({
|
return request<any, PageResult<NoticePageVO[]>>({
|
||||||
url: `${NOTICE_BASE_URL}/page`,
|
url: `${NOTICE_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取通知公告表单数据
|
* 获取通知公告表单数据
|
||||||
@@ -18,12 +18,12 @@ class NoticeAPI {
|
|||||||
* @param id NoticeID
|
* @param id NoticeID
|
||||||
* @returns Notice表单数据
|
* @returns Notice表单数据
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, NoticeForm>({
|
return request<any, NoticeForm>({
|
||||||
url: `${NOTICE_BASE_URL}/${id}/form`,
|
url: `${NOTICE_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加通知公告
|
* 添加通知公告
|
||||||
@@ -31,13 +31,13 @@ class NoticeAPI {
|
|||||||
* @param data Notice表单数据
|
* @param data Notice表单数据
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static add(data: NoticeForm) {
|
add(data: NoticeForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${NOTICE_BASE_URL}`,
|
url: `${NOTICE_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新通知公告
|
* 更新通知公告
|
||||||
@@ -45,25 +45,25 @@ class NoticeAPI {
|
|||||||
* @param id NoticeID
|
* @param id NoticeID
|
||||||
* @param data Notice表单数据
|
* @param data Notice表单数据
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: NoticeForm) {
|
update(id: number, data: NoticeForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${NOTICE_BASE_URL}/${id}`,
|
url: `${NOTICE_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除通知公告,多个以英文逗号(,)分割
|
* 批量删除通知公告,多个以英文逗号(,)分割
|
||||||
*
|
*
|
||||||
* @param ids 通知公告ID字符串,多个以英文逗号(,)分割
|
* @param ids 通知公告ID字符串,多个以英文逗号(,)分割
|
||||||
*/
|
*/
|
||||||
static deleteByIds(ids: string) {
|
deleteByIds(ids: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${NOTICE_BASE_URL}/${ids}`,
|
url: `${NOTICE_BASE_URL}/${ids}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发布通知
|
* 发布通知
|
||||||
@@ -71,12 +71,12 @@ class NoticeAPI {
|
|||||||
* @param id 被发布的通知公告id
|
* @param id 被发布的通知公告id
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static publish(id: number) {
|
publish(id: number) {
|
||||||
return request({
|
return request({
|
||||||
url: `${NOTICE_BASE_URL}/${id}/publish`,
|
url: `${NOTICE_BASE_URL}/${id}/publish`,
|
||||||
method: "patch",
|
method: "patch",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 撤回通知
|
* 撤回通知
|
||||||
@@ -84,41 +84,41 @@ class NoticeAPI {
|
|||||||
* @param id 撤回的通知id
|
* @param id 撤回的通知id
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static revoke(id: number) {
|
revoke(id: number) {
|
||||||
return request({
|
return request({
|
||||||
url: `${NOTICE_BASE_URL}/${id}/revoke`,
|
url: `${NOTICE_BASE_URL}/${id}/revoke`,
|
||||||
method: "patch",
|
method: "patch",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
/**
|
/**
|
||||||
* 查看通知
|
* 查看通知
|
||||||
*
|
*
|
||||||
* @param id
|
* @param id
|
||||||
*/
|
*/
|
||||||
static getDetail(id: string) {
|
getDetail(id: string) {
|
||||||
return request<any, NoticeDetailVO>({
|
return request<any, NoticeDetailVO>({
|
||||||
url: `${NOTICE_BASE_URL}/${id}/detail`,
|
url: `${NOTICE_BASE_URL}/${id}/detail`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/* 全部已读 */
|
/* 全部已读 */
|
||||||
static readAll() {
|
readAll() {
|
||||||
return request({
|
return request({
|
||||||
url: `${NOTICE_BASE_URL}/read-all`,
|
url: `${NOTICE_BASE_URL}/read-all`,
|
||||||
method: "put",
|
method: "put",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取我的通知分页列表 */
|
/** 获取我的通知分页列表 */
|
||||||
static getMyNoticePage(queryParams?: NoticePageQuery) {
|
getMyNoticePage(queryParams?: NoticePageQuery) {
|
||||||
return request<any, PageResult<NoticePageVO[]>>({
|
return request<any, PageResult<NoticePageVO[]>>({
|
||||||
url: `${NOTICE_BASE_URL}/my-page`,
|
url: `${NOTICE_BASE_URL}/my-page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default NoticeAPI;
|
export default NoticeAPI;
|
||||||
|
|
||||||
@@ -197,27 +197,3 @@ export interface NoticeDetailVO {
|
|||||||
/** 发布状态 */
|
/** 发布状态 */
|
||||||
publishStatus?: number;
|
publishStatus?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 用户通知分页列表 */
|
|
||||||
interface UserNoticePageVO {
|
|
||||||
/** 通知ID */
|
|
||||||
id: number;
|
|
||||||
|
|
||||||
/** 通知标题 */
|
|
||||||
title: string;
|
|
||||||
|
|
||||||
/** 通知类型 */
|
|
||||||
typeLabel: string;
|
|
||||||
|
|
||||||
/** 发布人姓名 */
|
|
||||||
publisherName: string;
|
|
||||||
|
|
||||||
/** 通知级别 */
|
|
||||||
levelLabel: string;
|
|
||||||
|
|
||||||
/** 发布时间 */
|
|
||||||
publishTime: string;
|
|
||||||
|
|
||||||
/** 是否已读 */
|
|
||||||
isReadLabel: string;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -2,36 +2,35 @@ import request from "@/utils/request";
|
|||||||
|
|
||||||
const ROLE_BASE_URL = "/api/v1/roles";
|
const ROLE_BASE_URL = "/api/v1/roles";
|
||||||
|
|
||||||
class RoleAPI {
|
const RoleAPI = {
|
||||||
/** 获取角色分页数据 */
|
/** 获取角色分页数据 */
|
||||||
static getPage(queryParams?: RolePageQuery) {
|
getPage(queryParams?: RolePageQuery) {
|
||||||
return request<any, PageResult<RolePageVO[]>>({
|
return request<any, PageResult<RolePageVO[]>>({
|
||||||
url: `${ROLE_BASE_URL}/page`,
|
url: `${ROLE_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取角色下拉数据源 */
|
/** 获取角色下拉数据源 */
|
||||||
static getOptions() {
|
getOptions() {
|
||||||
return request<any, OptionType[]>({
|
return request<any, OptionType[]>({
|
||||||
url: `${ROLE_BASE_URL}/options`,
|
url: `${ROLE_BASE_URL}/options`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取角色的菜单ID集合
|
* 获取角色的菜单ID集合
|
||||||
*
|
*
|
||||||
* @param roleId 角色ID
|
* @param roleId 角色ID
|
||||||
* @returns 角色的菜单ID集合
|
* @returns 角色的菜单ID集合
|
||||||
*/
|
*/
|
||||||
static getRoleMenuIds(roleId: number) {
|
getRoleMenuIds(roleId: number) {
|
||||||
return request<any, number[]>({
|
return request<any, number[]>({
|
||||||
url: `${ROLE_BASE_URL}/${roleId}/menuIds`,
|
url: `${ROLE_BASE_URL}/${roleId}/menuIds`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分配菜单权限
|
* 分配菜单权限
|
||||||
@@ -39,13 +38,13 @@ class RoleAPI {
|
|||||||
* @param roleId 角色ID
|
* @param roleId 角色ID
|
||||||
* @param data 菜单ID集合
|
* @param data 菜单ID集合
|
||||||
*/
|
*/
|
||||||
static updateRoleMenus(roleId: number, data: number[]) {
|
updateRoleMenus(roleId: number, data: number[]) {
|
||||||
return request({
|
return request({
|
||||||
url: `${ROLE_BASE_URL}/${roleId}/menus`,
|
url: `${ROLE_BASE_URL}/${roleId}/menus`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取角色表单数据
|
* 获取角色表单数据
|
||||||
@@ -53,21 +52,21 @@ class RoleAPI {
|
|||||||
* @param id 角色ID
|
* @param id 角色ID
|
||||||
* @returns 角色表单数据
|
* @returns 角色表单数据
|
||||||
*/
|
*/
|
||||||
static getFormData(id: number) {
|
getFormData(id: number) {
|
||||||
return request<any, RoleForm>({
|
return request<any, RoleForm>({
|
||||||
url: `${ROLE_BASE_URL}/${id}/form`,
|
url: `${ROLE_BASE_URL}/${id}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 添加角色 */
|
/** 添加角色 */
|
||||||
static add(data: RoleForm) {
|
add(data: RoleForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${ROLE_BASE_URL}`,
|
url: `${ROLE_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新角色
|
* 更新角色
|
||||||
@@ -75,26 +74,26 @@ class RoleAPI {
|
|||||||
* @param id 角色ID
|
* @param id 角色ID
|
||||||
* @param data 角色表单数据
|
* @param data 角色表单数据
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: RoleForm) {
|
update(id: number, data: RoleForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${ROLE_BASE_URL}/${id}`,
|
url: `${ROLE_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除角色,多个以英文逗号(,)分割
|
* 批量删除角色,多个以英文逗号(,)分割
|
||||||
*
|
*
|
||||||
* @param ids 角色ID字符串,多个以英文逗号(,)分割
|
* @param ids 角色ID字符串,多个以英文逗号(,)分割
|
||||||
*/
|
*/
|
||||||
static deleteByIds(ids: string) {
|
deleteByIds(ids: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${ROLE_BASE_URL}/${ids}`,
|
url: `${ROLE_BASE_URL}/${ids}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default RoleAPI;
|
export default RoleAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +1,32 @@
|
|||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import { AxiosPromise, AxiosResponse } from "axios";
|
|
||||||
|
|
||||||
const USER_BASE_URL = "/api/v1/users";
|
const USER_BASE_URL = "/api/v1/users";
|
||||||
|
|
||||||
class UserAPI {
|
const UserAPI = {
|
||||||
/**
|
/**
|
||||||
* 获取当前登录用户信息
|
* 获取当前登录用户信息
|
||||||
*
|
*
|
||||||
* @returns 登录用户昵称、头像信息,包括角色和权限
|
* @returns 登录用户昵称、头像信息,包括角色和权限
|
||||||
*/
|
*/
|
||||||
static getInfo() {
|
getInfo() {
|
||||||
return request<any, UserInfo>({
|
return request<any, UserInfo>({
|
||||||
url: `${USER_BASE_URL}/me`,
|
url: `${USER_BASE_URL}/me`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户分页列表
|
* 获取用户分页列表
|
||||||
*
|
*
|
||||||
* @param queryParams 查询参数
|
* @param queryParams 查询参数
|
||||||
*/
|
*/
|
||||||
static getPage(queryParams: UserPageQuery) {
|
getPage(queryParams: UserPageQuery) {
|
||||||
return request<any, PageResult<UserPageVO[]>>({
|
return request<any, PageResult<UserPageVO[]>>({
|
||||||
url: `${USER_BASE_URL}/page`,
|
url: `${USER_BASE_URL}/page`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户表单详情
|
* 获取用户表单详情
|
||||||
@@ -35,25 +34,25 @@ class UserAPI {
|
|||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
* @returns 用户表单详情
|
* @returns 用户表单详情
|
||||||
*/
|
*/
|
||||||
static getFormData(userId: number) {
|
getFormData(userId: number) {
|
||||||
return request<any, UserForm>({
|
return request<any, UserForm>({
|
||||||
url: `${USER_BASE_URL}/${userId}/form`,
|
url: `${USER_BASE_URL}/${userId}/form`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加用户
|
* 添加用户
|
||||||
*
|
*
|
||||||
* @param data 用户表单数据
|
* @param data 用户表单数据
|
||||||
*/
|
*/
|
||||||
static add(data: UserForm) {
|
add(data: UserForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}`,
|
url: `${USER_BASE_URL}`,
|
||||||
method: "post",
|
method: "post",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户
|
* 修改用户
|
||||||
@@ -61,13 +60,13 @@ class UserAPI {
|
|||||||
* @param id 用户ID
|
* @param id 用户ID
|
||||||
* @param data 用户表单数据
|
* @param data 用户表单数据
|
||||||
*/
|
*/
|
||||||
static update(id: number, data: UserForm) {
|
update(id: number, data: UserForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/${id}`,
|
url: `${USER_BASE_URL}/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户密码
|
* 修改用户密码
|
||||||
@@ -75,48 +74,48 @@ class UserAPI {
|
|||||||
* @param id 用户ID
|
* @param id 用户ID
|
||||||
* @param password 新密码
|
* @param password 新密码
|
||||||
*/
|
*/
|
||||||
static resetPassword(id: number, password: string) {
|
resetPassword(id: number, password: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/${id}/password/reset`,
|
url: `${USER_BASE_URL}/${id}/password/reset`,
|
||||||
method: "put",
|
method: "put",
|
||||||
params: { password: password },
|
params: { password: password },
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除用户,多个以英文逗号(,)分割
|
* 批量删除用户,多个以英文逗号(,)分割
|
||||||
*
|
*
|
||||||
* @param ids 用户ID字符串,多个以英文逗号(,)分割
|
* @param ids 用户ID字符串,多个以英文逗号(,)分割
|
||||||
*/
|
*/
|
||||||
static deleteByIds(ids: string) {
|
deleteByIds(ids: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/${ids}`,
|
url: `${USER_BASE_URL}/${ids}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 下载用户导入模板 */
|
/** 下载用户导入模板 */
|
||||||
static downloadTemplate() {
|
downloadTemplate() {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/template`,
|
url: `${USER_BASE_URL}/template`,
|
||||||
method: "get",
|
method: "get",
|
||||||
responseType: "arraybuffer",
|
responseType: "arraybuffer",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出用户
|
* 导出用户
|
||||||
*
|
*
|
||||||
* @param queryParams 查询参数
|
* @param queryParams 查询参数
|
||||||
*/
|
*/
|
||||||
static export(queryParams: UserPageQuery) {
|
export(queryParams: UserPageQuery) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/export`,
|
url: `${USER_BASE_URL}/export`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
responseType: "arraybuffer",
|
responseType: "arraybuffer",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入用户
|
* 导入用户
|
||||||
@@ -124,7 +123,7 @@ class UserAPI {
|
|||||||
* @param deptId 部门ID
|
* @param deptId 部门ID
|
||||||
* @param file 导入文件
|
* @param file 导入文件
|
||||||
*/
|
*/
|
||||||
static import(deptId: number, file: File) {
|
import(deptId: number, file: File) {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("file", file);
|
formData.append("file", file);
|
||||||
return request({
|
return request({
|
||||||
@@ -136,33 +135,33 @@ class UserAPI {
|
|||||||
"Content-Type": "multipart/form-data",
|
"Content-Type": "multipart/form-data",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 获取个人中心用户信息 */
|
/** 获取个人中心用户信息 */
|
||||||
static getProfile() {
|
getProfile() {
|
||||||
return request<any, UserProfileVO>({
|
return request<any, UserProfileVO>({
|
||||||
url: `${USER_BASE_URL}/profile`,
|
url: `${USER_BASE_URL}/profile`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 修改个人中心用户信息 */
|
/** 修改个人中心用户信息 */
|
||||||
static updateProfile(data: UserProfileForm) {
|
updateProfile(data: UserProfileForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/profile`,
|
url: `${USER_BASE_URL}/profile`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 修改个人中心用户密码 */
|
/** 修改个人中心用户密码 */
|
||||||
static changePassword(data: PasswordChangeForm) {
|
changePassword(data: PasswordChangeForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/password`,
|
url: `${USER_BASE_URL}/password`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送手机/邮箱验证码
|
* 发送手机/邮箱验证码
|
||||||
@@ -170,42 +169,42 @@ class UserAPI {
|
|||||||
* @param contact 联系方式 手机号/邮箱
|
* @param contact 联系方式 手机号/邮箱
|
||||||
* @param contactType 联系方式类型 MOBILE:手机;EMAIL:邮箱
|
* @param contactType 联系方式类型 MOBILE:手机;EMAIL:邮箱
|
||||||
*/
|
*/
|
||||||
static sendVerificationCode(contact: string, contactType: string) {
|
sendVerificationCode(contact: string, contactType: string) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/send-verification-code`,
|
url: `${USER_BASE_URL}/send-verification-code`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params: { contact: contact, contactType: contactType },
|
params: { contact: contact, contactType: contactType },
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 绑定个人中心用户手机 */
|
/** 绑定个人中心用户手机 */
|
||||||
static bindMobile(data: MobileBindingForm) {
|
bindMobile(data: MobileBindingForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/mobile`,
|
url: `${USER_BASE_URL}/mobile`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/** 绑定个人中心用户邮箱 */
|
/** 绑定个人中心用户邮箱 */
|
||||||
static bindEmail(data: EmailBindingForm) {
|
bindEmail(data: EmailBindingForm) {
|
||||||
return request({
|
return request({
|
||||||
url: `${USER_BASE_URL}/email`,
|
url: `${USER_BASE_URL}/email`,
|
||||||
method: "put",
|
method: "put",
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户下拉列表
|
* 获取用户下拉列表
|
||||||
*/
|
*/
|
||||||
static getOptions() {
|
getOptions() {
|
||||||
return request<any, OptionType[]>({
|
return request<any, OptionType[]>({
|
||||||
url: `${USER_BASE_URL}/options`,
|
url: `${USER_BASE_URL}/options`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export default UserAPI;
|
export default UserAPI;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<component :is="linkType" v-bind="linkProps(to)">
|
<component :is="linkType" v-bind="linkProps(to)">
|
||||||
<slot></slot>
|
<slot />
|
||||||
</component>
|
</component>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -98,30 +98,30 @@
|
|||||||
<!-- 导出 -->
|
<!-- 导出 -->
|
||||||
<template v-else-if="item === 'exports'">
|
<template v-else-if="item === 'exports'">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-hasPerm="[`${contentConfig.pageName}:export`]"
|
||||||
icon="download"
|
icon="download"
|
||||||
circle
|
circle
|
||||||
title="导出"
|
title="导出"
|
||||||
v-hasPerm="[`${contentConfig.pageName}:export`]"
|
|
||||||
@click="handleToolbar(item)"
|
@click="handleToolbar(item)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<!-- 导入 -->
|
<!-- 导入 -->
|
||||||
<template v-else-if="item === 'imports'">
|
<template v-else-if="item === 'imports'">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-hasPerm="[`${contentConfig.pageName}:import`]"
|
||||||
icon="upload"
|
icon="upload"
|
||||||
circle
|
circle
|
||||||
title="导入"
|
title="导入"
|
||||||
v-hasPerm="[`${contentConfig.pageName}:import`]"
|
|
||||||
@click="handleToolbar(item)"
|
@click="handleToolbar(item)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
<template v-else-if="item === 'search'">
|
<template v-else-if="item === 'search'">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-hasPerm="[`${contentConfig.pageName}:query`]"
|
||||||
icon="search"
|
icon="search"
|
||||||
circle
|
circle
|
||||||
title="搜索"
|
title="搜索"
|
||||||
v-hasPerm="[`${contentConfig.pageName}:query`]"
|
|
||||||
@click="handleToolbar(item)"
|
@click="handleToolbar(item)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
@@ -130,10 +130,10 @@
|
|||||||
<template v-else-if="typeof item === 'object'">
|
<template v-else-if="typeof item === 'object'">
|
||||||
<template v-if="item.auth">
|
<template v-if="item.auth">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-hasPerm="[`${contentConfig.pageName}:${item.auth}`]"
|
||||||
:icon="item.icon"
|
:icon="item.icon"
|
||||||
circle
|
circle
|
||||||
:title="item.title"
|
:title="item.title"
|
||||||
v-hasPerm="[`${contentConfig.pageName}:${item.auth}`]"
|
|
||||||
@click="handleToolbar(item.name)"
|
@click="handleToolbar(item.name)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
@@ -332,7 +332,7 @@
|
|||||||
:name="col.slotName ?? col.prop"
|
:name="col.slotName ?? col.prop"
|
||||||
:prop="col.prop"
|
:prop="col.prop"
|
||||||
v-bind="scope"
|
v-bind="scope"
|
||||||
></slot>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -437,9 +437,9 @@
|
|||||||
>
|
>
|
||||||
<el-form-item label="文件名" prop="files">
|
<el-form-item label="文件名" prop="files">
|
||||||
<el-upload
|
<el-upload
|
||||||
class="w-full"
|
|
||||||
ref="uploadRef"
|
ref="uploadRef"
|
||||||
v-model:file-list="importFormData.files"
|
v-model:file-list="importFormData.files"
|
||||||
|
class="w-full"
|
||||||
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
||||||
:drag="true"
|
:drag="true"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<el-col v-show="!item.hidden" v-bind="item.col">
|
<el-col v-show="!item.hidden" v-bind="item.col">
|
||||||
<el-form-item :label="item.label" :prop="item.prop">
|
<el-form-item :label="item.label" :prop="item.prop">
|
||||||
<!-- Label -->
|
<!-- Label -->
|
||||||
<template #label v-if="item.tips">
|
<template v-if="item.tips" #label>
|
||||||
<span>
|
<span>
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
:prop="item.prop"
|
:prop="item.prop"
|
||||||
:formData="formData"
|
:formData="formData"
|
||||||
:attrs="item.attrs"
|
:attrs="item.attrs"
|
||||||
></slot>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<el-col v-show="!item.hidden" v-bind="item.col">
|
<el-col v-show="!item.hidden" v-bind="item.col">
|
||||||
<el-form-item :label="item.label" :prop="item.prop">
|
<el-form-item :label="item.label" :prop="item.prop">
|
||||||
<!-- Label -->
|
<!-- Label -->
|
||||||
<template #label v-if="item.tips">
|
<template v-if="item.tips" #label>
|
||||||
<span>
|
<span>
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
@@ -69,8 +69,8 @@
|
|||||||
<!-- switch 开关 -->
|
<!-- switch 开关 -->
|
||||||
<template v-else-if="item.type === 'switch'">
|
<template v-else-if="item.type === 'switch'">
|
||||||
<el-switch
|
<el-switch
|
||||||
inline-prompt
|
|
||||||
v-model="formData[item.prop]"
|
v-model="formData[item.prop]"
|
||||||
|
inline-prompt
|
||||||
v-bind="item.attrs"
|
v-bind="item.attrs"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
:prop="item.prop"
|
:prop="item.prop"
|
||||||
:formData="formData"
|
:formData="formData"
|
||||||
:attrs="item.attrs"
|
:attrs="item.attrs"
|
||||||
></slot>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
<el-col v-show="!item.hidden" v-bind="item.col">
|
<el-col v-show="!item.hidden" v-bind="item.col">
|
||||||
<el-form-item :label="item.label" :prop="item.prop">
|
<el-form-item :label="item.label" :prop="item.prop">
|
||||||
<!-- Label -->
|
<!-- Label -->
|
||||||
<template #label v-if="item.tips">
|
<template v-if="item.tips" #label>
|
||||||
<span>
|
<span>
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
@@ -220,8 +220,8 @@
|
|||||||
<!-- switch 开关 -->
|
<!-- switch 开关 -->
|
||||||
<template v-else-if="item.type === 'switch'">
|
<template v-else-if="item.type === 'switch'">
|
||||||
<el-switch
|
<el-switch
|
||||||
inline-prompt
|
|
||||||
v-model="formData[item.prop]"
|
v-model="formData[item.prop]"
|
||||||
|
inline-prompt
|
||||||
v-bind="item.attrs"
|
v-bind="item.attrs"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
@@ -273,7 +273,7 @@
|
|||||||
:prop="item.prop"
|
:prop="item.prop"
|
||||||
:formData="formData"
|
:formData="formData"
|
||||||
:attrs="item.attrs"
|
:attrs="item.attrs"
|
||||||
></slot>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-card
|
<el-card
|
||||||
shadow="never"
|
|
||||||
class="mb-[10px]"
|
|
||||||
v-show="visible"
|
v-show="visible"
|
||||||
v-hasPerm="[`${searchConfig.pageName}:query`]"
|
v-hasPerm="[`${searchConfig.pageName}:query`]"
|
||||||
|
shadow="never"
|
||||||
|
class="mb-[10px]"
|
||||||
>
|
>
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
<template v-for="(item, index) in formItems" :key="item.prop">
|
<template v-for="(item, index) in formItems" :key="item.prop">
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
:prop="item.prop"
|
:prop="item.prop"
|
||||||
>
|
>
|
||||||
<!-- Label -->
|
<!-- Label -->
|
||||||
<template #label v-if="item.tips">
|
<template v-if="item.tips" #label>
|
||||||
<span>
|
<span>
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
<div class="flex-center">
|
<div class="flex-center">
|
||||||
<el-tag
|
<el-tag
|
||||||
v-for="tag in inputTagMap[item.prop].data"
|
v-for="tag in inputTagMap[item.prop].data"
|
||||||
class="mr-2"
|
|
||||||
:key="tag"
|
:key="tag"
|
||||||
|
class="mr-2"
|
||||||
:closable="true"
|
:closable="true"
|
||||||
v-bind="inputTagMap[item.prop].tagAttrs"
|
v-bind="inputTagMap[item.prop].tagAttrs"
|
||||||
@close="handleCloseTag(item.prop, tag)"
|
@close="handleCloseTag(item.prop, tag)"
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import type {
|
|||||||
TableProps,
|
TableProps,
|
||||||
ColProps,
|
ColProps,
|
||||||
} from "element-plus";
|
} from "element-plus";
|
||||||
import PageContent from "./PageContent.vue";
|
import type PageContent from "./PageContent.vue";
|
||||||
import PageForm from "./PageForm.vue";
|
import type PageForm from "./PageForm.vue";
|
||||||
import PageModal from "./PageModal.vue";
|
import type PageModal from "./PageModal.vue";
|
||||||
import PageSearch from "./PageSearch.vue";
|
import type PageSearch from "./PageSearch.vue";
|
||||||
|
|
||||||
export type PageSearchInstance = InstanceType<typeof PageSearch>;
|
export type PageSearchInstance = InstanceType<typeof PageSearch>;
|
||||||
export type PageContentInstance = InstanceType<typeof PageContent>;
|
export type PageContentInstance = InstanceType<typeof PageContent>;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 复制组件 -->
|
<!-- 复制组件 -->
|
||||||
<template>
|
<template>
|
||||||
<el-button link @click="handleClipboard" :style="style">
|
<el-button link :style="style" @click="handleClipboard">
|
||||||
<slot>
|
<slot>
|
||||||
<el-icon><DocumentCopy color="var(--el-color-primary)" /></el-icon>
|
<el-icon><DocumentCopy color="var(--el-color-primary)" /></el-icon>
|
||||||
</slot>
|
</slot>
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
<el-popover :visible="popoverVisible" :width="width" placement="bottom-end">
|
<el-popover :visible="popoverVisible" :width="width" placement="bottom-end">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-input
|
<el-input
|
||||||
class="reference"
|
|
||||||
v-model="selectedIcon"
|
v-model="selectedIcon"
|
||||||
|
class="reference"
|
||||||
readonly
|
readonly
|
||||||
placeholder="点击选择图标"
|
placeholder="点击选择图标"
|
||||||
@click="popoverVisible = !popoverVisible"
|
@click="popoverVisible = !popoverVisible"
|
||||||
|
|||||||
@@ -41,9 +41,9 @@
|
|||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="search-space" v-else>暂无数据</div>
|
<div v-else class="search-space">暂无数据</div>
|
||||||
</div>
|
</div>
|
||||||
<template #footer></template>
|
<template #footer />
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
<el-dropdown class="flex-center wh-full align-middle">
|
<el-dropdown class="flex-center wh-full align-middle">
|
||||||
<div class="wh-full">
|
<div class="wh-full">
|
||||||
<el-badge
|
<el-badge
|
||||||
:offset="[-10, 15]"
|
|
||||||
v-if="notices.length > 0"
|
v-if="notices.length > 0"
|
||||||
|
:offset="[-10, 15]"
|
||||||
:value="notices.length"
|
:value="notices.length"
|
||||||
:max="99"
|
:max="99"
|
||||||
class="wh-full"
|
class="wh-full"
|
||||||
@@ -26,23 +26,23 @@
|
|||||||
<el-tab-pane label="通知" name="notice">
|
<el-tab-pane label="通知" name="notice">
|
||||||
<template v-if="notices.length > 0">
|
<template v-if="notices.length > 0">
|
||||||
<div
|
<div
|
||||||
class="w400px flex-x-between p-1"
|
|
||||||
v-for="(item, index) in notices"
|
v-for="(item, index) in notices"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
class="w400px flex-x-between p-1"
|
||||||
>
|
>
|
||||||
<div class="flex-center">
|
<div class="flex-center">
|
||||||
<DictLabel
|
<DictLabel
|
||||||
code="notice_type"
|
|
||||||
v-model="item.type"
|
v-model="item.type"
|
||||||
|
code="notice_type"
|
||||||
size="small"
|
size="small"
|
||||||
class="mr-1"
|
class="mr-1"
|
||||||
/>
|
/>
|
||||||
<el-text
|
<el-text
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="readNotice(item.id)"
|
|
||||||
size="small"
|
size="small"
|
||||||
class="w200px cursor-pointer"
|
class="w200px cursor-pointer"
|
||||||
truncated
|
truncated
|
||||||
|
@click="readNotice(item.id)"
|
||||||
>
|
>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</el-text>
|
</el-text>
|
||||||
@@ -78,20 +78,20 @@
|
|||||||
<el-tab-pane label="消息" name="message">
|
<el-tab-pane label="消息" name="message">
|
||||||
<template v-if="messages.length > 0">
|
<template v-if="messages.length > 0">
|
||||||
<div
|
<div
|
||||||
class="w400px flex-x-between p-1"
|
|
||||||
v-for="(item, index) in messages"
|
v-for="(item, index) in messages"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
class="w400px flex-x-between p-1"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<DictLabel
|
<DictLabel
|
||||||
code="notice_type"
|
|
||||||
v-model="item.type"
|
v-model="item.type"
|
||||||
|
code="notice_type"
|
||||||
size="small"
|
size="small"
|
||||||
/>
|
/>
|
||||||
<el-link
|
<el-link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="readNotice(item.id)"
|
|
||||||
class="ml-1"
|
class="ml-1"
|
||||||
|
@click="readNotice(item.id)"
|
||||||
>
|
>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</el-link>
|
</el-link>
|
||||||
@@ -128,20 +128,20 @@
|
|||||||
<el-tab-pane label="待办" name="task">
|
<el-tab-pane label="待办" name="task">
|
||||||
<template v-if="tasks.length > 0">
|
<template v-if="tasks.length > 0">
|
||||||
<div
|
<div
|
||||||
class="w400px flex-x-between p-1"
|
|
||||||
v-for="(item, index) in tasks"
|
v-for="(item, index) in tasks"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
class="w400px flex-x-between p-1"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<DictLabel
|
<DictLabel
|
||||||
code="notice_type"
|
|
||||||
v-model="item.type"
|
v-model="item.type"
|
||||||
|
code="notice_type"
|
||||||
size="small"
|
size="small"
|
||||||
/>
|
/>
|
||||||
<el-link
|
<el-link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="readNotice(item.id)"
|
|
||||||
class="ml-1"
|
class="ml-1"
|
||||||
|
@click="readNotice(item.id)"
|
||||||
>
|
>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</el-link>
|
</el-link>
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
:name="col.slotName ?? col.prop"
|
:name="col.slotName ?? col.prop"
|
||||||
:prop="col.prop"
|
:prop="col.prop"
|
||||||
v-bind="scope"
|
v-bind="scope"
|
||||||
></slot>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -19,13 +19,13 @@
|
|||||||
:limit="props.limit"
|
:limit="props.limit"
|
||||||
>
|
>
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
|
||||||
v-if="props.showUploadBtn"
|
v-if="props.showUploadBtn"
|
||||||
|
type="primary"
|
||||||
:disabled="fileList.length >= props.limit"
|
:disabled="fileList.length >= props.limit"
|
||||||
>
|
>
|
||||||
{{ props.uploadBtnText }}
|
{{ props.uploadBtnText }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<template #tip v-if="props.showTip">
|
<template v-if="props.showTip" #tip>
|
||||||
<div class="el-upload__tip">
|
<div class="el-upload__tip">
|
||||||
{{ props.tip }}
|
{{ props.tip }}
|
||||||
</div>
|
</div>
|
||||||
@@ -36,8 +36,8 @@
|
|||||||
<el-icon><Document /></el-icon>
|
<el-icon><Document /></el-icon>
|
||||||
<span class="el-upload-list__item-file-name">{{ file.name }}</span>
|
<span class="el-upload-list__item-file-name">{{ file.name }}</span>
|
||||||
<span
|
<span
|
||||||
class="el-icon--close"
|
|
||||||
v-if="props.showDelBtn"
|
v-if="props.showDelBtn"
|
||||||
|
class="el-icon--close"
|
||||||
@click.stop="handleRemove(file)"
|
@click.stop="handleRemove(file)"
|
||||||
>
|
>
|
||||||
<el-icon><Close /></el-icon>
|
<el-icon><Close /></el-icon>
|
||||||
@@ -47,13 +47,13 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
<el-progress
|
<el-progress
|
||||||
|
v-if="showUploadPercent"
|
||||||
:style="{
|
:style="{
|
||||||
display: showUploadPercent ? 'inline-flex' : 'none',
|
display: showUploadPercent ? 'inline-flex' : 'none',
|
||||||
width: '100%',
|
width: '100%',
|
||||||
}"
|
}"
|
||||||
:percentage="uploadPercent"
|
:percentage="uploadPercent"
|
||||||
:color="customColorMethod"
|
:color="customColorMethod"
|
||||||
v-if="showUploadPercent"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -39,9 +39,9 @@
|
|||||||
<el-image-viewer
|
<el-image-viewer
|
||||||
v-if="viewVisible"
|
v-if="viewVisible"
|
||||||
:zoom-rate="1.2"
|
:zoom-rate="1.2"
|
||||||
@close="closePreview"
|
|
||||||
:initialIndex="initialIndex"
|
:initialIndex="initialIndex"
|
||||||
:url-list="viewFileList"
|
:url-list="viewFileList"
|
||||||
|
@close="closePreview"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { hasAuth } from "@/plugins/permission";
|
import { hasAuth } from "@/plugins/permission";
|
||||||
import { Directive, DirectiveBinding } from "vue";
|
import type { Directive, DirectiveBinding } from "vue";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按钮权限
|
* 按钮权限
|
||||||
@@ -10,7 +10,9 @@ export const hasPerm: Directive = {
|
|||||||
const { value: requiredPerms } = binding;
|
const { value: requiredPerms } = binding;
|
||||||
if (requiredPerms) {
|
if (requiredPerms) {
|
||||||
if (!hasAuth(requiredPerms)) {
|
if (!hasAuth(requiredPerms)) {
|
||||||
el.parentNode && el.parentNode.removeChild(el);
|
if (el.parentNode) {
|
||||||
|
el.parentNode.removeChild(el);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
@@ -29,7 +31,9 @@ export const hasRole: Directive = {
|
|||||||
const { value: requiredRoles } = binding;
|
const { value: requiredRoles } = binding;
|
||||||
if (requiredRoles) {
|
if (requiredRoles) {
|
||||||
if (!hasAuth(requiredRoles, "role")) {
|
if (!hasAuth(requiredRoles, "role")) {
|
||||||
el.parentNode && el.parentNode.removeChild(el);
|
if (el.parentNode) {
|
||||||
|
el.parentNode.removeChild(el);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error("need roles! Like v-has-role=\"['admin','test']\"");
|
throw new Error("need roles! Like v-has-role=\"['admin','test']\"");
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
:class="{ 'is-active': modelValue === LayoutEnum.LEFT }"
|
:class="{ 'is-active': modelValue === LayoutEnum.LEFT }"
|
||||||
@click="updateValue(LayoutEnum.LEFT)"
|
@click="updateValue(LayoutEnum.LEFT)"
|
||||||
>
|
>
|
||||||
<div></div>
|
<div />
|
||||||
<div></div>
|
<div />
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
:class="{ 'is-active': modelValue === LayoutEnum.TOP }"
|
:class="{ 'is-active': modelValue === LayoutEnum.TOP }"
|
||||||
@click="updateValue(LayoutEnum.TOP)"
|
@click="updateValue(LayoutEnum.TOP)"
|
||||||
>
|
>
|
||||||
<div></div>
|
<div />
|
||||||
<div></div>
|
<div />
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
|
||||||
@@ -28,8 +28,8 @@
|
|||||||
:class="{ 'is-active': modelValue === LayoutEnum.MIX }"
|
:class="{ 'is-active': modelValue === LayoutEnum.MIX }"
|
||||||
@click="updateValue(LayoutEnum.MIX)"
|
@click="updateValue(LayoutEnum.MIX)"
|
||||||
>
|
>
|
||||||
<div></div>
|
<div />
|
||||||
<div></div>
|
<div />
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="logo-container">
|
<div class="logo-container">
|
||||||
<transition enter-active-class="animate__animated animate__fadeInLeft">
|
<transition enter-active-class="animate__animated animate__fadeInLeft">
|
||||||
<router-link class="wh-full flex-center" to="/" :key="+collapse">
|
<router-link :key="+collapse" class="wh-full flex-center" to="/">
|
||||||
<img :src="logo" class="logo-image" />
|
<img :src="logo" class="logo-image" />
|
||||||
<span class="logo-title" v-if="!collapse">
|
<span v-if="!collapse" class="logo-title">
|
||||||
{{ defaultSettings.title }}
|
{{ defaultSettings.title }}
|
||||||
</span>
|
</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ const topMenus = ref<RouteRecordRaw[]>([]);
|
|||||||
// 获取当前路由路径的顶部菜单路径
|
// 获取当前路由路径的顶部菜单路径
|
||||||
const activeTopMenuPath =
|
const activeTopMenuPath =
|
||||||
useRoute().path.split("/").filter(Boolean).length > 1
|
useRoute().path.split("/").filter(Boolean).length > 1
|
||||||
? useRoute().path.match(/^\/[^\/]+/)?.[0] || "/"
|
? useRoute().path.match(/^\/[^/]+/)?.[0] || "/"
|
||||||
: "/";
|
: "/";
|
||||||
|
|
||||||
// 设置当前激活的顶部菜单路径
|
// 设置当前激活的顶部菜单路径
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
@wheel.prevent="handleScroll"
|
@wheel.prevent="handleScroll"
|
||||||
>
|
>
|
||||||
<router-link
|
<router-link
|
||||||
ref="tagRef"
|
|
||||||
v-for="tag in visitedViews"
|
v-for="tag in visitedViews"
|
||||||
|
ref="tagRef"
|
||||||
:key="tag.fullPath"
|
:key="tag.fullPath"
|
||||||
:class="'tags-item ' + (tagsViewStore.isActive(tag) ? 'active' : '')"
|
:class="'tags-item ' + (tagsViewStore.isActive(tag) ? 'active' : '')"
|
||||||
:to="{ path: tag.path, query: tag.query }"
|
:to="{ path: tag.path, query: tag.query }"
|
||||||
@@ -16,8 +16,8 @@
|
|||||||
>
|
>
|
||||||
{{ translateRouteTitle(tag.title) }}
|
{{ translateRouteTitle(tag.title) }}
|
||||||
<el-icon
|
<el-icon
|
||||||
class="tag-close-icon"
|
|
||||||
v-if="!isAffix(tag)"
|
v-if="!isAffix(tag)"
|
||||||
|
class="tag-close-icon"
|
||||||
@click.prevent.stop="closeSelectedTag(tag)"
|
@click.prevent.stop="closeSelectedTag(tag)"
|
||||||
>
|
>
|
||||||
<Close />
|
<Close />
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
v-if="isMobile && isOpenSidebar"
|
v-if="isMobile && isOpenSidebar"
|
||||||
class="wh-full fixed-lt z-999 bg-black bg-opacity-30"
|
class="wh-full fixed-lt z-999 bg-black bg-opacity-30"
|
||||||
@click="handleOutsideClick"
|
@click="handleOutsideClick"
|
||||||
></div>
|
/>
|
||||||
|
|
||||||
<!-- 公用侧边栏 -->
|
<!-- 公用侧边栏 -->
|
||||||
<Sidebar class="sidebar-container" />
|
<Sidebar class="sidebar-container" />
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {
|
import type {
|
||||||
NavigationGuardNext,
|
NavigationGuardNext,
|
||||||
RouteLocationNormalized,
|
RouteLocationNormalized,
|
||||||
RouteRecordRaw,
|
RouteRecordRaw,
|
||||||
@@ -49,6 +49,7 @@ export function setupPermission() {
|
|||||||
);
|
);
|
||||||
next({ ...to, replace: true });
|
next({ ...to, replace: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
// 移除 token 并重定向到登录页,携带当前页面路由作为跳转参数
|
// 移除 token 并重定向到登录页,携带当前页面路由作为跳转参数
|
||||||
await userStore.resetToken();
|
await userStore.resetToken();
|
||||||
redirectToLogin(to, next);
|
redirectToLogin(to, next);
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
import type { App } from "vue";
|
import type { App } from "vue";
|
||||||
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
|
import {
|
||||||
|
createRouter,
|
||||||
|
createWebHashHistory,
|
||||||
|
type RouteRecordRaw,
|
||||||
|
} from "vue-router";
|
||||||
|
|
||||||
export const Layout = () => import("@/layout/index.vue");
|
export const Layout = () => import("@/layout/index.vue");
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { RouteRecordRaw } from "vue-router";
|
import type { RouteRecordRaw } from "vue-router";
|
||||||
import { constantRoutes } from "@/router";
|
import { constantRoutes } from "@/router";
|
||||||
import { store } from "@/store";
|
import { store } from "@/store";
|
||||||
import MenuAPI, { RouteVO } from "@/api/menu";
|
import MenuAPI, { type RouteVO } from "@/api/menu";
|
||||||
|
|
||||||
const modules = import.meta.glob("../../views/**/**.vue");
|
const modules = import.meta.glob("../../views/**/**.vue");
|
||||||
const Layout = () => import("@/layout/index.vue");
|
const Layout = () => import("@/layout/index.vue");
|
||||||
@@ -65,7 +65,7 @@ const transformRoutes = (routes: RouteVO[]) => {
|
|||||||
if (component) {
|
if (component) {
|
||||||
tmpRoute.component = component;
|
tmpRoute.component = component;
|
||||||
} else {
|
} else {
|
||||||
tmpRoute.component = modules[`../../views/error-page/404.vue`];
|
tmpRoute.component = modules["../../views/error-page/404.vue"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,11 +57,12 @@ export const useTagsViewStore = defineStore("tagsView", () => {
|
|||||||
const viewName = view.name;
|
const viewName = view.name;
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const index = cachedViews.value.indexOf(viewName);
|
const index = cachedViews.value.indexOf(viewName);
|
||||||
index > -1 && cachedViews.value.splice(index, 1);
|
if (index > -1) {
|
||||||
|
cachedViews.value.splice(index, 1);
|
||||||
|
}
|
||||||
resolve([...cachedViews.value]);
|
resolve([...cachedViews.value]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function delOtherVisitedViews(view: TagView) {
|
function delOtherVisitedViews(view: TagView) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
visitedViews.value = visitedViews.value.filter((v) => {
|
visitedViews.value = visitedViews.value.filter((v) => {
|
||||||
|
|||||||
5
src/types/env.d.ts
vendored
5
src/types/env.d.ts
vendored
@@ -1,9 +1,8 @@
|
|||||||
// https://cn.vitejs.dev/guide/env-and-mode
|
// https://cn.vitejs.dev/guide/env-and-mode
|
||||||
|
|
||||||
declare module "*.vue" {
|
declare module "*.vue" {
|
||||||
import { DefineComponent } from "vue";
|
import type { DefineComponent } from "vue";
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
const component: DefineComponent<object, object, any>;
|
||||||
const component: DefineComponent<{}, {}, any>;
|
|
||||||
export default component;
|
export default component;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const TOKEN_KEY = "v3-admin-token";
|
const TOKEN_KEY = "admin-token";
|
||||||
|
|
||||||
function getToken(): string {
|
function getToken(): string {
|
||||||
return localStorage.getItem(TOKEN_KEY) || "";
|
return localStorage.getItem(TOKEN_KEY) || "";
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
|
import axios, {
|
||||||
|
type InternalAxiosRequestConfig,
|
||||||
|
type AxiosResponse,
|
||||||
|
} from "axios";
|
||||||
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";
|
||||||
|
|||||||
@@ -5,13 +5,22 @@ class WebSocketManager {
|
|||||||
private client: Client | null = null;
|
private client: Client | null = null;
|
||||||
private messageHandlers: Map<string, ((message: string) => void)[]> =
|
private messageHandlers: Map<string, ((message: string) => void)[]> =
|
||||||
new Map();
|
new Map();
|
||||||
|
private reconnectAttempts = 0;
|
||||||
constructor() {}
|
private maxReconnectAttempts = 3; // 自定义最大重试次数
|
||||||
|
private reconnectDelay = 5000; // 重试延迟(单位:毫秒)
|
||||||
|
|
||||||
// 初始化 WebSocket 客户端
|
// 初始化 WebSocket 客户端
|
||||||
setupWebSocket() {
|
setupWebSocket() {
|
||||||
const endpoint = import.meta.env.VITE_APP_WS_ENDPOINT;
|
const endpoint = import.meta.env.VITE_APP_WS_ENDPOINT;
|
||||||
|
|
||||||
|
// 如果没有配置 WebSocket 端点或显式关闭,直接返回
|
||||||
|
if (!endpoint) {
|
||||||
|
console.log(
|
||||||
|
"WebSocket 已被禁用,如需打开请在配置文件中配置 VITE_APP_WS_ENDPOINT"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.client && this.client.connected) {
|
if (this.client && this.client.connected) {
|
||||||
console.log("客户端已存在并且连接正常");
|
console.log("客户端已存在并且连接正常");
|
||||||
return this.client;
|
return this.client;
|
||||||
@@ -24,8 +33,10 @@ class WebSocketManager {
|
|||||||
},
|
},
|
||||||
heartbeatIncoming: 30000,
|
heartbeatIncoming: 30000,
|
||||||
heartbeatOutgoing: 30000,
|
heartbeatOutgoing: 30000,
|
||||||
|
reconnectDelay: 0, // 设置为 0 禁用重连
|
||||||
onConnect: () => {
|
onConnect: () => {
|
||||||
console.log(`连接到 WebSocket 服务器: ${endpoint}`);
|
console.log(`连接到 WebSocket 服务器: ${endpoint}`);
|
||||||
|
this.reconnectAttempts = 0; // 重置重连计数
|
||||||
this.messageHandlers.forEach((handlers, topic) => {
|
this.messageHandlers.forEach((handlers, topic) => {
|
||||||
handlers.forEach((handler) => {
|
handlers.forEach((handler) => {
|
||||||
this.subscribeToTopic(topic, handler);
|
this.subscribeToTopic(topic, handler);
|
||||||
@@ -38,6 +49,13 @@ class WebSocketManager {
|
|||||||
},
|
},
|
||||||
onDisconnect: () => {
|
onDisconnect: () => {
|
||||||
console.log(`WebSocket 连接已断开: ${endpoint}`);
|
console.log(`WebSocket 连接已断开: ${endpoint}`);
|
||||||
|
this.reconnectAttempts++;
|
||||||
|
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
||||||
|
console.log(`正在尝试重连... 尝试次数: ${this.reconnectAttempts}`);
|
||||||
|
} else {
|
||||||
|
console.log("重连次数已达上限,停止重连");
|
||||||
|
this.client?.deactivate();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -91,8 +91,8 @@
|
|||||||
<el-drawer
|
<el-drawer
|
||||||
v-model="dialog.visible"
|
v-model="dialog.visible"
|
||||||
:title="dialog.title"
|
:title="dialog.title"
|
||||||
@close="dialog.visible = false"
|
|
||||||
size="80%"
|
size="80%"
|
||||||
|
@close="dialog.visible = false"
|
||||||
>
|
>
|
||||||
<el-steps :active="active" align-center finish-status="success" simple>
|
<el-steps :active="active" align-center finish-status="success" simple>
|
||||||
<el-step title="基础配置" />
|
<el-step title="基础配置" />
|
||||||
@@ -196,7 +196,7 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="elTableCustom" v-show="active == 1">
|
<div v-show="active == 1" class="elTableCustom">
|
||||||
<el-table
|
<el-table
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
row-key="id"
|
row-key="id"
|
||||||
@@ -249,8 +249,8 @@
|
|||||||
<div class="flex-y-center">
|
<div class="flex-y-center">
|
||||||
<span>查询</span>
|
<span>查询</span>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
class="ml-1"
|
|
||||||
v-model="isCheckAllQuery"
|
v-model="isCheckAllQuery"
|
||||||
|
class="ml-1"
|
||||||
@change="toggleCheckAll('isShowInQuery', isCheckAllQuery)"
|
@change="toggleCheckAll('isShowInQuery', isCheckAllQuery)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -269,8 +269,8 @@
|
|||||||
<div class="flex-y-center">
|
<div class="flex-y-center">
|
||||||
<span>列表</span>
|
<span>列表</span>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
class="ml-1"
|
|
||||||
v-model="isCheckAllList"
|
v-model="isCheckAllList"
|
||||||
|
class="ml-1"
|
||||||
@change="toggleCheckAll('isShowInList', isCheckAllList)"
|
@change="toggleCheckAll('isShowInList', isCheckAllList)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -290,8 +290,8 @@
|
|||||||
<div class="flex-y-center">
|
<div class="flex-y-center">
|
||||||
<span>表单</span>
|
<span>表单</span>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
class="ml-1"
|
|
||||||
v-model="isCheckAllForm"
|
v-model="isCheckAllForm"
|
||||||
|
class="ml-1"
|
||||||
@change="toggleCheckAll('isShowInForm', isCheckAllForm)"
|
@change="toggleCheckAll('isShowInForm', isCheckAllForm)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -309,10 +309,10 @@
|
|||||||
<el-table-column label="必填" width="70">
|
<el-table-column label="必填" width="70">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
|
v-if="scope.row.isShowInForm == 1"
|
||||||
v-model="scope.row.isRequired"
|
v-model="scope.row.isRequired"
|
||||||
:true-value="1"
|
:true-value="1"
|
||||||
:false-value="0"
|
:false-value="0"
|
||||||
v-if="scope.row.isShowInForm == 1"
|
|
||||||
/>
|
/>
|
||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
@@ -321,9 +321,9 @@
|
|||||||
<el-table-column label="查询方式" min-width="120">
|
<el-table-column label="查询方式" min-width="120">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-select
|
<el-select
|
||||||
|
v-if="scope.row.isShowInQuery === 1"
|
||||||
v-model="scope.row.queryType"
|
v-model="scope.row.queryType"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
v-if="scope.row.isShowInQuery === 1"
|
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="(item, key) in queryTypeOptions"
|
v-for="(item, key) in queryTypeOptions"
|
||||||
@@ -339,12 +339,12 @@
|
|||||||
<el-table-column label="表单类型" min-width="120">
|
<el-table-column label="表单类型" min-width="120">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="scope.row.formType"
|
|
||||||
placeholder="请选择"
|
|
||||||
v-if="
|
v-if="
|
||||||
scope.row.isShowInQuery === 1 ||
|
scope.row.isShowInQuery === 1 ||
|
||||||
scope.row.isShowInForm === 1
|
scope.row.isShowInForm === 1
|
||||||
"
|
"
|
||||||
|
v-model="scope.row.formType"
|
||||||
|
placeholder="请选择"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="(item, key) in formTypeOptions"
|
v-for="(item, key) in formTypeOptions"
|
||||||
@@ -397,7 +397,7 @@
|
|||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
<el-scrollbar max-height="72vh">
|
<el-scrollbar max-height="72vh">
|
||||||
<div class="absolute-rt z-36 right-5 top-2">
|
<div class="absolute-rt z-36 right-5 top-2">
|
||||||
<el-link @click="handleCopyCode" type="primary">
|
<el-link type="primary" @click="handleCopyCode">
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<CopyDocument />
|
<CopyDocument />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@@ -406,10 +406,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Codemirror
|
<Codemirror
|
||||||
|
ref="cmRef"
|
||||||
v-model:value="code"
|
v-model:value="code"
|
||||||
:options="cmOptions"
|
:options="cmOptions"
|
||||||
border
|
border
|
||||||
ref="cmRef"
|
|
||||||
:readonly="true"
|
:readonly="true"
|
||||||
height="100%"
|
height="100%"
|
||||||
width="100%"
|
width="100%"
|
||||||
@@ -420,7 +420,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button type="success" @click="handlePrevClick" v-if="active !== 0">
|
<el-button v-if="active !== 0" type="success" @click="handlePrevClick">
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<Back />
|
<Back />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@@ -515,7 +515,7 @@ const prevBtnText = ref("");
|
|||||||
const nextBtnText = ref("下一步,字段配置");
|
const nextBtnText = ref("下一步,字段配置");
|
||||||
const active = ref(0);
|
const active = ref(0);
|
||||||
const currentTableName = ref("");
|
const currentTableName = ref("");
|
||||||
const sortFlag = ref<Object>();
|
const sortFlag = ref<object>();
|
||||||
|
|
||||||
// 查询是否全选
|
// 查询是否全选
|
||||||
const isCheckAllQuery = ref(false);
|
const isCheckAllQuery = ref(false);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div :id="id" :class="className" :style="{ height, width }"></div>
|
<div :id="id" :class="className" :style="{ height, width }" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@ const handleDownloadChart = () => {
|
|||||||
if (ctx) {
|
if (ctx) {
|
||||||
ctx.drawImage(img, 0, 0, img.width, img.height);
|
ctx.drawImage(img, 0, 0, img.width, img.height);
|
||||||
const link = document.createElement("a");
|
const link = document.createElement("a");
|
||||||
link.download = `访问趋势.png`;
|
link.download = "访问趋势.png";
|
||||||
link.href = canvas.toDataURL("image/png", 0.9);
|
link.href = canvas.toDataURL("image/png", 0.9);
|
||||||
document.body.appendChild(link);
|
document.body.appendChild(link);
|
||||||
link.click();
|
link.click();
|
||||||
|
|||||||
@@ -66,11 +66,11 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col
|
<el-col
|
||||||
|
v-for="(item, index) in visitStatsList"
|
||||||
|
:key="index"
|
||||||
:xs="24"
|
:xs="24"
|
||||||
:sm="12"
|
:sm="12"
|
||||||
:lg="6"
|
:lg="6"
|
||||||
v-for="(item, index) in visitStatsList"
|
|
||||||
:key="index"
|
|
||||||
>
|
>
|
||||||
<el-skeleton :loading="visitStatsLoading" :rows="5" animated>
|
<el-skeleton :loading="visitStatsLoading" :rows="5" animated>
|
||||||
<template #template>
|
<template #template>
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
class="flex-y-center py-3"
|
class="flex-y-center py-3"
|
||||||
>
|
>
|
||||||
<DictLabel code="notice_type" v-model="item.type" size="small" />
|
<DictLabel v-model="item.type" code="notice_type" size="small" />
|
||||||
<el-text
|
<el-text
|
||||||
truncated
|
truncated
|
||||||
class="!mx-2 flex-1 !text-xs !text-[var(--el-text-color-secondary)]"
|
class="!mx-2 flex-1 !text-xs !text-[var(--el-text-color-secondary)]"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
width="100%"
|
width="100%"
|
||||||
height="100%"
|
height="100%"
|
||||||
frameborder="0"
|
frameborder="0"
|
||||||
></iframe>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
width="100%"
|
width="100%"
|
||||||
height="100%"
|
height="100%"
|
||||||
frameborder="0"
|
frameborder="0"
|
||||||
></iframe>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
width="100%"
|
width="100%"
|
||||||
height="100%"
|
height="100%"
|
||||||
frameborder="0"
|
frameborder="0"
|
||||||
></iframe>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const contentConfig: IContentConfig = {
|
|||||||
toolbar: [],
|
toolbar: [],
|
||||||
indexAction: function (params) {
|
indexAction: function (params) {
|
||||||
// 模拟发起网络请求获取列表数据
|
// 模拟发起网络请求获取列表数据
|
||||||
// console.log("indexAction:", params);
|
console.log("indexAction:", params);
|
||||||
return Promise.resolve({
|
return Promise.resolve({
|
||||||
total: 2,
|
total: 2,
|
||||||
list: [
|
list: [
|
||||||
@@ -76,7 +76,7 @@ const contentConfig: IContentConfig = {
|
|||||||
align: "center",
|
align: "center",
|
||||||
prop: "gender",
|
prop: "gender",
|
||||||
templet: "list",
|
templet: "list",
|
||||||
selectList: { 0: "女", 1: "男" },
|
selectList: { "0": "女", "1": "男" },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "自定义",
|
label: "自定义",
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ import SvgIcon from "@/components/SvgIcon/index.vue";
|
|||||||
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
|
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
// eslint-disable-next-line
|
|
||||||
name: "Icons",
|
name: "Icons",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<iframe
|
<iframe src="https://juejin.cn/post/7228990409909108793" frameborder="0" />
|
||||||
src="https://juejin.cn/post/7228990409909108793"
|
|
||||||
frameborder="0"
|
|
||||||
></iframe>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ function paint(
|
|||||||
@touchstart="onEventStart"
|
@touchstart="onEventStart"
|
||||||
@touchmove.stop.prevent="onEventMove"
|
@touchmove.stop.prevent="onEventMove"
|
||||||
@touchend="onEventEnd"
|
@touchend="onEventEnd"
|
||||||
></canvas>
|
/>
|
||||||
<img v-if="imgUrl" :src="imgUrl" alt="签名" />
|
<img v-if="imgUrl" :src="imgUrl" alt="签名" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -17,25 +17,25 @@
|
|||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
@click="connectWebSocket"
|
|
||||||
:disabled="isConnected"
|
:disabled="isConnected"
|
||||||
|
@click="connectWebSocket"
|
||||||
>
|
>
|
||||||
连接
|
连接
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
@click="disconnectWebSocket"
|
|
||||||
:disabled="!isConnected"
|
:disabled="!isConnected"
|
||||||
|
@click="disconnectWebSocket"
|
||||||
>
|
>
|
||||||
断开
|
断开
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8" class="text-right">
|
<el-col :span="8" class="text-right">
|
||||||
连接状态:
|
连接状态:
|
||||||
<el-tag class="ml-2" type="success" v-if="isConnected">
|
<el-tag v-if="isConnected" class="ml-2" type="success">
|
||||||
已连接
|
已连接
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag class="ml-2" type="info" v-else>已断开</el-tag>
|
<el-tag v-else class="ml-2" type="info">已断开</el-tag>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
@@ -43,10 +43,10 @@
|
|||||||
<el-card class="mt-5">
|
<el-card class="mt-5">
|
||||||
<el-form label-width="90px">
|
<el-form label-width="90px">
|
||||||
<el-form-item label="消息内容">
|
<el-form-item label="消息内容">
|
||||||
<el-input type="textarea" v-model="topicMessage" />
|
<el-input v-model="topicMessage" type="textarea" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button @click="sendToAll" type="primary">发送广播</el-button>
|
<el-button type="primary" @click="sendToAll">发送广播</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
@@ -54,13 +54,13 @@
|
|||||||
<el-card class="mt-5">
|
<el-card class="mt-5">
|
||||||
<el-form label-width="90px">
|
<el-form label-width="90px">
|
||||||
<el-form-item label="消息内容">
|
<el-form-item label="消息内容">
|
||||||
<el-input type="textarea" v-model="queneMessage" />
|
<el-input v-model="queneMessage" type="textarea" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="消息接收人">
|
<el-form-item label="消息接收人">
|
||||||
<el-input v-model="receiver" />
|
<el-input v-model="receiver" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button @click="sendToUser" type="primary">
|
<el-button type="primary" @click="sendToUser">
|
||||||
发送点对点消息
|
发送点对点消息
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ defineOptions({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
errGif: new URL(`../../assets/images/401.gif`, import.meta.url).href,
|
errGif: new URL("../../assets/images/401.gif", import.meta.url).href,
|
||||||
ewizardClap:
|
ewizardClap:
|
||||||
"https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646",
|
"https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646",
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
|
|||||||
@@ -100,11 +100,11 @@
|
|||||||
:placeholder="$t('login.password')"
|
:placeholder="$t('login.password')"
|
||||||
type="password"
|
type="password"
|
||||||
name="password"
|
name="password"
|
||||||
@keyup="checkCapslock"
|
|
||||||
@keyup.enter="handleLoginSubmit"
|
|
||||||
size="large"
|
size="large"
|
||||||
class="h-[48px] pr-2"
|
class="h-[48px] pr-2"
|
||||||
show-password
|
show-password
|
||||||
|
@keyup="checkCapslock"
|
||||||
|
@keyup.enter="handleLoginSubmit"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -124,9 +124,9 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<el-image
|
<el-image
|
||||||
@click="getCaptcha"
|
|
||||||
:src="captchaBase64"
|
:src="captchaBase64"
|
||||||
class="captcha-image"
|
class="captcha-image"
|
||||||
|
@click="getCaptcha"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -223,10 +223,10 @@ const captchaBase64 = ref();
|
|||||||
// 登录表单ref
|
// 登录表单ref
|
||||||
const loginFormRef = ref<FormInstance>();
|
const loginFormRef = ref<FormInstance>();
|
||||||
|
|
||||||
const logo = ref(new URL(`../../assets/logo.png`, import.meta.url).href);
|
const logo = ref(new URL("../../assets/logo.png", import.meta.url).href);
|
||||||
|
|
||||||
const loginImage = ref(
|
const loginImage = ref(
|
||||||
new URL(`../../assets/images/login-image.svg`, import.meta.url).href
|
new URL("../../assets/images/login-image.svg", import.meta.url).href
|
||||||
);
|
);
|
||||||
|
|
||||||
const loginData = ref<LoginData>({
|
const loginData = ref<LoginData>({
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
@click="triggerFileUpload"
|
@click="triggerFileUpload"
|
||||||
/>
|
/>
|
||||||
<input
|
<input
|
||||||
type="file"
|
|
||||||
ref="fileInput"
|
ref="fileInput"
|
||||||
|
type="file"
|
||||||
style="display: none"
|
style="display: none"
|
||||||
@change="handleFileChange"
|
@change="handleFileChange"
|
||||||
/>
|
/>
|
||||||
@@ -105,8 +105,8 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
size="small"
|
size="small"
|
||||||
@click="() => handleOpenDialog(DialogType.PASSWORD)"
|
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
|
@click="() => handleOpenDialog(DialogType.PASSWORD)"
|
||||||
>
|
>
|
||||||
修改
|
修改
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -122,22 +122,22 @@
|
|||||||
</span>
|
</span>
|
||||||
<span v-else>未绑定手机</span>
|
<span v-else>未绑定手机</span>
|
||||||
<el-button
|
<el-button
|
||||||
|
v-if="userProfile.mobile"
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
size="small"
|
size="small"
|
||||||
@click="() => handleOpenDialog(DialogType.MOBILE)"
|
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
v-if="userProfile.mobile"
|
@click="() => handleOpenDialog(DialogType.MOBILE)"
|
||||||
>
|
>
|
||||||
更换
|
更换
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
v-else
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
size="small"
|
size="small"
|
||||||
@click="() => handleOpenDialog(DialogType.MOBILE)"
|
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
v-else
|
@click="() => handleOpenDialog(DialogType.MOBILE)"
|
||||||
>
|
>
|
||||||
绑定
|
绑定
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -152,22 +152,22 @@
|
|||||||
</span>
|
</span>
|
||||||
<span v-else>未绑定邮箱</span>
|
<span v-else>未绑定邮箱</span>
|
||||||
<el-button
|
<el-button
|
||||||
|
v-if="userProfile.email"
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
size="small"
|
size="small"
|
||||||
@click="() => handleOpenDialog(DialogType.EMAIL)"
|
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
v-if="userProfile.email"
|
@click="() => handleOpenDialog(DialogType.EMAIL)"
|
||||||
>
|
>
|
||||||
更换
|
更换
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
v-else
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
size="small"
|
size="small"
|
||||||
@click="() => handleOpenDialog(DialogType.EMAIL)"
|
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
v-else
|
@click="() => handleOpenDialog(DialogType.EMAIL)"
|
||||||
>
|
>
|
||||||
绑定
|
绑定
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -178,12 +178,12 @@
|
|||||||
</el-tabs>
|
</el-tabs>
|
||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<el-dialog :title="dialog.title" v-model="dialog.visible" :width="500">
|
<el-dialog v-model="dialog.visible" :title="dialog.title" :width="500">
|
||||||
<!-- 账号资料 -->
|
<!-- 账号资料 -->
|
||||||
<el-form
|
<el-form
|
||||||
v-if="dialog.type === DialogType.ACCOUNT"
|
v-if="dialog.type === DialogType.ACCOUNT"
|
||||||
:model="userProfileForm"
|
|
||||||
ref="userProfileFormRef"
|
ref="userProfileFormRef"
|
||||||
|
:model="userProfileForm"
|
||||||
:label-width="100"
|
:label-width="100"
|
||||||
>
|
>
|
||||||
<el-form-item label="昵称">
|
<el-form-item label="昵称">
|
||||||
@@ -197,29 +197,29 @@
|
|||||||
<!-- 修改密码 -->
|
<!-- 修改密码 -->
|
||||||
<el-form
|
<el-form
|
||||||
v-if="dialog.type === DialogType.PASSWORD"
|
v-if="dialog.type === DialogType.PASSWORD"
|
||||||
|
ref="passwordChangeFormRef"
|
||||||
:model="passwordChangeForm"
|
:model="passwordChangeForm"
|
||||||
:rules="passwordChangeRules"
|
:rules="passwordChangeRules"
|
||||||
ref="passwordChangeFormRef"
|
|
||||||
:label-width="100"
|
:label-width="100"
|
||||||
>
|
>
|
||||||
<el-form-item label="原密码" prop="oldPassword">
|
<el-form-item label="原密码" prop="oldPassword">
|
||||||
<el-input
|
<el-input
|
||||||
type="password"
|
|
||||||
v-model="passwordChangeForm.oldPassword"
|
v-model="passwordChangeForm.oldPassword"
|
||||||
|
type="password"
|
||||||
show-password
|
show-password
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="新密码" prop="newPassword">
|
<el-form-item label="新密码" prop="newPassword">
|
||||||
<el-input
|
<el-input
|
||||||
type="password"
|
|
||||||
v-model="passwordChangeForm.newPassword"
|
v-model="passwordChangeForm.newPassword"
|
||||||
|
type="password"
|
||||||
show-password
|
show-password
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="确认密码" prop="confirmPassword">
|
<el-form-item label="确认密码" prop="confirmPassword">
|
||||||
<el-input
|
<el-input
|
||||||
type="password"
|
|
||||||
v-model="passwordChangeForm.confirmPassword"
|
v-model="passwordChangeForm.confirmPassword"
|
||||||
|
type="password"
|
||||||
show-password
|
show-password
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -227,9 +227,9 @@
|
|||||||
<!-- 绑定手机 -->
|
<!-- 绑定手机 -->
|
||||||
<el-form
|
<el-form
|
||||||
v-else-if="dialog.type === DialogType.MOBILE"
|
v-else-if="dialog.type === DialogType.MOBILE"
|
||||||
|
ref="mobileBindingFormRef"
|
||||||
:model="mobileBindingForm"
|
:model="mobileBindingForm"
|
||||||
:rules="mobileBindingRules"
|
:rules="mobileBindingRules"
|
||||||
ref="mobileBindingFormRef"
|
|
||||||
:label-width="100"
|
:label-width="100"
|
||||||
>
|
>
|
||||||
<el-form-item label="手机号码" prop="mobile">
|
<el-form-item label="手机号码" prop="mobile">
|
||||||
@@ -257,9 +257,9 @@
|
|||||||
<!-- 绑定邮箱 -->
|
<!-- 绑定邮箱 -->
|
||||||
<el-form
|
<el-form
|
||||||
v-else-if="dialog.type === DialogType.EMAIL"
|
v-else-if="dialog.type === DialogType.EMAIL"
|
||||||
|
ref="emailBindingFormRef"
|
||||||
:model="emailBindingForm"
|
:model="emailBindingForm"
|
||||||
:rules="emailBindingRules"
|
:rules="emailBindingRules"
|
||||||
ref="emailBindingFormRef"
|
|
||||||
:label-width="100"
|
:label-width="100"
|
||||||
>
|
>
|
||||||
<el-form-item label="邮箱" prop="email">
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div></div>
|
<div />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
<el-card shadow="never" class="table-container">
|
<el-card shadow="never" class="table-container">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-button
|
<el-button
|
||||||
type="success"
|
|
||||||
v-hasPerm="['sys:config:add']"
|
v-hasPerm="['sys:config:add']"
|
||||||
|
type="success"
|
||||||
@click="handleOpenDialog()"
|
@click="handleOpenDialog()"
|
||||||
>
|
>
|
||||||
<template #icon>
|
<template #icon>
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
新增
|
新增
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
color="#626aef"
|
|
||||||
v-hasPerm="['sys:config:refresh']"
|
v-hasPerm="['sys:config:refresh']"
|
||||||
|
color="#626aef"
|
||||||
@click="handleRefreshCache"
|
@click="handleRefreshCache"
|
||||||
>
|
>
|
||||||
<el-icon><RefreshLeft /></el-icon>
|
<el-icon><RefreshLeft /></el-icon>
|
||||||
@@ -85,10 +85,10 @@
|
|||||||
<el-table-column fixed="right" label="操作" width="220">
|
<el-table-column fixed="right" label="操作" width="220">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-hasPerm="['sys:config:update']"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
link
|
link
|
||||||
v-hasPerm="['sys:config:update']"
|
|
||||||
@click="handleOpenDialog(scope.row.id)"
|
@click="handleOpenDialog(scope.row.id)"
|
||||||
>
|
>
|
||||||
<template #icon>
|
<template #icon>
|
||||||
@@ -97,10 +97,10 @@
|
|||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
v-hasPerm="['sys:config:delete']"
|
||||||
type="danger"
|
type="danger"
|
||||||
size="small"
|
size="small"
|
||||||
link
|
link
|
||||||
v-hasPerm="['sys:config:delete']"
|
|
||||||
@click="handleDelete(scope.row.id)"
|
@click="handleDelete(scope.row.id)"
|
||||||
>
|
>
|
||||||
<template #icon>
|
<template #icon>
|
||||||
|
|||||||
@@ -303,7 +303,7 @@ function handleDelete(deptId?: number) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ElMessageBox.confirm(`确认删除已选中的数据项?`, "警告", {
|
ElMessageBox.confirm("确认删除已选中的数据项?", "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "warning",
|
type: "warning",
|
||||||
|
|||||||
@@ -148,8 +148,8 @@
|
|||||||
|
|
||||||
<el-form-item label="备注">
|
<el-form-item label="备注">
|
||||||
<el-input
|
<el-input
|
||||||
type="textarea"
|
|
||||||
v-model="formData.remark"
|
v-model="formData.remark"
|
||||||
|
type="textarea"
|
||||||
placeholder="请输入备注"
|
placeholder="请输入备注"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="createTime" label="操作时间">
|
<el-form-item prop="createTime" label="操作时间">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
|
v-model="queryParams.createTime"
|
||||||
:editable="false"
|
:editable="false"
|
||||||
class="!w-[240px]"
|
class="!w-[240px]"
|
||||||
v-model="queryParams.createTime"
|
|
||||||
type="daterange"
|
type="daterange"
|
||||||
range-separator="~"
|
range-separator="~"
|
||||||
start-placeholder="开始时间"
|
start-placeholder="开始时间"
|
||||||
|
|||||||
@@ -41,11 +41,11 @@
|
|||||||
highlight-current-row
|
highlight-current-row
|
||||||
row-key="id"
|
row-key="id"
|
||||||
:expand-row-keys="['1']"
|
:expand-row-keys="['1']"
|
||||||
@row-click="handleRowClick"
|
|
||||||
:tree-props="{
|
:tree-props="{
|
||||||
children: 'children',
|
children: 'children',
|
||||||
hasChildren: 'hasChildren',
|
hasChildren: 'hasChildren',
|
||||||
}"
|
}"
|
||||||
|
@row-click="handleRowClick"
|
||||||
>
|
>
|
||||||
<el-table-column label="菜单名称" min-width="200">
|
<el-table-column label="菜单名称" min-width="200">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@@ -165,8 +165,8 @@
|
|||||||
<el-drawer
|
<el-drawer
|
||||||
v-model="dialog.visible"
|
v-model="dialog.visible"
|
||||||
:title="dialog.title"
|
:title="dialog.title"
|
||||||
@close="handleCloseDialog"
|
|
||||||
size="50%"
|
size="50%"
|
||||||
|
@close="handleCloseDialog"
|
||||||
>
|
>
|
||||||
<el-form
|
<el-form
|
||||||
ref="menuFormRef"
|
ref="menuFormRef"
|
||||||
@@ -339,11 +339,11 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<el-icon
|
<el-icon
|
||||||
class="ml-2 cursor-pointer color-[var(--el-color-success)]"
|
|
||||||
style="vertical-align: -0.15em"
|
|
||||||
v-if="
|
v-if="
|
||||||
formData.params.indexOf(item) === formData.params.length - 1
|
formData.params.indexOf(item) === formData.params.length - 1
|
||||||
"
|
"
|
||||||
|
class="ml-2 cursor-pointer color-[var(--el-color-success)]"
|
||||||
|
style="vertical-align: -0.15em"
|
||||||
@click="formData.params.push({ key: '', value: '' })"
|
@click="formData.params.push({ key: '', value: '' })"
|
||||||
>
|
>
|
||||||
<CirclePlusFilled />
|
<CirclePlusFilled />
|
||||||
@@ -459,7 +459,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "Menu",
|
name: "SysMenu",
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@
|
|||||||
<span>通知公告详情</span>
|
<span>通知公告详情</span>
|
||||||
<div class="dialog-toolbar">
|
<div class="dialog-toolbar">
|
||||||
<!-- 全屏/退出全屏按钮 -->
|
<!-- 全屏/退出全屏按钮 -->
|
||||||
<el-button @click="toggleFullscreen" circle>
|
<el-button circle @click="toggleFullscreen">
|
||||||
<SvgIcon v-if="isFullscreen" icon-class="fullscreen-exit" />
|
<SvgIcon v-if="isFullscreen" icon-class="fullscreen-exit" />
|
||||||
<SvgIcon v-else icon-class="fullscreen" />
|
<SvgIcon v-else icon-class="fullscreen" />
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 关闭按钮 -->
|
<!-- 关闭按钮 -->
|
||||||
<el-button @click="handleClose" circle>
|
<el-button circle @click="handleClose">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<Close />
|
<Close />
|
||||||
</template>
|
</template>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
{{ notice.publishTime }}
|
{{ notice.publishTime }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="公告内容:">
|
<el-descriptions-item label="公告内容:">
|
||||||
<div v-html="notice.content"></div>
|
<div v-html="notice.content" />
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
<el-table-column label="通知标题" prop="title" min-width="200" />
|
<el-table-column label="通知标题" prop="title" min-width="200" />
|
||||||
<el-table-column align="center" label="通知类型" width="150">
|
<el-table-column align="center" label="通知类型" width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<DictLabel :code="'notice_type'" v-model="scope.row.type" />
|
<DictLabel v-model="scope.row.type" :code="'notice_type'" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
/>
|
/>
|
||||||
<el-table-column align="center" label="通知等级" width="100">
|
<el-table-column align="center" label="通知等级" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<DictLabel code="notice_level" v-model="scope.row.level" />
|
<DictLabel v-model="scope.row.level" code="notice_level" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -140,8 +140,8 @@
|
|||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
@click="openNoticeDetailDialog(scope.row.id)"
|
|
||||||
link
|
link
|
||||||
|
@click="openNoticeDetailDialog(scope.row.id)"
|
||||||
>
|
>
|
||||||
查看
|
查看
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -223,16 +223,16 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="通知类型" prop="type">
|
<el-form-item label="通知类型" prop="type">
|
||||||
<dictionary
|
<dictionary
|
||||||
|
v-model="formData.type"
|
||||||
type="button"
|
type="button"
|
||||||
code="notice_type"
|
code="notice_type"
|
||||||
v-model="formData.type"
|
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="通知等级" prop="level">
|
<el-form-item label="通知等级" prop="level">
|
||||||
<dictionary
|
<dictionary
|
||||||
|
v-model="formData.level"
|
||||||
type="button"
|
type="button"
|
||||||
code="notice_level"
|
code="notice_level"
|
||||||
v-model="formData.level"
|
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="目标类型" prop="targetType">
|
<el-form-item label="目标类型" prop="targetType">
|
||||||
@@ -242,9 +242,9 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
|
v-if="formData.targetType == 2"
|
||||||
label="指定用户"
|
label="指定用户"
|
||||||
prop="targetUserIds"
|
prop="targetUserIds"
|
||||||
v-if="formData.targetType == 2"
|
|
||||||
>
|
>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.targetUserIds"
|
v-model="formData.targetUserIds"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<el-table-column label="通知标题" prop="title" min-width="200" />
|
<el-table-column label="通知标题" prop="title" min-width="200" />
|
||||||
<el-table-column align="center" label="通知类型" width="150">
|
<el-table-column align="center" label="通知类型" width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<DictLabel code="notice_type" v-model="scope.row.type" />
|
<DictLabel v-model="scope.row.type" code="notice_type" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -49,12 +49,12 @@
|
|||||||
/>
|
/>
|
||||||
<el-table-column align="center" label="通知等级" width="100">
|
<el-table-column align="center" label="通知等级" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<DictLabel code="notice_level" v-model="scope.row.level" />
|
<DictLabel v-model="scope.row.level" code="notice_level" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
align="center"
|
|
||||||
key="releaseTime"
|
key="releaseTime"
|
||||||
|
align="center"
|
||||||
label="发布时间"
|
label="发布时间"
|
||||||
prop="publishTime"
|
prop="publishTime"
|
||||||
width="150"
|
width="150"
|
||||||
|
|||||||
@@ -185,8 +185,8 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="parentChildLinked"
|
v-model="parentChildLinked"
|
||||||
@change="handleparentChildLinkedChange"
|
|
||||||
class="ml-5"
|
class="ml-5"
|
||||||
|
@change="handleparentChildLinkedChange"
|
||||||
>
|
>
|
||||||
父子联动
|
父子联动
|
||||||
</el-checkbox>
|
</el-checkbox>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<el-input v-model="deptName" placeholder="部门名称" clearable>
|
<el-input v-model="deptName" placeholder="部门名称" clearable>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<Search />
|
<el-icon><Search /></el-icon>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
>
|
>
|
||||||
<el-form-item label="文件名" prop="files">
|
<el-form-item label="文件名" prop="files">
|
||||||
<el-upload
|
<el-upload
|
||||||
class="w-full"
|
|
||||||
ref="uploadRef"
|
ref="uploadRef"
|
||||||
v-model:file-list="importFormData.files"
|
v-model:file-list="importFormData.files"
|
||||||
|
class="w-full"
|
||||||
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
||||||
:drag="true"
|
:drag="true"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
|
|||||||
@@ -35,9 +35,9 @@
|
|||||||
|
|
||||||
<el-form-item label="创建时间">
|
<el-form-item label="创建时间">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
|
v-model="queryParams.createTime"
|
||||||
:editable="false"
|
:editable="false"
|
||||||
class="!w-[240px]"
|
class="!w-[240px]"
|
||||||
v-model="queryParams.createTime"
|
|
||||||
type="daterange"
|
type="daterange"
|
||||||
range-separator="~"
|
range-separator="~"
|
||||||
start-placeholder="开始时间"
|
start-placeholder="开始时间"
|
||||||
|
|||||||
Reference in New Issue
Block a user