@ -0,0 +1,24 @@ |
|||
<!-- |
|||
* @Description: 首页 |
|||
* @Author: zhuoda |
|||
* @Date: 2021-08-03 |
|||
* @LastEditTime: 2022-06-23 |
|||
* @LastEditors: zhuoda |
|||
--> |
|||
<!DOCTYPE html> |
|||
<html lang="en" id="htmlRoot"> |
|||
<head> |
|||
<meta charset="UTF-8"/> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> |
|||
<meta name="renderer" content="webkit"/> |
|||
<meta name="viewport" |
|||
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" |
|||
/> |
|||
<title> %VITE_APP_TITLE%</title> |
|||
<link rel="icon" href="/favicon.ico"/> |
|||
</head> |
|||
<body> |
|||
<div id="app"></div> |
|||
<script type="module" src="/src/main.js"></script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,17 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"target": "ES6", |
|||
"jsx":"preserve", |
|||
"module": "commonjs", |
|||
"allowSyntheticDefaultImports": true, |
|||
"baseUrl": "./", |
|||
"paths": { |
|||
"/@/*": [ |
|||
"src/*" |
|||
] |
|||
} |
|||
}, |
|||
"exclude": [ |
|||
"node_modules" |
|||
] |
|||
} |
|||
@ -0,0 +1,64 @@ |
|||
{ |
|||
"name": "yun-admin", |
|||
"version": "3.0.0", |
|||
"license": "MIT", |
|||
"scripts": { |
|||
"localhost": "vite --mode localhost", |
|||
"dev": "vite", |
|||
"build:test": "vite build --base=/admin/ --mode test", |
|||
"build:pre": "vite build --mode pre", |
|||
"build:prod": "vite build --mode production" |
|||
}, |
|||
"type": "module", |
|||
"dependencies": { |
|||
"@ant-design/icons-vue": "^7.0.1", |
|||
"@wangeditor-next/editor": "5.6.34", |
|||
"@wangeditor-next/editor-for-vue": "5.1.14", |
|||
"ant-design-vue": "4.2.5", |
|||
"axios": "1.6.8", |
|||
"clipboard": "2.0.11", |
|||
"crypto-js": "4.1.1", |
|||
"dayjs": "1.11.13", |
|||
"decimal.js": "10.3.1", |
|||
"diff": "5.2.0", |
|||
"diff2html": "3.4.47", |
|||
"echarts": "5.4.3", |
|||
"highlight.js": "11.8.0", |
|||
"lodash": "4.17.21", |
|||
"lunar-javascript": "1.6.12", |
|||
"mitt": "3.0.1", |
|||
"nprogress": "0.2.0", |
|||
"pinia": "2.1.7", |
|||
"sm-crypto": "0.3.13", |
|||
"sortablejs": "1.15.0", |
|||
"ua-parser-js": "1.0.35", |
|||
"uuid": "^11.1.0", |
|||
"v-viewer": "~1.6.4", |
|||
"vue": "3.4.27", |
|||
"vue-i18n": "9.13.1", |
|||
"vue-router": "4.3.2", |
|||
"vue3-json-viewer": "2.3.1" |
|||
}, |
|||
"devDependencies": { |
|||
"@vitejs/plugin-vue": "5.0.4", |
|||
"@vue/compiler-sfc": "3.4.27", |
|||
"eslint": "^8.16.0", |
|||
"eslint-config-prettier": "~9.0.0", |
|||
"eslint-plugin-prettier": "~5.0.0", |
|||
"eslint-plugin-vue": "~9.17.0", |
|||
"less": "~4.2.0", |
|||
"less-loader": "~11.1.3", |
|||
"prettier": "~3.0.2", |
|||
"rimraf": "~5.0.1", |
|||
"stylelint": "~14.8.5", |
|||
"stylelint-config-prettier": "~9.0.3", |
|||
"stylelint-config-standard": "~25.0.0", |
|||
"stylelint-order": "~5.0.0", |
|||
"terser": "~5.29.2", |
|||
"vite": "5.2.12", |
|||
"vue-eslint-parser": "~9.4.2" |
|||
}, |
|||
"engines": { |
|||
"node": ">=18" |
|||
} |
|||
} |
|||
@ -0,0 +1,4 @@ |
|||
module.exports = { |
|||
plugins: { |
|||
}, |
|||
}; |
|||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,127 @@ |
|||
<!-- |
|||
* 主应用页面 |
|||
* |
|||
* @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" |
|||
:theme="{ |
|||
algorithm: themeAlgorithm, |
|||
token: { |
|||
colorPrimary: themeColors[colorIndex].primaryColor, |
|||
colorLink: themeColors[colorIndex].primaryColor, |
|||
colorLinkActive: themeColors[colorIndex].activeColor, |
|||
colorLinkHover: themeColors[colorIndex].hoverColor, |
|||
colorIcon: themeColors[colorIndex].primaryColor, |
|||
borderRadius: borderRadius, |
|||
}, |
|||
components: { |
|||
Button: { |
|||
colorLink: themeColors[colorIndex].primaryColor, |
|||
colorLinkActive: themeColors[colorIndex].activeColor, |
|||
colorLinkHover: themeColors[colorIndex].hoverColor, |
|||
}, |
|||
Icon: { |
|||
colorIcon: themeColors[colorIndex].primaryColor, |
|||
}, |
|||
}, |
|||
}" |
|||
:transformCellText="transformCellText" |
|||
> |
|||
<!---全局loading---> |
|||
<a-spin :spinning="spinning" tip="稍等片刻,我在拼命加载中..." size="large"> |
|||
<!--- 路由 --> |
|||
<RouterView /> |
|||
</a-spin> |
|||
</a-config-provider> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import dayjs from 'dayjs'; |
|||
import { computed, h, useSlots } from 'vue'; |
|||
import { messages } from '/@/i18n'; |
|||
import { useAppConfigStore } from '/@/store/modules/system/app-config'; |
|||
import { useSpinStore } from '/@/store/modules/system/spin'; |
|||
import { Popover, theme } from 'ant-design-vue'; |
|||
import { themeColors } from '/@/theme/color.js'; |
|||
import SmartCopyIcon from '/@/components/framework/smart-copy-icon/index.vue'; |
|||
|
|||
const antdLocale = computed(() => messages[useAppConfigStore().language].antdLocale); |
|||
const dayjsLocale = computed(() => messages[useAppConfigStore().language].dayjsLocale); |
|||
dayjs.locale(dayjsLocale); |
|||
|
|||
// 全局loading |
|||
let spinStore = useSpinStore(); |
|||
const spinning = computed(() => spinStore.loading); |
|||
// 主题颜色 |
|||
const colorIndex = computed(() => { |
|||
return useAppConfigStore().colorIndex; |
|||
}); |
|||
// 主题 |
|||
const themeAlgorithm = computed(() => { |
|||
let themeArray = []; |
|||
themeArray.push(useAppConfigStore().darkModeFlag ? theme.darkAlgorithm : theme.defaultAlgorithm); |
|||
if (useAppConfigStore().compactFlag) { |
|||
themeArray.push(theme.compactAlgorithm); |
|||
} |
|||
return themeArray; |
|||
}); |
|||
// 圆角 |
|||
const borderRadius = computed(() => { |
|||
return useAppConfigStore().borderRadius; |
|||
}); |
|||
|
|||
function transformCellText({ text, column, record, index }) { |
|||
if (column && column.textEllipsisFlag === true) { |
|||
return h( |
|||
Popover, |
|||
{ placement: 'bottom' }, |
|||
{ |
|||
default: () => |
|||
h( |
|||
'div', |
|||
{ |
|||
style: { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }, |
|||
id: `${column.dataIndex}${index}`, |
|||
}, |
|||
text |
|||
), |
|||
content: () => |
|||
h('div', { style: { display: 'flex' } }, [ |
|||
h('div', text), |
|||
h(SmartCopyIcon, { value: document.getElementById(`${column.dataIndex}${index}`).innerText }), |
|||
]), |
|||
} |
|||
); |
|||
} else { |
|||
return text; |
|||
} |
|||
} |
|||
|
|||
const { useToken } = theme; |
|||
const { token } = useToken(); |
|||
</script> |
|||
<style lang="less"> |
|||
@color-bg-container: v-bind('token.colorBgContainer'); |
|||
|
|||
:deep(.ant-table-column-sorters) { |
|||
align-items: flex-start !important; |
|||
} |
|||
|
|||
.smart-query-form { |
|||
background-color: @color-bg-container; |
|||
padding: 5px 10px; |
|||
margin-bottom: 10px; |
|||
} |
|||
|
|||
.smart-detail-header { |
|||
background-color: @color-bg-container; |
|||
padding: 10px; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,30 @@ |
|||
/* |
|||
* 类目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); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,41 @@ |
|||
/* |
|||
* @Description: |
|||
* @Author: zhuoda |
|||
* @Date: 2021-11-05 |
|||
* @LastEditTime: 2022-06-23 |
|||
* @LastEditors: zhuoda |
|||
*/ |
|||
import {postRequest, getRequest, getDownload} 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); |
|||
}, |
|||
|
|||
// 导入 @author 卓大
|
|||
importGoods : (file) =>{ |
|||
return postRequest('/goods/importGoods',file); |
|||
}, |
|||
|
|||
// 导出 @author 卓大
|
|||
exportGoods : () =>{ |
|||
return getDownload('/goods/exportGoods'); |
|||
} |
|||
}; |
|||
@ -0,0 +1,35 @@ |
|||
/** |
|||
* 承诺书签订表 api 封装 |
|||
* |
|||
* @Author: wzh |
|||
* @Date: 2025-12-22 17:43:06 |
|||
* @Copyright 1 |
|||
*/ |
|||
import { postRequest, getRequest } from '/@/lib/axios'; |
|||
|
|||
export const letterApi = { |
|||
|
|||
/** |
|||
* 分页查询 @author wzh |
|||
*/ |
|||
queryPage : (param) => { |
|||
return postRequest('/letter/queryPage', param); |
|||
}, |
|||
|
|||
/** |
|||
* 增加 @author wzh |
|||
*/ |
|||
add: (param) => { |
|||
return postRequest('/letter/add', param); |
|||
}, |
|||
|
|||
/** |
|||
* 修改 @author wzh |
|||
*/ |
|||
update: (param) => { |
|||
return postRequest('/letter/update', param); |
|||
}, |
|||
|
|||
|
|||
|
|||
}; |
|||
@ -0,0 +1,11 @@ |
|||
/** |
|||
* 承诺书签订表 枚举 |
|||
* |
|||
* @Author: wzh |
|||
* @Date: 2025-12-22 17:43:06 |
|||
* @Copyright 1 |
|||
*/ |
|||
|
|||
|
|||
export default { |
|||
}; |
|||
@ -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,69 @@ |
|||
/* |
|||
* 企业信息 |
|||
* |
|||
* @Author: 开云 |
|||
* @Date: 2022-09-03 21:47:28 |
|||
* @Wechat: zhuda1024 |
|||
* @Email: lab1024@163.com |
|||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012
|
|||
*/ |
|||
import {postRequest, getRequest, postDownload} 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); |
|||
}, |
|||
|
|||
// 导出企业数据excel @author 卓大
|
|||
exportExcel: (param) => { |
|||
return postDownload('/oa/enterprise/exportExcel', 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); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,74 @@ |
|||
/** |
|||
* 服务申报表 api 封装 |
|||
* |
|||
* @Author: wzh |
|||
* @Date: 2025-12-20 14:44:06 |
|||
* @Copyright 1.0 |
|||
*/ |
|||
import { postRequest, getRequest, getDownload } from '/@/lib/axios'; |
|||
|
|||
export const serviceApplicationsApi = { |
|||
|
|||
/** |
|||
* 分页查询 @author wzh |
|||
*/ |
|||
queryPage : (param) => { |
|||
return postRequest('/serviceApplications/queryPage', param); |
|||
}, |
|||
|
|||
/** |
|||
* 增加 @author wzh |
|||
*/ |
|||
add: (param) => { |
|||
return postRequest('/serviceApplications/add', param); |
|||
}, |
|||
|
|||
/** |
|||
* 修改 @author wzh |
|||
*/ |
|||
update: (param) => { |
|||
return postRequest('/serviceApplications/update', param); |
|||
}, |
|||
/** |
|||
* 提交 @author wzh |
|||
*/ |
|||
submit: (id) => { |
|||
return postRequest(`/serviceApplications/submit/${id}`); |
|||
}, |
|||
/** |
|||
* 批量提交 @author wzh |
|||
*/ |
|||
batchSubmit: (param) => { |
|||
return postRequest('/serviceApplications/batchSubmit', param); |
|||
}, |
|||
/** |
|||
* 删除 @author wzh |
|||
*/ |
|||
delete: (id) => { |
|||
return getRequest(`/serviceApplications/delete/${id}`); |
|||
}, |
|||
|
|||
/** |
|||
* 批量删除 @author wzh |
|||
*/ |
|||
batchDelete: (idList) => { |
|||
return postRequest('/serviceApplications/batchDelete', idList); |
|||
}, |
|||
/** |
|||
* 下载模板 @author wzh |
|||
*/ |
|||
downloadTemplate: () => { |
|||
return getDownload('/serviceApplications/downloadTemplate'); |
|||
}, |
|||
|
|||
/** |
|||
* 导入服务申报 @author wzh |
|||
*/ |
|||
importServiceApplications: (formData) => { |
|||
return postRequest('/serviceApplications/importService', formData, { |
|||
headers: { |
|||
'Content-Type': 'multipart/form-data' |
|||
} |
|||
}); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,11 @@ |
|||
/** |
|||
* 服务申报表 枚举 |
|||
* |
|||
* @Author: wzh |
|||
* @Date: 2025-12-20 14:44:06 |
|||
* @Copyright 1.0 |
|||
*/ |
|||
|
|||
|
|||
export default { |
|||
}; |
|||
@ -0,0 +1,40 @@ |
|||
/** |
|||
* 接口:加密、解密 |
|||
* |
|||
* @Author: 1024创新实验室-主任-卓大 |
|||
* @Date: 2023-10-17 20:02:37 |
|||
* @Copyright 1024创新实验室 |
|||
*/ |
|||
import { postRequest, postEncryptRequest } from '/@/lib/axios'; |
|||
|
|||
export const encryptApi = { |
|||
|
|||
/** |
|||
* 测试 请求加密 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
testRequestEncrypt: (param) => { |
|||
return postEncryptRequest('/support/apiEncrypt/testRequestEncrypt', param); |
|||
}, |
|||
|
|||
/** |
|||
* 测试 返回加密 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
testResponseEncrypt: (param) => { |
|||
return postRequest('/support/apiEncrypt/testResponseEncrypt', param); |
|||
}, |
|||
|
|||
/** |
|||
* 测试 请求参数加密和解密、返回数据加密和解密 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
testDecryptAndEncrypt: (param) => { |
|||
return postEncryptRequest('/support/apiEncrypt/testDecryptAndEncrypt', param); |
|||
}, |
|||
|
|||
/** |
|||
* 测试 数组加解密 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
testArray : (param) => { |
|||
return postEncryptRequest('/support/apiEncrypt/testArray', param); |
|||
}, |
|||
|
|||
}; |
|||
@ -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 {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('/support/changeLog/queryPage', param); |
|||
}, |
|||
|
|||
/** |
|||
* 增加 @author 卓大 |
|||
*/ |
|||
add: (param) => { |
|||
return postRequest('/support/changeLog/add', param); |
|||
}, |
|||
|
|||
/** |
|||
* 修改 @author 卓大 |
|||
*/ |
|||
update: (param) => { |
|||
return postRequest('/support/changeLog/update', param); |
|||
}, |
|||
|
|||
/** |
|||
* 删除 @author 卓大 |
|||
*/ |
|||
delete: (id) => { |
|||
return getRequest(`/support/changeLog/delete/${id}`); |
|||
}, |
|||
|
|||
/** |
|||
* 批量删除 @author 卓大 |
|||
*/ |
|||
batchDelete: (idList) => { |
|||
return postRequest('/support/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, getDownload } 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 getDownload(`/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,17 @@ |
|||
/** |
|||
* 数据脱敏api |
|||
* |
|||
* @Author: 1024创新实验室-主任-卓大 |
|||
* @Date: 2024-07-31 21:02:37 |
|||
* @Copyright 1024创新实验室 |
|||
*/ |
|||
import { getRequest } from '/@/lib/axios'; |
|||
|
|||
export const dataMaskingApi = { |
|||
/** |
|||
* 查询脱敏数据 |
|||
*/ |
|||
query: () => { |
|||
return getRequest('/support/dataMasking/demo/query'); |
|||
}, |
|||
}; |
|||
@ -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,75 @@ |
|||
/* |
|||
* 字典 |
|||
* |
|||
* @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 = { |
|||
|
|||
// 获取所有字典code @author 1024创新实验室-主任-卓大
|
|||
getAllDict: () => { |
|||
return getRequest('/support/dict/getAllDict'); |
|||
}, |
|||
|
|||
// 获取全部字典数据 @author 1024创新实验室-主任-卓大
|
|||
getAllDictData: () => { |
|||
return getRequest('/support/dict/getAllDictData'); |
|||
}, |
|||
|
|||
// 分页查询 @author 1024创新实验室-主任-卓大
|
|||
queryDict: (param) => { |
|||
return postRequest('/support/dict/queryPage', param); |
|||
}, |
|||
|
|||
// 添加 @author 1024创新实验室-主任-卓大
|
|||
addDict: (param) => { |
|||
return postRequest('/support/dict/add', param); |
|||
}, |
|||
|
|||
// 更新 @author 1024创新实验室-主任-卓大
|
|||
updateDict: (param) => { |
|||
return postRequest('/support/dict/update', param); |
|||
}, |
|||
|
|||
// 字典-删除- @author 卓大
|
|||
batchDeleteDict: (dictIdList) => { |
|||
return postRequest('/support/dict/batchDelete', dictIdList); |
|||
}, |
|||
|
|||
// 字典 启用 禁用 @author 1024创新实验室-主任-卓大
|
|||
updateDisabled: (dictId) => { |
|||
return getRequest(`/support/dict/updateDisabled/${dictId}`); |
|||
}, |
|||
|
|||
// ------------- 查询字典数据 -------------
|
|||
|
|||
// 字典数据 分页查询 @author 1024创新实验室-主任-卓大
|
|||
queryDictData: (dictId) => { |
|||
return getRequest(`/support/dict/dictData/queryDictData/${dictId}`); |
|||
}, |
|||
|
|||
// 字典数据 添加 - @author 卓大
|
|||
addDictData: (param) => { |
|||
return postRequest('/support/dict/dictData/add', param); |
|||
}, |
|||
|
|||
// 字典数据 更新- @author 卓大
|
|||
updateDictData: (param) => { |
|||
return postRequest('/support/dict/dictData/update', param); |
|||
}, |
|||
|
|||
// 字典数据-删除- @author 卓大
|
|||
batchDeleteDictData: (dictDataIdList) => { |
|||
return postRequest('/support/dict/dictData/batchDelete', dictDataIdList); |
|||
}, |
|||
|
|||
// 字典数据 启用 禁用 @author 1024创新实验室-主任-卓大
|
|||
updateDictDataDisabled: (dictDataId) => { |
|||
return getRequest(`/support/dict/dictData/updateDisabled/${dictDataId}`); |
|||
}, |
|||
}; |
|||
@ -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,45 @@ |
|||
/* |
|||
* 文件上传 |
|||
* |
|||
* @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, getDownload } 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: (fileKey) => { |
|||
return getDownload('/support/file/downLoad', { fileKey }); |
|||
}, |
|||
|
|||
/** |
|||
* 根据文件ID列表获取文件信息 @author 系统 |
|||
*/ |
|||
getFileList: (fileIds) => { |
|||
return getRequest(`/support/file/getFileList?fileIds=${fileIds}`); |
|||
}, |
|||
}; |
|||
@ -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,42 @@ |
|||
/* |
|||
* job api |
|||
* |
|||
* @Author: huke |
|||
* @Date: 2024/06/25 |
|||
*/ |
|||
import { postRequest, getRequest } from '/@/lib/axios'; |
|||
|
|||
export const jobApi = { |
|||
// 分页查询 @huke
|
|||
queryJob: (param) => { |
|||
return postRequest('/support/job/query', param); |
|||
}, |
|||
// 定时任务-查询详情 @huke
|
|||
queryJobInfo: (param) => { |
|||
return getRequest(`/support/job/${param}`); |
|||
}, |
|||
// 执行任务 @huke
|
|||
executeJob: (param) => { |
|||
return postRequest('/support/job/execute', param); |
|||
}, |
|||
// 定时任务-新增-任务信息 @huke
|
|||
addJob: (param) => { |
|||
return postRequest('/support/job/add', param); |
|||
}, |
|||
// 定时任务-更新-任务信息 @huke
|
|||
updateJob: (param) => { |
|||
return postRequest('/support/job/update', param); |
|||
}, |
|||
// 定时任务-更新-开启状态 @huke
|
|||
updateJobEnabled: (param) => { |
|||
return postRequest('/support/job/update/enabled', param); |
|||
}, |
|||
// 定时任务-执行记录-分页查询 @huke
|
|||
queryJobLog: (param) => { |
|||
return postRequest('/support/job/log/query', param); |
|||
}, |
|||
// 定时任务-删除 @zhuoda
|
|||
deleteJob: (param) => { |
|||
return getRequest(`/support/job/delete?jobId=${param}`); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,24 @@ |
|||
/** |
|||
* 三级等保 api 封装 |
|||
* |
|||
* @Author: 1024创新实验室-主任-卓大 |
|||
* @Date: 2024-07-31 21:02:37 |
|||
* @Copyright 1024创新实验室 |
|||
*/ |
|||
import { postRequest, getRequest } from '/@/lib/axios'; |
|||
|
|||
export const level3ProtectApi = { |
|||
/** |
|||
* 查询 三级等保配置 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
getConfig: () => { |
|||
return getRequest('/support/protect/level3protect/getConfig'); |
|||
}, |
|||
|
|||
/** |
|||
* 更新三级等保配置 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
updateConfig: (form) => { |
|||
return postRequest('/support/protect/level3protect/updateConfig', form); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,26 @@ |
|||
/** |
|||
* 登录锁定 api 封装 |
|||
* |
|||
* @Author: 1024创新实验室-主任-卓大 |
|||
* @Date: 2023-10-17 18:02:37 |
|||
* @Copyright 1024创新实验室 |
|||
*/ |
|||
import { postRequest, getRequest } from '/@/lib/axios'; |
|||
|
|||
export const loginFailApi = { |
|||
|
|||
/** |
|||
* 分页查询 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
queryPage : (param) => { |
|||
return postRequest('/support/protect/loginFail/queryPage', param); |
|||
}, |
|||
|
|||
/** |
|||
* 批量删除 @author 1024创新实验室-主任-卓大 |
|||
*/ |
|||
batchDelete: (idList) => { |
|||
return postRequest('/support/protect/loginFail/batchDelete', idList); |
|||
}, |
|||
|
|||
}; |
|||
@ -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, getRequest } from '/@/lib/axios'; |
|||
|
|||
export const loginLogApi = { |
|||
// 分页查询 @author 卓大
|
|||
queryList: (param) => { |
|||
return postRequest('/support/loginLog/page/query', param); |
|||
}, |
|||
// 分页查询当前登录人信息 @author 善逸
|
|||
queryListLogin: (param) => { |
|||
return postRequest('/support/loginLog/page/query/login', param); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,31 @@ |
|||
import { getRequest, postRequest } from '/@/lib/axios'; |
|||
|
|||
export const messageApi = { |
|||
// 通知消息-分页查询
|
|||
queryMessage: (param) => { |
|||
return postRequest('/support/message/queryMyMessage', param); |
|||
}, |
|||
// 通知消息-查询未读消息数
|
|||
queryUnreadCount: () => { |
|||
return getRequest('/support/message/getUnreadCount'); |
|||
}, |
|||
// 通知消息-标记已读
|
|||
updateReadFlag: (messageId) => { |
|||
return getRequest(`/support/message/read/${messageId}`); |
|||
}, |
|||
|
|||
//通知消息-分页查询 @author 卓大
|
|||
queryAdminMessage: (param) => { |
|||
return postRequest('/message/query', param); |
|||
}, |
|||
|
|||
//通知消息-新建 @author 卓大
|
|||
sendMessages: (param) => { |
|||
return postRequest('/message/sendMessages', param); |
|||
}, |
|||
|
|||
//通知消息-删除 @author 卓大
|
|||
deleteMessage: (messageId) => { |
|||
return getRequest(`/message/delete/${messageId}`); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,25 @@ |
|||
/* |
|||
* 操作日志 |
|||
* |
|||
* @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}`); |
|||
}, |
|||
// 分页查询当前登录人信息 @author 善逸
|
|||
queryListLogin: (param) => { |
|||
return postRequest('/support/operateLog/page/query/login', param); |
|||
}, |
|||
}; |
|||
@ -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,39 @@ |
|||
/* |
|||
* 部门 |
|||
*/ |
|||
import { getRequest, postRequest } from '/@/lib/axios'; |
|||
|
|||
export const departmentApi = { |
|||
/** |
|||
* 查询部门列表 |
|||
*/ |
|||
queryAllDepartment: () => { |
|||
return getRequest('/department/listAll'); |
|||
}, |
|||
|
|||
/** |
|||
* 查询部门树形列表 |
|||
*/ |
|||
queryDepartmentTree: () => { |
|||
return getRequest('/department/treeList'); |
|||
}, |
|||
|
|||
/** |
|||
* 添加部门 |
|||
*/ |
|||
addDepartment: (param) => { |
|||
return postRequest('/department/add', param); |
|||
}, |
|||
/** |
|||
* 更新部门信息 |
|||
*/ |
|||
updateDepartment: (param) => { |
|||
return postRequest('/department/update', param); |
|||
}, |
|||
/** |
|||
* 删除 |
|||
*/ |
|||
deleteDepartment: (departmentId) => { |
|||
return getRequest(`/department/delete/${departmentId}`); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,93 @@ |
|||
/* |
|||
* 员工 |
|||
|
|||
*/ |
|||
|
|||
import { getRequest, postEncryptRequest, postRequest } from '/@/lib/axios'; |
|||
|
|||
export const employeeApi = { |
|||
/** |
|||
* 查询所有员工 |
|||
*/ |
|||
queryAll: () => { |
|||
return getRequest('/employee/queryAll'); |
|||
}, |
|||
/** |
|||
* 员工管理查询 |
|||
*/ |
|||
queryEmployee: (params) => { |
|||
return postRequest('/employee/query', params); |
|||
}, |
|||
/** |
|||
* 添加员工 |
|||
*/ |
|||
addEmployee: (params) => { |
|||
return postRequest('/employee/add', params); |
|||
}, |
|||
/** |
|||
* 更新员工信息 |
|||
*/ |
|||
updateEmployee: (params) => { |
|||
return postRequest('/employee/update', params); |
|||
}, |
|||
/** |
|||
* 更新员工个人中心信息 |
|||
*/ |
|||
updateCenter: (params) => { |
|||
return postRequest('/employee/update/center', params); |
|||
}, |
|||
/** |
|||
* 更新登录人头像 |
|||
*/ |
|||
updateAvatar: (params) => { |
|||
return postRequest('/employee/update/avatar', params); |
|||
}, |
|||
/** |
|||
* 删除员工 |
|||
*/ |
|||
deleteEmployee: (employeeId) => { |
|||
return getRequest(`/employee/delete/${employeeId}`); |
|||
}, |
|||
/** |
|||
* 批量删除员工 |
|||
*/ |
|||
batchDeleteEmployee: (employeeIdList) => { |
|||
return postRequest('/employee/update/batch/delete', employeeIdList); |
|||
}, |
|||
/** |
|||
* 批量调整员工部门 |
|||
*/ |
|||
batchUpdateDepartmentEmployee: (updateParam) => { |
|||
return postRequest('/employee/update/batch/department', updateParam); |
|||
}, |
|||
/** |
|||
* 重置员工密码 |
|||
*/ |
|||
resetPassword: (employeeId) => { |
|||
return getRequest(`/employee/update/password/reset/${employeeId}`); |
|||
}, |
|||
/** |
|||
* 修改密码 |
|||
*/ |
|||
updateEmployeePassword: (param) => { |
|||
return postEncryptRequest('/employee/update/password', param); |
|||
}, |
|||
/** |
|||
* 获取密码复杂度 |
|||
*/ |
|||
getPasswordComplexityEnabled: () => { |
|||
return getRequest('/employee/getPasswordComplexityEnabled'); |
|||
}, |
|||
/** |
|||
* 更新员工禁用状态 |
|||
*/ |
|||
updateDisabled: (employeeId) => { |
|||
return getRequest(`/employee/update/disabled/${employeeId}`); |
|||
}, |
|||
/** |
|||
* 查询员工-根据部门id |
|||
*/ |
|||
queryEmployeeByDeptId: (departmentId) => { |
|||
return getRequest(`/employee/getAllEmployeeByDepartmentId/${departmentId}`); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,19 @@ |
|||
/* |
|||
* 首页api |
|||
*/ |
|||
import { getRequest } from '/@/lib/axios'; |
|||
|
|||
export const homeApi = { |
|||
/** |
|||
* @description: 首页-金额统计(业绩、收款、订单数等) |
|||
*/ |
|||
homeAmountStatistics: () => { |
|||
return getRequest('/home/amount/statistics'); |
|||
}, |
|||
/** |
|||
* @description: 首页-待办信息 |
|||
*/ |
|||
homeWaitHandle: () => { |
|||
return getRequest('home/wait/handle'); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,54 @@ |
|||
/* |
|||
* 登录 |
|||
* |
|||
* @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 卓大 |
|||
*/ |
|||
login: (param) => { |
|||
return postRequest('/login', param); |
|||
}, |
|||
|
|||
/** |
|||
* 退出登录 @author 卓大 |
|||
*/ |
|||
logout: () => { |
|||
return getRequest('/login/logout'); |
|||
}, |
|||
|
|||
/** |
|||
* 获取验证码 @author 卓大 |
|||
*/ |
|||
getCaptcha: () => { |
|||
return getRequest('/login/getCaptcha'); |
|||
}, |
|||
|
|||
/** |
|||
* 获取登录信息 @author 卓大 |
|||
*/ |
|||
getLoginInfo: () => { |
|||
return getRequest('/login/getLoginInfo'); |
|||
}, |
|||
|
|||
/** |
|||
* 获取邮箱登录验证码 @author 卓大 |
|||
*/ |
|||
sendLoginEmailCode: (loginName) => { |
|||
return getRequest(`/login/sendEmailCode/${loginName}`); |
|||
}, |
|||
|
|||
/** |
|||
* 获取双因子登录标识 @author 卓大 |
|||
*/ |
|||
getTwoFactorLoginFlag: () => { |
|||
return getRequest('/login/getTwoFactorLoginFlag'); |
|||
}, |
|||
}; |
|||
@ -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,55 @@ |
|||
/** |
|||
* 职务表 api 封装 |
|||
* |
|||
* @Author: kaiyun |
|||
* @Date: 2024-06-23 23:31:38 |
|||
* @Copyright <a href="https://1024lab.net">1024创新实验室</a> |
|||
*/ |
|||
import { postRequest, getRequest } from '/@/lib/axios'; |
|||
|
|||
export const positionApi = { |
|||
|
|||
/** |
|||
* 分页查询 @author kaiyun |
|||
*/ |
|||
queryPage : (param) => { |
|||
return postRequest('/position/queryPage', param); |
|||
}, |
|||
|
|||
/** |
|||
* 增加 @author kaiyun |
|||
*/ |
|||
add: (param) => { |
|||
return postRequest('/position/add', param); |
|||
}, |
|||
|
|||
/** |
|||
* 修改 @author kaiyun |
|||
*/ |
|||
update: (param) => { |
|||
return postRequest('/position/update', param); |
|||
}, |
|||
|
|||
|
|||
/** |
|||
* 删除 @author kaiyun |
|||
*/ |
|||
delete: (id) => { |
|||
return getRequest(`/position/delete/${id}`); |
|||
}, |
|||
|
|||
/** |
|||
* 批量删除 @author kaiyun |
|||
*/ |
|||
batchDelete: (idList) => { |
|||
return postRequest('/position/batchDelete', idList); |
|||
}, |
|||
|
|||
/** |
|||
* 查询列表 @author kaiyun |
|||
*/ |
|||
queryList: () => { |
|||
return getRequest('/position/queryList'); |
|||
}, |
|||
|
|||
}; |
|||
@ -0,0 +1,85 @@ |
|||
/* |
|||
* 角色 |
|||
* |
|||
* @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: 获取所有角色 |
|||
*/ |
|||
queryAll: () => { |
|||
return getRequest('/role/getAll'); |
|||
}, |
|||
/** |
|||
* @description:添加角色 |
|||
*/ |
|||
addRole: (data) => { |
|||
return postRequest('/role/add', data); |
|||
}, |
|||
/** |
|||
* @description:更新角色 |
|||
*/ |
|||
updateRole: (data) => { |
|||
return postRequest('/role/update', data); |
|||
}, |
|||
/** |
|||
* @description: 删除角色 |
|||
*/ |
|||
deleteRole: (roleId) => { |
|||
return getRequest(`/role/delete/${roleId}`); |
|||
}, |
|||
/** |
|||
* @description: 批量设置某角色数据范围 |
|||
*/ |
|||
updateDataScope: (data) => { |
|||
return postRequest('/role/dataScope/updateRoleDataScopeList', data); |
|||
}, |
|||
/** |
|||
* @description: 获取当前系统所配置的所有数据范围 |
|||
*/ |
|||
getDataScopeList: () => { |
|||
return getRequest('/dataScope/list'); |
|||
}, |
|||
/** |
|||
* @description: 获取某角色所设置的数据范围 |
|||
*/ |
|||
getDataScopeByRoleId: (roleId) => { |
|||
return getRequest(`/role/dataScope/getRoleDataScopeList/${roleId}`); |
|||
}, |
|||
/** |
|||
* @description: 获取角色成员-员工列表 |
|||
*/ |
|||
queryRoleEmployee: (params) => { |
|||
return postRequest('/role/employee/queryEmployee', params); |
|||
}, |
|||
/** |
|||
* @description: 从角色成员列表中移除员工 |
|||
*/ |
|||
deleteEmployeeRole: (employeeId, roleId) => { |
|||
return getRequest('/role/employee/removeEmployee?employeeId=' + employeeId + '&roleId=' + roleId); |
|||
}, |
|||
/** |
|||
* @description: 从角色成员列表中批量移除员工 |
|||
*/ |
|||
batchRemoveRoleEmployee: (data) => { |
|||
return postRequest('/role/employee/batchRemoveRoleEmployee', data); |
|||
}, |
|||
/** |
|||
* @description: 根据角色id获取角色员工列表(无分页) |
|||
*/ |
|||
getRoleAllEmployee: (roleId) => { |
|||
return getRequest(`/role/employee/getAllEmployeeByRoleId/${roleId}`); |
|||
}, |
|||
/** |
|||
* @description: 角色成员列表中批量添加员工 |
|||
*/ |
|||
batchAddRoleEmployee: (data) => { |
|||
return postRequest('/role/employee/batchAddRoleEmployee', data); |
|||
}, |
|||
}; |
|||
@ -0,0 +1,24 @@ |
|||
/* |
|||
* 角色菜单 |
|||
* |
|||
* @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: 获取角色关联菜单权限 |
|||
*/ |
|||
getRoleSelectedMenu: (roleId) => { |
|||
return getRequest(`role/menu/getRoleSelectedMenu/${roleId}`); |
|||
}, |
|||
/** |
|||
* @description: 更新角色权限 |
|||
*/ |
|||
updateRoleMenu: (data) => { |
|||
return postRequest('role/menu/updateRoleMenu', data); |
|||
}, |
|||
}; |
|||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 382 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 354 KiB |
|
After Width: | Height: | Size: 234 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 272 KiB |
|
After Width: | Height: | Size: 206 KiB |
|
After Width: | Height: | Size: 394 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 MiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 249 B |
|
After Width: | Height: | Size: 700 B |
|
After Width: | Height: | Size: 488 B |
@ -0,0 +1,86 @@ |
|||
<!-- |
|||
* 目录 树形选择组件 |
|||
* |
|||
* @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', overflowX: 'auto' }" |
|||
:tree-data="categoryTreeData" |
|||
:placeholder="placeholder" |
|||
:allowClear="true" |
|||
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,87 @@ |
|||
<!-- |
|||
* 地区选择框 |
|||
* |
|||
* @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 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> |
|||
@ -0,0 +1,80 @@ |
|||
<!-- |
|||
* 布尔 树形选择组件 |
|||
* |
|||
* @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" |
|||
> |
|||
<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: Boolean, |
|||
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; |
|||
} |
|||
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:open="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,38 @@ |
|||
<template> |
|||
<CopyOutlined |
|||
@click="copy" |
|||
:style="{ |
|||
color: `${color}`, |
|||
}" |
|||
class="icon" |
|||
/> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { message } from 'ant-design-vue'; |
|||
const props = defineProps({ |
|||
value: { |
|||
type: [String, Number], |
|||
default: '', |
|||
}, |
|||
color: { |
|||
type: String, |
|||
default: '#1890ff', |
|||
}, |
|||
}); |
|||
|
|||
function copy() { |
|||
const textarea = document.createElement('textarea'); |
|||
textarea.value = props.value; |
|||
document.body.appendChild(textarea); |
|||
textarea.select(); |
|||
document.execCommand('copy'); |
|||
document.body.removeChild(textarea); |
|||
message.success('复制成功'); |
|||
} |
|||
</script> |
|||
<style scoped lang="less"> |
|||
.icon { |
|||
margin: 0 10px; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,75 @@ |
|||
<!-- |
|||
* 枚举 多选框 |
|||
* |
|||
* @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" @change="handleChange" :disabled="disabled"> |
|||
<a-checkbox v-for="item in valueDescList" :key="item.value" :value="item.value" :disabled="disabledOption.includes(item.value)"> |
|||
{{ item.desc }} |
|||
</a-checkbox> |
|||
</a-checkbox-group> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { ref, watch, getCurrentInstance, onMounted } from 'vue'; |
|||
|
|||
const props = defineProps({ |
|||
enumName: String, |
|||
value: Array, |
|||
width: { |
|||
type: String, |
|||
default: '200px', |
|||
}, |
|||
// 禁用整个多选框 |
|||
disabled: { |
|||
type: Boolean, |
|||
default: false, |
|||
}, |
|||
// 需要禁用的选项枚举值 |
|||
disabledOption: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
// 需要隐藏的选项枚举值 |
|||
hiddenOption: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
}); |
|||
|
|||
// ------------ 枚举数据 加载和构建 ------------ |
|||
|
|||
const valueDescList = ref([]); |
|||
|
|||
onMounted(() => { |
|||
const internalInstance = getCurrentInstance(); // 有效 全局 |
|||
const smartEnumPlugin = internalInstance.appContext.config.globalProperties.$smartEnumPlugin; |
|||
valueDescList.value = smartEnumPlugin.getValueDescList(props.enumName).filter((item) => !props.hiddenOption.includes(item.value)); |
|||
}); |
|||
|
|||
// ------------ 数据选中 事件及其相关 ------------ |
|||
|
|||
const selectValue = ref(props.value); |
|||
|
|||
watch( |
|||
() => props.value, |
|||
(newValue) => { |
|||
// 如果传入的值是被禁用或被隐藏的选项,则移除这些选项 |
|||
selectValue.value = newValue.filter((item) => !props.hiddenOption.includes(item) && !props.disabledOption.includes(item)); |
|||
}, |
|||
{ immediate: true } |
|||
); |
|||
|
|||
const emit = defineEmits(['update:value', 'change']); |
|||
|
|||
function handleChange(value) { |
|||
emit('update:value', value); |
|||
emit('change', value); |
|||
} |
|||
</script> |
|||
@ -0,0 +1,88 @@ |
|||
<!-- |
|||
* 枚举 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" :disabled="disabled"> |
|||
<a-radio-button v-for="item in valueDescList" :key="item.value" :value="item.value" :disabled="disabledOption.includes(item.value)"> |
|||
{{ item.desc }} |
|||
</a-radio-button> |
|||
</a-radio-group> |
|||
</template> |
|||
<template v-else> |
|||
<a-radio-group v-model:value="selectValue" @change="handleChange" :disabled="disabled"> |
|||
<a-radio v-for="item in valueDescList" :key="item.value" :value="item.value" :disabled="disabledOption.includes(item.value)"> |
|||
{{ item.desc }} |
|||
</a-radio> |
|||
</a-radio-group> |
|||
</template> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { ref, watch, onMounted, getCurrentInstance } 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, |
|||
}, |
|||
// 禁用整个单选框 |
|||
disabled: { |
|||
type: Boolean, |
|||
default: false, |
|||
}, |
|||
// 需要禁用的选项枚举值 |
|||
disabledOption: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
// 需要隐藏的选项枚举值 |
|||
hiddenOption: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
}); |
|||
|
|||
const valueDescList = ref([]); |
|||
|
|||
onMounted(() => { |
|||
const internalInstance = getCurrentInstance(); // 有效 全局 |
|||
const smartEnumPlugin = internalInstance.appContext.config.globalProperties.$smartEnumPlugin; |
|||
valueDescList.value = smartEnumPlugin.getValueDescList(props.enumName).filter((item) => !props.hiddenOption.includes(item.value)); |
|||
}); |
|||
|
|||
const selectValue = ref(props.value); |
|||
|
|||
watch( |
|||
() => props.value, |
|||
(newValue) => { |
|||
// 如果传入的值是被禁用或被隐藏的选项,则移除该选项 |
|||
selectValue.value = props.disabledOption.includes(newValue) || props.hiddenOption.includes(newValue) ? undefined : newValue; |
|||
}, |
|||
{ immediate: true } |
|||
); |
|||
|
|||
const emit = defineEmits(['update:value', 'change']); |
|||
|
|||
function handleChange(e) { |
|||
emit('update:value', e.target.value); |
|||
emit('change', e.target.value); |
|||
} |
|||
</script> |
|||
@ -0,0 +1,88 @@ |
|||
<!-- |
|||
* 枚举 下拉框 |
|||
* |
|||
* @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 valueDescList" :key="item.value" :value="item.value" :disabled="disabledOption.includes(item.value)"> |
|||
{{ item.desc }} |
|||
</a-select-option> |
|||
</a-select> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import { ref, watch, onMounted, getCurrentInstance } 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, |
|||
}, |
|||
// 需要禁用的选项枚举值 |
|||
disabledOption: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
// 需要隐藏的选项枚举值 |
|||
hiddenOption: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
}); |
|||
|
|||
const valueDescList = ref([]); |
|||
|
|||
onMounted(() => { |
|||
const internalInstance = getCurrentInstance(); // 有效 全局 |
|||
const smartEnumPlugin = internalInstance.appContext.config.globalProperties.$smartEnumPlugin; |
|||
valueDescList.value = smartEnumPlugin.getValueDescList(props.enumName).filter((item) => !props.hiddenOption.includes(item.value)); |
|||
}); |
|||
|
|||
const selectValue = ref(props.value); |
|||
|
|||
watch( |
|||
() => props.value, |
|||
(newValue) => { |
|||
// 如果传入的值是被禁用或被隐藏的选项,则移除该选项 |
|||
selectValue.value = props.disabledOption.includes(newValue) || props.hiddenOption.includes(newValue) ? undefined : newValue; |
|||
}, |
|||
{ immediate: true } |
|||
); |
|||
|
|||
const emit = defineEmits(['update:value', 'change']); |
|||
|
|||
function handleChange(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,77 @@ |
|||
<template> |
|||
<div :class="className"> |
|||
<div v-if="overflow" class="ellipsis-box"> |
|||
<a-popover> |
|||
<template #content> |
|||
{{ text }} |
|||
<SmartCopyIcon :value="text" /> |
|||
</template> |
|||
<div> |
|||
<slot> |
|||
{{ text }} |
|||
</slot> |
|||
</div> |
|||
</a-popover> |
|||
</div> |
|||
<div v-else> |
|||
<slot> |
|||
{{ text }} |
|||
</slot> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script setup> |
|||
import { onMounted, ref, nextTick } from 'vue'; |
|||
import { Modal } from 'ant-design-vue'; |
|||
import { v4 as uuid } from 'uuid'; |
|||
import SmartCopyIcon from '/@/components/framework/smart-copy-icon/index.vue'; |
|||
|
|||
const props = defineProps({ |
|||
text: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
classKey: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}); |
|||
|
|||
const overflow = ref(false); |
|||
const className = ref(); |
|||
onMounted(() => { |
|||
className.value = props.classKey + uuid(); |
|||
nextTick(() => { |
|||
let doc = document.querySelector(`.${className.value}`); |
|||
let fontSize = window.getComputedStyle(doc).fontSize.replace('px', ''); |
|||
let clientWidth = doc.clientWidth; |
|||
let span = document.createElement('span'); |
|||
document.body.appendChild(span); |
|||
span.style.fontSize = `${fontSize}px`; |
|||
span.innerText = props.text; |
|||
let width = span.offsetWidth; |
|||
document.body.removeChild(span); |
|||
overflow.value = width > clientWidth; |
|||
}); |
|||
}); |
|||
|
|||
function showModel() { |
|||
Modal.info({ |
|||
content: props.text, |
|||
icon: '', |
|||
okText: '关闭', |
|||
}); |
|||
} |
|||
</script> |
|||
|
|||
<style lang="less" scoped> |
|||
.ellipsis-box { |
|||
display: flex; |
|||
align-items: center; |
|||
div { |
|||
flex: 1; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,118 @@ |
|||
<!-- |
|||
* 编辑器 |
|||
* |
|||
* @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" /> |
|||
<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-api'; |
|||
import '@wangeditor-next/editor/dist/css/style.css'; |
|||
import { Editor, Toolbar } from '@wangeditor-next/editor-for-vue'; |
|||
import { smartSentry } from '/@/lib/smart-sentry'; |
|||
|
|||
//菜单 |
|||
const editorConfig = { MENU_CONF: {} }; |
|||
|
|||
//上传 |
|||
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, |
|||
}, |
|||
}); |
|||
watch( |
|||
() => props.modelValue, |
|||
(nVal) => { |
|||
editorHtml.value = nVal; |
|||
}, |
|||
{ |
|||
immediate: true, |
|||
deep: true, |
|||
} |
|||
); |
|||
|
|||
// 获取编辑器实例html |
|||
const emit = defineEmits(['update:modelValue']); |
|||
const editorRef = shallowRef(); |
|||
const handleCreated = (editor) => { |
|||
editorRef.value = editor; |
|||
}; |
|||
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> |
|||
<!-- 解决弹窗高度警告信息显示 --> |
|||
<style> |
|||
::v-deep .w-e-text-container { |
|||
height: 420px !important; |
|||
} |
|||
.w-e-text-container .w-e-scroll { |
|||
height: 500px !important; |
|||
-webkit-overflow-scrolling: touch; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,97 @@ |
|||
<!-- |
|||
* 数据变更记录,以table形式显示 |
|||
* |
|||
* @Author: 1024创新实验室-主任:卓大 |
|||
* @Date: 2022-08-12 21:01:52 |
|||
* @Wechat: zhuda1024 |
|||
* @Email: lab1024@163.com |
|||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 |
|||
--> |
|||
<template> |
|||
<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> |
|||
</template> |
|||
<script setup> |
|||
import { reactive } from 'vue'; |
|||
|
|||
const props = defineProps({ |
|||
tableData: { |
|||
type: Array, |
|||
}, |
|||
}); |
|||
|
|||
const emit = defineEmits(['showDetail']); |
|||
function showDetail(record) { |
|||
emit('showDetail', record); |
|||
} |
|||
|
|||
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: 'IP地区', |
|||
dataIndex: 'ipRegion', |
|||
ellipsis: true, |
|||
width: 100, |
|||
}, |
|||
{ |
|||
title: '客户端', |
|||
dataIndex: 'userAgent', |
|||
ellipsis: true, |
|||
width: 150, |
|||
}, |
|||
{ |
|||
title: '操作内容', |
|||
dataIndex: 'content', |
|||
}, |
|||
{ |
|||
title: '操作', |
|||
dataIndex: 'action', |
|||
fixed: 'right', |
|||
width: 80, |
|||
}, |
|||
]); |
|||
</script> |
|||
<style scoped lang="less"> |
|||
.operate-content { |
|||
font-size: 14px; |
|||
display: inline; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,50 @@ |
|||
<!-- |
|||
* 数据变更记录,以 timeline 形式显示 |
|||
* |
|||
* @Author: 1024创新实验室-主任:卓大 |
|||
* @Date: 2022-08-12 21:01:52 |
|||
* @Wechat: zhuda1024 |
|||
* @Email: lab1024@163.com |
|||
* @Copyright 1024创新实验室 ( https://1024lab.net ),Since 2012 |
|||
--> |
|||
<template> |
|||
<a-timeline> |
|||
<a-timeline-item v-for="record in tableData" :key="record.dataTracerId"> |
|||
<div class="trace-div"> |
|||
<div> |
|||
<!-- <div class="operate-content" >{{ record.content }}</div> --> |
|||
<div class="operate-content" v-html="record.content"></div> |
|||
<a href="javascript:void(0)" v-if="record.diffOld || record.diffNew" @click="showDetail(record)">(查看修改)</a> |
|||
</div> |
|||
<div class="ip-font"> |
|||
{{ record.createTime }} | {{ record.userName }} | {{ record.ipRegion }} | {{ record.ip }} | {{ record.browser }} | {{ record.os }} |
|||
</div> |
|||
</div> |
|||
</a-timeline-item> |
|||
</a-timeline> |
|||
</template> |
|||
<script setup> |
|||
const props = defineProps({ |
|||
tableData: { |
|||
type: Array, |
|||
}, |
|||
}); |
|||
|
|||
const emit = defineEmits(['showDetail']); |
|||
function showDetail(record) { |
|||
emit('showDetail', record); |
|||
} |
|||
</script> |
|||
<style scoped lang="less"> |
|||
.operate-content { |
|||
font-size: 14px; |
|||
display: inline; |
|||
} |
|||
|
|||
.ip-font { |
|||
margin-top: 5px; |
|||
font-size: 12px; |
|||
color: #999; |
|||
display: block; |
|||
} |
|||
</style> |
|||