1111
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
<!--
|
||||
* 主应用页面
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-12 23:46:47
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
|
||||
<template>
|
||||
<a-config-provider :locale="antdLocale">
|
||||
<!---全局loading--->
|
||||
<a-spin :spinning="spinning" tip="稍等片刻,我在拼命加载中..." size="large">
|
||||
<!--- 路由 -->
|
||||
<RouterView />
|
||||
</a-spin>
|
||||
</a-config-provider>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import dayjs from 'dayjs';
|
||||
import { computed } from 'vue';
|
||||
import { messages } from '/@/i18n/index';
|
||||
import { useAppConfigStore } from '/@/store/modules/system/app-config';
|
||||
import { useSpinStore } from './store/modules/system/spin';
|
||||
|
||||
const antdLocale = computed(() => messages[useAppConfigStore().language].antdLocale);
|
||||
const dayjsLocale = computed(() => messages[useAppConfigStore().language].dayjsLocale);
|
||||
dayjs.locale(dayjsLocale);
|
||||
|
||||
let spinStore = useSpinStore();
|
||||
const spinning = computed(() => spinStore.loading);
|
||||
</script>
|
||||
<style lang="less">
|
||||
.my-full-modal{
|
||||
position: relative;
|
||||
.ant-modal{
|
||||
max-width: 100%;
|
||||
top: 0;
|
||||
padding-bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.ant-modal-content{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: calc(100vh);
|
||||
.ant-modal-footer {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
.ant-modal-body{
|
||||
position: relative;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* 省市区 api 封装
|
||||
*
|
||||
* @Author: HMM
|
||||
* @Date: 2024-01-12 16:03:16
|
||||
* @Copyright gdxz
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const areaApi = {
|
||||
|
||||
/**
|
||||
* 分页查询 @author HMM
|
||||
*/
|
||||
queryPage : (param) => {
|
||||
return postRequest('/area/queryPage', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 省份列表 @author HMM
|
||||
*/
|
||||
provList: () => {
|
||||
return getRequest('/area/provList', );
|
||||
},
|
||||
|
||||
/**
|
||||
* 城市列表 @author HMM
|
||||
*/
|
||||
cityList: (parent) => {
|
||||
return getRequest(`/area/cityList/${parent}`, );
|
||||
},
|
||||
|
||||
};
|
||||
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* 病例表 api 封装
|
||||
*
|
||||
* @Author: HMM
|
||||
* @Date: 2024-01-11 15:18:32
|
||||
* @Copyright gdxz
|
||||
*/
|
||||
import { postRequest, getRequest, download,uploadRequest } from '/@/lib/axios';
|
||||
|
||||
export const caseplatformCaseApi = {
|
||||
|
||||
/**
|
||||
* 分页查询 @author HMM
|
||||
*/
|
||||
queryPage : (param) => {
|
||||
return postRequest('/caseplatformCase/queryPage', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 增加 @author HMM
|
||||
*/
|
||||
add: (param) => {
|
||||
return postRequest('/caseplatformCase/add', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 修改 @author HMM
|
||||
*/
|
||||
update: (param) => {
|
||||
return postRequest('/caseplatformCase/update', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 详情 @author HMM
|
||||
*/
|
||||
getDetail: (caseId) => {
|
||||
return getRequest(`/caseplatformCase/get/${caseId}`);
|
||||
},
|
||||
// 导入数据 @author HMM
|
||||
importData: (param) => {
|
||||
return uploadRequest('/caseplatformCase/settlementImport', param);
|
||||
},
|
||||
/**
|
||||
* 审核 @author HMM
|
||||
*/
|
||||
examine: (caseId, status) => {
|
||||
return getRequest(`/caseplatformCase/examine/${caseId}/${status}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 审核 @author HMM
|
||||
*/
|
||||
settlement: (caseId) => {
|
||||
return getRequest(`/caseplatformCase/settlement/${caseId}`);
|
||||
},
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 审核 @author HMM
|
||||
*/
|
||||
cancelExamine: (param) => {
|
||||
return postRequest(`/caseplatformCase/cancelExamine`, param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出excle @author HMM
|
||||
*/
|
||||
exportExcel: (param) => {
|
||||
return download('www.xls',`/caseplatformCase/exportExcel`,param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出excle @author HMM
|
||||
*/
|
||||
exportEasyExcel: (param) => {
|
||||
return download('列表数据导出.xlsx',`/caseplatformCase/exportEasyExcel`, param);
|
||||
},
|
||||
exportSettlementExcel: (param) => {
|
||||
return download('结算数据导出.xlsx',`/caseplatformCase/settlementExcel`, param);
|
||||
},
|
||||
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* 统计 api 封装
|
||||
*
|
||||
* @Author: HMM
|
||||
* @Date: 2024-01-11 15:18:32
|
||||
* @Copyright gdxz
|
||||
*/
|
||||
import { postRequest, getRequest,download } from '/@/lib/axios';
|
||||
|
||||
export const statisticsApi = {
|
||||
|
||||
/**
|
||||
* 病例统计分页查询 @author HMM
|
||||
*/
|
||||
queryPage : (param) => {
|
||||
return postRequest('/statistics/expert/queryPage', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 病例统计 @author HMM
|
||||
*/
|
||||
getSystemActualNum : (param) => {
|
||||
return postRequest('/statistics/case/getSystemActualNum', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 病例统计 echar @author HMM
|
||||
*/
|
||||
getSystemActualEcharsData : (param) => {
|
||||
return postRequest('/statistics/case/getSystemActualEcharsData', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 医院列表查询 @author HMM
|
||||
*/
|
||||
getHospitalList : (param) => {
|
||||
return postRequest('/statistics/getHospitalList', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出excle @author HMM
|
||||
*/
|
||||
exportEasyExcel: (param) => {
|
||||
return download('医生统计数据导出.xlsx',`/statistics/exportEasyExcel`, param);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 类目api
|
||||
*
|
||||
* @Author: 卓大
|
||||
* @Date: 2022-09-03 21:35:00
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
|
||||
export const categoryApi = {
|
||||
// 添加类目 @author 卓大
|
||||
addCategory: (param) => {
|
||||
return postRequest('/category/add', param);
|
||||
},
|
||||
// GET
|
||||
// 删除类目 @author 卓大
|
||||
deleteCategoryById: (categoryId) => {
|
||||
return getRequest(`/category/delete/${categoryId}`);
|
||||
},
|
||||
// 查询类目层级树 @author 卓大
|
||||
queryCategoryTree: (param) => {
|
||||
return postRequest('/category/tree', param);
|
||||
},
|
||||
// 更新类目 @author 卓大
|
||||
updateCategory: (param) => {
|
||||
return postRequest('/category/update', param);
|
||||
},
|
||||
// 查询类目详情 @author 卓大
|
||||
getCategory: (categoryId) => {
|
||||
return getRequest(`/category/${categoryId}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Author: zhuoda
|
||||
* @Date: 2021-11-05
|
||||
* @LastEditTime: 2022-06-23
|
||||
* @LastEditors: zhuoda
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const goodsApi = {
|
||||
// 添加商品 @author zhuoda
|
||||
addGoods: (param) => {
|
||||
return postRequest('/goods/add', param);
|
||||
},
|
||||
// 删除 @author zhuoda
|
||||
deleteGoods: (goodsId) => {
|
||||
return getRequest(`/goods/delete/${goodsId}`);
|
||||
},
|
||||
// 批量 @author zhuoda
|
||||
batchDelete: (goodsIdList) => {
|
||||
return postRequest('/goods/batchDelete', goodsIdList);
|
||||
},
|
||||
// 分页查询 @author zhuoda
|
||||
queryGoodsList: (param) => {
|
||||
return postRequest('/goods/query', param);
|
||||
},
|
||||
// 更新商品 @author zhuoda
|
||||
updateGoods: (param) => {
|
||||
return postRequest('/goods/update', param);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* 病例表 api 封装
|
||||
*
|
||||
* @Author: HMM
|
||||
* @Date: 2024-01-11 15:18:32
|
||||
* @Copyright gdxz
|
||||
*/
|
||||
import { postRequest, getRequest, download,uploadRequest } from '/@/lib/axios';
|
||||
|
||||
export const manageApi = {
|
||||
|
||||
/**
|
||||
* 分页查询 @author HMM
|
||||
*/
|
||||
queryPage : (param) => {
|
||||
return postRequest('/caseplatformExpertWhite/queryPage', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 增加 @author HMM
|
||||
*/
|
||||
add: (param) => {
|
||||
return postRequest('/caseplatformCase/add', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 修改 @author HMM
|
||||
*/
|
||||
update: (param) => {
|
||||
return postRequest('/caseplatformCase/update', param);
|
||||
},
|
||||
// 导入数据 @author HMM
|
||||
importData: (param) => {
|
||||
return uploadRequest('/caseplatformExpertWhite/import', param);
|
||||
},
|
||||
/**
|
||||
* 详情 @author HMM
|
||||
*/
|
||||
getDetail: (caseId) => {
|
||||
return getRequest(`/caseplatformCase/get/${caseId}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 审核 @author HMM
|
||||
*/
|
||||
examine: (caseId, status) => {
|
||||
return getRequest(`/caseplatformCase/examine/${caseId}/${status}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 审核 @author HMM
|
||||
*/
|
||||
settlement: (caseId) => {
|
||||
return getRequest(`/caseplatformCase/settlement/${caseId}`);
|
||||
},
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 审核 @author HMM
|
||||
*/
|
||||
cancelExamine: (param) => {
|
||||
return postRequest(`/caseplatformCase/cancelExamine`, param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出excle @author HMM
|
||||
*/
|
||||
exportExcel: (param) => {
|
||||
return download('www.xls',`/caseplatformCase/exportExcel`,param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出excle @author HMM
|
||||
*/
|
||||
exportEasyExcel: (param) => {
|
||||
return download('数据导出.xlsx',`/caseplatformCase/exportEasyExcel`, param);
|
||||
},
|
||||
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 银行卡
|
||||
*
|
||||
* @Author: 善逸
|
||||
* @Date: 2022-09-03 21:42:08
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const bankApi = {
|
||||
// 新建银行信息 @author 善逸
|
||||
create: (param) => {
|
||||
return postRequest('/oa/bank/create', param);
|
||||
},
|
||||
|
||||
// 删除银行信息 @author 善逸
|
||||
delete: (bankId) => {
|
||||
return getRequest(`/oa/bank/delete/${bankId}`);
|
||||
},
|
||||
|
||||
// 查询银行信息详情 @author 善逸
|
||||
detail: (bankId) => {
|
||||
return getRequest(`/oa/bank/get/${bankId}`);
|
||||
},
|
||||
|
||||
// 分页查询银行信息 @author 善逸
|
||||
pageQuery: (param) => {
|
||||
return postRequest('/oa/bank/page/query', param);
|
||||
},
|
||||
|
||||
// 编辑银行信息 @author 善逸
|
||||
update: (param) => {
|
||||
return postRequest('/oa/bank/update', param);
|
||||
},
|
||||
|
||||
// 根据企业ID查询不分页的银行列表 @author 善逸
|
||||
queryList: (enterpriseId) => {
|
||||
return getRequest(`/oa/bank/query/list/${enterpriseId}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* 企业信息
|
||||
*
|
||||
* @Author: 开云
|
||||
* @Date: 2022-09-03 21:47:28
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const enterpriseApi = {
|
||||
// 新建企业 @author 开云
|
||||
create: (param) => {
|
||||
return postRequest('/oa/enterprise/create', param);
|
||||
},
|
||||
|
||||
// 删除企业 @author 开云
|
||||
delete: (enterpriseId) => {
|
||||
return getRequest(`/oa/enterprise/delete/${enterpriseId}`);
|
||||
},
|
||||
|
||||
// 查询企业详情 @author 开云
|
||||
detail: (enterpriseId) => {
|
||||
return getRequest(`/oa/enterprise/get/${enterpriseId}`);
|
||||
},
|
||||
|
||||
// 分页查询企业模块 @author 开云
|
||||
pageQuery: (param) => {
|
||||
return postRequest('/oa/enterprise/page/query', param);
|
||||
},
|
||||
|
||||
//企业列表查询 含数据范围 @author 开云
|
||||
queryList: (type) => {
|
||||
let query = '';
|
||||
if (type) {
|
||||
query = `?type=${type}`;
|
||||
}
|
||||
return getRequest(`/oa/enterprise/query/list${query}`);
|
||||
},
|
||||
|
||||
// 编辑企业 @author 开云
|
||||
update: (param) => {
|
||||
return postRequest('/oa/enterprise/update', param);
|
||||
},
|
||||
// 企业全部员工List @author yandy
|
||||
employeeList: (param) => {
|
||||
return postRequest('/oa/enterprise/employee/list', param);
|
||||
},
|
||||
// 分页查询企业员工List @author 卓大
|
||||
queryPageEmployeeList: (param) => {
|
||||
return postRequest('/oa/enterprise/employee/queryPage', param);
|
||||
},
|
||||
// 添加员工 @author yandy
|
||||
addEmployee: (param) => {
|
||||
return postRequest('/oa/enterprise/employee/add', param);
|
||||
},
|
||||
|
||||
// 删除员工 @author yandy
|
||||
deleteEmployee: (param) => {
|
||||
return postRequest('/oa/enterprise/employee/delete', param);
|
||||
},
|
||||
|
||||
};
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* OA发票信息
|
||||
*
|
||||
* @Author: 善逸
|
||||
* @Date: 2022-09-03 21:48:54
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const invoiceApi = {
|
||||
|
||||
// 新建发票信息 @author 善逸
|
||||
create: (param) => {
|
||||
return postRequest('/oa/invoice/create', param);
|
||||
},
|
||||
|
||||
// 删除发票信息 @author 善逸
|
||||
delete: (bankId) => {
|
||||
return getRequest(`/oa/invoice/delete/${bankId}`);
|
||||
},
|
||||
|
||||
// 查询发票信息详情 @author 善逸
|
||||
detail: (bankId) => {
|
||||
return getRequest(`//oa/invoice/get/${bankId}`);
|
||||
},
|
||||
|
||||
// 分页查询发票信息 @author 善逸
|
||||
pageQuery: (param) => {
|
||||
return postRequest('/oa/invoice/page/query', param);
|
||||
},
|
||||
|
||||
// 编辑发票信息 @author 善逸
|
||||
update: (param) => {
|
||||
return postRequest('/oa/invoice/update', param);
|
||||
},
|
||||
|
||||
// 查询发票列表 @author 善逸
|
||||
queryList: (enterpriseId) => {
|
||||
return getRequest(`/oa/invoice/query/list/${enterpriseId}`);
|
||||
},
|
||||
|
||||
};
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* @Description: 公告信息、企业动态
|
||||
* @version:
|
||||
* @Author: zhuoda
|
||||
* @Date: 2022-08-16 20:34:36
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const noticeApi = {
|
||||
// ---------------- 通知公告类型 -----------------------
|
||||
|
||||
// 通知公告类型-获取全部 @author zhuoda
|
||||
getAllNoticeTypeList() {
|
||||
return getRequest('/oa/noticeType/getAll');
|
||||
},
|
||||
|
||||
// 通知公告类型-添加 @author zhuoda
|
||||
addNoticeType(name) {
|
||||
return getRequest(`/oa/noticeType/add/${name}`);
|
||||
},
|
||||
|
||||
// 通知公告类型-修改 @author zhuoda
|
||||
updateNoticeType(noticeTypeId, name) {
|
||||
return getRequest(`/oa/noticeType/update/${noticeTypeId}/${name}`);
|
||||
},
|
||||
// 通知公告类型-删除 @author zhuoda
|
||||
deleteNoticeType(noticeTypeId) {
|
||||
return getRequest(`/oa/noticeType/delete/${noticeTypeId}`);
|
||||
},
|
||||
|
||||
// ---------------- 通知公告管理 -----------------------
|
||||
|
||||
// 通知公告-分页查询 @author zhuoda
|
||||
queryNotice(param) {
|
||||
return postRequest('/oa/notice/query', param);
|
||||
},
|
||||
|
||||
// 通知公告-添加 @author zhuoda
|
||||
addNotice(param) {
|
||||
return postRequest('/oa/notice/add', param);
|
||||
},
|
||||
|
||||
// 通知公告-更新 @author zhuoda
|
||||
updateNotice(param) {
|
||||
return postRequest('/oa/notice/update', param);
|
||||
},
|
||||
|
||||
// 通知公告-删除 @author zhuoda
|
||||
deleteNotice(noticeId) {
|
||||
return getRequest(`/oa/notice/delete/${noticeId}`);
|
||||
},
|
||||
|
||||
// 通知公告-更新详情 @author zhuoda
|
||||
getUpdateNoticeInfo(noticeId) {
|
||||
return getRequest(`/oa/notice/getUpdateVO/${noticeId}`);
|
||||
},
|
||||
|
||||
// --------------------- 【员工】查看 通知公告 -------------------------
|
||||
|
||||
// 通知公告-员工-查看详情 @author zhuoda
|
||||
view(noticeId) {
|
||||
return getRequest(`/oa/notice/employee/view/${noticeId}`);
|
||||
},
|
||||
|
||||
// 通知公告-员工-查询 @author zhuoda
|
||||
queryEmployeeNotice(param) {
|
||||
return postRequest('/oa/notice/employee/query', param);
|
||||
},
|
||||
|
||||
// 【员工】通知公告-查询 查看记录 @author zhuoda
|
||||
queryViewRecord(param) {
|
||||
return postRequest('/oa/notice/employee/queryViewRecord', param);
|
||||
},
|
||||
};
|
||||
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* 缓存
|
||||
*
|
||||
* @Author: 罗伊
|
||||
* @Date: 2022-09-03 21:51:34
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const cacheApi = {
|
||||
// 获取某个缓存的所有key @author 罗伊
|
||||
getKeys: (cacheName) => {
|
||||
return getRequest(`/support/cache/keys/${cacheName}`);
|
||||
},
|
||||
// 移除某个缓存 @author 罗伊
|
||||
remove: (cacheName) => {
|
||||
return getRequest(`/support/cache/remove/${cacheName}`);
|
||||
},
|
||||
// 获取所有缓存 @author 罗伊
|
||||
getAllCacheNames: () => {
|
||||
return getRequest('/support/cache/names');
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* 系统更新日志 api 封装
|
||||
*
|
||||
* @Author: 卓大
|
||||
* @Date: 2022-09-26 14:53:50
|
||||
* @Copyright 1024创新实验室
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const changeLogApi = {
|
||||
/**
|
||||
* 分页查询 @author 卓大
|
||||
*/
|
||||
queryPage : (param) => {
|
||||
return postRequest('/changeLog/queryPage', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 增加 @author 卓大
|
||||
*/
|
||||
add: (param) => {
|
||||
return postRequest('/changeLog/add', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 修改 @author 卓大
|
||||
*/
|
||||
update: (param) => {
|
||||
return postRequest('/changeLog/update', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除 @author 卓大
|
||||
*/
|
||||
delete: (id) => {
|
||||
return getRequest(`/changeLog/delete/${id}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量删除 @author 卓大
|
||||
*/
|
||||
batchDelete: (idList) => {
|
||||
return postRequest('/changeLog/batchDelete', idList);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 代码生成器
|
||||
*
|
||||
* @Author: 卓大
|
||||
* @Date: 2022-09-03 21:51:54
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest,download } from '/@/lib/axios';
|
||||
|
||||
export const codeGeneratorApi = {
|
||||
// 查询数据库的表 @author 卓大
|
||||
queryTableList: (param) => {
|
||||
return postRequest('/support/codeGenerator/table/queryTableList', param);
|
||||
},
|
||||
|
||||
// 查询表的列 @author 卓大
|
||||
getTableColumns: (table) => {
|
||||
return getRequest(`/support/codeGenerator/table/getTableColumns/${table}`);
|
||||
},
|
||||
|
||||
// ------------------- 配置 -------------------
|
||||
|
||||
// 获取表的配置信息 @author 卓大
|
||||
getConfig: (table) => {
|
||||
return getRequest(`/support/codeGenerator/table/getConfig/${table}`);
|
||||
},
|
||||
|
||||
// 更新配置信息 @author 卓大
|
||||
updateConfig: (param) => {
|
||||
return postRequest('/support/codeGenerator/table/updateConfig', param);
|
||||
},
|
||||
|
||||
// ------------------- 生成 -------------------
|
||||
|
||||
// 预览代码 @author 卓大
|
||||
preview: (param) => {
|
||||
return postRequest('/support/codeGenerator/code/preview', param);
|
||||
},
|
||||
|
||||
// 下载代码 @author 卓大
|
||||
downloadCode: (tableName) => {
|
||||
return download(`${tableName}.zip`,`/support/codeGenerator/code/download/${tableName}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 配置
|
||||
*
|
||||
* @Author: 卓大
|
||||
* @Date: 2022-09-03 21:51:54
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const configApi = {
|
||||
// 分页查询 @author 卓大
|
||||
queryList: (param) => {
|
||||
return postRequest('/support/config/query', param);
|
||||
},
|
||||
// 添加配置参数 @author 卓大
|
||||
addConfig: (param) => {
|
||||
return postRequest('/support/config/add', param);
|
||||
},
|
||||
// 修改配置参数 @author 卓大
|
||||
updateConfig: (param) => {
|
||||
return postRequest('/support/config/update', param);
|
||||
},
|
||||
// 查询配置详情 @author 卓大
|
||||
queryByKey: (param) => {
|
||||
return getRequest(`/support/config/queryByKey?configKey=${param}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 数据变动
|
||||
*
|
||||
* @Author: 卓大
|
||||
* @Date: 2022-09-03 21:51:54
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest } from '/@/lib/axios';
|
||||
|
||||
export const dataTracerApi = {
|
||||
// 分页查询业务操作日志 - @author 卓大
|
||||
queryList: (param) => {
|
||||
return postRequest('/support/dataTracer/query', param);
|
||||
},
|
||||
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 字典
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:55:25
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const dictApi = {
|
||||
// 分页查询数据字典KEY - @author 卓大
|
||||
keyQuery: (param) => {
|
||||
return postRequest('/support/dict/key/query', param);
|
||||
},
|
||||
// 查询全部字典key - @author 卓大
|
||||
queryAllKey: () => {
|
||||
return getRequest('/support/dict/key/queryAll');
|
||||
},
|
||||
/**
|
||||
* 分页查询数据字典value - @author 卓大
|
||||
*/
|
||||
valueQuery: (param) => {
|
||||
return postRequest('/support/dict/value/query', param);
|
||||
},
|
||||
// 数据字典KEY-添加- @author 卓大
|
||||
keyAdd: (param) => {
|
||||
return postRequest('/support/dict/key/add', param);
|
||||
},
|
||||
// 分页查询数据字典value - @author 卓大
|
||||
valueAdd: (param) => {
|
||||
return postRequest('/support/dict/value/add', param);
|
||||
},
|
||||
// 数据字典key-更新- @author 卓大
|
||||
keyEdit: (param) => {
|
||||
return postRequest('/support/dict/key/edit', param);
|
||||
},
|
||||
// 数据字典Value-更新- @author 卓大
|
||||
valueEdit: (param) => {
|
||||
return postRequest('/support/dict/value/edit', param);
|
||||
},
|
||||
// 数据字典key-删除- @author 卓大
|
||||
keyDelete: (keyIdList) => {
|
||||
return postRequest('/support/dict/key/delete', keyIdList);
|
||||
},
|
||||
// 数据字典Value-删除- @author 卓大
|
||||
valueDelete: (valueIdList) => {
|
||||
return postRequest('/support/dict/value/delete', valueIdList);
|
||||
},
|
||||
// 缓存刷新- @author 卓大
|
||||
cacheRefresh: () => {
|
||||
return getRequest('/support/dict/cache/refresh');
|
||||
},
|
||||
// 数据字典-值列表- @author 卓大
|
||||
valueList: (keyCode) => {
|
||||
return getRequest(`/support/dict/value/list/${keyCode}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* 意见反馈
|
||||
*
|
||||
* @Author: 1024创新实验室:开云
|
||||
* @Date: 2022-09-03 21:56:31
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest } from '/@/lib/axios';
|
||||
|
||||
export const feedbackApi = {
|
||||
// 意见反馈-新增
|
||||
addFeedback: (params) => {
|
||||
return postRequest('/support/feedback/add', params);
|
||||
},
|
||||
// 意见反馈-分页查询
|
||||
queryFeedback: (params) => {
|
||||
return postRequest('/support/feedback/query', params);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 文件上传
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:55:25
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest, download } from '/@/lib/axios';
|
||||
|
||||
export const fileApi = {
|
||||
// 文件上传 @author 卓大
|
||||
uploadUrl: '/support/file/upload',
|
||||
uploadFile: (param, folder) => {
|
||||
return postRequest(`/support/file/upload?folder=${folder}`, param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 分页查询 @author 卓大
|
||||
*/
|
||||
queryPage: (param) => {
|
||||
return postRequest('/support/file/queryPage', param);
|
||||
},
|
||||
/**
|
||||
* 获取文件URL:根据fileKey @author 胡克
|
||||
*/
|
||||
getUrl: (fileKey) => {
|
||||
return getRequest(`/support/file/getFileUrl?fileKey=${fileKey}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 下载文件流(根据fileKey) @author 胡克
|
||||
*/
|
||||
downLoadFile: (fileName, fileKey) => {
|
||||
return download(fileName, '/support/file/downLoad', { fileKey });
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* 心跳
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:55:47
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest } from '/@/lib/axios';
|
||||
|
||||
export const heartBeatApi = {
|
||||
// 分页查询 @author 卓大
|
||||
queryList: (param) => {
|
||||
return postRequest('/support/heartBeat/query', param);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 帮助文档
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:56:31
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const helpDocApi = {
|
||||
// 【管理】帮助文档-分页查询 @author zhuoda
|
||||
query: (param) => {
|
||||
return postRequest('/support/helpDoc/query', param);
|
||||
},
|
||||
|
||||
//【管理】帮助文档-更新 @author zhuoda
|
||||
update: (param) => {
|
||||
return postRequest('/support/helpDoc/update', param);
|
||||
},
|
||||
|
||||
// 【管理】帮助文档-添加 @author zhuoda
|
||||
add: (param) => {
|
||||
return postRequest('/support/helpDoc/add', param);
|
||||
},
|
||||
|
||||
//【管理】帮助文档-删除 @author zhuoda
|
||||
delete: (helpDocId) => {
|
||||
return getRequest(`/support/helpDoc/delete/${helpDocId}`);
|
||||
},
|
||||
|
||||
//【管理】帮助文档-获取详情 @author zhuoda
|
||||
getDetail: (helpDocId) => {
|
||||
return getRequest(`/support/helpDoc/getDetail/${helpDocId}`);
|
||||
},
|
||||
|
||||
//【管理】帮助文档-根据关联id查询 @author zhuoda
|
||||
queryHelpDocByRelationId: (relationId) => {
|
||||
return getRequest(`/support/helpDoc/queryHelpDocByRelationId/${relationId}`);
|
||||
},
|
||||
|
||||
//----------------------- 用户相关 --------------------------------
|
||||
|
||||
//【用户】帮助文档-查询全部 @author zhuoda
|
||||
getAllHelpDocList() {
|
||||
return getRequest('/support/helpDoc/user/queryAllHelpDocList');
|
||||
},
|
||||
|
||||
//【用户】帮助文档-查询全部 @author zhuoda
|
||||
view(helpDocId) {
|
||||
return getRequest(`/support/helpDoc/user/view/${helpDocId}`);
|
||||
},
|
||||
|
||||
//【用户】帮助文档-查询 查看记录 @author zhuoda
|
||||
queryViewRecord(param) {
|
||||
return postRequest('/support/helpDoc/user/queryViewRecord', param);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 帮助文档 目录
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:56:31
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const helpDocCatalogApi = {
|
||||
//帮助文档目录-获取全部 @author zhuoda
|
||||
getAll: () => {
|
||||
return getRequest('/support/helpDoc/helpDocCatalog/getAll');
|
||||
},
|
||||
|
||||
//帮助文档目录-添加 @author zhuoda
|
||||
add: (param) => {
|
||||
return postRequest('/support/helpDoc/helpDocCatalog/add', param);
|
||||
},
|
||||
|
||||
//帮助文档目录-更新 @author zhuoda
|
||||
update: (param) => {
|
||||
return postRequest('/support/helpDoc/helpDocCatalog/update', param);
|
||||
},
|
||||
|
||||
//帮助文档目录-删除 @author zhuoda
|
||||
delete: (helpDocCatalogId) => {
|
||||
return getRequest(`/support/helpDoc/helpDocCatalog/delete/${helpDocCatalogId}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* 登录日志
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:56:31
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const loginLogApi = {
|
||||
// 分页查询 @author 卓大
|
||||
queryList: (param) => {
|
||||
return postRequest('/support/loginLog/page/query', param);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* 操作日志
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:56:45
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const operateLogApi = {
|
||||
// 分页查询 @author 卓大
|
||||
queryList: (param) => {
|
||||
return postRequest('/support/operateLog/page/query', param);
|
||||
},
|
||||
// 详情 @author 卓大
|
||||
detail: (id) => {
|
||||
return getRequest(`/support/operateLog/detail/${id}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* reload (内存热加载、钩子等)
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:57:19
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const reloadApi = {
|
||||
// 查询reload列表 @author 卓大
|
||||
queryList: () => {
|
||||
return getRequest('/support/reload/query');
|
||||
},
|
||||
// 获取reload result @author 卓大
|
||||
queryReloadResult: (tag) => {
|
||||
return getRequest(`/support/reload/result/${tag}`);
|
||||
},
|
||||
// 执行reload @author 卓大
|
||||
reload: (reloadForm) => {
|
||||
return postRequest('/support/reload/update', reloadForm);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* 单据序列号
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:57:52
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const serialNumberApi = {
|
||||
// 生成单号 @author 卓大
|
||||
generate: (generateForm) => {
|
||||
return postRequest('/support/serialNumber/generate', generateForm);
|
||||
},
|
||||
// 获取所有单号定义 @author 卓大
|
||||
getAll: () => {
|
||||
return getRequest('/support/serialNumber/all');
|
||||
},
|
||||
// 获取生成记录 @author 卓大
|
||||
queryRecord: (form) => {
|
||||
return postRequest('/support/serialNumber/queryRecord', form);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* @Description:表格自定义列
|
||||
* @version:
|
||||
* @Author: zhuoda
|
||||
* @Date: 2022-08-17 23:32:36
|
||||
* @LastEditors: zhuoda
|
||||
* @LastEditTime: 2022-08-21
|
||||
*/
|
||||
import { postRequest, getRequest } from '/@/lib/axios';
|
||||
|
||||
export const tableColumnApi = {
|
||||
// 修改表格列 @author zhuoda
|
||||
updateTableColumn: (param) => {
|
||||
return postRequest('/support/tableColumn/update', param);
|
||||
},
|
||||
|
||||
// 查询表格列 @author zhuoda
|
||||
getColumns: (tableId) => {
|
||||
return getRequest(`/support/tableColumn/getColumns/${tableId}`);
|
||||
},
|
||||
|
||||
// 删除表格列 @author zhuoda
|
||||
deleteColumns: (tableId) => {
|
||||
return getRequest(`/support/tableColumn/delete/${tableId}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* 部门
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:58:50
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
|
||||
export const departmentApi = {
|
||||
/**
|
||||
* @description: 查询部门列表 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
queryAllDepartment: () => {
|
||||
return getRequest('/department/listAll');
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 查询部门树形列表 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
queryDepartmentTree: () => {
|
||||
return getRequest('/department/treeList');
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 添加部门 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
addDepartment: (param) => {
|
||||
return postRequest('/department/add', param);
|
||||
},
|
||||
/**
|
||||
* @description: 更新部门信息 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
updateDepartment: (param) => {
|
||||
return postRequest('/department/update', param);
|
||||
},
|
||||
/**
|
||||
* @description: 获取校区列表 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
deleteDepartment: (departmentId) => {
|
||||
return getRequest(`/department/delete/${departmentId}`);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 员工
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:59:15
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
|
||||
export const employeeApi = {
|
||||
/**
|
||||
* @description: 查询所有员工 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
queryAll: () => {
|
||||
return getRequest('/employee/queryAll');
|
||||
},
|
||||
/**
|
||||
* @description: 员工管理查询
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
queryEmployee: (params) => {
|
||||
return postRequest('/employee/query', params);
|
||||
},
|
||||
/**
|
||||
* @description: 添加员工
|
||||
* @param {EmployeeAddDto} params
|
||||
* @return {*}
|
||||
*/
|
||||
addEmployee: (params) => {
|
||||
return postRequest('/employee/add', params);
|
||||
},
|
||||
/**
|
||||
* @description: 更新员工信息
|
||||
* @param {EmployeeUpdateDto} params
|
||||
* @return {*}
|
||||
*/
|
||||
updateEmployee: (params) => {
|
||||
return postRequest('/employee/update', params);
|
||||
},
|
||||
/**
|
||||
* @description: 删除员工
|
||||
* @param {number} employeeId
|
||||
* @return {*}
|
||||
*/
|
||||
deleteEmployee: (employeeId) => {
|
||||
return getRequest(`/employee/delete/${employeeId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 批量删除员工
|
||||
* @param {number} employeeIdList
|
||||
* @return {*}
|
||||
*/
|
||||
batchDeleteEmployee: (employeeIdList) => {
|
||||
return postRequest('/employee/update/batch/delete', employeeIdList);
|
||||
},
|
||||
/**
|
||||
* @description: 批量调整员工部门
|
||||
* @return {*}
|
||||
*/
|
||||
batchUpdateDepartmentEmployee: (updateParam) => {
|
||||
return postRequest('/employee/update/batch/department', updateParam);
|
||||
},
|
||||
/**
|
||||
* @description: 重置员工密码
|
||||
* @param {number} employeeId
|
||||
* @return {*}
|
||||
*/
|
||||
resetPassword: (employeeId) => {
|
||||
return getRequest(`/employee/update/password/reset/${employeeId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 修改面面
|
||||
* @param {number} employeeId
|
||||
* @return {*}
|
||||
*/
|
||||
updateEmployeePassword: (param) => {
|
||||
return postRequest('/employee/update/password',param);
|
||||
},
|
||||
/**
|
||||
* @description: 更新员工禁用状态
|
||||
* @param {number} employeeId
|
||||
* @return {*}
|
||||
*/
|
||||
updateDisabled: (employeeId) => {
|
||||
return getRequest(`/employee/update/disabled/${employeeId}`);
|
||||
},
|
||||
|
||||
// 查询员工-根据部门id
|
||||
queryEmployeeByDeptId: (departmentId) => {
|
||||
return getRequest(`/employee/query/dept/${departmentId}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 查询员工省份 @author HMM
|
||||
*/
|
||||
getRoleProv: () => {
|
||||
return getRequest(`/employee/getRoleProv/`);
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 首页api
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:59:39
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest } from '/@/lib/axios';
|
||||
|
||||
export const homeApi = {
|
||||
/**
|
||||
* @description: 首页-金额统计(业绩、收款、订单数等) @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
homeAmountStatistics: () => {
|
||||
return getRequest('/home/amount/statistics');
|
||||
},
|
||||
/**
|
||||
* @description: 首页-待办信息 @author 卓大
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
homeWaitHandle: () => {
|
||||
return getRequest('home/wait/handle');
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* 登录
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 21:59:58
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
|
||||
export const loginApi = {
|
||||
/**
|
||||
* 登录 @author 卓大
|
||||
* @param param
|
||||
*/
|
||||
login: (param) => {
|
||||
return postRequest('/login', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 退出登录 @author 卓大
|
||||
* @param param
|
||||
*/
|
||||
logout: () => {
|
||||
return getRequest('/login/logout');
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取验证码 @author 卓大
|
||||
* @param param
|
||||
*/
|
||||
getCaptcha: () => {
|
||||
return getRequest('/login/getCaptcha');
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取登录信息 @author 卓大
|
||||
* @param param
|
||||
*/
|
||||
getLoginInfo: () => {
|
||||
return getRequest('/login/getLoginInfo');
|
||||
},
|
||||
|
||||
/**
|
||||
* 刷新用户信息(包含用户基础信息、权限信息等等) @author 卓大
|
||||
*/
|
||||
refresh: () => {
|
||||
return getRequest('/login/refresh');
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* 菜单
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:00:32
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
|
||||
export const menuApi = {
|
||||
/**
|
||||
* 添加菜单
|
||||
*/
|
||||
addMenu: (param) => {
|
||||
return postRequest('/menu/add', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
*/
|
||||
updateMenu: (param) => {
|
||||
return postRequest('/menu/update', param);
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量删除菜单
|
||||
*/
|
||||
batchDeleteMenu: (menuIdList) => {
|
||||
return getRequest(`/menu/batchDelete?menuIdList=${menuIdList}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 查询所有菜单列表
|
||||
*/
|
||||
queryMenu: () => {
|
||||
return getRequest('/menu/query');
|
||||
},
|
||||
|
||||
/**
|
||||
* 查询菜单树
|
||||
*/
|
||||
queryMenuTree: (onlyMenu) => {
|
||||
return getRequest(`/menu/tree?onlyMenu=${onlyMenu}`);
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取所有请求路径
|
||||
*/
|
||||
getAuthUrl: () => {
|
||||
return getRequest('/menu/auth/url');
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 角色菜单
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:00:49
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
export const roleMenuApi = {
|
||||
/**
|
||||
* @description: 获取角色关联菜单权限
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getRoleSelectedMenu: (roleId) => {
|
||||
return getRequest(`role/menu/getRoleSelectedMenu/${roleId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 更新角色权限
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
updateRoleMenu: (data) => {
|
||||
return postRequest('role/menu/updateRoleMenu', data);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* 角色
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:00:41
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { getRequest, postRequest } from '/@/lib/axios';
|
||||
|
||||
export const roleApi = {
|
||||
/**
|
||||
* @description: 获取所有角色
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
queryAll: () => {
|
||||
return getRequest('/role/getAll');
|
||||
},
|
||||
/**
|
||||
* @description:添加角色
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
addRole: (data) => {
|
||||
return postRequest('/role/add', data);
|
||||
},
|
||||
/**
|
||||
* @description:更新角色
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
updateRole: (data) => {
|
||||
return postRequest('/role/update', data);
|
||||
},
|
||||
/**
|
||||
* @description: 删除角色
|
||||
* @param {number} roleId
|
||||
* @return {*}
|
||||
*/
|
||||
deleteRole: (roleId) => {
|
||||
return getRequest(`/role/delete/${roleId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 批量设置某角色数据范围
|
||||
* @param {DataScopeBatchSetRoleDto} data
|
||||
* @return {*}
|
||||
*/
|
||||
updateDataScope: (data) => {
|
||||
return postRequest('/role/dataScope/updateRoleDataScopeList', data);
|
||||
},
|
||||
/**
|
||||
* @description: 获取当前系统所配置的所有数据范围
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getDataScopeList: () => {
|
||||
return getRequest('/dataScope/list');
|
||||
},
|
||||
/**
|
||||
* @description: 获取某角色所设置的数据范围
|
||||
* @param {number} roleId
|
||||
* @return {*}
|
||||
*/
|
||||
getDataScopeByRoleId: (roleId) => {
|
||||
return getRequest(`/role/dataScope/getRoleDataScopeList/${roleId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 获取角色成员-员工列表
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
queryRoleEmployee: (params) => {
|
||||
return postRequest('/role/employee/queryEmployee', params);
|
||||
},
|
||||
/**
|
||||
* @description: 从角色成员列表中移除员工
|
||||
* @param {number} employeeId
|
||||
* @param {number} roleId
|
||||
* @return {*}
|
||||
*/
|
||||
deleteEmployeeRole: (employeeId, roleId) => {
|
||||
return getRequest('/role/employee/removeEmployee?employeeId=' + employeeId + '&roleId=' + roleId);
|
||||
},
|
||||
/**
|
||||
* @description: 从角色成员列表中批量移除员工
|
||||
* @param {RoleEmployeeBatchDto} data
|
||||
* @return {*}
|
||||
*/
|
||||
batchRemoveRoleEmployee: (data) => {
|
||||
return postRequest('/role/employee/batchRemoveRoleEmployee', data);
|
||||
},
|
||||
/**
|
||||
* @description: 根据角色id获取角色员工列表(无分页)
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getRoleAllEmployee: (roleId) => {
|
||||
return getRequest(`/role/employee/getAllEmployeeByRoleId/${roleId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 角色成员列表中批量添加员工
|
||||
* @param data
|
||||
* @return {*}
|
||||
*/
|
||||
batchAddRoleEmployee: (data) => {
|
||||
return postRequest('/role/employee/batchAddRoleEmployee', data);
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 获取角色关省份单权限
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getRoleProv: (roleId) => {
|
||||
return getRequest(`/role/prov/getRoleProv/${roleId}`);
|
||||
},
|
||||
/**
|
||||
* @description: 更新角色省份权限
|
||||
* @param data
|
||||
* @return {*}
|
||||
*/
|
||||
updateRoleProv: (data) => {
|
||||
return postRequest('/role/prov/updateRoleProv', data);
|
||||
},
|
||||
};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,42 @@
|
||||
@font-face {
|
||||
font-family: "HarmonyOS Sans Black";
|
||||
src: url('./HarmonyOS_Sans/HarmonyOS_Sans_Black.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS Sans Bold";
|
||||
src: url('./HarmonyOS_Sans/HarmonyOS_Sans_Bold.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS Sans Light";
|
||||
src: url('./HarmonyOS_Sans/HarmonyOS_Sans_Light.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS Sans Medium";
|
||||
src: url('./HarmonyOS_Sans/HarmonyOS_Sans_Medium.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS Sans Regular";
|
||||
src: url('./HarmonyOS_Sans/HarmonyOS_Sans_Regular.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "HarmonyOS Sans Thin";
|
||||
src: url('./HarmonyOS_Sans/HarmonyOS_Sans_Thin.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "PingFangSC";
|
||||
src: url('./PingFang/PingFangSC.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 597 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 700 B |
Binary file not shown.
|
After Width: | Height: | Size: 488 B |
@@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* 目录 树形选择组件
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-12 21:01:52
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-tree-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width:${width}`"
|
||||
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||
:tree-data="categoryTreeData"
|
||||
:placeholder="placeholder"
|
||||
tree-default-expand-all
|
||||
@change="onChange"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch, onMounted } from 'vue';
|
||||
import { categoryApi } from '/@/api/business/category/category-api';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
const props = defineProps({
|
||||
value: Number,
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
categoryType: Number,
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%',
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
// ----------------- 查询 目录 数据 -----------------
|
||||
const categoryTreeData = ref([]);
|
||||
async function queryCategoryTree() {
|
||||
if (!props.categoryType) {
|
||||
categoryTreeData.value = [];
|
||||
return;
|
||||
}
|
||||
try {
|
||||
let param = {
|
||||
categoryType: props.categoryType,
|
||||
};
|
||||
let resp = await categoryApi.queryCategoryTree(param);
|
||||
categoryTreeData.value = resp.data;
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------- 选中相关监听、事件 -----------------
|
||||
const selectValue = ref(props.value);
|
||||
// 箭头value变化
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
// 监听类型变化
|
||||
watch(
|
||||
() => props.categoryType,
|
||||
() => {
|
||||
queryCategoryTree();
|
||||
}
|
||||
);
|
||||
|
||||
function onChange(value) {
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
|
||||
onMounted(queryCategoryTree);
|
||||
</script>
|
||||
@@ -0,0 +1,109 @@
|
||||
<!--
|
||||
* 公司银行 下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室:开云
|
||||
* @Date: 2022-09-02 22:12:20
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="handleChange"
|
||||
:disabled="disabled"
|
||||
:mode="multiple ? 'multiple' : ''"
|
||||
optionFilterProp="label"
|
||||
>
|
||||
<a-select-option v-for="item in dataList" :key="item.bankId" :label="item.bankName">
|
||||
{{ item.bankName }}({{ starAccountNumber(item.accountNumber) }})
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { bankApi } from '/@/api/business/oa/bank-api';
|
||||
import _ from 'lodash';
|
||||
|
||||
const props = defineProps({
|
||||
value: [Number, String, Object],
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
enterpriseId: {
|
||||
type: Number,
|
||||
},
|
||||
});
|
||||
|
||||
// ------------------------ 选中 事件 ------------------------
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
const selectValue = ref(props.value);
|
||||
// 箭头value变化
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
// 箭头货主ID变化
|
||||
watch(
|
||||
() => props.enterpriseId,
|
||||
(newValue) => {
|
||||
queryData();
|
||||
}
|
||||
);
|
||||
|
||||
function handleChange(value) {
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
|
||||
// ------------------------ 数据查询 ------------------------
|
||||
const dataList = ref([]);
|
||||
async function queryData() {
|
||||
if (!props.enterpriseId) {
|
||||
return;
|
||||
}
|
||||
let res = await bankApi.queryList(props.enterpriseId);
|
||||
dataList.value = res.data;
|
||||
if (!props.value && !_.isEmpty(dataList.value)) {
|
||||
selectValue.value = res.data[0].invoiceId;
|
||||
handleChange(res.data[0].invoiceId);
|
||||
}
|
||||
}
|
||||
|
||||
// 银行卡号 中间位数 加星 处理
|
||||
function starAccountNumber(accountNumber) {
|
||||
if (accountNumber.length < 7) {
|
||||
return accountNumber;
|
||||
}
|
||||
return accountNumber.substr(0, 3) + '**' + accountNumber.substring(accountNumber.length - 3);
|
||||
}
|
||||
|
||||
onMounted(queryData);
|
||||
</script>
|
||||
@@ -0,0 +1,108 @@
|
||||
<!--
|
||||
* 公司的开票信息 下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-01 23:14:49
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
<template>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="handleChange"
|
||||
:disabled="disabled"
|
||||
:mode="multiple ? 'multiple' : ''"
|
||||
optionFilterProp="label"
|
||||
>
|
||||
<a-select-option v-for="item in dataList" :key="item.invoiceId" :label="item.invoiceHeads">
|
||||
{{ item.invoiceHeads }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { invoiceApi } from '/@/api/business/oa/invoice-api';
|
||||
import _ from 'lodash';
|
||||
|
||||
const props = defineProps({
|
||||
value: [Number, String, Object],
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
enterpriseId: {
|
||||
type: Number,
|
||||
},
|
||||
});
|
||||
|
||||
// ------------------------ 选中 事件 ------------------------
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
|
||||
// 箭头value变化
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
// 箭头货主ID变化
|
||||
watch(
|
||||
() => props.enterpriseId,
|
||||
(newValue) => {
|
||||
queryData();
|
||||
}
|
||||
);
|
||||
|
||||
function handleChange(value) {
|
||||
emit('update:value', value);
|
||||
emit(
|
||||
'change',
|
||||
value,
|
||||
dataList.value.find((e) => e.invoiceId == value)
|
||||
);
|
||||
}
|
||||
|
||||
// ------------------------ 数据查询 ------------------------
|
||||
|
||||
const dataList = ref([]);
|
||||
async function queryData() {
|
||||
if (!props.enterpriseId) {
|
||||
return;
|
||||
}
|
||||
let res = await invoiceApi.queryList(props.enterpriseId);
|
||||
dataList.value = res.data;
|
||||
if (!props.value && !_.isEmpty(dataList.value)) {
|
||||
selectValue.value = res.data[0].invoiceId;
|
||||
handleChange(res.data[0].invoiceId);
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(queryData);
|
||||
</script>
|
||||
@@ -0,0 +1,85 @@
|
||||
<!--
|
||||
* 企业列表 下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-26 19:16:24
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="handleChange"
|
||||
:disabled="disabled"
|
||||
:mode="multiple ? 'multiple' : ''"
|
||||
optionFilterProp="label"
|
||||
>
|
||||
<a-select-option v-for="item in dataList" :key="item.enterpriseId" :label="item.enterpriseName">
|
||||
{{ item.enterpriseName }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { enterpriseApi } from '/@/api/business/oa/enterprise-api';
|
||||
|
||||
const props = defineProps({
|
||||
value: [Number, String, Object],
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// 类型 ENTERPRISE_TYPE_ENUM
|
||||
type: {
|
||||
type: Number,
|
||||
},
|
||||
});
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
|
||||
// 箭头value变化
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
function handleChange(value) {
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
|
||||
const dataList = ref([]);
|
||||
|
||||
async function queryData() {
|
||||
let res = await enterpriseApi.queryList(props.type);
|
||||
dataList.value = res.data;
|
||||
}
|
||||
onMounted(queryData);
|
||||
</script>
|
||||
@@ -0,0 +1,91 @@
|
||||
<!--
|
||||
* 地区选择框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-12 15:22:45
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
|
||||
<template>
|
||||
<a-cascader
|
||||
:style="`width:${width}`"
|
||||
v-model:value="areaValue"
|
||||
:show-search="{ filter }"
|
||||
:options="areaOptionData"
|
||||
:placeholder="placeholder"
|
||||
:size="size"
|
||||
@change="handleChange"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { PROVINCE_CITY_DISTRICT } from "./province-city-district";
|
||||
import { PROVINCE_CITY } from "./province-city";
|
||||
import { ref, toRaw, watch } from "vue";
|
||||
|
||||
// ============ 组件属性 ============
|
||||
|
||||
const TYPE_PROVINCE_CITY_DISTRICT = "province_city_district";
|
||||
const TYPE_PROVINCE_CITY = "province_city";
|
||||
|
||||
const props = defineProps({
|
||||
type: String,
|
||||
value: [Number, Array],
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择地区',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
// ============ 组件业务 ============
|
||||
const areaOptionData =
|
||||
props.type === TYPE_PROVINCE_CITY_DISTRICT ? PROVINCE_CITY_DISTRICT : PROVINCE_CITY;
|
||||
|
||||
// 绑定地区数据
|
||||
const areaValue = ref([]);
|
||||
// 监听value变化
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
if (newValue) {
|
||||
let array = [];
|
||||
for (let index = 0; index < 3; index++) {
|
||||
if (newValue[index]) {
|
||||
array.push(newValue[index].value);
|
||||
}
|
||||
}
|
||||
areaValue.value = array;
|
||||
} else {
|
||||
areaValue.value = [];
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function handleChange(value, selectedOptions){
|
||||
emit("update:value", toRaw(selectedOptions));
|
||||
emit("change", value, toRaw(selectedOptions));
|
||||
}
|
||||
|
||||
const filter = (inputValue, path) => {
|
||||
return path.some(
|
||||
(option) => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1
|
||||
);
|
||||
};
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,81 @@
|
||||
<!--
|
||||
* 布尔 树形选择组件
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-12 21:01:52
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}px`"
|
||||
:placeholder="placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="handleChange"
|
||||
@deselect="handleChange"
|
||||
>
|
||||
<a-select-option v-for="item in $smartEnumPlugin.getValueDescList('FLAG_NUMBER_ENUM')" :key="item.value" :value="item.value">
|
||||
{{ item.desc }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import _ from 'lodash';
|
||||
import { ref, watch } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
value: Number,
|
||||
width: {
|
||||
type: Number,
|
||||
default: 100,
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
function convertBoolean2number(value) {
|
||||
let result = null;
|
||||
if (_.isNaN(value) || _.isNull(value) || _.isUndefined(value)) {
|
||||
result = null;
|
||||
} else {
|
||||
result = value ? 1 : 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
// 箭头value变化
|
||||
const selectValue = ref(convertBoolean2number(props.value));
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = convertBoolean2number(newValue);
|
||||
}
|
||||
);
|
||||
|
||||
const handleChange = (value) => {
|
||||
console.log('boolean enum select', value);
|
||||
let booleanResult = null;
|
||||
if (!_.isUndefined(value)) {
|
||||
booleanResult = value === 1 ? true : false;
|
||||
}
|
||||
emit('update:value', booleanResult);
|
||||
emit('change', booleanResult);
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,133 @@
|
||||
<!--
|
||||
* 图标 选择
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-01 23:14:49
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<a-popover v-model:visible="visible" placement="bottomLeft" trigger="click">
|
||||
<template #title>
|
||||
<a-form-item>
|
||||
<a-radio-group @change="updateSelectIconArray" v-model:value="iconStyle" style="margin: 8px">
|
||||
<a-radio-button value="outlined">线框风格</a-radio-button>
|
||||
<a-radio-button value="filled">实底风格</a-radio-button>
|
||||
<a-radio-button value="twoTone">双色风格</a-radio-button>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item>
|
||||
<a-input-search v-model:value="searchValue" placeholder="输入英文关键词进行搜索" @change="updateSelectIconArray" />
|
||||
</a-form-item>
|
||||
</template>
|
||||
|
||||
<template #content>
|
||||
<div class="icon-box">
|
||||
<div v-for="item in iconLoopArray" :key="item" @click="handleClick(item)" class="icon-content">
|
||||
<component :is="$antIcons[item]" />
|
||||
</div>
|
||||
<div v-show="showMoreIndex > 0">
|
||||
<a-button type="link" @click="showMore">点击展开更多图标(因图标较多,可能会卡一小会)</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<slot name="iconSelect"></slot>
|
||||
</a-popover>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as VueIcon from '@ant-design/icons-vue';
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import _ from 'lodash';
|
||||
|
||||
//线框风格图标数组
|
||||
const outlinedIconArray = Object.keys(VueIcon).filter((e) => _.endsWith(e.toLowerCase(), 'outlined'));
|
||||
//实底风格图标数组
|
||||
const filledIconArray = Object.keys(VueIcon).filter((e) => _.endsWith(e.toLowerCase(), 'filled'));
|
||||
//双色风格图标数组
|
||||
const twoToneIconArray = Object.keys(VueIcon).filter((e) => _.endsWith(e.toLowerCase(), 'twotone'));
|
||||
|
||||
// ------------ 显示/隐藏 ------------
|
||||
const visible = ref(false);
|
||||
|
||||
// ------------ 展开更多 ------------
|
||||
const SHOW_MORE_LENGTH = 35;
|
||||
const showMoreIndex = ref(SHOW_MORE_LENGTH);
|
||||
function showMore() {
|
||||
showMoreIndex.value = -1;
|
||||
}
|
||||
|
||||
// ------------ 图标展示与搜索 ------------
|
||||
|
||||
const iconStyle = ref('outlined');
|
||||
const selectIconArray = ref([...outlinedIconArray]);
|
||||
|
||||
const iconLoopArray = computed(() => {
|
||||
return _.slice(selectIconArray.value, 0, showMoreIndex.value);
|
||||
});
|
||||
|
||||
watch(iconStyle, (newValue, oldValue) => {
|
||||
updateSelectIconArray();
|
||||
});
|
||||
|
||||
let searchValue = ref('');
|
||||
function updateSelectIconArray() {
|
||||
let tempArray = null;
|
||||
if (iconStyle.value === 'outlined') {
|
||||
tempArray = outlinedIconArray;
|
||||
} else if (iconStyle.value === 'filled') {
|
||||
tempArray = filledIconArray;
|
||||
} else {
|
||||
tempArray = twoToneIconArray;
|
||||
}
|
||||
if (!searchValue.value) {
|
||||
selectIconArray.value = tempArray;
|
||||
} else {
|
||||
selectIconArray.value = tempArray.filter((e) => e.toLowerCase().includes(searchValue.value.toLowerCase()));
|
||||
}
|
||||
|
||||
if (selectIconArray.value.length > SHOW_MORE_LENGTH) {
|
||||
showMoreIndex.value = SHOW_MORE_LENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
// ------------ 对外抛出选择图标事件 ------------
|
||||
const emit = defineEmits(['updateIcon']);
|
||||
function handleClick(icon) {
|
||||
visible.value = false;
|
||||
emit('updateIcon', icon);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.icon-box {
|
||||
overflow: auto;
|
||||
font-size: 20px;
|
||||
width: 410px;
|
||||
height: 300px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
align-content: flex-start;
|
||||
}
|
||||
|
||||
.icon-content {
|
||||
width: 45px;
|
||||
height: 40px;
|
||||
margin: 5px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
border-radius: 6px;
|
||||
border: 1px solid #ccc;
|
||||
.more-icon {
|
||||
font-size: 14px;
|
||||
margin: 5px;
|
||||
}
|
||||
}
|
||||
.icon-content:hover {
|
||||
background: #1890ff;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,18 @@
|
||||
<!--
|
||||
* iframe 组件
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-01 23:14:49
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
<template>
|
||||
<iframe :id="name" :src="url" frameborder="0" height="800" scrolling="yes" width="100%"></iframe>
|
||||
</template>
|
||||
<script setup>
|
||||
let props = defineProps({
|
||||
name: String,
|
||||
url: String,
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,3 @@
|
||||
<template>
|
||||
<div></div>
|
||||
</template>
|
||||
@@ -0,0 +1,55 @@
|
||||
<!--
|
||||
* 枚举 多选框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-08 20:32:30
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-checkbox-group :style="`width: ${width}`" v-model:value="selectValue" :options="optionList" @change="handleChange" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch, getCurrentInstance, onMounted } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
enumName: String,
|
||||
value: Array,
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
});
|
||||
|
||||
// ------------ 枚举数据 加载和构建 ------------
|
||||
|
||||
const optionList = ref([]);
|
||||
function buildOptionList() {
|
||||
const internalInstance = getCurrentInstance(); // 有效 全局
|
||||
const smartEnumPlugin = internalInstance.appContext.config.globalProperties.$smartEnumPlugin;
|
||||
const valueList = smartEnumPlugin.getValueDescList(props.enumName);
|
||||
optionList.value = valueList.map((e) => Object.assign({}, { value: e.value, label: e.desc }));
|
||||
}
|
||||
|
||||
onMounted(buildOptionList);
|
||||
|
||||
// ------------ 数据选中 事件及其相关 ------------
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
function handleChange(value) {
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,63 @@
|
||||
<!--
|
||||
* 枚举 radio
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-08 20:32:30
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<template v-if="isButton">
|
||||
<a-radio-group v-model:value="selectValue" @change="handleChange" button-style="solid">
|
||||
<a-radio-button v-for="item in $smartEnumPlugin.getValueDescList(props.enumName)" :key="item.value" :value="item.value">
|
||||
{{ item.desc }}
|
||||
</a-radio-button>
|
||||
</a-radio-group>
|
||||
</template>
|
||||
<template v-else>
|
||||
<a-radio-group v-model:value="selectValue" @change="handleChange">
|
||||
<a-radio v-for="item in $smartEnumPlugin.getValueDescList(props.enumName)" :key="item.value" :value="item.value">
|
||||
{{ item.desc }}
|
||||
</a-radio>
|
||||
</a-radio-group>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
enumName: String,
|
||||
value: [Number, String],
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
isButton: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
function handleChange(e) {
|
||||
emit('update:value', e.target.value);
|
||||
emit('change', e.target.value);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,68 @@
|
||||
<!--
|
||||
* 枚举 下拉框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-08 20:32:30
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="handleChange"
|
||||
:disabled="disabled"
|
||||
>
|
||||
<a-select-option v-for="item in $smartEnumPlugin.getValueDescList(props.enumName)" :key="item.value" :value="item.value">
|
||||
{{ item.desc }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
enumName: String,
|
||||
value: [Number,String],
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%',
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
function handleChange(value) {
|
||||
console.log("change", value)
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* loading 组件
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-07-22 20:33:41
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import { useSpinStore } from "/@/store/modules/system/spin";
|
||||
|
||||
export const SmartLoading = {
|
||||
show: () => {
|
||||
useSpinStore().show();
|
||||
},
|
||||
|
||||
hide: () => {
|
||||
useSpinStore().hide();
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,120 @@
|
||||
<!--
|
||||
* 编辑器
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-12 15:34:33
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<div style="border: 1px solid #ccc">
|
||||
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" />
|
||||
<Editor
|
||||
style="overflow-y: hidden"
|
||||
:style="{ height: `${height}px` }"
|
||||
v-model="editorHtml"
|
||||
:defaultConfig="editorConfig"
|
||||
@onCreated="handleCreated"
|
||||
@onChange="handleChange"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { shallowRef, onBeforeUnmount, watch, ref } from 'vue';
|
||||
import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
|
||||
import { fileApi } from '/@/api/support/file/file-api';
|
||||
import '@wangeditor/editor/dist/css/style.css';
|
||||
import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
//菜单
|
||||
const editorConfig = props.editorConfig;
|
||||
|
||||
//上传
|
||||
let customUpload = {
|
||||
async customUpload(file, insertFn) {
|
||||
try {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
let res = await fileApi.uploadFile(formData, FILE_FOLDER_TYPE_ENUM.COMMON.value);
|
||||
let data = res.data;
|
||||
insertFn(data.fileUrl);
|
||||
} catch (error) {
|
||||
smartSentry.captureError(error);
|
||||
}
|
||||
},
|
||||
};
|
||||
editorConfig.MENU_CONF['uploadImage'] = customUpload;
|
||||
editorConfig.MENU_CONF['uploadVideo'] = customUpload;
|
||||
|
||||
// ----------------------- 以下是公用变量 emits props ----------------
|
||||
const editorHtml = ref();
|
||||
let props = defineProps({
|
||||
modelValue: String,
|
||||
height: {
|
||||
type: Number,
|
||||
default: 500,
|
||||
},
|
||||
editorConfig: {
|
||||
type: Object,
|
||||
default: { MENU_CONF: {} }
|
||||
},
|
||||
toolbarConfig: {
|
||||
type: Object,
|
||||
default: {}
|
||||
},
|
||||
});
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(nVal) => {
|
||||
console.log(nVal);
|
||||
editorHtml.value = nVal;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
deep: true,
|
||||
}
|
||||
);
|
||||
|
||||
// 获取编辑器实例html
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const editorRef = shallowRef();
|
||||
const handleCreated = (editor) => {
|
||||
editorRef.value = editor;
|
||||
|
||||
console.log( Toolbar ) // 当前菜单排序和分组
|
||||
|
||||
};
|
||||
const handleChange = (editor) => {
|
||||
emit('update:modelValue', editorHtml.value);
|
||||
};
|
||||
|
||||
function getHtml() {
|
||||
const htmlContent = editorRef.value.getHtml();
|
||||
return htmlContent === '<p><br></p>' ? '' : htmlContent;
|
||||
}
|
||||
function getText() {
|
||||
return editorRef.value.getText();
|
||||
}
|
||||
|
||||
// 组件销毁时,也及时销毁编辑器
|
||||
onBeforeUnmount(() => {
|
||||
const editor = editorRef.value;
|
||||
if (editor == null) return;
|
||||
editor.destroy();
|
||||
});
|
||||
|
||||
defineExpose({
|
||||
editorRef,
|
||||
getHtml,
|
||||
getText,
|
||||
});
|
||||
|
||||
</script>
|
||||
<style scoped>
|
||||
.w-e-full-screen-container {
|
||||
z-index: 9999 !important;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,239 @@
|
||||
<!--
|
||||
* 数据变动记录 表格 组件
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-12 21:01:52
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-form class="smart-query-form">
|
||||
<a-row class="smart-query-form-row">
|
||||
<a-form-item label="关键字" class="smart-query-form-item">
|
||||
<a-input style="width: 300px" v-model:value="queryForm.keywords" placeholder="变更内容" />
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item class="smart-query-form-item smart-margin-left10">
|
||||
<a-button-group>
|
||||
<a-button type="primary" @click="onSearch">
|
||||
<template #icon>
|
||||
<SearchOutlined />
|
||||
</template>
|
||||
查询
|
||||
</a-button>
|
||||
<a-button @click="onReload">
|
||||
<template #icon>
|
||||
<ReloadOutlined />
|
||||
</template>
|
||||
重置
|
||||
</a-button>
|
||||
</a-button-group>
|
||||
</a-form-item>
|
||||
</a-row>
|
||||
</a-form>
|
||||
|
||||
<a-card size="small" :bordered="false">
|
||||
<a-table size="small" :dataSource="tableData" :columns="columns" rowKey="dataTracerId" :pagination="false" bordered>
|
||||
<template #bodyCell="{ record, index, column }">
|
||||
<template v-if="column.dataIndex === 'dataTracerId'">
|
||||
<div>{{ index + 1 }}</div>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'userName'">
|
||||
<div>{{record.userName}} ({{ $smartEnumPlugin.getDescByValue('USER_TYPE_ENUM', record.userType) }})</div>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'userAgent'">
|
||||
<div>{{ record.browser }} / {{ record.os }} / {{ record.device }}</div>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'content'">
|
||||
<div class="operate-content" v-html="record.content"></div>
|
||||
</template>
|
||||
<template v-else-if="column.dataIndex === 'action'">
|
||||
<a-button v-if="record.diffOld || record.diffNew" @click="showDetail(record)" type="link">详情 </a-button>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
|
||||
<div class="smart-query-table-page">
|
||||
<a-pagination
|
||||
showSizeChanger
|
||||
showQuickJumper
|
||||
show-less-items
|
||||
:pageSizeOptions="PAGE_SIZE_OPTIONS"
|
||||
:defaultPageSize="queryForm.pageSize"
|
||||
v-model:current="queryForm.pageNum"
|
||||
v-model:pageSize="queryForm.pageSize"
|
||||
:total="total"
|
||||
@change="onSearch"
|
||||
@showSizeChange="onSearch"
|
||||
:show-total="(total) => `共${total}条`"
|
||||
/>
|
||||
</div>
|
||||
<a-modal v-model:visible="visibleDiff" width="90%" title="数据比对" :footer="null">
|
||||
<div v-html="prettyHtml"></div>
|
||||
</a-modal>
|
||||
</a-card>
|
||||
</template>
|
||||
<script setup>
|
||||
import * as Diff from 'diff';
|
||||
import * as Diff2Html from 'diff2html';
|
||||
import 'diff2html/bundles/css/diff2html.min.css';
|
||||
import uaparser from 'ua-parser-js';
|
||||
import { nextTick, reactive, ref, watch } from 'vue';
|
||||
import { dataTracerApi } from '/@/api/support/data-tracer/data-tracer-api';
|
||||
import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '/@/constants/common-const';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
let props = defineProps({
|
||||
// 数据id
|
||||
dataId: {
|
||||
type: Number,
|
||||
},
|
||||
// 数据 类型
|
||||
type: {
|
||||
type: Number,
|
||||
},
|
||||
});
|
||||
|
||||
const columns = reactive([
|
||||
{
|
||||
title: '序号',
|
||||
dataIndex: 'dataTracerId',
|
||||
width: 50,
|
||||
},
|
||||
{
|
||||
title: '操作时间',
|
||||
dataIndex: 'createTime',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '操作人',
|
||||
dataIndex: 'userName',
|
||||
width: 100,
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: 'IP',
|
||||
dataIndex: 'ip',
|
||||
ellipsis: true,
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '客户端',
|
||||
dataIndex: 'userAgent',
|
||||
ellipsis: true,
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '操作内容',
|
||||
dataIndex: 'content',
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
fixed: 'right',
|
||||
width: 80,
|
||||
},
|
||||
]);
|
||||
|
||||
// --------------- 查询表单、查询方法 ---------------
|
||||
|
||||
const queryFormState = {
|
||||
pageNum: 1,
|
||||
pageSize: PAGE_SIZE,
|
||||
searchCount: true,
|
||||
keywords: undefined,
|
||||
};
|
||||
const queryForm = reactive({ ...queryFormState });
|
||||
const tableLoading = ref(false);
|
||||
const tableData = ref([]);
|
||||
const total = ref(0);
|
||||
|
||||
function onReload() {
|
||||
Object.assign(queryForm, queryFormState);
|
||||
onSearch();
|
||||
}
|
||||
|
||||
async function onSearch() {
|
||||
try {
|
||||
tableLoading.value = true;
|
||||
let responseModel = await dataTracerApi.queryList(Object.assign({}, queryForm, { dataId: props.dataId, type: props.type }));
|
||||
for (const e of responseModel.data.list) {
|
||||
if (!e.userAgent) {
|
||||
continue;
|
||||
}
|
||||
let ua = uaparser(e.userAgent);
|
||||
e.browser = ua.browser.name;
|
||||
e.os = ua.os.name;
|
||||
e.device = ua.device.vendor ? ua.device.vendor + ua.device.model : '';
|
||||
}
|
||||
const list = responseModel.data.list;
|
||||
total.value = responseModel.data.total;
|
||||
tableData.value = list;
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
} finally {
|
||||
tableLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
// ========= 定义 watch 监听 ===============
|
||||
watch(
|
||||
() => props.dataId,
|
||||
(e) => {
|
||||
if (e) {
|
||||
queryForm.dataId = e;
|
||||
onSearch();
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
|
||||
// --------------- diff 特效 ---------------
|
||||
// diff
|
||||
const visibleDiff = ref(false);
|
||||
let prettyHtml = ref('');
|
||||
function showDetail(record) {
|
||||
visibleDiff.value = true;
|
||||
let diffOld = record.diffOld.replaceAll('<br/>','\r\n');
|
||||
let diffNew = record.diffNew.replaceAll('<br/>','\r\n');
|
||||
console.log(diffOld)
|
||||
console.log(diffNew)
|
||||
const args = ['', diffOld, diffNew, '变更前', '变更后'];
|
||||
|
||||
let diffPatch = Diff.createPatch(...args);
|
||||
let html = Diff2Html.html(diffPatch, {
|
||||
drawFileList: false,
|
||||
matching: 'words',
|
||||
diffMaxChanges: 1000,
|
||||
outputFormat: 'side-by-side',
|
||||
});
|
||||
|
||||
prettyHtml.value = html;
|
||||
nextTick(() => {
|
||||
let diffDiv = document.querySelectorAll('.d2h-file-side-diff');
|
||||
if (diffDiv.length > 0) {
|
||||
let left = diffDiv[0],
|
||||
right = diffDiv[1];
|
||||
left.addEventListener('scroll', function (e) {
|
||||
if (left.scrollLeft != right.scrollLeft) {
|
||||
right.scrollLeft = left.scrollLeft;
|
||||
}
|
||||
});
|
||||
right.addEventListener('scroll', function (e) {
|
||||
if (left.scrollLeft != right.scrollLeft) {
|
||||
left.scrollLeft = right.scrollLeft;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.operate-content {
|
||||
line-height: 20px;
|
||||
margin: 5px 0px;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,78 @@
|
||||
<!---
|
||||
* 字典key 下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室:罗伊
|
||||
* @Date: 2022-09-12 22:06:45
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="onChange"
|
||||
>
|
||||
<a-select-option v-for="item in dictKeyCodeList" :key="item.keyCode" :value="item.keyCode">
|
||||
{{ item.keyName }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, onMounted, ref, watch } from 'vue';
|
||||
import { dictApi } from '/@/api/support/dict/dict-api';
|
||||
|
||||
const props = defineProps({
|
||||
value: [Array, String],
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择字典',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
// 禁用标识
|
||||
disabledFlag: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
// -------------------------- 查询 字典数据 --------------------------
|
||||
|
||||
const dictKeyCodeList = ref([]);
|
||||
async function queryDict() {
|
||||
let responseModel = await dictApi.queryAllKey();
|
||||
dictKeyCodeList.value = responseModel.data;
|
||||
}
|
||||
|
||||
onMounted(queryDict);
|
||||
|
||||
// -------------------------- 选中 相关、事件 --------------------------
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
const selectValue = ref(props.value);
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
function onChange(value) {
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,116 @@
|
||||
<!---
|
||||
* 字段 下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室:罗伊
|
||||
* @Date: 2022-09-12 22:06:45
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
:mode="mode"
|
||||
@change="onChange"
|
||||
:disabled="disabled"
|
||||
>
|
||||
<a-select-option v-for="item in dictValueList" :key="item.valueCode" :value="item.valueCode">
|
||||
{{ item.valueName }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, onMounted, ref, watch } from 'vue';
|
||||
import { dictApi } from '/@/api/support/dict/dict-api';
|
||||
|
||||
const props = defineProps({
|
||||
keyCode: String,
|
||||
value: [Array, String],
|
||||
mode: {
|
||||
type: String,
|
||||
default: 'combobox',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
// -------------------------- 查询 字典数据 --------------------------
|
||||
|
||||
const dictValueList = ref([]);
|
||||
async function queryDict() {
|
||||
let res = await dictApi.valueList(props.keyCode);
|
||||
dictValueList.value = res.data;
|
||||
}
|
||||
|
||||
const values = computed(() => {
|
||||
if (!props.value) {
|
||||
return [];
|
||||
}
|
||||
if (!Array.isArray(props.value)) {
|
||||
console.error('valueList is not array!!!');
|
||||
return [];
|
||||
}
|
||||
let res = [];
|
||||
if (props.value && props.value.length > 0) {
|
||||
props.value.forEach((element) => {
|
||||
res.push(element.valueCode);
|
||||
});
|
||||
return res;
|
||||
}
|
||||
return res;
|
||||
});
|
||||
|
||||
onMounted(queryDict);
|
||||
|
||||
// -------------------------- 选中 相关、事件 --------------------------
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
watch(
|
||||
() => props.value,
|
||||
(value) => {
|
||||
selectValue.value = value;
|
||||
}
|
||||
);
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
function onChange(value) {
|
||||
let selected = [];
|
||||
if (!value) {
|
||||
emit('update:value', selected);
|
||||
emit('change', selected);
|
||||
return selected;
|
||||
}
|
||||
if (Array.isArray(props.value)) {
|
||||
let valueList = dictValueList.value.filter((e) => value.includes(e.valueCode));
|
||||
valueList = valueList.map((e) => e.valueCode);
|
||||
emit('update:value', valueList);
|
||||
emit('change', valueList);
|
||||
} else {
|
||||
let findValue = dictValueList.value.find((e) => e.valueCode == value);
|
||||
emit('update:value', findValue.valueCode);
|
||||
emit('change', findValue.valueCode);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,84 @@
|
||||
<!--
|
||||
* 文件预览 弹窗
|
||||
*
|
||||
* @Author: 1024创新实验室:善逸
|
||||
* @Date: 2022-09-02 20:19:39
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<div class="container">
|
||||
<a-image
|
||||
class="img-prev"
|
||||
:style="{ display: 'none' }"
|
||||
:preview="{
|
||||
visible,
|
||||
onVisibleChange: setVisible,
|
||||
}"
|
||||
:src="previewUrl"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { download } from '/@/lib/axios';
|
||||
import { fileApi } from '/@/api/support/file/file-api';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
import { SmartLoading } from '/@/components/framework/smart-loading';
|
||||
|
||||
const imgFileType = ['jpg', 'jpeg', 'png', 'gif'];
|
||||
const previewUrl = ref();
|
||||
|
||||
function showPreview(fileItem) {
|
||||
if (!fileItem.fileUrl) {
|
||||
(async () => {
|
||||
SmartLoading.show();
|
||||
try {
|
||||
let res = await fileApi.getUrl(fileItem.fileKey);
|
||||
fileItem.fileUrl = res.data;
|
||||
showFile(fileItem);
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
} finally {
|
||||
SmartLoading.hide();
|
||||
}
|
||||
})();
|
||||
} else {
|
||||
showFile(fileItem);
|
||||
}
|
||||
}
|
||||
|
||||
const visible = ref(false);
|
||||
const setVisible = (value) => {
|
||||
visible.value = value;
|
||||
};
|
||||
|
||||
function showFile(fileItem) {
|
||||
if (isImg(fileItem.fileType)) {
|
||||
previewUrl.value = fileItem.fileUrl;
|
||||
setVisible(true);
|
||||
return;
|
||||
}
|
||||
download(fileItem.fileName, fileItem.fileUrl);
|
||||
}
|
||||
|
||||
// 判断图片类型
|
||||
function isImg(fileType) {
|
||||
return imgFileType.includes(fileType);
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
showPreview,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,78 @@
|
||||
<!--
|
||||
* 文件预览
|
||||
*
|
||||
* @Author: 1024创新实验室:善逸
|
||||
* @Date: 2022-07-19 23:19:39
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<div >
|
||||
<template v-if="type == 'text'">
|
||||
<a v-for="(item, index) in fileList" :key="index" @click="preview(item, index)">
|
||||
{{ item.fileName }}
|
||||
<span v-if="index != fileList.length - 1" v-html="separator"></span>
|
||||
</a>
|
||||
</template>
|
||||
<a-space>
|
||||
<a-image-preview-group :preview="{ visible, onVisibleChange: setVisible, current: previewCurrent }">
|
||||
<a-image
|
||||
v-for="(item, index) in fileList"
|
||||
:key="index"
|
||||
:src="item.fileUrl"
|
||||
:style="{ display: type == 'text' ? 'none' : '' }"
|
||||
:width="width"
|
||||
/>
|
||||
</a-image-preview-group>
|
||||
</a-space>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { download } from '/@/lib/axios';
|
||||
|
||||
let props = defineProps({
|
||||
fileList: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [];
|
||||
},
|
||||
},
|
||||
// 类型 text,picture
|
||||
type: {
|
||||
type: String,
|
||||
default: 'text',
|
||||
},
|
||||
// image宽度
|
||||
width: {
|
||||
type: Number,
|
||||
default: 150,
|
||||
},
|
||||
// 分隔符 可设置html标签 例如:<br/>
|
||||
separator: {
|
||||
type: String,
|
||||
default: ',',
|
||||
},
|
||||
});
|
||||
const imgFileType = ['jpg', 'jpeg', 'png', 'gif'];
|
||||
|
||||
// 文件预览
|
||||
function preview(file, index) {
|
||||
if (imgFileType.some((e) => e === file.fileType)) {
|
||||
previewCurrent.value = index;
|
||||
visible.value = true;
|
||||
} else {
|
||||
download(file.fileName, file.fileUrl);
|
||||
}
|
||||
}
|
||||
|
||||
// 预览
|
||||
const visible = ref(false);
|
||||
const previewCurrent = ref(0);
|
||||
|
||||
function setVisible(value) {
|
||||
visible.value = value;
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,199 @@
|
||||
<!--
|
||||
* 文件上传
|
||||
*
|
||||
* @Author: 1024创新实验室:善逸
|
||||
* @Date: 2022-08-12 20:19:39
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<div class="clearfix">
|
||||
<a-upload
|
||||
:accept="props.accept"
|
||||
:before-upload="beforeUpload"
|
||||
:customRequest="customRequest"
|
||||
:file-list="fileList"
|
||||
:headers="{ 'x-access-token': useUserStore().getToken }"
|
||||
:list-type="listType"
|
||||
@change="handleChange"
|
||||
@preview="handlePreview"
|
||||
@remove="handleRemove"
|
||||
>
|
||||
<div v-if="fileList.length < props.maxUploadSize">
|
||||
<template v-if="listType == 'picture-card'">
|
||||
<PlusOutlined />
|
||||
<div class="ant-upload-text">
|
||||
{{ buttonText }}
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="listType == 'text'">
|
||||
<a-button>
|
||||
<upload-outlined />
|
||||
{{ buttonText }}
|
||||
</a-button>
|
||||
</template>
|
||||
</div>
|
||||
</a-upload>
|
||||
<a-modal :footer="null" :visible="previewVisible" @cancel="handleCancel">
|
||||
<img :src="previewUrl" alt="example" style="width: 100%" />
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { message } from 'ant-design-vue';
|
||||
import { fileApi } from '/@/api/support/file/file-api';
|
||||
import { useUserStore } from '/@/store/modules/system/user';
|
||||
import { SmartLoading } from '/@/components/framework/smart-loading';
|
||||
import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
|
||||
import { download } from '/@/lib/axios';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
const props = defineProps({
|
||||
value: String,
|
||||
buttonText: {
|
||||
type: String,
|
||||
default: '点击上传附件',
|
||||
},
|
||||
showUploadBtn: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
defaultFileList: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// 最多上传文件数量
|
||||
maxUploadSize: {
|
||||
type: Number,
|
||||
default: 10,
|
||||
},
|
||||
maxSize: {
|
||||
type: Number,
|
||||
default: 10,
|
||||
},
|
||||
// 上传的文件类型
|
||||
accept: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
// 文件上传类型
|
||||
folder: {
|
||||
type: Number,
|
||||
default: FILE_FOLDER_TYPE_ENUM.COMMON.value,
|
||||
},
|
||||
// 上传列表的内建样式,支持三种基本样式 text, picture 和 picture-card
|
||||
listType: {
|
||||
type: String,
|
||||
default: 'picture-card',
|
||||
},
|
||||
});
|
||||
|
||||
// 图片类型的后缀名
|
||||
const imgFileType = ['jpg', 'jpeg', 'png', 'gif'];
|
||||
|
||||
// 重新修改图片展示字段
|
||||
const files = computed(() => {
|
||||
let res = [];
|
||||
if (props.defaultFileList && props.defaultFileList.length > 0) {
|
||||
props.defaultFileList.forEach((element) => {
|
||||
element.url = element.fileUrl;
|
||||
element.name = element.fileName;
|
||||
res.push(element);
|
||||
});
|
||||
return res;
|
||||
}
|
||||
return res;
|
||||
});
|
||||
// -------------------- 逻辑 --------------------
|
||||
|
||||
const previewVisible = ref(false);
|
||||
const fileList = ref([]);
|
||||
const previewUrl = ref('');
|
||||
|
||||
watch(
|
||||
files,
|
||||
(value) => {
|
||||
fileList.value = value;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
const customRequest = async (options) => {
|
||||
SmartLoading.show();
|
||||
try {
|
||||
console.log(options);
|
||||
const formData = new FormData();
|
||||
formData.append('file', options.file);
|
||||
let res = await fileApi.uploadFile(formData, props.folder);
|
||||
let file = res.data;
|
||||
file.url = file.fileUrl;
|
||||
file.name = file.fileName;
|
||||
fileList.value.push(file);
|
||||
emit('change', fileList.value);
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
} finally {
|
||||
SmartLoading.hide();
|
||||
}
|
||||
};
|
||||
|
||||
function handleChange(info) {
|
||||
let fileStatus = info.file.status;
|
||||
let file = info.file;
|
||||
if (fileStatus == 'removed') {
|
||||
let index = fileList.value.findIndex((e) => e.fileId == file.fileId);
|
||||
if (index != -1) {
|
||||
fileList.value.splice(index, 1);
|
||||
emit('change', fileList.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleRemove(file) {
|
||||
console.log(fileList.value);
|
||||
}
|
||||
|
||||
function beforeUpload(file) {
|
||||
const isLimitSize = file.size / 1024 / 1024 < props.maxSize;
|
||||
if (!isLimitSize) {
|
||||
return message.error(`上传的文件必须小于${props.maxSize}Mb`);
|
||||
}
|
||||
return isLimitSize;
|
||||
}
|
||||
|
||||
function handleCancel() {
|
||||
previewVisible.value = false;
|
||||
}
|
||||
|
||||
const handlePreview = async (file) => {
|
||||
if (imgFileType.some((e) => e === file.fileType)) {
|
||||
previewUrl.value = file.url || file.preview;
|
||||
previewVisible.value = true;
|
||||
} else {
|
||||
download(file.fileName, file.fileUrl);
|
||||
}
|
||||
};
|
||||
|
||||
// ------------------------ 清空 上传 ------------------------
|
||||
function clear() {
|
||||
fileList.value = [];
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
clear,
|
||||
});
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
:deep(.ant-upload-picture-card-wrapper) {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,163 @@
|
||||
<!--
|
||||
* 表格列设置
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-26 23:45:51
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
|
||||
<template>
|
||||
<span>
|
||||
<a-tooltip title="全屏" v-if="!fullScreenFlag">
|
||||
<a-button type="text" @click="fullScreen" size="small">
|
||||
<template #icon><fullscreen-outlined /></template>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip title="取消全屏" v-if="fullScreenFlag">
|
||||
<a-button type="text" @click="fullScreen" size="small">
|
||||
<template #icon><fullscreen-exit-outlined /></template>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip title="刷新">
|
||||
<a-button type="text" @click="props.refresh" size="small">
|
||||
<template #icon><redo-outlined /></template>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip title="列设置" v-if="false">
|
||||
<a-button type="text" @click="showModal" size="small">
|
||||
<template #icon><setting-outlined /></template>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<SmartTableColumnModal ref="smartTableColumnModal" @change="updateColumn" />
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import _ from 'lodash';
|
||||
import { tableColumnApi } from '/@/api/support/table/table-column-api';
|
||||
import { onMounted, reactive, ref, watch } from 'vue';
|
||||
import SmartTableColumnModal from './smart-table-column-modal.vue';
|
||||
import { message } from 'ant-design-vue';
|
||||
import { mergeColumn } from './smart-table-column-merge';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
const props = defineProps({
|
||||
// 表格列数组
|
||||
modelValue: {
|
||||
type: Array,
|
||||
default: new Array(),
|
||||
},
|
||||
// 刷新表格函数
|
||||
refresh: {
|
||||
type: Function,
|
||||
required: true,
|
||||
},
|
||||
// 表格id
|
||||
tableId: {
|
||||
type: Number,
|
||||
require: true,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
||||
// 原始表格列数据(复制一份最原始的columns集合,以供后续各个地方使用)
|
||||
let originalColumn = _.cloneDeep(props.modelValue);
|
||||
|
||||
onMounted(buildUserTableColumns);
|
||||
|
||||
//构建用户的数据列
|
||||
async function buildUserTableColumns() {
|
||||
if (!props.tableId) {
|
||||
return;
|
||||
}
|
||||
|
||||
let userTableColumnArray = [];
|
||||
try {
|
||||
let res = await tableColumnApi.getColumns(props.tableId);
|
||||
if (res.data) {
|
||||
try {
|
||||
userTableColumnArray = JSON.parse(res.data);
|
||||
} catch (e1) {
|
||||
smartSentry.captureError(e1);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
}
|
||||
|
||||
updateColumn(userTableColumnArray);
|
||||
}
|
||||
|
||||
// ----------------- 全屏 -------------------
|
||||
const fullScreenFlag = ref(false);
|
||||
function fullScreen() {
|
||||
if (fullScreenFlag.value) {
|
||||
//取消全屏
|
||||
exitFullscreen(document.querySelector('#smartcaseLayoutContent'));
|
||||
fullScreenFlag.value = false;
|
||||
} else {
|
||||
//全屏
|
||||
launchFullScreen(document.querySelector('#smartcaseLayoutContent'));
|
||||
fullScreenFlag.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
//判断各种浏览器 -全屏
|
||||
function launchFullScreen(element) {
|
||||
if (element.requestFullscreen) {
|
||||
element.requestFullscreen();
|
||||
} else if (element.mozRequestFullScreen) {
|
||||
element.mozRequestFullScreen();
|
||||
} else if (element.webkitRequestFullScreen) {
|
||||
element.webkitRequestFullScreen();
|
||||
} else if (element.msRequestFullscreen) {
|
||||
element.msRequestFullscreen();
|
||||
} else {
|
||||
message.error('当前浏览器不支持部分全屏!');
|
||||
}
|
||||
}
|
||||
//判断各种浏览器 -退出全屏
|
||||
function exitFullscreen(element) {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.mozCancelFullScreen) {
|
||||
document.mozCancelFullScreen();
|
||||
} else if (document.webkitExitFullscreen) {
|
||||
document.webkitExitFullscreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------- 弹窗 修改表格列 -------------------
|
||||
|
||||
const smartTableColumnModal = ref();
|
||||
function showModal() {
|
||||
smartTableColumnModal.value.show(originalColumn, props.tableId);
|
||||
}
|
||||
|
||||
// 将弹窗修改的列数据,赋值给原表格 列数组
|
||||
function updateColumn(changeColumnArray) {
|
||||
//合并列
|
||||
const newColumns = mergeColumn(_.cloneDeep(originalColumn), changeColumnArray);
|
||||
emit(
|
||||
'update:modelValue',
|
||||
newColumns.filter((e) => e.showFlag)
|
||||
);
|
||||
}
|
||||
|
||||
// ========= 定义 watch 监听 ===============
|
||||
watch(
|
||||
() => props.tableId,
|
||||
(e) => {
|
||||
if (e) {
|
||||
originalColumn = _.cloneDeep(props.modelValue);
|
||||
buildUserTableColumns();
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
</script>
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* 表格列设置
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-26 23:45:51
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
import _ from 'lodash';
|
||||
|
||||
/**
|
||||
* 将原视表格列和用户表格列进行合并、排序
|
||||
* @param {*} originalTableColumnArray
|
||||
* @param {*} userTableColumnArray
|
||||
*/
|
||||
export function mergeColumn(originalTableColumnArray, userTableColumnArray) {
|
||||
if (!userTableColumnArray) {
|
||||
return originalTableColumnArray;
|
||||
}
|
||||
|
||||
//第一步:将用户的列数据转为Map,以后备使用
|
||||
let userTableColumnMap = new Map();
|
||||
for (const item of userTableColumnArray) {
|
||||
userTableColumnMap.set(item.columnKey, item);
|
||||
}
|
||||
|
||||
//第二步:以前端的table columns列为基础,将用户后端的数据填充到前端表格列里
|
||||
let fontColumnSort = 1;
|
||||
let newColumns = [];
|
||||
for (const fontColumn of originalTableColumnArray) {
|
||||
//原始表格列默认显示
|
||||
fontColumn.columnKey = fontColumn.dataIndex;
|
||||
fontColumn.showFlag = true;
|
||||
fontColumn.sort = fontColumnSort;
|
||||
|
||||
// 如果用户存在此列,则覆盖 sort和width、showFlag字段
|
||||
let userColumn = userTableColumnMap.get(fontColumn.columnKey);
|
||||
if (userColumn) {
|
||||
fontColumn.sort = userColumn.sort;
|
||||
fontColumn.showFlag = userColumn.showFlag;
|
||||
if (userColumn.width) {
|
||||
fontColumn.width = userColumn.width;
|
||||
}
|
||||
}
|
||||
newColumns.push(fontColumn);
|
||||
fontColumnSort++;
|
||||
}
|
||||
|
||||
//第三步:前端列进行排序
|
||||
newColumns = _.sortBy(newColumns, (e) => e.sort);
|
||||
return newColumns;
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
<!--
|
||||
* 表格列设置
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-26 23:45:51
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-modal :width="700" :visible="visible" title="设置列" :destroyOnClose="true" :closable="false">
|
||||
<a-alert type="info" show-icon class="smart-margin-bottom10">
|
||||
<template #icon><smile-outlined /></template>
|
||||
<template #message> 可以通过拖拽行直接修改顺序哦;( <pushpin-outlined />为固定列,不可拖拽 )</template>
|
||||
</a-alert>
|
||||
<a-table
|
||||
id="smartTableColumnModalTable"
|
||||
rowKey="columnKey"
|
||||
row-class-name="column-row"
|
||||
:columns="tableColumns"
|
||||
:dataSource="tableData"
|
||||
:rowSelection="{ checkStrictly: false, selectedRowKeys: selectedRowKeyList, onChange: onSelectChange }"
|
||||
:pagination="false"
|
||||
size="small"
|
||||
bordered
|
||||
>
|
||||
<template #bodyCell="{ text, record, index, column }">
|
||||
<template v-if="column.dataIndex === 'title'">
|
||||
<a-button type="text" :class="record.fixed ? '' : 'handle'" size="small" style="width: 100%; text-align: left">
|
||||
<template #icon v-if="!record.fixed"> <drag-outlined /> </template>
|
||||
<template #icon v-if="record.fixed"> <pushpin-outlined /> </template>
|
||||
{{ text }}
|
||||
</a-button>
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'width'">
|
||||
<a-input-number v-model:value="record.width" style="width: 90px; margin-left: 10px; margin-right: 3px" size="small" />px
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'operate'">
|
||||
<div class="smart-table-operate" v-if="!record.fixed">
|
||||
<a-button @click="up(index)" v-show="index > 0" type="link" class="handle" size="small" style="margin-right: 12px"> 上移 </a-button>
|
||||
<a-button @click="down(index)" type="link" class="handle" size="small" v-show="index !== tableData.length - 1"> 下移</a-button>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
|
||||
<template #footer>
|
||||
<a-button key="back" @click="hide">取消</a-button>
|
||||
<a-button key="submit" type="primary" :loading="submitLoading" @click="save">保存</a-button>
|
||||
<a-button key="back" :loading="submitLoading" @click="reset" danger style="margin-left: 20px">恢复默认</a-button>
|
||||
</template>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import { SmartLoading } from '/@/components/framework/smart-loading';
|
||||
import { tableColumnApi } from '/@/api/support/table/table-column-api';
|
||||
import { ref, reactive, nextTick, computed } from 'vue';
|
||||
import _ from 'lodash';
|
||||
import Sortable from 'sortablejs';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { mergeColumn } from './smart-table-column-merge';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
const emit = defineEmits(['change']);
|
||||
|
||||
defineExpose({ show });
|
||||
|
||||
// ---------------- 显示 / 隐藏 --------------------
|
||||
let tableId = 1;
|
||||
const visible = ref(false);
|
||||
//显示
|
||||
function show(columns, showTableId) {
|
||||
tableId = showTableId;
|
||||
visible.value = true;
|
||||
getUserTableColumns(tableId, _.cloneDeep(columns));
|
||||
}
|
||||
|
||||
//隐藏
|
||||
function hide() {
|
||||
visible.value = false;
|
||||
}
|
||||
|
||||
//获取用户的列数据
|
||||
async function getUserTableColumns(tableId, columns) {
|
||||
SmartLoading.show();
|
||||
let userTableColumnArray = [];
|
||||
try {
|
||||
let res = await tableColumnApi.getColumns(tableId);
|
||||
if (res.data) {
|
||||
try {
|
||||
userTableColumnArray = JSON.parse(res.data);
|
||||
} catch (e1) {
|
||||
smartSentry.captureError(e1);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
} finally {
|
||||
SmartLoading.hide();
|
||||
}
|
||||
|
||||
//根据前端列和后端列构建新的列数据
|
||||
tableData.value = mergeColumn(columns, userTableColumnArray);
|
||||
|
||||
//将已经显示的展示出来
|
||||
for (const item of tableData.value) {
|
||||
if (item.showFlag) {
|
||||
selectedRowKeyList.value.push(item.columnKey);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
nextTick(() => {
|
||||
initDrag();
|
||||
});
|
||||
}
|
||||
|
||||
// --------------------- 表格渲染 --------------------------------
|
||||
const tableData = ref([]);
|
||||
|
||||
const tableColumns = [
|
||||
{
|
||||
title: '列',
|
||||
dataIndex: 'title',
|
||||
},
|
||||
{
|
||||
title: '宽度(像素)',
|
||||
dataIndex: 'width',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
dataIndex: 'operate',
|
||||
width: 150,
|
||||
rowDrag: true,
|
||||
},
|
||||
];
|
||||
|
||||
// --------------------- 表格移动【拖拽移动、上移、下移】 --------------------------------
|
||||
//初始化拖拽
|
||||
function initDrag() {
|
||||
let tbody = document.querySelector('#smartTableColumnModalTable tbody');
|
||||
Sortable.create(tbody, {
|
||||
animation: 300,
|
||||
dragClass: 'smart-ghost-class', //设置拖拽样式类名
|
||||
ghostClass: 'smart-ghost-class', //设置拖拽停靠样式类名
|
||||
chosenClass: 'smart-ghost-class', //设置选中样式类名
|
||||
handle: '.handle',
|
||||
onEnd({ newIndex, oldIndex }) {
|
||||
if (newIndex == oldIndex) {
|
||||
return;
|
||||
}
|
||||
moveTableData(oldIndex, newIndex);
|
||||
},
|
||||
});
|
||||
}
|
||||
//上移
|
||||
function up(oldIndex) {
|
||||
let newIndex = oldIndex - 1;
|
||||
if (newIndex < 0) {
|
||||
return;
|
||||
}
|
||||
//如果下一个是固定列,则也不可移动
|
||||
if (tableData.value[newIndex].fixed) {
|
||||
return;
|
||||
}
|
||||
moveTableData(oldIndex, newIndex);
|
||||
}
|
||||
|
||||
//下移
|
||||
function down(oldIndex) {
|
||||
let newIndex = oldIndex + 1;
|
||||
if (newIndex >= tableData.value.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
//如果下一个是固定列,则也不可移动
|
||||
if (tableData.value[newIndex].fixed) {
|
||||
return;
|
||||
}
|
||||
|
||||
moveTableData(oldIndex, newIndex);
|
||||
}
|
||||
|
||||
//移动表格数据
|
||||
function moveTableData(oldIndex, newIndex) {
|
||||
const currRow = tableData.value.splice(oldIndex, 1)[0];
|
||||
tableData.value.splice(newIndex, 0, currRow);
|
||||
}
|
||||
|
||||
// ----------- table 批量操作 start -----------
|
||||
const selectedRowKeyList = ref([]);
|
||||
|
||||
function onSelectChange(keyArray) {
|
||||
selectedRowKeyList.value = keyArray;
|
||||
}
|
||||
|
||||
// -------------------------提交表单【恢复默认、保存、取消】 ------------------------
|
||||
const submitLoading = ref(false);
|
||||
|
||||
//重置
|
||||
function reset() {
|
||||
Modal.confirm({
|
||||
title: '确定要恢复默认吗?',
|
||||
content: '确定恢复默认后,该信息将不可恢复',
|
||||
okText: '确定恢复',
|
||||
okType: 'danger',
|
||||
onOk() {
|
||||
(async () => {
|
||||
submitLoading.value = true;
|
||||
try {
|
||||
await tableColumnApi.deleteColumns(tableId);
|
||||
message.success('恢复默认成功');
|
||||
emit('change', []);
|
||||
hide();
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
} finally {
|
||||
submitLoading.value = false;
|
||||
}
|
||||
})();
|
||||
},
|
||||
cancelText: '取消',
|
||||
onCancel() {},
|
||||
});
|
||||
}
|
||||
|
||||
//保存
|
||||
async function save() {
|
||||
submitLoading.value = true;
|
||||
try {
|
||||
let columnList = [];
|
||||
for (let index = 0; index < tableData.value.length; index++) {
|
||||
let item = tableData.value[index];
|
||||
let column = {
|
||||
columnKey: item.columnKey,
|
||||
sort: index + 1,
|
||||
};
|
||||
if (item.width) {
|
||||
column.width = item.width;
|
||||
}
|
||||
column.showFlag = selectedRowKeyList.value.indexOf(item.columnKey) > -1 ? true : false;
|
||||
columnList.push(column);
|
||||
}
|
||||
|
||||
columnList = _.sortBy(columnList, (e) => e.sort);
|
||||
|
||||
await tableColumnApi.updateTableColumn({
|
||||
tableId,
|
||||
columnList,
|
||||
});
|
||||
|
||||
message.success('保存成功');
|
||||
emit('change', columnList);
|
||||
hide();
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
} finally {
|
||||
submitLoading.value = false;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.column-row:hover {
|
||||
background-color: red !important;
|
||||
}
|
||||
.column-row {
|
||||
cursor: pointer;
|
||||
}
|
||||
.blue-background-class {
|
||||
background-color: red !important;
|
||||
}
|
||||
|
||||
:deep(.ant-table-tbody) {
|
||||
.ant-table-row-selected > td {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,58 @@
|
||||
<!--
|
||||
* 部门 树形选择框
|
||||
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-12 23:05:43
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*
|
||||
-->
|
||||
<template>
|
||||
<a-tree-select
|
||||
:value="props.value"
|
||||
:treeData="treeData"
|
||||
:fieldNames="{ label: 'name', key: 'departmentId', value: 'departmentId' }"
|
||||
show-search
|
||||
style="width: 100%"
|
||||
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||
placeholder="请选择部门"
|
||||
allow-clear
|
||||
tree-default-expand-all
|
||||
:multiple="props.multiple"
|
||||
@change="onChange"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
import { onMounted, ref } from 'vue';
|
||||
import _ from 'lodash';
|
||||
import { departmentApi } from '/@/api/system/department/department-api';
|
||||
|
||||
const props = defineProps({
|
||||
// 绑定值
|
||||
value: Number,
|
||||
// 单选多选
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value']);
|
||||
|
||||
let treeData = ref([]);
|
||||
onMounted(queryDepartmentTree);
|
||||
|
||||
async function queryDepartmentTree() {
|
||||
let res = await departmentApi.queryDepartmentTree();
|
||||
treeData.value = res.data;
|
||||
}
|
||||
|
||||
function onChange(e) {
|
||||
emit('update:value', e);
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
queryDepartmentTree,
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,97 @@
|
||||
<!--
|
||||
* 员工下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-12 15:09:02
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
<template>
|
||||
<a-select
|
||||
v-model:value="selectValue"
|
||||
:style="`width: ${width}`"
|
||||
:placeholder="props.placeholder"
|
||||
:showSearch="true"
|
||||
:allowClear="true"
|
||||
:size="size"
|
||||
@change="onChange"
|
||||
>
|
||||
<a-select-option v-for="item in employeeList" :key="item.employeeId" :value="item.employeeId">
|
||||
{{ item.actualName }}
|
||||
<template v-if="item.departmentName"> ({{ item.departmentName }}) </template>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { employeeApi } from '/@/api/system/employee/employee-api';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
// =========== 属性定义 和 事件方法暴露 =============
|
||||
|
||||
const props = defineProps({
|
||||
value: [Number, Array],
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
// 角色ID,可为空
|
||||
roleId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
// 禁用标识
|
||||
disabledFlag: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value', 'change']);
|
||||
|
||||
// =========== 查询数据 =============
|
||||
|
||||
//员工列表数据
|
||||
const employeeList = ref([]);
|
||||
async function query() {
|
||||
try {
|
||||
let params = {};
|
||||
if (props.roleId) {
|
||||
params = { roleId: props.roleId };
|
||||
}
|
||||
if (null != props.disabledFlag) {
|
||||
params.disabledFlag = props.disabledFlag;
|
||||
}
|
||||
let resp = await employeeApi.queryAll(params);
|
||||
employeeList.value = resp.data;
|
||||
} catch (e) {
|
||||
smartSentry.captureError(e);
|
||||
}
|
||||
}
|
||||
onMounted(query);
|
||||
|
||||
// =========== 选择 监听、事件 =============
|
||||
|
||||
const selectValue = ref(props.value);
|
||||
watch(
|
||||
() => props.value,
|
||||
(newValue) => {
|
||||
selectValue.value = newValue;
|
||||
}
|
||||
);
|
||||
|
||||
function onChange(value) {
|
||||
emit('update:value', value);
|
||||
emit('change', value);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,182 @@
|
||||
<!--
|
||||
* 员工 表格 弹窗 选择框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-08-19 23:09:02
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
<template>
|
||||
<a-modal v-model:visible="visible" :width="900" title="选择人员" @cancel="closeModal" @ok="onSelectEmployee">
|
||||
<a-form class="smart-query-form">
|
||||
<a-row class="smart-query-form-row">
|
||||
<a-form-item label="关键字" class="smart-query-form-item">
|
||||
<a-input style="width: 150px" v-model:value="params.keyword" placeholder="关键字" />
|
||||
</a-form-item>
|
||||
<a-form-item label="部门" class="smart-query-form-item">
|
||||
<DepartmentTreeSelect style="width: 200px" ref="departmentTreeSelect" v-model:value="params.departmentId" />
|
||||
</a-form-item>
|
||||
<a-form-item label="状态" class="smart-query-form-item">
|
||||
<a-select style="width: 120px" v-model:value="params.disabledFlag" placeholder="请选择状态" allowClear>
|
||||
<a-select-option :key="1"> 禁用 </a-select-option>
|
||||
<a-select-option :key="0"> 启用 </a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item class="smart-query-form-item smart-margin-left10">
|
||||
<a-button type="primary" @click="queryEmployee">
|
||||
<template #icon>
|
||||
<SearchOutlined />
|
||||
</template>
|
||||
查询
|
||||
</a-button>
|
||||
<a-button @click="reset" class="smart-margin-left10">
|
||||
<template #icon>
|
||||
<ReloadOutlined />
|
||||
</template>
|
||||
重置
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
</a-row>
|
||||
</a-form>
|
||||
<a-table
|
||||
:row-selection="{ selectedRowKeys: selectedRowKeyList, onChange: onSelectChange }"
|
||||
:loading="tableLoading"
|
||||
size="small"
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
:pagination="false"
|
||||
bordered
|
||||
rowKey="employeeId"
|
||||
:scroll="{ y: 300 }"
|
||||
>
|
||||
<template #bodyCell="{ text, column }">
|
||||
<template v-if="column.dataIndex === 'disabledFlag'">
|
||||
<a-tag :color="text ? 'error' : 'processing'">{{ text ? '禁用' : '启用' }}</a-tag>
|
||||
</template>
|
||||
|
||||
<template v-if="column.dataIndex === 'gender'">
|
||||
<span>{{ $smartEnumPlugin.getDescByValue('GENDER_ENUM', text) }}</span>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<div class="smart-query-table-page">
|
||||
<a-pagination
|
||||
showSizeChanger
|
||||
showQuickJumper
|
||||
show-less-items
|
||||
:pageSizeOptions="PAGE_SIZE_OPTIONS"
|
||||
:defaultPageSize="params.pageSize"
|
||||
v-model:current="params.pageNum"
|
||||
v-model:pageSize="params.pageSize"
|
||||
:total="total"
|
||||
@change="queryEmployee"
|
||||
@showSizeChange="queryEmployee"
|
||||
:show-total="(total) => `共${total}条`"
|
||||
/>
|
||||
</div>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import { message } from 'ant-design-vue';
|
||||
import { computed, reactive, ref } from 'vue';
|
||||
import { employeeApi } from '/@/api/system/employee/employee-api';
|
||||
import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '/@/constants/common-const';
|
||||
import DepartmentTreeSelect from '/@/components/system/department-tree-select/index.vue';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
|
||||
// ----------------------- 以下是字段定义 emits props ---------------------
|
||||
const emits = defineEmits('selectData');
|
||||
defineExpose({
|
||||
showModal,
|
||||
});
|
||||
|
||||
// ----------------------- modal 显示与隐藏 ---------------------
|
||||
|
||||
const visible = ref(false);
|
||||
async function showModal(selectEmployeeId) {
|
||||
selectedRowKeyList.value = selectEmployeeId || [];
|
||||
visible.value = true;
|
||||
queryEmployee();
|
||||
}
|
||||
function closeModal() {
|
||||
Object.assign(params, defaultParams);
|
||||
selectedRowKeyList.value = [];
|
||||
visible.value = false;
|
||||
}
|
||||
// ----------------------- 员工查询表单与查询 ---------------------
|
||||
const tableLoading = ref(false);
|
||||
const departmentTreeSelect = ref();
|
||||
const total = ref();
|
||||
|
||||
let defaultParams = {
|
||||
departmentId: undefined,
|
||||
disabledFlag: undefined,
|
||||
employeeIdList: undefined,
|
||||
keyword: undefined,
|
||||
searchCount: undefined,
|
||||
pageNum: 1,
|
||||
pageSize: PAGE_SIZE,
|
||||
sortItemList: undefined,
|
||||
};
|
||||
const params = reactive({ ...defaultParams });
|
||||
function reset() {
|
||||
Object.assign(params, defaultParams);
|
||||
queryEmployee();
|
||||
}
|
||||
async function queryEmployee() {
|
||||
tableLoading.value = true;
|
||||
try {
|
||||
let res = await employeeApi.queryEmployee(params);
|
||||
tableData.value = res.data.list;
|
||||
total.value = res.data.total;
|
||||
} catch (error) {
|
||||
smartSentry.captureError(error);
|
||||
} finally {
|
||||
tableLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------- 员工表格选择 ---------------------
|
||||
let selectedRowKeyList = ref([]);
|
||||
const hasSelected = computed(() => selectedRowKeyList.value.length > 0);
|
||||
|
||||
function onSelectChange(selectedRowKeys) {
|
||||
selectedRowKeyList.value = selectedRowKeys;
|
||||
}
|
||||
|
||||
function onSelectEmployee() {
|
||||
if (!hasSelected.value) {
|
||||
message.warning('请选择角色人员');
|
||||
return;
|
||||
}
|
||||
emits('selectData', selectedRowKeyList.value);
|
||||
closeModal();
|
||||
}
|
||||
|
||||
// ----------------------- 员工表格渲染 ---------------------
|
||||
const tableData = ref([]);
|
||||
//字段
|
||||
const columns = [
|
||||
{
|
||||
title: '姓名',
|
||||
dataIndex: 'actualName',
|
||||
},
|
||||
{
|
||||
title: '手机号',
|
||||
dataIndex: 'phone',
|
||||
},
|
||||
{
|
||||
title: '性别',
|
||||
dataIndex: 'gender',
|
||||
},
|
||||
{
|
||||
title: '登录账号',
|
||||
dataIndex: 'loginName',
|
||||
},
|
||||
{
|
||||
title: '状态',
|
||||
dataIndex: 'disabledFlag',
|
||||
},
|
||||
];
|
||||
</script>
|
||||
@@ -0,0 +1,76 @@
|
||||
<!--
|
||||
* 菜单 树形 下拉选择框
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-01 23:14:49
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
-->
|
||||
<template>
|
||||
<a-tree-select
|
||||
:value="props.value"
|
||||
:treeData="treeData"
|
||||
:fieldNames="{ label: 'menuName', key: 'menuId', value: 'menuId' }"
|
||||
show-search
|
||||
tree-checkable
|
||||
style="width: 100%"
|
||||
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||
placeholder="请选择菜单"
|
||||
allow-clear
|
||||
tree-default-expand-all
|
||||
@change="onSelectChange"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
import { onMounted, ref } from 'vue';
|
||||
import _ from 'lodash';
|
||||
import { menuApi } from '/@/api/system/menu/menu-api';
|
||||
import { buildMenuTableTree } from '/@/views/system/menu/menu-data-handler';
|
||||
import { MENU_TYPE_ENUM } from '/@/constants/system/menu-const';
|
||||
|
||||
const props = defineProps({
|
||||
// 绑定值
|
||||
value: Array,
|
||||
// 单选多选
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:value']);
|
||||
|
||||
let treeData = ref([]);
|
||||
onMounted(queryMenuTree);
|
||||
|
||||
// 外部调用初始化
|
||||
let menuList = [];
|
||||
async function queryMenuTree() {
|
||||
let res = await menuApi.queryMenu();
|
||||
menuList = res.data.filter((e) => e.menuType === MENU_TYPE_ENUM.MENU.value || e.menuType === MENU_TYPE_ENUM.CATALOG.value);
|
||||
for (const item of menuList) {
|
||||
if (item.menuType === MENU_TYPE_ENUM.CATALOG.value) {
|
||||
item.disabled = true;
|
||||
}
|
||||
}
|
||||
treeData.value = buildMenuTableTree(menuList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据id集合,获取菜单集合
|
||||
*/
|
||||
function getMenuListByIdList(menuIdList) {
|
||||
return _.cloneDeep(menuList.filter((e) => menuIdList.indexOf(e.menuId) > -1));
|
||||
}
|
||||
|
||||
function onSelectChange(e) {
|
||||
emit('update:value', e);
|
||||
}
|
||||
|
||||
// ----------------------- 以下是暴露的方法内容 ------------------------
|
||||
defineExpose({
|
||||
queryMenuTree,
|
||||
getMenuListByIdList,
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 应用默认配置
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:07:01
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const appDefaultConfig = {
|
||||
// i18n 语言选择
|
||||
language: 'zh_CN',
|
||||
// 布局: side 或者 side-expand
|
||||
layout: 'side',
|
||||
// 侧边菜单宽度 , 默认为200px
|
||||
sideMenuWidth: 200,
|
||||
// 菜单主题
|
||||
sideMenuTheme: 'light',
|
||||
// 标签页
|
||||
pageTagFlag: false,
|
||||
// 面包屑
|
||||
breadCrumbFlag: false,
|
||||
// 页脚
|
||||
footerFlag: false,
|
||||
// 帮助文档
|
||||
helpDocFlag: false,
|
||||
// 网站名称
|
||||
websiteName: '人工肝病例登记系统',
|
||||
};
|
||||
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* 病例表 枚举
|
||||
*
|
||||
* @Author: HMM
|
||||
* @Date: 2024-01-11 15:18:32
|
||||
* @Copyright gdxz
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* 病例类型
|
||||
*/
|
||||
export const CASETYPE = {
|
||||
DEFAULT: {
|
||||
value: '1',
|
||||
desc: 'DPMAS及联合模式',
|
||||
color: 'green'
|
||||
},
|
||||
BEFORE: {
|
||||
value: '2',
|
||||
desc: 'CA280及联合模式',
|
||||
color: 'cyan'
|
||||
},
|
||||
}
|
||||
|
||||
export const CASESettlementFlag = {
|
||||
NO: {
|
||||
value: 0,
|
||||
desc: '未结算',
|
||||
color: ''
|
||||
},
|
||||
YES: {
|
||||
value: 1,
|
||||
desc: '已结算',
|
||||
color: '#2db7f5'
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
* 0待审核 1审核通过 2审核不通过
|
||||
*/
|
||||
export const CASESTATUS = {
|
||||
WAIT: {
|
||||
value: 0,
|
||||
desc: '待审核',
|
||||
color: ''
|
||||
},
|
||||
PASS: {
|
||||
value: 1,
|
||||
desc: '审核通过',
|
||||
color: '#87d068'
|
||||
},
|
||||
REFUSE: {
|
||||
value: 2,
|
||||
desc: '审核拒绝',
|
||||
color: '#f50'
|
||||
},
|
||||
}
|
||||
|
||||
export const CASESORT = {
|
||||
settlement: {
|
||||
value: 1,
|
||||
desc: '已结算',
|
||||
},
|
||||
pass: {
|
||||
value: 2,
|
||||
desc: '已通过',
|
||||
},
|
||||
WAIT: {
|
||||
value: 3,
|
||||
desc: '待审核',
|
||||
},
|
||||
refuse: {
|
||||
value: 4,
|
||||
desc: '待修改',
|
||||
},
|
||||
}
|
||||
|
||||
export default {
|
||||
CASETYPE,
|
||||
CASESTATUS,
|
||||
CASESettlementFlag,
|
||||
CASESORT,
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* 类别
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:07:51
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const CATEGORY_TYPE_ENUM = {
|
||||
GOODS: {
|
||||
value: 1,
|
||||
desc: '商品',
|
||||
},
|
||||
DEMO: {
|
||||
value: 2,
|
||||
desc: '演示分类',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
CATEGORY_TYPE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 商品
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:08:10
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const GOODS_STATUS_ENUM = {
|
||||
APPOINTMENT: {
|
||||
value: 1,
|
||||
desc: '预约中',
|
||||
},
|
||||
SELL: {
|
||||
value: 2,
|
||||
desc: '售卖中',
|
||||
},
|
||||
SELL_OUT: {
|
||||
value: 3,
|
||||
desc: '售罄',
|
||||
},
|
||||
};
|
||||
export default {
|
||||
GOODS_STATUS_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* 企业
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:07:27
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
export const ENTERPRISE_TYPE_ENUM = {
|
||||
NORMAL: {
|
||||
value: 1,
|
||||
desc: '有限企业',
|
||||
},
|
||||
FOREIGN: {
|
||||
value: 2,
|
||||
desc: '外资企业',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
ENTERPRISE_TYPE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 通知
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:07:27
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
export const NOTICE_VISIBLE_RANGE_DATA_TYPE_ENUM = {
|
||||
EMPLOYEE: {
|
||||
value: 1,
|
||||
desc: '员工',
|
||||
},
|
||||
DEPARTMENT: {
|
||||
value: 2,
|
||||
desc: '部门',
|
||||
},
|
||||
};
|
||||
|
||||
export const NOTICE_TYPE_ENUM = {
|
||||
ANNOUNCEMENT: {
|
||||
value: 1,
|
||||
desc: '公告',
|
||||
},
|
||||
NOTICE: {
|
||||
value: 2,
|
||||
desc: '通知',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
NOTICE_VISIBLE_RANGE_DATA_TYPE_ENUM,
|
||||
NOTICE_TYPE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* 通用常量
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:57:29
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
export const PAGE_SIZE = 10;
|
||||
|
||||
export const PAGE_SIZE_OPTIONS = ['10', '15', '20', '30', '40', '50', '75', '100', '150', '200', '300', '500'];
|
||||
|
||||
//登录页面名字
|
||||
export const PAGE_PATH_LOGIN = '/login';
|
||||
|
||||
//404页面名字
|
||||
export const PAGE_PATH_404 = '/404';
|
||||
|
||||
export const showTableTotal = function (total) {
|
||||
return `共${total}条`;
|
||||
};
|
||||
|
||||
export const FLAG_NUMBER_ENUM = {
|
||||
TRUE: {
|
||||
value: 1,
|
||||
desc: '是',
|
||||
},
|
||||
FALSE: {
|
||||
value: 0,
|
||||
desc: '否',
|
||||
},
|
||||
};
|
||||
|
||||
export const GENDER_ENUM = {
|
||||
UNKNOWN: {
|
||||
value: 0,
|
||||
desc: '未知',
|
||||
},
|
||||
MAN: {
|
||||
value: 1,
|
||||
desc: '男',
|
||||
},
|
||||
WOMAN: {
|
||||
value: 2,
|
||||
desc: '女',
|
||||
},
|
||||
};
|
||||
|
||||
export const USER_TYPE_ENUM = {
|
||||
ADMIN_EMPLOYEE: {
|
||||
value: 1,
|
||||
desc: '员工',
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 所有常量入口
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:58:28
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
import menu from './system/menu-const';
|
||||
import goods from './business/erp/goods-const';
|
||||
import category from './business/erp/category-const';
|
||||
import { LOGIN_DEVICE_ENUM } from './system/login-device-const';
|
||||
import { FLAG_NUMBER_ENUM, GENDER_ENUM, USER_TYPE_ENUM } from './common-const';
|
||||
import { LAYOUT_ENUM } from './layout-const';
|
||||
import file from './support/file-const';
|
||||
import notice from './business/oa/notice-const';
|
||||
import loginLog from './support/login-log-const';
|
||||
import enterprise from './business/oa/enterprise-const';
|
||||
import codeGeneratorConst from './support/code-generator-const';
|
||||
import changeLogConst from './support/change-log-const';
|
||||
import caseConst from './business/case/caseplatform-case-const';
|
||||
|
||||
export default {
|
||||
FLAG_NUMBER_ENUM,
|
||||
LOGIN_DEVICE_ENUM,
|
||||
GENDER_ENUM,
|
||||
USER_TYPE_ENUM,
|
||||
LAYOUT_ENUM,
|
||||
...loginLog,
|
||||
...menu,
|
||||
...goods,
|
||||
...category,
|
||||
...file,
|
||||
...notice,
|
||||
...enterprise,
|
||||
...codeGeneratorConst,
|
||||
...changeLogConst,
|
||||
...caseConst,
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* 布局格式
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:58:41
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const LAYOUT_ENUM = {
|
||||
SIDE_EXPAND: {
|
||||
value: 'side-expand',
|
||||
desc: '展开菜单',
|
||||
},
|
||||
SIDE: {
|
||||
value: 'side',
|
||||
desc: '传统菜单',
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* key 常量
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:58:50
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
/**
|
||||
* key前缀
|
||||
*/
|
||||
const KEY_PREFIX = 'smart_admin_';
|
||||
/**
|
||||
* localStorageKey集合
|
||||
*/
|
||||
export default {
|
||||
// 用户信息
|
||||
USER_INFO: `${KEY_PREFIX}user_info`,
|
||||
// 用户权限点
|
||||
USER_POINTS: `${KEY_PREFIX}user_points`,
|
||||
// 用户的tag列表
|
||||
USER_TAG_NAV: `${KEY_PREFIX}user_tag_nav`,
|
||||
// app config 配置信息
|
||||
APP_CONFIG: `${KEY_PREFIX}app_config`,
|
||||
// 首页快捷入口
|
||||
HOME_QUICK_ENTRY: `${KEY_PREFIX}home_quick_entry`,
|
||||
// 通知信息已读
|
||||
NOTICE_READ: `${KEY_PREFIX}notice_read`,
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 正则常量
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:59:05
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const regular = {
|
||||
phone: /^(13|14|15|16|17|18|19)\d{9}$/,
|
||||
qq: /^[1-9]\d{3,}$/,
|
||||
linkUrl:
|
||||
/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/,
|
||||
// eslint-disable-next-line no-useless-escape
|
||||
isNumber: /(^[\-1-9][1-9]*(.[1-9]+)?)$/, // 判断是否为数字,除了0 外
|
||||
isLandlineOrPhone: /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/, // 验证 座机 或者手机
|
||||
account: /^[a-z0-9]{3,16}$/, // 请输入3-16位(小写字母|数字)的账号
|
||||
mobileAccount: /^[a-z0-9]{6,16}$/, // 请输入6-16位(小写字母|数字)的账号(和移动端保持一致)
|
||||
accountDesc: '请输入3-16位(小写字母|数字)的账号',
|
||||
pwd: /^[A-Za-z0-9._]{6,16}$/, // 请输入6-16位(大小写字母|数字|小数点|下划线)的密码
|
||||
pwdDesc: '请输入6-16位(大小写字母|数字|小数点|下划线)的密码',
|
||||
delBlankSpace: /\s+/g, // 删除空格
|
||||
isPdfReg: new RegExp(/\.(pdf|PDF)/),
|
||||
isElseFileReg: new RegExp(/\.(doc|docx|xls|xlsx|txt|ppt|pptx|pps|ppxs)/),
|
||||
isIdentityCard: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/, // 验证身份证号
|
||||
isChinese: /^[\u4e00-\u9fa5]+$/gi, // 验证是否汉字
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* 系统更新日志 枚举
|
||||
*
|
||||
* @Author: 卓大
|
||||
* @Date: 2022-09-26 14:53:50
|
||||
* @Copyright 1024创新实验室
|
||||
*/
|
||||
|
||||
/**
|
||||
* 更新类型:[1:特大版本功能更新;2:功能更新;3:bug修复]
|
||||
*/
|
||||
export const CHANGE_LOG_TYPE_ENUM = {
|
||||
MAJOR_UPDATE: {
|
||||
value: 1,
|
||||
desc: '重大更新',
|
||||
},
|
||||
FUNCTION_UPDATE: {
|
||||
value: 2,
|
||||
desc: '功能更新',
|
||||
},
|
||||
BUG_FIX: {
|
||||
value: 3,
|
||||
desc: 'Bug修复',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
CHANGE_LOG_TYPE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* 代码生成 枚举
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:09:10
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
// 前端组件类型
|
||||
export const CODE_FRONT_COMPONENT_ENUM = {
|
||||
INPUT: {
|
||||
value: 'Input',
|
||||
desc: '输入框',
|
||||
},
|
||||
INPUT_NUMBER: {
|
||||
value: 'InputNumber',
|
||||
desc: '数字输入框',
|
||||
},
|
||||
TEXTAREA: {
|
||||
value: 'Textarea',
|
||||
desc: '文本',
|
||||
},
|
||||
BOOLEAN_SELECT: {
|
||||
value: 'BooleanSelect',
|
||||
desc: '布尔下拉框',
|
||||
},
|
||||
ENUM_SELECT: {
|
||||
value: 'SmartEnumSelect',
|
||||
desc: '枚举下拉框',
|
||||
},
|
||||
DICT_SELECT: {
|
||||
value: 'DictSelect',
|
||||
desc: '字典下拉',
|
||||
},
|
||||
DATE: {
|
||||
value: 'Date',
|
||||
desc: '日期选择',
|
||||
},
|
||||
DATE_TIME: {
|
||||
value: 'DateTime',
|
||||
desc: '时间选择',
|
||||
},
|
||||
FILE_UPLOAD: {
|
||||
value: 'FileUpload',
|
||||
desc: '文件上传',
|
||||
},
|
||||
};
|
||||
|
||||
// 新增、修改 页面类型
|
||||
export const CODE_INSERT_AND_UPDATE_PAGE_ENUM = {
|
||||
MODAL: {
|
||||
value: 'modal',
|
||||
desc: '弹窗',
|
||||
},
|
||||
DRAWER: {
|
||||
value: 'drawer',
|
||||
desc: '抽屉',
|
||||
},
|
||||
PAGE: {
|
||||
value: 'Page',
|
||||
desc: '新页面',
|
||||
},
|
||||
};
|
||||
|
||||
// 删除类型
|
||||
export const CODE_DELETE_ENUM = {
|
||||
SINGLE: {
|
||||
value: 'Single',
|
||||
desc: '单个删除',
|
||||
},
|
||||
BATCH: {
|
||||
value: 'Batch',
|
||||
desc: '批量删除',
|
||||
},
|
||||
SINGLE_AND_BATCH: {
|
||||
value: 'SingleAndBatch',
|
||||
desc: '单个删除和批量删除',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询类型
|
||||
*/
|
||||
export const CODE_QUERY_FIELD_QUERY_TYPE_ENUM = {
|
||||
LIKE: {
|
||||
value: 'Like',
|
||||
desc: '模糊查询',
|
||||
},
|
||||
EQUAL: {
|
||||
value: 'Equal',
|
||||
desc: '等于查询',
|
||||
},
|
||||
DATE_RANGE: {
|
||||
value: 'DateRange',
|
||||
desc: '日期范围',
|
||||
},
|
||||
DATE: {
|
||||
value: 'Date',
|
||||
desc: '指定日期',
|
||||
},
|
||||
ENUM: {
|
||||
value: 'Enum',
|
||||
desc: '枚举',
|
||||
},
|
||||
DICT: {
|
||||
value: 'Dict',
|
||||
desc: '字典',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
CODE_FRONT_COMPONENT_ENUM,
|
||||
CODE_INSERT_AND_UPDATE_PAGE_ENUM,
|
||||
CODE_DELETE_ENUM,
|
||||
CODE_QUERY_FIELD_QUERY_TYPE_ENUM
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 数据变动记录
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:09:10
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
// 业务类型
|
||||
export const DATA_TRACER_TYPE_ENUM = {
|
||||
GOODS: {
|
||||
value: 1,
|
||||
desc: '商品',
|
||||
},
|
||||
OA_NOTICE: {
|
||||
value: 2,
|
||||
desc: 'OA-通知公告',
|
||||
},
|
||||
OA_ENTERPRISE: {
|
||||
value: 3,
|
||||
desc: 'OA-企业信息',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
DATA_TRACER_TYPE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* 文件类型
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:09:10
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
// 文件上传类型
|
||||
export const FILE_FOLDER_TYPE_ENUM = {
|
||||
COMMON: {
|
||||
value: 1,
|
||||
desc: '通用',
|
||||
},
|
||||
NOTICE: {
|
||||
value: 2,
|
||||
desc: '公告',
|
||||
},
|
||||
HELP_DOC: {
|
||||
value: 3,
|
||||
desc: '帮助中心',
|
||||
},
|
||||
FEEDBACK: {
|
||||
value: 4,
|
||||
desc: '意见反馈',
|
||||
},
|
||||
};
|
||||
export default {
|
||||
FILE_FOLDER_TYPE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 登录日志
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:08:45
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const LOGIN_RESULT_ENUM = {
|
||||
LOGIN_SUCCESS: {
|
||||
value: 0,
|
||||
desc: '登录成功',
|
||||
},
|
||||
LOGIN_FAIL: {
|
||||
value: 1,
|
||||
desc: '登录失败',
|
||||
},
|
||||
LOGIN_OUT: {
|
||||
value: 2,
|
||||
desc: '退出登录',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
LOGIN_RESULT_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* @Description: 表格id
|
||||
* @Author: zhuoda
|
||||
* @Date: 2022-08-21
|
||||
* @LastEditTime: 2022-08-21
|
||||
* @LastEditors: zhuoda
|
||||
*/
|
||||
|
||||
//system系统功能表格初始化id
|
||||
let systemInitTableId = 10000;
|
||||
|
||||
//support支撑功能表格初始化id
|
||||
let supportInitTableId = 20000;
|
||||
|
||||
//业务表格初始化id
|
||||
let businessOAInitTableId = 30000;
|
||||
|
||||
let businessERPInitTableId = 40000;
|
||||
|
||||
export const TABLE_ID_CONST = {
|
||||
/**
|
||||
* 业务
|
||||
*/
|
||||
BUSINESS: {
|
||||
OA: {
|
||||
NOTICE: businessOAInitTableId + 1, //通知公告
|
||||
ENTERPRISE: businessOAInitTableId + 2, //企业信息
|
||||
ENTERPRISE_EMPLOYEE: businessOAInitTableId + 3, //企业员工
|
||||
ENTERPRISE_BANK: businessOAInitTableId + 4, //企业银行
|
||||
ENTERPRISE_INVOICE: businessOAInitTableId + 5, //企业发票
|
||||
},
|
||||
ERP: {
|
||||
GOODS: businessERPInitTableId + 1, //商品管理
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 系统
|
||||
*/
|
||||
SYSTEM: {
|
||||
EMPLOYEE: systemInitTableId + 1, //员工
|
||||
MENU: systemInitTableId + 2, //菜单
|
||||
},
|
||||
/**
|
||||
* 支撑
|
||||
*/
|
||||
SUPPORT: {
|
||||
CONFIG: supportInitTableId + 1, //参数配置
|
||||
DICT: supportInitTableId + 2, //字典
|
||||
SERIAL_NUMBER: supportInitTableId + 3, //单号
|
||||
OPERATE_LOG: supportInitTableId + 4, //请求监控
|
||||
HEART_BEAT: supportInitTableId + 5, //心跳
|
||||
LOGIN_LOG: supportInitTableId + 6, //登录日志
|
||||
RELOAD: supportInitTableId + 7, //reload
|
||||
HELP_DOC: supportInitTableId + 8, //帮助文档
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 员工
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-03 22:08:45
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const GENDER_ENUM = {
|
||||
UNKNOWN: {
|
||||
value: 0,
|
||||
desc: '未知',
|
||||
},
|
||||
MAN: {
|
||||
value: 1,
|
||||
desc: '男',
|
||||
},
|
||||
WOMAN: {
|
||||
value: 2,
|
||||
desc: '女',
|
||||
},
|
||||
}
|
||||
|
||||
export default {
|
||||
GENDER_ENUM,
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* 首页页面名词
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:56:43
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
//首页页面名字
|
||||
export const HOME_PAGE_NAME = 'Home';
|
||||
|
||||
//首页页面路径
|
||||
export const HOME_PAGE_PATH = '/home';
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* 登录设备
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:56:56
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const LOGIN_DEVICE_ENUM = {
|
||||
PC: {
|
||||
value: 1,
|
||||
desc: '电脑端',
|
||||
},
|
||||
ANDROID: {
|
||||
value: 2,
|
||||
desc: '安卓',
|
||||
},
|
||||
APPLE: {
|
||||
value: 3,
|
||||
desc: '苹果',
|
||||
},
|
||||
H5: {
|
||||
value: 3,
|
||||
desc: 'H5',
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
LOGIN_DEVICE_ENUM,
|
||||
};
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* 菜单类型
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 19:57:04
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
export const MENU_TYPE_ENUM = {
|
||||
CATALOG: {
|
||||
value: 1,
|
||||
desc: '目录',
|
||||
},
|
||||
MENU: {
|
||||
value: 2,
|
||||
desc: '菜单',
|
||||
},
|
||||
POINTS: {
|
||||
value: 3,
|
||||
desc: '按钮',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* 权限类型
|
||||
*/
|
||||
export const MENU_PERMS_TYPE_ENUM = {
|
||||
SPRING_SECURITY: {
|
||||
value: 1,
|
||||
desc: 'Security模式',
|
||||
},
|
||||
URL: {
|
||||
value: 2,
|
||||
desc: 'URL模式',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* 默认的顶级菜单id为0
|
||||
*/
|
||||
export const MENU_DEFAULT_PARENT_ID = 0;
|
||||
|
||||
export default {
|
||||
MENU_TYPE_ENUM,
|
||||
MENU_PERMS_TYPE_ENUM
|
||||
};
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 权限
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:00:40
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
||||
*/
|
||||
|
||||
import { useUserStore } from '/@/store/modules/system/user';
|
||||
import lodash from 'lodash';
|
||||
|
||||
export function privilegeDirective(el, binding) {
|
||||
// 超级管理员
|
||||
if (useUserStore().administratorFlag) {
|
||||
return true;
|
||||
}
|
||||
// 获取功能点权限
|
||||
let userPointsList = useUserStore().getPointList;
|
||||
if (!userPointsList) {
|
||||
return false;
|
||||
}
|
||||
// 如果有权限,删除节点
|
||||
if (!lodash.some(userPointsList,['webPerms',binding.value])) {
|
||||
el.parentNode.removeChild(el);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user