Compare commits

...

793 Commits

Author SHA1 Message Date
123
b2c1df19c2 提交 2025-06-05 12:01:46 +08:00
123
a78304745c 提交 2025-06-04 15:52:15 +08:00
123
32286efe79 Merge branch 'test' of http://47.121.30.27:3000/admin/lx-admin-frontend into test 2025-06-04 15:52:06 +08:00
123
a1123251ae 提交 2025-06-04 15:49:40 +08:00
123
468349658d 提交 2025-06-03 15:13:19 +08:00
123
02c26790d8 提交 2025-06-02 12:22:42 +08:00
123
c77ff65b88 提交 2025-06-02 11:48:22 +08:00
123
ef3a8f3aa6 提交 2025-06-02 11:29:24 +08:00
123
2aad354c3f 提交 2025-06-01 20:29:32 +08:00
疯狂的狮子Li
2dc094c1db
!212 发布 5.4.0-2.4.0 正式版
Merge pull request !212 from 疯狂的狮子Li/dev
2025-05-29 03:18:30 +00:00
疯狂的狮子Li
9c528d9a8c
Merge branch 'ts' of gitee.com:JavaLionLi/plus-ui into dev
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2025-05-29 03:18:17 +00:00
疯狂的狮子Li
0472b823e7 🐳🐳🐳发布 5.4.0-2.4.0 正式版 2025-05-29 11:16:20 +08:00
疯狂的狮子Li
f71cf3cfb4
!210 update 优化用户管理查询条件
Merge pull request !210 from AprilWind/dev
2025-05-29 02:32:42 +00:00
AprilWind
8179ee8196 update 优化用户管理查询条件 2025-05-29 09:56:22 +08:00
gssong
8b8099ad09 update 调整流程图渲染样式 2025-05-27 22:28:28 +08:00
gssong
fd30362267 remove 删除无用代码 2025-05-27 22:23:18 +08:00
gssong
1878f49e8d update 调整查询流程图渲染空指针错误,优化流程图样式 2025-05-27 22:20:30 +08:00
疯狂的狮子Li
ca0fe5ebae update 删除logicflow依赖与文件 直接使用warmflow自带的页面 2025-05-27 17:14:28 +08:00
疯狂的狮子Li
ba78f8cc0d
!209 新增通过前端显示流程图方式和新增办理人转换接口
Merge pull request !209 from 晓华/dev
2025-05-27 09:02:28 +00:00
warm
a614dee5c6 feat 新增通过前端显示流程图方式
feat 办理人权限处理器,新增办理人转换接口,比如角色转用户
update 升级warm-flow-1.7.3-m1
2025-05-27 16:58:18 +08:00
疯狂的狮子Li
463faba9b9 update 优化 替换过期的写法 2025-05-27 14:52:10 +08:00
疯狂的狮子Li
9dea8369e3 fix 修复 菜单取消按钮不工作问题 2025-05-27 14:47:22 +08:00
疯狂的狮子Li
592fb84aa7 update 优化 添加页签图标显示开关功能 2025-05-27 14:13:45 +08:00
gssong
3019701856 add 增加logicflow流程图预览 2025-05-25 11:47:09 +08:00
gssong
1ea70dd3ce update 表格增加border 2025-05-24 13:13:45 +08:00
gssong
2a5ad70155 update 修改菜单级联删除弹窗无法取消 2025-05-24 13:06:04 +08:00
疯狂的狮子Li
9c8e3404bb
!207 feat 新增批量级联删除菜单接口
Merge pull request !207 from 马铃薯头/dev
2025-05-23 10:04:52 +00:00
xlsea
385bbb77a9 feat 新增批量级联删除菜单接口 2025-05-23 14:03:03 +08:00
疯狂的狮子Li
70f7c06e55 update 优化 动态路由迁移到菜单管理 2025-05-22 18:15:02 +08:00
gssong
369f48ced5 update 优化审批按钮,封装成公共组件 2025-05-16 21:00:48 +08:00
疯狂的狮子Li
7f15f0e15a update 优化 执行eslint:fix优化代码 2025-05-15 14:52:41 +08:00
疯狂的狮子Li
7b48bd44a2
!203 修改navbar中消息图标样式与同行元素保持一致
Merge pull request !203 from 愿丶/dev
2025-05-12 02:03:58 +00:00
疯狂的狮子Li
7affcd27b7 update 更新 readme 增加新成员项目 2025-05-12 09:34:40 +08:00
疯狂的狮子Li
7de9f23226
update README.md.
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2025-05-08 14:24:37 +00:00
疯狂的狮子Li
afc35feb8c update 更新 readme 2025-05-08 22:11:04 +08:00
愿丶
84d682a4a2
update 修改navbar中消息图标样式与同行元素保持一致
Signed-off-by: 愿丶 <1319542051@qq.com>
2025-04-29 13:06:34 +00:00
gssong
b29c5bd2fa update 放开申请人附件与抄送限制 附件改为按钮权限控制 2025-04-26 12:52:52 +08:00
疯狂的狮子Li
e4c24a511a
!202 [任务]: 工作流分类与流程设计新增联动
Merge pull request !202 from MoMyles/dev
2025-04-24 03:52:05 +00:00
疯狂的狮子Li
9955a52059 update 优化 增加oss站点与域名 默认前缀避免填错 2025-04-24 11:36:51 +08:00
疯狂的狮子Li
de22609196 update 升级全部依赖版本
update element-plus 2.9.8
update pinia 3.0.2
update vue-router 4.5.0
update vue-types 6.0.0
update vxe-table 4.13.7
update sass 1.87.0
update typescript 5.8.3
update vite 6.3.2
........等等很多版本
2025-04-22 15:23:36 +08:00
疯狂的狮子Li
e5de3f4e9d update 优化代码 2025-04-22 13:32:15 +08:00
疯狂的狮子Li
660d5b3d4f update 优化 关于excel说明 2025-04-18 17:47:55 +08:00
疯狂的狮子Li
d5eac17097 update 优化 角色禁用不允许分配 2025-04-17 15:19:58 +08:00
疯狂的狮子Li
6fe2317681 update vite 5.4.11 => 5.4.18 2025-04-16 15:28:14 +08:00
Myles
e9e8a2eaaf 优化赋值 2025-04-14 13:14:57 +08:00
疯狂的狮子Li
5ec984ac7d update 增加 流程变量注释 2025-04-11 15:32:27 +08:00
Myles
c98a14e2ac if添加括号 2025-04-10 15:41:30 +08:00
Myles
bbc656a26c [任务]: 工作流分类与流程设计新增联动 2025-04-10 11:33:12 +08:00
疯狂的狮子Li
722acf0ae7 update 优化 删除无用组件 2025-04-07 16:22:04 +08:00
疯狂的狮子Li
15acd995f9 fix 修复 请假时间 时间组件没法和rule规则联动问题(ele的bug手动设置必填) 2025-04-02 14:45:23 +08:00
疯狂的狮子Li
35b90aa746 fix 修复 请假提交未取消按钮loading问题 2025-04-02 14:37:32 +08:00
疯狂的狮子Li
de926211ef update 优化 登出之后清理tabs 2025-03-31 09:40:09 +08:00
疯狂的狮子Li
30e1ea1c6d fix 修复 前端download方法响应json异常问题 2025-03-28 22:51:01 +08:00
疯狂的狮子Li
8fa765f7be
!199 发布 5.3.1-2.3.0 正式版
Merge pull request !199 from 疯狂的狮子Li/dev
2025-03-27 02:54:40 +00:00
疯狂的狮子Li
7321b4c4ca 🐳发布 5.3.1-2.3.0 正式版 2025-03-27 10:48:24 +08:00
疯狂的狮子Li
85608594bc update 删除无用组件 2025-03-27 10:37:09 +08:00
疯狂的狮子Li
fc8b795bd9
!198 漏洞扫描出现yui2.9.0版本漏洞fix
Merge pull request !198 from dxldxl/dev
2025-03-27 02:35:48 +00:00
dxldxl
3a7fad80a8 漏洞扫描出现yui2.9.0版本漏洞fix 2025-03-27 10:10:50 +08:00
疯狂的狮子Li
f5d557fe80
!197 发布 5.3.1-BETA2_2.3.0-BETA2 公测版本
Merge pull request !197 from 疯狂的狮子Li/dev
2025-03-21 07:26:30 +00:00
疯狂的狮子Li
8bff98ac72 发布 5.3.1-BETA2_2.3.0-BETA2 公测版本 2025-03-21 15:19:37 +08:00
疯狂的狮子Li
8fadab9741 update 优化 删除无用代码 2025-03-19 16:42:38 +08:00
疯狂的狮子Li
fba121f5c3 update 优化 findPathNum 方法 更高效 2025-03-19 10:30:14 +08:00
疯狂的狮子Li
48e9f2c5c0 update 优化 登录与注册页面表头从配置文件内导入 2025-03-18 17:45:01 +08:00
疯狂的狮子Li
d8a395bfd1 update 优化 简化代码 2025-03-17 09:36:39 +08:00
gssong
597c8370d3 update 补充参数 2025-03-14 23:41:26 +08:00
疯狂的狮子Li
6b2838141a update 优化 如果不存在属性 则做兼容 2025-03-14 16:14:57 +08:00
疯狂的狮子Li
b3edce5a20
!196 update 统一流程定义编码,增加流程分类标识
Merge pull request !196 from AprilWind/dev
2025-03-14 02:28:10 +00:00
AprilWind
53424765f9 update 统一流程定义编码,增加流程分类标识 2025-03-14 10:25:16 +08:00
疯狂的狮子Li
b23b123613
!195 发布 5.3.1-BETA_2.3.0-BETA 公测版本
Merge pull request !195 from 疯狂的狮子Li/dev
2025-03-13 05:30:32 +00:00
疯狂的狮子Li
3eab423da5 发布 5.3.1-BETA_2.3.0-BETA 公测版本 2025-03-13 13:29:38 +08:00
疯狂的狮子Li
2e627832ae update 优化 删除不应该传的参数 2025-03-13 11:55:24 +08:00
疯狂的狮子Li
8b5cf9a35f update 优化 代码 2025-03-13 11:47:49 +08:00
疯狂的狮子Li
78798f99ea
!194 chore: 升级svg-icons-ng版本
Merge pull request !194 from yangxu52/feat/update-deps
2025-03-12 07:28:39 +00:00
yangxu52
57f288c892 chore: 升级svg-icons-ng版本 2025-03-12 15:20:16 +08:00
疯狂的狮子Li
0815fa2978 fix 修复 pr书写错误问题 2025-03-12 12:14:51 +08:00
疯狂的狮子Li
7feead9afc update 优化代码 统一store用法 2025-03-12 12:08:29 +08:00
gssong
98728828ad add 增加示例 调整提交组件 2025-03-08 00:09:46 +08:00
疯狂的狮子Li
d9218fac24 update 优化代码 2025-03-07 14:31:17 +08:00
疯狂的狮子Li
6d290785ef fix 修复 idea 误报类型异常问题 2025-03-07 14:15:23 +08:00
疯狂的狮子Li
f6400f3cbe fix 修复 pr导致的代码报错 2025-03-07 13:28:25 +08:00
疯狂的狮子Li
9d7f3101b9
!192 chore: 标准化tsconfig和优化postcss配置
Merge pull request !192 from yangxu52/feture/standardize
2025-03-07 05:19:20 +00:00
yangxu52
7784709cae chore: 优化postcss配置
- 移除autoprefixer的浏览器版本覆盖,使用package.json来定义,
- browerserlist定义对齐vite的构建目标 https://vite.dev/config/build-options.html#build-target
- atRule中charset已经限定配置charset,判断多余
- 顺手删了~路径别名,此项未使用,且tsconfig也没配置
2025-03-07 12:24:03 +08:00
yangxu52
b5a4ebe2f6 chore: 标准化tsconfig,并改了错误的$schema 2025-03-07 12:17:41 +08:00
疯狂的狮子Li
b814fb5105
!190 chore: 统一style标签的字段顺序
Merge pull request !190 from yangxu52/feat/standardize
2025-03-06 16:26:11 +00:00
yangxu52
e98d43f50d chore: 统一style标签的字段顺序
<style lang="scss" scope> **部分全局作用域未添加scope**
2025-03-07 00:02:15 +08:00
yangxu52
71b9d5d468 chore: 统一script标签的字段顺序
<script setup lang="ts">
2025-03-07 00:01:37 +08:00
yangxu52
e341b45429 chore: 移除冗余的类型声明
使用defineConfig自带类型推断,无需单独声明类型
2025-03-06 23:54:06 +08:00
疯狂的狮子Li
b2219cabec update 优化代码 2025-03-06 23:13:35 +08:00
疯狂的狮子Li
abc6e4f454 update 优化代码 2025-03-06 23:08:06 +08:00
疯狂的狮子Li
b1b63ebf7f
!189 chore: 修改svg-icon配置以启用svgo优化
Merge pull request !189 from yangxu52/feat/fix-svgo-optimize
2025-03-06 14:59:17 +00:00
yangxu52
acc760a20f chore: 修改svg-icon配置以启用svgo优化
- /src/assets/icons/build.svg导致svgo优化失败
 - 现已修复,故启用svgo(默认即启用,故移除覆盖的`false`)
2025-03-06 22:45:42 +08:00
yangxu52
62e3351bc7 fix: 删除多余的闭标签</path> 2025-03-06 22:44:50 +08:00
gssong
4fe828faa4 add 增加选人判断 2025-03-06 22:23:12 +08:00
gssong
21466ca8a1 Merge branch 'dev' of https://gitee.com/JavaLionLi/plus-ui into dev 2025-03-06 20:58:03 +08:00
gssong
21234379b3 update 调整选人警告 2025-03-06 20:57:49 +08:00
疯狂的狮子Li
44bf7e7212 fix 修复 按钮权限类型书写错误 2025-03-06 16:28:53 +08:00
疯狂的狮子Li
e91d11876f update 优化 增加自动导入函数 2025-03-06 11:25:25 +08:00
疯狂的狮子Li
a90f38734f update 优化 增加 编译文件忽略 避免大批量的git记录出现 2025-03-06 10:35:59 +08:00
疯狂的狮子Li
761f97e143
!188 chore: 替换svg-icons插件
Merge pull request !188 from yangxu52/feat/replace-svg-icons-plugin
2025-03-06 02:16:30 +00:00
yangxu52
bfcffc50e2 chore: 替换svg-icons插件
替换vite-plugin-svg-icons插件, 以修复依赖警告、安全漏洞警告
 - 替换vite-plugin-svg-icons为vite-plugin-svg-icons-ng
 - 移除vite-plugin-svg-icons的依赖fast-glob
 - 调整插件的导入,并修改svgo优化参数配置项
2025-03-05 23:57:11 +08:00
gssong
07b8bc65ec update 调整选择审批人 2025-03-05 22:37:15 +08:00
gssong
f241c187b3 Merge branch 'dev' of https://gitee.com/JavaLionLi/plus-ui into dev 2025-03-05 22:26:55 +08:00
gssong
ef535a3f33 add 添加设置下一审批人 2025-03-05 22:26:46 +08:00
疯狂的狮子Li
a01545bc84
!187 perf: 上传组件添加accept属性
Merge pull request !187 from lu_ming/dev
2025-03-05 03:32:32 +00:00
can
bdaddb4bf6 perf: 上传组件添加accept属性 2025-03-05 11:25:39 +08:00
疯狂的狮子Li
ace672dd0c update 优化 页面样式 2025-03-05 09:52:48 +08:00
gssong
0539fa3c1f add 增加弹窗选人 2025-03-04 21:48:27 +08:00
疯狂的狮子Li
18f89055e1 fix 修复 图片组件变量错误 2025-03-04 15:01:52 +08:00
疯狂的狮子Li
7a8620c994 fix 修复 变量漏改 2025-03-04 10:05:25 +08:00
疯狂的狮子Li
e38d286c11 update 优化 标注node与npm版本 2025-03-03 14:25:13 +08:00
疯狂的狮子Li
05e7e93cf1 update 优化 顶部菜单搜索栏为多层级显示 2025-03-03 13:47:52 +08:00
疯狂的狮子Li
f2adc5e5fa update 优化 前端处理路由函数代码 2025-03-03 13:47:41 +08:00
疯狂的狮子Li
7be0723c31 update 优化 优化前端树结构拼接性能 2025-03-03 13:41:33 +08:00
疯狂的狮子Li
eab4345198 update 优化 分页组件样式 pagination更换成flex布局 2025-03-03 13:31:05 +08:00
疯狂的狮子Li
e040820dae update 优化 文件上传增加禁用按钮 增加文件类型 2025-03-03 13:29:15 +08:00
gssong
61b81f4692 add 增加按钮权限 2025-03-01 23:46:46 +08:00
LiuHao
aef5a02097 update 升级部分依赖,优化eslint语法以及scss语法 2025-02-25 13:30:57 +08:00
疯狂的狮子Li
cc38d23d14 update 优化 更改版权信息2025 2025-02-21 20:32:29 +08:00
疯狂的狮子Li
74c29dc13e fix 修复 拼写错误 2025-02-21 17:07:23 +08:00
疯狂的狮子Li
b474a1cffc update vueuse 11.3 => 12.7 2025-02-21 10:18:04 +08:00
疯狂的狮子Li
e3219c434a fix 修复 el-dropdown-item 标签无法使用 v-has-permi自定义标签 问题 2025-02-20 10:37:25 +08:00
疯狂的狮子Li
c28fbdfb27 update 优化 调整注释 2025-02-13 16:57:29 +08:00
疯狂的狮子Li
ef19e97109 update 优化 删除已经没有实际作用的依赖 2025-02-11 09:53:14 +08:00
疯狂的狮子Li
bb90dbc35b fix 修复 代码生成 下拉框选项没法清空问题 2025-02-09 22:14:42 +08:00
疯狂的狮子Li
770861ed33 update 优化 调整客户端管理 label长度 2025-02-08 16:08:23 +08:00
疯狂的狮子Li
edf9529a10
!184 update src/views/workflow/processDefinition/index.vue. 修复【表单路径】prop错误
Merge pull request !184 from JiaoYue/N/A
2025-02-08 07:43:54 +00:00
JiaoYue
a11679dc0d
update src/views/workflow/processDefinition/index.vue. 修复【表单路径】prop错误
Fix:修复【表单路径】prop错误

Signed-off-by: JiaoYue <502583281@qq.com>
2025-02-08 07:41:34 +00:00
疯狂的狮子Li
4d6a1ee73b update 优化 增加配置注释 2025-02-07 18:35:15 +08:00
疯狂的狮子Li
b43158914b
Revert "update 优化 删除无用配置"
This reverts commit 66580a05a80f314323520b1ca9452332564e33f2.
2025-02-07 09:27:59 +00:00
疯狂的狮子Li
66580a05a8 update 优化 删除无用配置 2025-02-07 16:56:37 +08:00
疯狂的狮子Li
dccfa219d7 update 优化 删除无用配置 2025-02-07 15:20:21 +08:00
疯狂的狮子Li
b1f0b3c096
!183 同步修复一些问题
Merge pull request !183 from 疯狂的狮子Li/dev
2025-02-07 06:20:16 +00:00
疯狂的狮子Li
b95a49c7d7 reset 回滚有问题的修改 2025-02-07 13:08:34 +08:00
疯狂的狮子Li
2155d9f4b0
!181 fix 修复 路由守卫白名单通配符正则覆盖问题
Merge pull request !181 from QianRj/dev
2025-02-07 03:23:51 +00:00
QianRj
fb7bca27eb fix 修复 路由守卫白名单通配符正则覆盖问题 2025-02-06 20:20:40 +08:00
疯狂的狮子Li
904ee32b24
!180 fix 修复 消息弹框内容过长不换行
Merge pull request !180 from zst_2001/dev
2025-02-05 01:19:53 +00:00
zst_2001
4839a5152f fix 修复 消息弹框内容过长不换行 2025-02-04 21:11:48 +08:00
疯狂的狮子Li
c454efd713
!177 错别字修改
Merge pull request !177 from WeiHan/dev
2025-01-24 07:15:17 +00:00
WeiHan
e8bbe0ac15
update src/components/Process/approvalRecord.vue.
Signed-off-by: WeiHan <1844152414@qq.com>
2025-01-24 07:10:25 +00:00
疯狂的狮子Li
b2a4157285
!175 发布 5.3.0 新春版 祝大家新年快乐
Merge pull request !175 from 疯狂的狮子Li/dev
2025-01-24 05:08:48 +00:00
疯狂的狮子Li
5682b5f9c2 🧨🧨🧨发布 5.3.0 新春版 祝大家新年快乐 2025-01-24 13:07:42 +08:00
疯狂的狮子Li
a4eab94188 fix 修复 选择用户列表数据未清除问题 2025-01-24 11:17:48 +08:00
疯狂的狮子Li
8994e3ad3e update 优化 驳回增加附件上传 2025-01-22 11:13:38 +08:00
疯狂的狮子Li
060f99dee5 update 优化 删除无用链接 2025-01-20 18:08:37 +08:00
疯狂的狮子Li
aef170f374 update 优化 流程设计关闭后 跳转回打开的地方 2025-01-20 13:35:21 +08:00
疯狂的狮子Li
bfc6e7b8da fix 修复 流程定义分页问题 2025-01-20 12:44:27 +08:00
疯狂的狮子Li
5e440a7dc4
!173 发布 5.3.0-BETA 公测版本
Merge pull request !173 from 疯狂的狮子Li/dev
2025-01-20 03:36:18 +00:00
疯狂的狮子Li
3280baff16 发布 5.3.0-BETA 公测版本 2025-01-20 11:36:07 +08:00
疯狂的狮子Li
bbe94610a2 update 优化 parseTime 提示报错问题 2025-01-20 11:30:16 +08:00
疯狂的狮子Li
4c12943e3c update 恢复误删文件 2025-01-20 11:18:10 +08:00
疯狂的狮子Li
25189f3052 update 优化 国际化 变量提示 2025-01-20 11:06:19 +08:00
疯狂的狮子Li
11e2695465 Revert "update 优化 国际化改为使用json 书写更方便"
This reverts commit 8d398d2940df74723a07c6a8ec877b3f203fb428.
2025-01-20 10:57:45 +08:00
疯狂的狮子Li
0d493f1c74 update vue-i18n 10.0.5 2025-01-20 10:41:45 +08:00
疯狂的狮子Li
8d398d2940 update 优化 国际化改为使用json 书写更方便 2025-01-20 10:16:27 +08:00
疯狂的狮子Li
801700044c update 优化 删除无用代码 2025-01-20 10:09:05 +08:00
gssong
3c2409169b update 调整设计器宽度 2025-01-17 21:59:11 +08:00
gssong
490eecccc5 update 调整设计器溢出问题 2025-01-17 21:40:37 +08:00
gssong
ecf2337205 update 调整流程设计溢出问题,优化流程图,流程实例按钮 2025-01-17 21:31:55 +08:00
疯狂的狮子Li
9cc8195237 update 优化 调整预览组件高度 2025-01-16 16:49:43 +08:00
疯狂的狮子Li
522087e18f update 优化 调整预览组件高度 2025-01-16 16:27:03 +08:00
疯狂的狮子Li
b7e96dec38 update 优化 工作流预览界面支持放大/缩放 移动拖拽 2025-01-16 16:00:12 +08:00
疯狂的狮子Li
71528c78ac update 优化 设计器界面展示效果 2025-01-15 18:20:29 +08:00
疯狂的狮子Li
2fc220f9d3 update 优化 支持最新版本json部署文件上传 2025-01-15 17:42:32 +08:00
疯狂的狮子Li
e0eed9c89a update 优化 页面跳转逻辑 2025-01-13 19:38:01 +08:00
疯狂的狮子Li
e423d8afcf !172 合并 warmflow 功能分支
* update 优化 流程定义页面 点击复制之后跳转到未发布列表
* update 优化 流程定义页面 增加加载loading层
* fix: v-model处理有延迟 需要手动处理
* update 调整流程定义查询
* Merge remote-tracking branch 'origin/dev' into warm-flw-future
* update 调整可驳回的节点
* update: 调整文案
* update: 激活/挂起改为switch操作
* update 优化 代码删除无用输出
* update 统一抄送人使用昵称展示
* update 调整分类接口
* update 统一业务id参数
* update 删除默认顶节点
* !168 优化流程分类
* update 恢复误删除代码
* update 优化流程分类
* update 修复 路由跳转未改全
* [update]
* fix 修复一些问题
* update 重构流程分类表
* update 流程定义增加表单路径与编辑功能 修复一些其他bug
* fix 修复 一些问题
* update 变量统一命名
* add 增加示例
* Merge branch 'warm-flw-future' of https://gitee.com/JavaLionLi/plus-ui…
* update 调整办理人
* Merge remote-tracking branch 'origin/dev' into warm-flw-future
* add 增加示例
* update 调整审批记录 添加流程导出
* remove 删除无用代码
* remove 删除无用代码
* [update]
* [fix]
* 流程干预删除委托
* 增加附件
* 附件修改
* 申请人查询修改
* 1.修改查询条件
* !167 fix 修复 import路径修改不全问题
* fix 修复 import路径修改不全问题
* !166 update 清除 ProcessPreview 引用
* update 清除 ProcessPreview 引用
* remove 删除 bpmn.js 设计器
* remove 删除 bpmn.js 设计器
* remove 删除 bpmn.js 设计器
* remove 删除 bpmn.js 设计器
* fix 修复 前端路径修改不全问题
* update 优化接口请求路径
* add 添加作废
* add 添加流程干预
* update 调整加签,减签
* update 调整加签,减签
* add 增加流程查看
* update 调整委托,转办
* update 调整流程变量显示
* update 调整办理人修改
* update 调整流程实例状态页面
* update 调整已办页面
* add 添加流程撤销
* update 调整任务,流程实例 ,流程定义页面
* Merge branch 'dev' into warm-flw-future
* update 调整流程定义页面
* add 添加流程变量查看
* update 调整设计器路由名称
* update 调整办理人
* update 调整设计器uri
* update 调整设计器请求uri 调整待办状态
* update 调整办理 驳回 终止等状态
* add 添加模型新增
* add 添加warm-ui设计器,删除无用代码
* Merge remote-tracking branch 'origin/dev' into warm-flw-future
* add 添加流程设计
* update 调整驳回
* update 调整视图类型错误
* Merge branch 'warm-flw-future' of https://gitee.com/JavaLionLi/plus-ui…
* 添加已办,未办
* Merge remote-tracking branch 'origin/dev' into warm-flw-future
* update 调整流程实例,待办查询
* add 添加代办人,调整提交按钮校验
* update 调整流程定义查询
* add添加流程定义激活 挂起
* add 添加流程文件部署 调整流程发布
* update 优化 时间搜索组件统一
* Merge remote-tracking branch 'origin/dev' into warm-flw-future
* fix 修复 用户管理编辑安全权限错误问题
* Merge remote-tracking branch 'origin/dev' into warm-flw-future
* update 优化 类型报错问题
* update 优化 切换租户后刷新首页
* update 优化 实现表格行选中切换
* update 优化 使用 vueuse 重构 websocket 实现
* update 优化 使用 vueuse 重构 websocket 实现
* fix 修复 登出后重新登录 sse推送报错问题
* reset 回滚 代码修改 采用其他方案
* fix 修复 登出后重新登录 sse推送报错问题
* update 优化 删除无用代码
* update element-plus 2.7.5 => 2.7.8
* reset 回滚 错误修复
* update 优化 代码生成器编辑页禁用缓存 防止同步后页面不更新问题
* fix 修复 代码生成同步点击取消报错问题
* 初始化添加warm-flow
2025-01-13 06:11:00 +00:00
疯狂的狮子Li
100f44e197 fix 修复 切换租户 tabs过多导致卡住问题 2025-01-12 20:54:58 +08:00
LiuHao
b39e0ad6db 优化 主题色在深色模式下显示亮度 2024-12-27 12:55:27 +08:00
LiuHao
2b1f5f2c70 优化 主题色在深色模式下显示亮度 2024-12-27 11:45:33 +08:00
疯狂的狮子Li
e521af0eae
!169 fix 修复用户管理界面修改按钮权限字符串错误
Merge pull request !169 from QianRj/dev
2024-12-25 15:45:06 +00:00
QianRj
b600fb34b5 fix: 修复用户管理界面修改按钮权限字符串错误 2024-12-25 22:27:32 +08:00
疯狂的狮子Li
e29beed8bd update 优化 hasRoles 方法增加超管判断 2024-12-24 21:59:25 +08:00
疯狂的狮子Li
7772c7c7d6 update 优化 用户页面 增加导入到处权限标识 2024-12-24 21:59:22 +08:00
疯狂的狮子Li
ed82954643
update src/views/system/user/index.vue.
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-12-24 09:22:48 +00:00
疯狂的狮子Li
1c28058141 update 优化 TopNav内链菜单点击没有高亮 2024-12-18 13:22:47 +08:00
疯狂的狮子Li
f5410dfff4 update 删除无用代码 2024-12-17 09:41:11 +08:00
疯狂的狮子Li
1f93137b80 fix 修复 oss配置页 展示配置key 隐藏主键id 2024-12-13 14:49:24 +08:00
疯狂的狮子Li
8a034662c7 fix 修复 页面api过期警告 2024-12-13 11:45:25 +08:00
疯狂的狮子Li
7a9ccedadc update 优化 新增编辑用户 过滤禁用的部门 2024-12-11 15:30:44 +08:00
疯狂的狮子Li
84888c3c28 fix 修复 代码生成列表加载问题你 2024-12-08 21:03:44 +08:00
疯狂的狮子Li
cc4186b578 update 优化 白名单增加正则匹配示例 2024-12-04 11:43:18 +08:00
疯狂的狮子Li
fd01b5a61f update 优化 白名单支持对通配符路径匹配 2024-12-04 11:42:07 +08:00
疯狂的狮子Li
00f7ab34ef fix 修复 修复默认关闭Tags-Views时,内链页面打不开 2024-12-03 11:15:09 +08:00
疯狂的狮子Li
b61865f45f fix 修复 用户选择组件 id类型不统一问题 2024-11-29 18:30:19 +08:00
疯狂的狮子Li
4075b838fc fix 修复 代码生成 编辑之后查两遍列表的问题 2024-11-29 10:15:09 +08:00
疯狂的狮子Li
116a214ce6 Revert "update 优化 删除无用变量"
This reverts commit 150f1d793c8f471f68aa5c7f6dc5867d4afd7d81.
2024-11-29 10:06:25 +08:00
疯狂的狮子Li
484db3c09e update 优化 删除无用变量 2024-11-29 10:02:03 +08:00
疯狂的狮子Li
150f1d793c update 优化 删除无用变量 2024-11-29 09:50:16 +08:00
疯狂的狮子Li
334ee0d40d
!162 feat: i18n $t方法支持ts类型提示
Merge pull request !162 from 玲娜贝er/dev
2024-11-28 13:28:28 +00:00
dap
76f4824d2b feat: i18n $t方法支持ts类型提示 2024-11-28 21:07:23 +08:00
疯狂的狮子Li
bf43f8aa3c reset 回滚错误提交 2024-11-28 16:31:12 +08:00
疯狂的狮子Li
0874e32597
!161 remove 移除 已经不再依赖的冗余文件
Merge pull request !161 from 秋辞未寒/dev
2024-11-28 06:17:50 +00:00
疯狂的狮子Li
23f372dad7 fix 修复 登录无redirect参数404问题 2024-11-28 14:17:59 +08:00
秋辞未寒
5ca894369a remove 移除 已经不再依赖的冗余文件 2024-11-28 14:15:10 +08:00
疯狂的狮子Li
786f25bfd4 update 优化 登录页多语言按钮样式 2024-11-28 12:43:32 +08:00
疯狂的狮子Li
06a8d871f7 update 优化 简化国际化配置 无需重复编写 2024-11-28 11:42:08 +08:00
疯狂的狮子Li
42b6668fd0 fix 修复 变量code错误 2024-11-28 11:16:00 +08:00
疯狂的狮子Li
6ef9b9a741 update 优化代码 2024-11-27 17:43:17 +08:00
疯狂的狮子Li
98a8e96feb
!160 refactor: 补充登录页与注册页的国际化内容并添加切换语言按钮
Merge pull request !160 from QianRj/补充登录页与注册页国际化内容
2024-11-27 09:38:21 +00:00
QianRj
7c1525fd21 refactor: 补充登录页与注册页的国际化内容并添加切换语言按钮 2024-11-27 17:25:09 +08:00
疯狂的狮子Li
eb406fbb26 update 删除无用文件 2024-11-27 15:51:38 +08:00
玲娜贝er
845b848b60 !159 eslint升级v9版本
* update: eslint升级v9版本 & 更新一些不符合校验规则的代码
2024-11-27 07:39:34 +00:00
疯狂的狮子Li
f3425493ed update 优化 全代码规范化处理 2024-11-26 15:29:22 +08:00
疯狂的狮子Li
f203716f31 update 优化 代码生成导入下拉框默认值处理 2024-11-26 15:29:06 +08:00
疯狂的狮子Li
3b710d9e99 update typescript 5.4.5 => 5.7.2
update vite 5.2.12 => 5.4.11
update vue 3.4.34 => 3.5.13
update element-plus 2.7.8 => 2.8.8
update .... 其他依赖版本升级
2024-11-26 15:28:24 +08:00
疯狂的狮子Li
3960c31975 update 优化 代码格式 2024-11-26 13:25:44 +08:00
疯狂的狮子Li
e3b5d7ca54 update 优化 菜单面包屑导航支持多层级显示 2024-11-26 13:25:37 +08:00
疯狂的狮子Li
a06db1a6f9 update 优化 参数键值更换为多行文本 2024-11-25 13:54:27 +08:00
疯狂的狮子Li
247bf826d8 Revert "update 优化 直接从@/lang/*.ts后缀的i18n文件中读取各国语言包信息"
This reverts commit 24f1e8b4b1a54191973eca060bc40c4a1a6d8ea6.
2024-11-25 10:37:30 +08:00
疯狂的狮子Li
6eeb711d2f update 优化 增加默认数据权限 "部门及以下或本人数据权限" 选项 2024-11-25 10:33:58 +08:00
疯狂的狮子Li
525be3cef0
!157 【重新提交】permission loadView避免整个modules循环,允许view中间有views文件夹。
Merge pull request !157 from lijfcn/dev
2024-11-24 14:04:14 +00:00
admin_lijinfu
a5931a78f6 perf: permission loadView避免整个modules循环,允许view中间有views文件夹 2024-11-24 21:49:13 +08:00
疯狂的狮子Li
971b4f60ec
!155 refactor: 直接从@/lang/*.ts后缀的i18n文件中读取各国语言包信息
Merge pull request !155 from QianRj/优化i18n
2024-11-24 10:56:49 +00:00
疯狂的狮子Li
51e4c44fd0 fix 修复 monitor 设置 context-path 导致退出重新登录404问题 2024-11-22 17:54:31 +08:00
疯狂的狮子Li
a150c8c9a7 update 优化 个人中心强退设备接口路径 2024-11-22 16:00:10 +08:00
疯狂的狮子Li
9dd7bf8990 fix 修复 手动登出与token过期登出跳转行为不一致问题 2024-11-20 11:25:51 +08:00
QianRj
24f1e8b4b1 update 优化 直接从@/lang/*.ts后缀的i18n文件中读取各国语言包信息 2024-11-19 14:40:36 +08:00
疯狂的狮子Li
22e8a57b31 update 优化 将同步字典功能迁移到租户管理内 2024-11-18 23:47:14 +08:00
疯狂的狮子Li
ec0e6a167e update 修改readme 2024-11-15 16:28:00 +08:00
疯狂的狮子Li
5f582c09ba fix 修复 关闭sse功能 登出还是会发送sse关闭请求导致报错问题 2024-11-15 09:56:37 +08:00
疯狂的狮子Li
2ef0cf5bd5
!154 refactor: 重构操作日志详情样式
Merge pull request !154 from 玲娜贝er/dev
2024-11-14 08:25:26 +00:00
dap
cdbbca43c4 chore: 锁定vue-json-pretty版本 2024-11-14 16:23:16 +08:00
dap
72ac227ecf refactor: 重构操作日志详情样式 2024-11-14 16:20:34 +08:00
疯狂的狮子Li
e2f18565d1
!153 字典缓存使用Map代替Array,更高效
Merge pull request !153 from 月夜/dev
2024-11-11 07:18:42 +00:00
月夜
9836d6d9bd 优化:字典缓存使用Map代替Array,更高效 2024-11-11 15:10:24 +08:00
疯狂的狮子Li
4310e5e049 update 优化代码格式 2024-11-08 00:33:45 +08:00
疯狂的狮子Li
b19c2805e1 update 优化 校检文件名是否包含特殊字符 2024-11-05 16:47:51 +08:00
疯狂的狮子Li
fdfb556c8e update 优化 getTenantList 接口动态决定是否传token 2024-11-05 14:29:24 +08:00
疯狂的狮子Li
9ed3ae3fab fix 修复 内嵌页面数据缓存导致与外部页面不一致问题 2024-10-27 23:29:36 +08:00
疯狂的狮子Li
9a02598c00
!151 发布 vue 版本 5.2.3 与 cloud 版本 2.2.2
Merge pull request !151 from 疯狂的狮子Li/dev
2024-10-25 03:13:13 +00:00
疯狂的狮子Li
28a81f2e44 🎀发布 vue 版本 5.2.3 与 cloud 版本 2.2.2 2024-10-25 11:04:05 +08:00
疯狂的狮子Li
6f4891d677 update 优化 流程提交用户id使用字符串提交避免雪花id失真问题 2024-10-17 18:15:18 +08:00
疯狂的狮子Li
a62a3de23c fix 修复 pr!150 sse开关缺少变量问题 2024-10-15 13:49:32 +08:00
疯狂的狮子Li
1d852da351
!150 增加SEE开关
Merge pull request !150 from iqitao/ss
2024-10-15 05:47:39 +00:00
陈西瓜i
f0895e9419 add 增加注解 2024-10-14 20:50:20 +08:00
陈西瓜i
1644070e97 add SSE开关 2024-10-14 20:33:16 +08:00
疯狂的狮子Li
4918552492 fix 修复 请假日期选择格式不对问题 2024-10-12 10:58:32 +08:00
疯狂的狮子Li
364dfb969d update 优化代码 2024-10-07 10:45:25 +08:00
疯狂的狮子Li
9726df3966 fix 修复 登录日志excel导出名称错误 2024-09-18 09:42:24 +08:00
疯狂的狮子Li
483af13741 fix 修复 重新登录无法跳转到过期前页面问题 2024-09-06 18:06:16 +08:00
疯狂的狮子Li
25848ea99e fix 修复 重新登录无法跳转到过期前页面问题 2024-09-06 17:58:28 +08:00
疯狂的狮子Li
9f13c29cd7 update 优化 代码生成菜单id匹配写法 2024-09-04 16:16:46 +08:00
疯狂的狮子Li
e1860a30fc
fix 修复 租户套餐导出路径编写错误
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-08-26 12:29:29 +00:00
疯狂的狮子Li
34b929d352 add 增加 同步租户字典功能 2024-08-26 17:56:35 +08:00
疯狂的狮子Li
1606dbd76f
!141 发布 vue 版本 5.2.2 与 cloud 版本 2.2.1
Merge pull request !141 from 疯狂的狮子Li/dev
2024-08-26 03:45:16 +00:00
疯狂的狮子Li
3c2d9100b5 😴发布 vue 版本 5.2.2 与 cloud 版本 2.2.1 2024-08-26 11:40:53 +08:00
疯狂的狮子Li
2c8873402f update 优化 使用匹配模式简化预编译配置 2024-08-16 13:01:54 +08:00
疯狂的狮子Li
e5727893bb update 优化 时间搜索组件统一 2024-08-15 20:42:29 +08:00
疯狂的狮子Li
335a1e6019 update 优化 oss 配置按钮 使用ossConfig权限标识符与oss权限分离 2024-08-08 18:19:58 +08:00
疯狂的狮子Li
c0ee3182e1 fix 修复 租户套餐导出路径错误问题 2024-08-08 18:19:18 +08:00
疯狂的狮子Li
9eb7b433b4 update 优化 类型报错问题 2024-08-02 13:53:48 +08:00
疯狂的狮子Li
9193f0b84a update 优化 切换租户后刷新首页 2024-08-02 09:59:14 +08:00
疯狂的狮子Li
076fc5deb1 update 优化 实现表格行选中切换 2024-08-02 09:55:51 +08:00
疯狂的狮子Li
58412035ad update 优化 使用 vueuse 重构 websocket 实现 2024-07-29 15:02:59 +08:00
疯狂的狮子Li
964db2dfce update 优化 使用 vueuse 重构 websocket 实现 2024-07-29 15:02:41 +08:00
疯狂的狮子Li
d58a75996e fix 修复 登出后重新登录 sse推送报错问题 2024-07-29 12:34:32 +08:00
疯狂的狮子Li
f5a5aaa255 reset 回滚 代码修改 采用其他方案 2024-07-29 12:32:05 +08:00
疯狂的狮子Li
1465a27a6e fix 修复 登出后重新登录 sse推送报错问题 2024-07-29 12:29:25 +08:00
疯狂的狮子Li
e5e43fe024 update 优化 删除无用代码 2024-07-27 22:10:22 +08:00
疯狂的狮子Li
6c49b47344 update element-plus 2.7.5 => 2.7.8
update vue 3.4.25 => 3.4.34
update vite 5.2.10 => 5.2.12
2024-07-27 15:08:13 +08:00
疯狂的狮子Li
358f11a0a3 reset 回滚 错误修复 2024-07-27 15:07:33 +08:00
疯狂的狮子Li
6a83ed2aad update 优化 代码生成器编辑页禁用缓存 防止同步后页面不更新问题 2024-07-27 14:15:19 +08:00
疯狂的狮子Li
e07c0b2b3a fix 修复 代码生成同步点击取消报错问题 2024-07-27 14:08:07 +08:00
疯狂的狮子Li
adadfcf8cb update 优化 调整默认推送使用SSE 2024-07-26 16:24:40 +08:00
疯狂的狮子Li
425386f6f4 add 增加 sse 推送功能 2024-07-26 16:06:17 +08:00
疯狂的狮子Li
ba24afce52
!131 ♥️发布 vue 版本 5.2.1 与 cloud 版本 2.2.0
Merge pull request !131 from 疯狂的狮子Li/dev
2024-07-09 03:02:34 +00:00
疯狂的狮子Li
93d3371768 ♥️发布 vue 版本 5.2.1 与 cloud 版本 2.2.0 2024-07-09 10:53:49 +08:00
疯狂的狮子Li
3f08ae6ac4 fix 修复 富文本编辑器 添加之后内容未清理问题 2024-07-02 16:51:03 +08:00
疯狂的狮子Li
cc6284d3ac fix 修复 字段命名错误 2024-07-01 12:52:19 +08:00
疯狂的狮子Li
142effd4f2
!130 feat: 动态创建组件实例时, 设置路由name为组件名 解决缓存问题
Merge pull request !130 from 玲娜贝er/dev
2024-06-30 08:13:16 +00:00
dap
e657a507e3 feat: 动态创建组件实例时, 设置路由name为组件名 解决缓存问题 2024-06-30 10:50:04 +08:00
疯狂的狮子Li
ebaec24213 update 优化 eslint 2024-06-28 10:44:13 +08:00
疯狂的狮子Li
7637582437 update 优化 eslint 2024-06-28 10:18:26 +08:00
疯狂的狮子Li
27d36f7970
!129 feat: 路由name重复检查
Merge pull request !129 from 玲娜贝er/dev
2024-06-26 04:02:28 +00:00
dap
762ebd4ede chore: 增加提示 2024-06-26 11:59:41 +08:00
dap
ad991e248a feat: 路由name重复检查 2024-06-26 11:34:40 +08:00
疯狂的狮子Li
d1b58f0aaa fix 修复 单词拼写错误 2024-06-24 14:59:46 +08:00
疯狂的狮子Li
1be1eaf7b4
!128 fix: 选人无法回显
Merge pull request !128 from 玲娜贝er/dev
2024-06-24 00:37:32 +00:00
dap
fbcc967b14 fix: 由于没有await 导致执行顺序不可控 2024-06-24 08:21:19 +08:00
疯狂的狮子Li
817c65f7e2
!126 fix: 进入审批页面会多次加载用户列表和部门等接口 进入点击取消之后也会重新加载接口
Merge pull request !126 from 玲娜贝er/dev
2024-06-21 04:31:25 +00:00
张代鹏
b6dcc62f9c refactor: 改为懒加载窗口 2024-06-21 12:07:19 +08:00
疯狂的狮子Li
abb4f543b9
!125 ♥️发布 vue 版本 5.2.0 与 cloud 版本 2.2.0
Merge pull request !125 from 疯狂的狮子Li/dev
2024-06-20 02:15:41 +00:00
疯狂的狮子Li
71f4d36c21 ♥️发布 vue 版本 5.2.0 与 cloud 版本 2.2.0 2024-06-20 10:15:08 +08:00
gssong
d1be442c6e fix 修复选着人员错误问题 2024-06-19 21:13:58 +08:00
疯狂的狮子Li
9ef7fd3844
!123 "types": ["element-plus/global"]层级错误,且element-plus按需引入不用配置tsconfig.json
Merge pull request !123 from zl/修复tsconfig.json
2024-06-19 06:41:11 +00:00
疯狂的狮子Li
fec61f9650 update 优化 clientid写死问题 2024-06-19 14:30:19 +08:00
疯狂的狮子Li
c206ab5b4a update 优化 三方登录不同域名问题 采用新方案 2024-06-19 14:29:44 +08:00
疯狂的狮子Li
fe1942c247 update 更换三方回调方案 2024-06-19 10:16:21 +08:00
疯狂的狮子Li
1f2add4b6b update 更换三方回调方案 2024-06-19 10:11:32 +08:00
疯狂的狮子Li
3b254cc16b update 增加 用户信息缓存增加租户id 2024-06-18 23:05:40 +08:00
疯狂的狮子Li
3e7c2f26fa update 增加 用户信息缓存增加租户id 2024-06-18 22:54:30 +08:00
疯狂的狮子Li
4143285ec6 fix 修复 缺少协议头问题 2024-06-18 19:08:51 +08:00
疯狂的狮子Li
72610ab194 update 优化 三方登录不同域名获取不到租户id问题 2024-06-18 18:44:27 +08:00
疯狂的狮子Li
3c713c9258 update element 2.7.2 => 2.7.5 2024-06-15 15:53:02 +08:00
gssong
f95f6e8390 update 优化审批按钮判断 2024-06-07 21:38:17 +08:00
疯狂的狮子Li
2c9c837c1b update 优化 请假天数计算不精确问题 2024-06-06 17:27:50 +08:00
zl
7904496df1
层级错误,且element-plus按需引入不用配置tsconfig.json
Signed-off-by: zl <11656279+xbbzjsj@user.noreply.gitee.com>
2024-06-06 08:53:59 +00:00
疯狂的狮子Li
15c3d84ca2
!122 修复单词拼写错误
Merge pull request !122 from LiYaoheng/dev
2024-06-06 06:27:36 +00:00
LiYaoheng
e8a641f3a3 fix 修复单词拼写错误 2024-06-06 14:19:55 +08:00
疯狂的狮子Li
e354db74a7
!121 ♥️发布 2.2.0-BETA 公测版本
Merge pull request !121 from 疯狂的狮子Li/dev
2024-06-06 03:00:23 +00:00
疯狂的狮子Li
61df97c4b9 update 优化 标识符错误 2024-06-06 10:59:20 +08:00
疯狂的狮子Li
75ecc4dd68 update 更改 关于mq说明 2024-06-04 15:00:40 +08:00
songgaoshuai
c467d95703 https://gitee.com/dromara/RuoYi-Cloud-Plus/issues/I9US1Q fix修复我的单据撤销,删除参数错误 2024-06-04 11:26:38 +08:00
gssong
3fead37924 add 添加流程记录版本信息 2024-06-03 21:33:12 +08:00
gssong
c8626b6893 remove 删除无用参数 2024-06-03 21:23:32 +08:00
gssong
38df345078 update 调整流程图预览校验 2024-06-03 21:04:42 +08:00
疯狂的狮子Li
212361dc94 update 优化 去除请假案例状态字段 2024-06-03 17:53:49 +08:00
疯狂的狮子Li
f237ee145a update 优化 去除请假案例状态字段 2024-06-03 15:47:51 +08:00
疯狂的狮子Li
291d4b0040
!120 update 调整注释错误
Merge pull request !120 from lu_ming/dev
2024-06-02 11:52:43 +00:00
can
64c56e9dd9 update 调整注释错误 2024-06-02 19:44:38 +08:00
gssong
57d87df589 update 调整驳回按钮加载 2024-06-02 00:21:47 +08:00
gssong
9de3f25f6a update 调整审批按钮加载 2024-06-01 22:05:45 +08:00
gssong
d98c2822d5 update 调整路由 2024-06-01 22:00:22 +08:00
gssong
58e6fdef78 update 优化流程实例接口全部按照业务id操作 2024-05-31 22:11:25 +08:00
疯狂的狮子Li
2c9daae153 update 更改 工作流 测试用例接口路径 2024-05-31 11:25:03 +08:00
疯狂的狮子Li
c2fdbc66b2 update 移除 表单构建菜单(没有可用组件 用处不大以后再考虑) 2024-05-29 18:36:46 +08:00
dap
57fd309907 fix: 类型报错 2024-05-29 09:32:49 +08:00
疯狂的狮子Li
7a335b3438 update 优化 删除未使用依赖 2024-05-21 10:01:25 +08:00
dap
83bbac303e fix: bpmn相关type第一次安装依赖&运行报错 2024-05-21 09:37:28 +08:00
疯狂的狮子Li
eb1b614eb1 fix 修复 部署路径错误 2024-05-20 11:45:08 +08:00
疯狂的狮子Li
a63543a5c7
!118 ♥️发布 5.2.0-BETA 公测版本
Merge pull request !118 from 疯狂的狮子Li/dev
2024-05-20 02:26:46 +00:00
疯狂的狮子Li
3585761b81 Merge branch 'ts' of gitee.com:JavaLionLi/plus-ui into dev
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-05-20 02:26:24 +00:00
疯狂的狮子Li
34290d8cad ♥️发布 5.2.0-BETA 公测版本 2024-05-20 10:21:35 +08:00
LiuHao
f367b49dd6 update 优化代码格式 2024-05-19 17:31:05 +08:00
LiuHao
7df347c1d4 remove 移除commit check 2024-05-18 23:02:45 +08:00
gssong
ea106e44be add 添加工作流菜单图标 2024-05-18 12:40:37 +08:00
gssong
b2e47f3938 update 优化模型保存位置,审批记录,请假申请按钮 2024-05-17 20:59:47 +08:00
疯狂的狮子Li
b8e0f018f0 update 优化 更改 首页关于调度中心说明 2024-05-17 17:17:53 +08:00
疯狂的狮子Li
4ee46819c1
!117 修复登录失效,重新登录丢失参数问题
Merge pull request !117 from 爱宇阳/dev
2024-05-17 03:50:38 +00:00
deary
0c620ef5b4 修复登录失效,再次登录丢失参数 2024-05-17 11:44:33 +08:00
疯狂的狮子Li
9b00aaff93 update 优化 删除无用页面 2024-05-17 10:00:25 +08:00
疯狂的狮子Li
b829867a5b
!115 feat: powerjob,easyretry => snailjob
Merge pull request !115 from dhb52/dev
2024-05-17 01:39:39 +00:00
dhb52
736225fbfe feat: powerjob,easyretry => snailjob 2024-05-17 01:04:13 +08:00
dap
3062c46b49 fix: 流程定义xml预览问题 & 重构代码 2024-05-16 08:18:54 +08:00
dap
ed66231d19 Merge branch 'dev' of https://gitee.com/JavaLionLi/plus-ui into dev 2024-05-15 11:35:02 +08:00
dap
3b8ecadc78 refactor: 流程定义-流程图片改为bpmn组件预览 2024-05-15 11:34:58 +08:00
疯狂的狮子Li
322e88d8e1 update 优化 调整字体大小 2024-05-11 20:00:53 +08:00
gssong
526ca728e1 update 修复模型选人参数异常,调整加签请求路径 2024-05-09 21:39:47 +08:00
疯狂的狮子Li
26c0cdaef6 update 重构 workflow 模块与 system 模块解耦 2024-05-09 15:10:15 +08:00
疯狂的狮子Li
e7dc8e94c7 update 优化 跟密码相关的默认前端关闭防重功能 2024-05-08 15:33:31 +08:00
疯狂的狮子Li
72ca7a1aae
!111 解决点击菜单时页面空白或者重新刷新整个页面的问题
Merge pull request !111 from 周旭湘/dev
2024-05-07 09:47:18 +00:00
周旭湘
907dc4efb4
update src/layout/components/AppMain.vue.
解决点击左边菜单时页面空白或者刷新整个页面的问题

Signed-off-by: 周旭湘 <3423729430@qq.com>
2024-05-07 09:39:43 +00:00
gssong
935a199f71 update 优化审批记录 2024-05-06 22:19:42 +08:00
gssong
a19ac2d4ca update 调整会签人员参数 2024-05-06 20:59:41 +08:00
dap
437bc936fd refactor: 部门选择和岗位逻辑 2024-05-06 13:23:27 +08:00
dap
0b8f48fb61 fix: 更新时有岗位会被赋值为空的bug 2024-04-30 22:46:10 +08:00
dap
5d641e5de4 fix: 用户管理-部门变化后需要重新选择岗位 2024-04-30 22:09:53 +08:00
dap
0d196e47e2 fix: 重置时清空左边部门树选中值 2024-04-30 22:04:55 +08:00
疯狂的狮子Li
012e70c7e4 update element-plus 2.7.2 2024-04-30 17:33:09 +08:00
疯狂的狮子Li
9243eee3c3 remove 删除 husky(没人用) 2024-04-26 15:49:20 +08:00
疯狂的狮子Li
c449fb60a5 update vite 5.2.10
update vue 3.4.25
2024-04-25 13:48:28 +08:00
疯狂的狮子Li
4660aa6e95
!108 update src/components/ImagePreview/index.vue.
Merge pull request !108 from 落叶橘橙/N/A
2024-04-25 02:16:33 +00:00
落叶橘橙
9968d14c39
update src/components/ImagePreview/index.vue.
图片预览功能 let real_src_list = props.src.split(',');会多出一个''对象,会导致图片浏览时多一个空白预览。增加一个判空。

Signed-off-by: 落叶橘橙 <wzsdch@qq.com>
2024-04-25 02:15:20 +00:00
疯狂的狮子Li
e2254651ca fix 修复 !pr107 遗留问题
update 优化 岗位下拉框样式问题
2024-04-24 23:46:05 +08:00
AprilWind
7ed5f33e7b !107 add 新增岗位编码与部门编码 并将岗位放到部门下
* add 新增获取岗位选择框列表
* update 岗位查询树表和单表相互undefined
* update 岗位查询增加单部门查询
* update 优化类别编码与后台一致性
* add 新增岗位部门树以及类别编码
* add 部门增加类别代码
2024-04-24 14:30:52 +00:00
LiuHao
175c4a48ce update 优化代码缩进 2024-04-23 13:14:02 +08:00
追梦稻草人Li
9bcc4d631b !106 [轻量级pr] add 新增用户选择角色时 可搜索功能
* update src/views/system/user/index.vue.
* add 新增角色可搜索
2024-04-23 01:50:07 +00:00
疯狂的狮子Li
861dc9fb16 update 优化 替换过期属性 2024-04-23 09:47:11 +08:00
gssong
8633a23d28 fix 修改设计器到期时间没有值问题 2024-04-21 16:58:01 +08:00
gssong
d67bd493c1 Merge branch 'dev' of https://gitee.com/JavaLionLi/plus-ui into dev 2024-04-21 16:50:01 +08:00
gssong
2d532d636a update 调整设计器选人 2024-04-21 16:49:47 +08:00
疯狂的狮子Li
e2bdae5bf2 update element-plus 升级 2.7.1 并适配代码 2024-04-20 19:13:35 +08:00
gssong
2df121072b fix 修改默认没有候选人与候选组时点击选择出现tag标签选中全部问题 2024-04-19 22:13:26 +08:00
gssong
7016888d5a remove 删除无用代码 2024-04-19 21:59:43 +08:00
gssong
3c34421bd2 update 删除认领可直接办理,格式化代码 2024-04-19 21:58:05 +08:00
疯狂的狮子Li
187ae83731
!105 update 当el-form的inline属性为true时,统一样式写法
Merge pull request !105 from Bleachtred/dev
2024-04-19 09:13:44 +00:00
疯狂的狮子Li
c4c9905a91 update 调整 select 宽度 2024-04-19 17:13:15 +08:00
bleachtred
219f3a7d6f update 设置el-select 的宽度默认为 240px 2024-04-19 16:52:40 +08:00
bleachtred
44837e975c update 当el-form的inline属性为true时,统一样式写法 2024-04-19 15:26:56 +08:00
AprilWind
8c6cf5bc43 !104 add 新增在线登录设备管理
* update 在线登录设备管理删除权限
* add 新增在线登录设备管理
2024-04-19 05:02:14 +00:00
疯狂的狮子Li
c21f0d7d77 update vue-router 升级 4.3.2 2024-04-18 18:16:53 +08:00
疯狂的狮子Li
8b6b624f6c fix 修复 全局替换样式重复问题 2024-04-18 17:10:44 +08:00
疯狂的狮子Li
03c736af82 fix 修复 全局替换样式重复问题 2024-04-18 17:06:30 +08:00
疯狂的狮子Li
7386e69033 fix 修复 全局样式导致组件全覆盖问题 依旧采用单组件声明 2024-04-18 14:02:43 +08:00
疯狂的狮子Li
2f60c96fbf fix 修复 全局样式导致组件全覆盖问题 依旧采用单组件声明 2024-04-18 14:01:58 +08:00
疯狂的狮子Li
45e1c46ce4
!103 update 更新一些内容
Merge pull request !103 from Bleachtred/dev
2024-04-18 05:45:12 +00:00
bleachtred
d7d3105c5c update 设置input固定宽度后,导致菜单图标组件IconSelect显示异常 2024-04-18 12:59:03 +08:00
bleachtred
4aa42f5c20 fix 角色必填*号 2024-04-18 11:29:57 +08:00
疯狂的狮子Li
c089f2497c update 升级前端依赖(定稿) 2024-04-18 10:45:21 +08:00
疯狂的狮子Li
e18dcbd86b
!102 [BUG]修复用户表单,角色为必填,却未标注*号
Merge pull request !102 from dzk/fix-userform
2024-04-18 02:13:25 +00:00
dzk
a541d61c0c 修复用户表单角色为非必填项的BUG 2024-04-17 23:49:07 +08:00
疯狂的狮子Li
4b19f55bce update 优化 el-select 与 el-input 全局样式 2024-04-17 19:40:34 +08:00
疯狂的狮子Li
b5042d13d2
!101 fix: 临时修复elementui新版本下拉框宽度问题
Merge pull request !101 from NicholasLD/N/A
2024-04-17 11:34:09 +00:00
NicholasLD
b444f2b8e2
fix: 临时修复elementui新版本下拉框宽度问题
Signed-off-by: NicholasLD <nicholasld505@gmail.com>
2024-04-17 11:24:58 +00:00
疯狂的狮子Li
6b982984ac fix 修复 el-select 展示不全问题 2024-04-17 19:01:49 +08:00
LiuHao
30f271359a fix 修复字典el-tag警告 2024-04-16 17:56:36 +08:00
LiuHao
9967a72e24 fix 修复el-tag标签类型不一致问题 2024-04-16 17:52:04 +08:00
LiuHao
efeff40f2e update 白屏问题待检测 2024-04-16 17:42:54 +08:00
LiuHao
2e299b58e2 update 增加预编译 2024-04-16 17:41:30 +08:00
LiuHao
1d7c3da86b update 回滚解决路由失效问题 2024-04-16 17:41:21 +08:00
LiuHao
5057976ad2 update 优化缩进 2024-04-16 16:05:43 +08:00
LiuHao
41f3d37db1 update 优化首页打开topNav不展开菜单问题 2024-04-15 14:00:39 +08:00
LiuHao
1fbc5afe75 update 优化暗黑模式,增加vxe的暗黑模式 2024-04-15 13:33:11 +08:00
LiuHao
b0541be0b8 fix 修复菜单搜索下方出现白色区域 2024-04-15 13:04:15 +08:00
LiuHao
d6803783ae update 固定值 也可输入表达式 2024-04-15 12:52:04 +08:00
LiuHao
945eec5418 update 优化bpmn位置 2024-04-15 12:02:40 +08:00
LiuHao
73db6deec3 fix 修复类型缺失 2024-04-15 10:40:47 +08:00
LiuHao
40a75dae31 fix 修复代码缩进. 2024-04-15 10:40:33 +08:00
LiuHao
64fb2899c9 fix 修复代码缩进,类型名称错误 2024-04-15 10:22:44 +08:00
LiuHao
9da3f1f2d7 update 增加类型 2024-04-15 09:42:46 +08:00
疯狂的狮子Li
70120a8f2f
!97 解决页面偶尔出现的白屏问题
Merge pull request !97 from 吴均/dev
2024-04-09 03:27:51 +00:00
wujun
6b4d756a9d 解决页面偶尔出现的白屏问题 2024-04-09 11:19:04 +08:00
gssong
905426ad45 update 修改流程定义删除 2024-04-08 22:43:37 +08:00
gssong
b4b0eba228 update 调整流程定义配置逻辑 2024-04-06 21:06:59 +08:00
gssong
9f73ea2d32 update 优化表单绑定逻辑,移除流程定义配置表单,添加模型复制 2024-04-06 11:21:17 +08:00
LiuHao
2d804c7ce0 Merge remote-tracking branch 'origin/dev' into dev 2024-04-05 14:16:38 +08:00
LiuHao
11e8e9d19a fix 修复代码缩进 2024-04-05 14:16:29 +08:00
dap
3e44c14286 Merge branch 'dev' of https://gitee.com/JavaLionLi/plus-ui into dev 2024-04-05 14:09:53 +08:00
dap
04f1347ddd update: bpmn设计器夜间模式适配 2024-04-05 14:09:50 +08:00
LiuHao
0442bd638d fix 修复代码缩进 2024-04-05 14:08:02 +08:00
dap
aeac77b90f chore: 拖动元素时的背景图 2024-04-04 20:41:58 +08:00
dap
b117a6f198 update: 流程预览 进行中动画效果 2024-04-04 14:19:49 +08:00
dap
e1b03258e8 fix: 租户选择框宽度和升级前保持一致 2024-04-04 13:55:45 +08:00
疯狂的狮子Li
c71eb21416 update 更新成员项目 2024-04-03 23:12:46 +08:00
gssong
c922ea3b9c add 添加委托 2024-04-03 20:42:05 +08:00
gssong
d76f2b857d add 添加流程版本 2024-04-02 20:53:29 +08:00
gssong
eec050a2dd update 调整监听新增label错误 2024-04-01 21:23:31 +08:00
gssong
b0087d1a50 #I96DTG update 类型下拉框和java类名下拉框没有联动 2024-04-01 20:59:52 +08:00
gssong
4752b4eb01 update 调整流程状态 2024-03-31 19:30:31 +08:00
gssong
2ea1807f34 add 添加表单配置 2024-03-31 15:34:54 +08:00
疯狂的狮子Li
5dfc25a493
!95 add 工作流挂节点路由表单
Merge pull request !95 from ken.wang/dev
2024-03-29 13:15:10 +00:00
wangzk
c5b3c121c9 add 工作流挂节点路由表单 2024-03-29 17:26:56 +08:00
疯狂的狮子Li
c417c6debe update 升级 element vite 版本 最低nodejs版本提升到18.18.0 2024-03-26 18:43:45 +08:00
LiuHao
f6727d80b8 update 升级依赖 2024-03-26 18:20:13 +08:00
gssong
ceb6243cd0 update 调整示例key 2024-03-24 15:16:44 +08:00
gssong
cd129aa949 update 路由跳转 2024-03-24 15:13:05 +08:00
gssong
d186c800f0 add 添加流程实例,全部待办表单查看 2024-03-22 23:42:30 +08:00
songgaoshuai
31f4219f3d fix修复已办参数传错 2024-03-22 11:32:58 +08:00
gssong
ad8565d29a update 调整我的发起,流程定义按钮 2024-03-21 21:49:34 +08:00
gssong
66a31b620b add 添加已办查看 2024-03-21 21:20:42 +08:00
gssong
e26f6423aa add 添加抄送查看 2024-03-21 21:19:02 +08:00
gssong
12461f4106 update 固定顶部按钮 2024-03-21 21:14:01 +08:00
gssong
58422616e2 remove 还原代码 2024-03-21 21:06:58 +08:00
gssong
f6abd4cf59 update 调整状态判断 2024-03-21 21:06:18 +08:00
gssong
f50ed6b2c5 add 添加流程表单配置 2024-03-21 21:02:41 +08:00
LiuHao
3dba22c47c fix 修复移动端下 无法展开菜单问题 2024-03-19 17:41:47 +08:00
LiuHao
e1289d0abb fix 修复面板因为min width原因收缩不全 2024-03-19 16:14:38 +08:00
LiuHao
9ea8b710ff update 预览流程图高度自适应 2024-03-19 16:02:42 +08:00
LiuHao
e889348562 update 面板宽度百分比 2024-03-18 14:27:43 +08:00
LiuHao
02daeead57 update 隐藏不用工具栏 2024-03-18 14:21:35 +08:00
LiuHao
4253b2afbb update 增加子流程多实例 2024-03-18 14:19:30 +08:00
LiuHao
0c39b593ce update 优化面板类型 2024-03-18 14:18:30 +08:00
LiuHao
8761392c85 update 优化任务面板 2024-03-18 14:18:04 +08:00
LiuHao
30cf3a2caa update 增加多实例常量 2024-03-18 14:17:48 +08:00
LiuHao
12458177be update 更新开始面板和泳道面板样式 2024-03-18 13:56:16 +08:00
LiuHao
b6415c21be update 新增子流程面板 2024-03-18 13:55:57 +08:00
LiuHao
bc4358f4eb update 流程部署支持多选 2024-03-18 12:19:52 +08:00
LiuHao
5dcfee4c07 update 流程部署支持多选 2024-03-18 11:52:44 +08:00
LiuHao
a9cd5684b2 update 新增预编译和翻译 2024-03-18 10:56:12 +08:00
LiuHao
1c0e614d7d update 新增池/参与者面板 2024-03-18 10:44:21 +08:00
gssong
00a7a8ce23 add 添加流程自由驳回节点 2024-03-17 18:26:22 +08:00
gssong
ade0b3e29e update 调整模型导出按钮位置 2024-03-16 22:02:45 +08:00
gssong
3a3f873834 update 调整模型zip导出 2024-03-16 22:01:35 +08:00
gssong
1edc953765 fix 修改已完成任务查看流程变量错误 2024-03-16 19:35:13 +08:00
疯狂的狮子Li
1383f5a7eb
!93 fix: if(captchaEnabled) => if(captchaEnabled.value)
Merge pull request !93 from dhb52/N/A
2024-03-15 01:36:21 +00:00
dhb52
e4f18452c7
fix: if(captchaEnabled) => if(captchaEnabled.value)
Signed-off-by: dhb52 <dhb52@126.com>
2024-03-14 16:42:00 +00:00
疯狂的狮子Li
fdf64a6f08
!90 feat: EasyRetry Server 扩展模块
Merge pull request !90 from dhb52/dev
2024-03-14 06:46:34 +00:00
疯狂的狮子Li
f46a333778
!89 【轻量级 PR】:update 调整导入模型选择流程类别方式(改为表单内下拉框)
Merge pull request !89 from 愿丶/N/A
2024-03-13 13:29:31 +00:00
dhb52
eb364873d2 EasyRetry Server 扩展模块 2024-03-13 01:18:49 +08:00
愿丶
7666f724df
update 调整导入模型选择流程类别方式(改为表单内下拉框)
Signed-off-by: 愿丶 <1319542051@qq.com>
2024-03-12 15:48:42 +00:00
gssong
f9b8922bed update 调整全部已办开始时间 2024-03-11 21:14:22 +08:00
gssong
fb94a4d79c update 调整已办列表,添加审批记录加载 2024-03-11 21:03:00 +08:00
疯狂的狮子Li
71047fdbfd update copyright 2024 2024-03-11 10:58:51 +08:00
疯狂的狮子Li
2cb9b3ea47 update 优化 事件标签改为中文 2024-03-11 10:45:08 +08:00
gssong
3c27c18889 add 添加查看流程变量 2024-03-09 13:41:20 +08:00
gssong
9defb9a669 remove 删除无用组件 调整修改办理人,已完成单据可查看审批记录等 2024-03-09 11:22:28 +08:00
gssong
8833eb205b add 添加终止任务 2024-03-09 11:10:19 +08:00
gssong
15129079d4 remove 删除无用代码 2024-03-08 22:49:47 +08:00
LiuHao
d1c199d4bf update 优化流程预览 2024-03-08 18:22:28 +08:00
LiuHao
97b4eef342 update 使用bpmnjs流程预览 2024-03-08 16:02:08 +08:00
LiuHao
1dd9983f0f update 流程图和审批信息分开展示 2024-03-08 15:59:27 +08:00
LiuHao
b8eb2dcb40 update 增加默认导出 2024-03-08 15:00:01 +08:00
LiuHao
3b4f171d9f update 优化类型 2024-03-08 14:56:44 +08:00
LiuHao
de33d4aaee update 保存增加loading、增加预编译 2024-03-08 14:16:27 +08:00
gssong
803d44cac0 add 添加转办 2024-03-07 22:16:42 +08:00
gssong
cc293536e2 add 添加审批加签 减签 2024-03-07 21:54:47 +08:00
gssong
5f6057253f remove 删除无用打印 2024-03-07 21:19:04 +08:00
gssong
d50c90afd1 fix 修复设计器无法选人问题,修复抄送打开弹出选中全部人员问题 2024-03-07 21:18:08 +08:00
songgaoshuai
6f9851a4e5 fix 修复无法编辑设计器问题 功能未完成先注释掉 2024-03-07 16:16:28 +08:00
疯狂的狮子Li
e7ff829502 update 优化 工作流代码与接口命名 2024-03-07 14:23:24 +08:00
疯狂的狮子Li
0108df1334 !88 合并flowable工作流功能
* merge 合并dev
* add 添加抄送查询
* add 添加我的已办
* add 添加抄送
* add 添加附件下载
* update 优化类型
* Merge remote-tracking branch 'origin/future/flowable' into future/flowable
* fix 修复 流程设计器打包部署报错问题
* add 添加审批附件上传
* update 修复固定值未在xml显示问题
* update 修复跳转条件回显Object问题
* update 优化面板文件名称
* update 调整key
* remove 移除旧设计器,添加xml保存
* update 增加任务面板提示
* update 优化xml预览和svg预览
* update 优化xml预览和svg预览
* update 优化模型设计
* update 优化设计器
* update 优化设计器
* update 优化设计器
* update 删除旧设计器
* update 删除console.log
* add 添加模型接口
* update 优化预览xml和svg样式被修改问题
* update 优化属性面板,增加展开动画
* update 去除开发模式
* update 优化任务栏样式
* update 优化图标渲染样式
* update 增加BpmnFactory类型
* update 增加BpmnFactory
* update 移除users和group
* update 移除无用类型
* update 优化页面类型
* update 去除多余属性
* update 完善流程线
* update 增加复杂网关
* update 完善流程
* update 完善网关
* update 优化网关汉化
* update 优化过期时间选择
* update 支持多实例
* update 增加类容提示
* update 支持选择组
* update 新增角色api
* update 优化roleSelect 选中未确定,再次打开还保留选中的问题
* update 优化userSelect 选中未确定,再次打开还保留选中的问题
* update 优化userSelect 选中未确定,再次打开还保留选中的问题
* update 去掉modeler store多余属性 bpmnModel
* update 优化属性面板,当面板未选中时默认展示流程面板
* update 优化TaskPanel类型,去掉roles属性
* update 优化用户api
* update 优化用户选择器
* update 优化执行监听器
* update 优化任务监听器
* update 优化usePanel方法
* update 选人优化
* update 增加扩展节点信息
* update 增加usePanel默认方法
* update 去除处理事件
* update 扩展flowable  userinfo属性
* update 全局modeler 改为非响应式
* update 增加hooks方法
* update 修改命名
* update 修改面板formData来源
* update 重写用户任务面板选择逻辑
* update 重写用户任务面板选择逻辑
* update 修改用户选择组件获取数据逻辑
* update 修改枚举类型
* update 修改默认配置列
* update 增加修改节点方法
* update 调整预览窗口大小
* update 优化用户选择组件 返回值
* update 优化用户选择组件
* update 新增通过ids 获取用户信息
* update 重写task面板选人 未完成
* update 升级用户选择 支持多选配置
* update 升级bpmnjs依赖版本
* update 增加useDialog类型
* update 调整全局样式
* update 代码高亮设置
* update 优化领用,归还加载
* update 增加选择角色
* update  新增角色选择组件
* update 新增过期时间选择组件
* update 调整任务面板样式
* update  调整全局dialog header 增加分割线
* update 代码高亮设置
* update  调整面板位置
* update 封装用户选择组件
* update 移除所有的节点描述
* update 删除分类
* update  调整面板位置
* update  修改命名,增加自定义渲染
* update  修改命名,增加自定义渲染
* update 增加 Element类型定义
* update 调整样式
* update 移除bpmn panel依赖,升级bpmn.js依赖到最新,修改汉化包
* update 调整类型声明文件
* update 调整类型声明文件
* update 优化面板工具
* update 优化面板工具
* Merge remote-tracking branch 'origin/future/flowable' into future/flowable
* update 优化面板工具
* Merge branch 'future/flowable' of https://gitee.com/JavaLionLi/plus-ui…
* add 添加修改办理人
* update 优化面板工具
* update 初始化流程数据
* Merge remote-tracking branch 'origin/future/flowable' into future/flowable
* add 流程设计面板
* update 调整初始化xml
* add 任务面板
* add 新增bpmn.js
* update 优化request请求类判断请求头方式
* update 流程定义预览 优化
* update 流程定义预览 优化
* update 去掉console.log
* update 优化工作流代码
* fix 修复待办任务 重置查询条件失效问题
* add 增加待办任务 接口类型,优化页面
* add 增加vite 启动预编译css
* fix 修复i18n无感刷新问题
* Merge branch 'dev' into future/flowable
* update 调整选择请假事件
* Merge branch 'dev' into future/flowable
* 同步dev代码
* Merge branch 'dev' into future/flowable
* 合并dev
* remove 设计器无用代码 调整请假查询
* update 调整请假申请
* update 移动请假表单包结构,调整设计器选择引用表单请求错误
* remove 移除动态表单
* update 调整流程办理
* Merge branch 'dev' into future/flowable
* Merge branch 'dev' into future/flowable
* Merge branch 'dev' into future/flowable
* Merge branch 'dev' into future/flowable
* 合并
* update 调整请假申请流程提交
* update 修改业务单据流程提交
* update 调整业务单据流程提交
* 优化代码
* 优化工作流代码缩进
* 项目格式化配置修改
* 调整代码缩进
* Merge branch 'ts' into future/flowable
* add 添加动态表单提交流程
* add 添加动态表单单据
* add 新增流程定义与表单关联
* update 调整点击左侧部门查询人员,部门刷新问题
* update 调整按钮图标
* 调整错别字
* update 调整流程定义图片预览
* add 添加流程实例迁移版本
* fix 修复我的单据无法提交问题
* Merge branch 'ts' into future/flowable
* remove 还原代码后端解决
* update 流程设计器中分配发起人变量错误,先移除
* fix 修复设计器无法编辑问题
* update 调整设计器请求头
* Merge branch 'ts' into future/flowable
* Merge branch 'ts' into future/flowable
* add 添加流程定义历史列表
* update 审批记录v2改为v3
* update 调整请假必填项
* add 添加请假申请示例,添加流程定义文件部署
* update 移除流程表单 formConfig 属性,表单配置信息都放一起便于使用。
* add 添加任务加签,减签
* update 调整流程作废
* update 优化流程状态
* add 添加任务驳回
* add 添加查询当前租户所有待办,已办任务
* add 增加审批意见
* add 添加流程办理弹窗确认组件
* add 添加任务作废理由
* update 调整流程实例,流程定义检索
* add 添加我的单据页面
* add 添加任务归还认领
* add 添加流程实例,流程定义分类查询
* add 添加模型分类查询
* add 添加流程分类
* Merge remote-tracking branch 'origin/future/flowable' into future/flowable
* add 添加流程表单管理页面
* add 集成vForm动态表单组件
* update xml调整超出滚动
* add 添加已办列表
* add 添加单据状态
* update 优化流程实例删除
* fix 修复流程实例查询挂起状态错误
* update 调整流程实例挂起激活状态
* add 添加流程实例列表
* update 调整流程定义弹窗提示
* add 添加流程定义列表,添加流程图,xml预览,添加简单流程启动,办理
* 调整审批记录悬浮逻辑
* 删除无用代码
* add 添加节点悬浮信息
* 调整流程预览
* 调整流程追踪
* add 添加审批记录
* add 模型设计的types
* update 修改排版
* add lang=ts
* update 修改ele的废弃api
* fix调整审批记录图片不显示问题
* add 添加任务待办,流程图
* 调整设计器关闭
* add 添加待办
* remove 删除无用代码
* update types
* 添加模型token验证
* 隐藏设计器验证按钮,隐藏表单,案例,应用程序等
* 添加模型部署
* 添加画图接口token,优化画图接口
* 添加工作流模型新增,修改,查询,删除,画图工具
2024-03-05 14:57:51 +00:00
疯狂的狮子Li
542f73f0e6 update 优化 支持全局开启或关闭接口加密功能 2024-03-04 14:18:21 +08:00
疯狂的狮子Li
5cb40abe18 update 优化 密码校验策略增加非法字符限制 2024-03-04 10:05:47 +08:00
疯狂的狮子Li
26cfa7afc4
!84 图片上传组件增加压缩支持
Merge pull request !84 from 缝合怪/dev
2024-02-23 07:24:31 +00:00
疯狂的狮子Li
df1a84d5ae
!86 bugfix: 修复文件预览大写后缀预览时效的问题
Merge pull request !86 from 北桥/dev
2024-02-23 07:23:49 +00:00
这夏天依然平凡
5b991be4c2 !87 修改 el-dialog 默认点击遮照为不关闭
* update 修改 el-dialog 默认点击遮照为不关闭
2024-02-23 07:23:20 +00:00
北桥
34c0d2d277 bugfix: 修复文件预览大写后缀不展示的问题 2024-02-02 13:43:16 +08:00
LiuHao
b2f00c4b71 add 增加全局角色选择组件 2024-01-26 09:59:32 +08:00
LiuHao
63ba90cc10 add 增加全局用户选择组件 2024-01-26 09:59:23 +08:00
LiuHao
3b18a476b7 add hooks - useDialog 2024-01-26 09:59:05 +08:00
LiuHao
15243ab713 Merge remote-tracking branch 'origin/dev' into dev 2024-01-26 09:58:09 +08:00
LiuHao
b4cc7b3de0 add 引入vxe-table依赖支持 2024-01-26 09:58:00 +08:00
fengheguai
fe3874396d 图片上传组件增加压缩功能支持,可自行开关 2024-01-25 12:50:45 +08:00
疯狂的狮子Li
fdf885c261
!82 修复 DictTag组件,当未找到匹配的数据时,不会显示value
Merge pull request !82 from lee/bugfix/DictTag_Unmatch
2024-01-18 09:39:29 +00:00
LiuHao
7b7377fa1b update 优化request请求类判断请求头方式 2024-01-16 09:51:51 +08:00
文兵 李
0c56f87e06 foreach中return并不会使其跳出循环,导致这个计算属性一直都会是false 2024-01-15 22:59:22 +08:00
疯狂的狮子Li
b783b8d991 update 全依赖版本升级 2024-01-14 22:30:00 +08:00
LiuHao
4ea7376dbc fix 修复i18n无感刷新问题 2024-01-11 15:26:37 +08:00
LiuHao
5910032908 Merge remote-tracking branch 'origin/dev' into dev 2024-01-11 14:27:58 +08:00
LiuHao
024783588e update 升级@intlify/unplugin-vue-i18n版本依赖
update i18n使用方法。
add 新增i18n vite插件。
2024-01-11 14:27:46 +08:00
疯狂的狮子Li
acba493c94
!80 JustAuth 整合 TopIam 单点登录
Merge pull request !80 from 马铃薯头/dev
2024-01-08 16:05:47 +00:00
xlsea
7073acb3ef 社交登录整合 TopIam 2024-01-08 11:48:56 +08:00
疯狂的狮子Li
075c02b8c3 update 优化 使用翻译注解简化用户查询 调整用户查询逻辑 2024-01-06 20:58:54 +08:00
ahao
31da01bdd1 fix https://gitee.com/dromara/RuoYi-Vue-Plus/issues/I8TMAI 2024-01-06 17:27:01 +08:00
疯狂的狮子Li
dfdcee9b95
!79 update 富文本组件,修复两个组件上传图片位置错乱问题
Merge pull request !79 from 抓蛙师/N/A
2024-01-05 14:51:03 +00:00
抓蛙师
d3b630076a
update 富文本组件,修复两个组件上传图片位置错乱问题
Signed-off-by: 抓蛙师 <770492966@qq.com>
2024-01-05 14:50:27 +00:00
疯狂的狮子Li
173c723c7c fix 修复 富文本编辑器 单页面多实例图片胡乱问题 2024-01-05 18:39:32 +08:00
ahao
595a521a3c update issues -> https://gitee.com/dromara/RuoYi-Vue-Plus/issues/I8LXAX 2024-01-05 17:15:45 +08:00
ahao
d08f14d86d update 修改对Volar支持 2024-01-05 14:37:22 +08:00
ahao
b112b793d5 fix 修复eslint 警告 2024-01-05 14:14:32 +08:00
ahao
6432d165c7 update 修复启动弹出cjs废弃警告 2024-01-05 12:06:10 +08:00
ahao
e5772cb63c update 移除cjs 2024-01-05 11:42:55 +08:00
ahao
bb696b300f update 升级依赖 2024-01-05 11:42:36 +08:00
疯狂的狮子Li
14f6a214f2
!75 fix: 修复vscode全局属性ts爆红问题
Merge pull request !75 from dhb52/N/A
2024-01-03 03:41:05 +00:00
dhb52
bbcedd02ba
fix: 修复vscode全局属性ts爆红问题
参照vuejs官方文档,[扩展全局属性](https://cn.vuejs.org/guide/typescript/options-api.html#augmenting-global-properties),

```ts
declare module 'vue' {
  interface ComponentCustomProperties {
    $http: typeof axios
    $translate: (key: string) => string
  }
}
```

Signed-off-by: dhb52 <dhb52@126.com>
2024-01-03 03:40:39 +00:00
ahao
abf2777b2e fix 修复 页面警告 2023-12-27 14:28:04 +08:00
ahao
3922c16601 fix 修复 vue 类型识别问题 2023-12-27 12:12:51 +08:00
ahaos
321f21c498 !73 修复全局属性找不到的问题
* Merge remote-tracking branch 'origin/dev' into dev
* fix 修复全局属性找不到的问题
* fix 修复变量问题
* fix 修复变量问题
* Merge remote-tracking branch 'origin/dev' into dev
* update 依赖升级
* update 依赖升级
* Merge remote-tracking branch 'origin/dev' into dev
* 升级依赖
* Merge remote-tracking branch 'origin/ts' into ts
* 升级依赖
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts
* 升级依赖
* !61 fix: 删除重复环境变量ElUploadInstance
* fix: 删除重复环境变量ElUploadInstance
2023-12-26 10:04:35 +00:00
疯狂的狮子Li
085ce4cf43 update 优化 更改客户端状态接口 使用clientId传参 2023-12-26 00:47:59 +08:00
疯狂的狮子Li
c5daf629d9 update 优化 通知公告提交提示 2023-12-23 23:13:34 +08:00
疯狂的狮子Li
20b7819f11 update 优化 ts检查改为非严格 提高友好型降低开发难度 2023-12-23 20:43:58 +08:00
疯狂的狮子Li
8b36cac09d update 升级前端依赖版本 2023-12-23 20:35:55 +08:00
疯狂的狮子Li
0e99163f0c update 升级前端依赖版本 2023-12-23 20:30:28 +08:00
疯狂的狮子Li
772885de35 update 优化 websocket 代码实现 2023-12-23 19:49:17 +08:00
疯狂的狮子Li
1d557a24f9 update 优化 ws开关改为常开(vite5修复了崩溃bug) 2023-12-23 19:45:47 +08:00
疯狂的狮子Li
597f2b4461 fix 修复 websocket 非index页面刷新无法重连问题 2023-12-23 19:38:34 +08:00
疯狂的狮子Li
cc9b67d467
!72 发布 vue 版本 5.1.2 与 cloud 版本 2.1.2
Merge pull request !72 from 疯狂的狮子Li/temp
2023-12-22 05:26:26 +00:00
疯狂的狮子Li
70a3348954 🧨发布 vue 版本 5.1.2 与 cloud 版本 2.1.2 2023-12-22 13:21:04 +08:00
疯狂的狮子Li
2c95f86963 🧨发布 vue 版本 5.1.2 与 cloud 版本 2.1.2 2023-12-22 13:20:44 +08:00
疯狂的狮子Li
1272e8fe7d fix 修复 append-to-body 编写错误 2023-12-20 14:44:50 +08:00
疯狂的狮子Li
3204aa8461
!71 update src/views/system/dept/index.vue.
Merge pull request !71 from Ai3_刘小龙/N/A
2023-12-20 06:28:20 +00:00
Ai3_刘小龙
5d44f9e231
update src/views/system/dept/index.vue.
append-to-body

Signed-off-by: Ai3_刘小龙 <wisty0317@163.com>
2023-12-20 06:26:49 +00:00
ahaos
1d5133b695 !69 修复升级依赖带来的类型问题
* fix 修复变量问题
* Merge remote-tracking branch 'origin/dev' into dev
* update 依赖升级
* update 依赖升级
* Merge remote-tracking branch 'origin/dev' into dev
* 升级依赖
* Merge remote-tracking branch 'origin/ts' into ts
* 升级依赖
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts
* 升级依赖
* !61 fix: 删除重复环境变量ElUploadInstance
* fix: 删除重复环境变量ElUploadInstance
2023-12-14 08:17:12 +00:00
疯狂的狮子Li
031d83828a update 代码规范化 2023-12-14 00:44:12 +08:00
疯狂的狮子Li
0541af5abb fix 修复 部分问题 2023-12-14 00:35:00 +08:00
疯狂的狮子Li
1f71044cff fix 修复 部分问题 2023-12-14 00:25:54 +08:00
ahaos
f32a7105c3 !68 修复升级依赖带来的问题
* Merge remote-tracking branch 'origin/dev' into dev
* 升级依赖
* Merge remote-tracking branch 'origin/ts' into ts
* 升级依赖
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts
* 升级依赖
* !61 fix: 删除重复环境变量ElUploadInstance
* fix: 删除重复环境变量ElUploadInstance
2023-12-13 10:35:55 +00:00
ahaos
b06f6a316b !64 版本升级
* Merge branch 'dev' of gitee.com:JavaLionLi/plus-ui into ts
* 升级依赖
* !61 fix: 删除重复环境变量ElUploadInstance
* fix: 删除重复环境变量ElUploadInstance
2023-12-13 01:01:52 +00:00
NickLuo
58d7e50de3 !63 关闭动态路由tab页签时不清理组件缓存
* 动态路由页面关闭时不清理组件缓存,避免清理已打开的多个路由页面缓存
2023-12-13 00:55:46 +00:00
疯狂的狮子Li
c045276a7c update 优化 明确打包命令 2023-12-08 18:04:02 +08:00
棉花
6a7ec81168 fix: 删除重复环境变量ElUploadInstance
Signed-off-by: 棉花 <12559203+radish-hi_0@user.noreply.gitee.com>
2023-12-08 17:55:11 +08:00
疯狂的狮子Li
183e0e9212
!61 fix: 删除重复环境变量ElUploadInstance
Merge pull request !61 from 棉花/N/A
2023-12-08 09:53:55 +00:00
疯狂的狮子Li
c020c1affc update 优化 用户头像 img 变量无确定类型问题 2023-12-08 17:01:19 +08:00
疯狂的狮子Li
9673380f60 update 优化 细化oss配置管理权限控制 2023-12-07 14:52:33 +08:00
疯狂的狮子Li
9b28d14bc3 fix 修复 在线用户 强推按钮点击取消控制台警告问题 2023-12-06 00:18:31 +08:00
棉花
01a4dd0b45
fix: 删除重复环境变量ElUploadInstance
Signed-off-by: 棉花 <12559203+radish-hi_0@user.noreply.gitee.com>
2023-12-05 12:57:44 +00:00
疯狂的狮子Li
e1023bb331 update 优化 代码中存在的警告 2023-11-30 11:13:29 +08:00
疯狂的狮子Li
5c701801db update 优化 前端白名单页面放行逻辑 2023-11-29 16:02:37 +08:00
疯狂的狮子Li
9b4692b625
!59 响应加密功能
Merge pull request !59 from MichelleChung/dev
2023-11-27 02:59:00 +00:00
疯狂的狮子Li
aaec0f7bfe fix 修复 字典使用 default 样式报警告问题 2023-11-27 10:34:42 +08:00
疯狂的狮子Li
25e2e0e018 update 优化 页面关于权限标识符说明 2023-11-23 16:50:31 +08:00
疯狂的狮子Li
5165541780 update 优化 开发环境默认关闭ws 因vite的bug导致如ws无法连接则会崩溃 2023-11-22 16:22:15 +08:00
Michelle.Chung
b3c1b95437 add 新增响应解密私钥 ;
add 新增 crypto#decryptBase64 Base64解码方法 ;
update 更新响应拦截器增加响应解密逻辑 ;
2023-11-20 19:27:03 +08:00
疯狂的狮子Li
d84fee9319
!58 修复vite环境变量类型原因导致websocket关闭失效问题
Merge pull request !58 from Lau/N/A
2023-11-16 04:24:52 +00:00
Lau
d034236ce3
fix: 修改环境变量类型原因导致websocket无法关闭问题
Signed-off-by: Lau <1807121535@qq.com>
2023-11-16 03:25:35 +00:00
疯狂的狮子Li
9e89ab5bae
!57 发布 vue 版本 5.1.1 与 cloud 版本2.1.1
Merge pull request !57 from 疯狂的狮子Li/dev
2023-11-14 03:11:07 +00:00
疯狂的狮子Li
6e6062e824 😴发布 vue 版本 5.1.1 与 cloud 版本2.1.1 2023-11-14 10:51:12 +08:00
疯狂的狮子Li
35bebf403c update 适配 websocket在https下的连接方式 2023-11-13 13:02:09 +08:00
疯狂的狮子Li
0a8c33c3cb fix 修复 五级路由缓存无效问题 2023-11-10 15:59:09 +08:00
疯狂的狮子Li
8a7de17b58 fix 修复 内链iframe没有传递参数问题 2023-11-10 11:35:40 +08:00
疯狂的狮子Li
f65eb2aee5
!55 绑定第三方帐号参数“wechar”更正为“wechat”
Merge pull request !55 from scmiot/dev
2023-11-07 01:30:47 +00:00
scmiot
efb53d4bcb
!1 绑定第三方帐号参数“wechar”更正为“wechat”
Merge pull request !1 from scmiot/N/A
2023-11-04 22:51:31 +00:00
scmiot
ad2134f07d
绑定第三方帐号参数“wechar”更正为“wechat”
Signed-off-by: scmiot <10322731+scmiot@user.noreply.gitee.com>
2023-11-04 08:46:06 +00:00
疯狂的狮子Li
caa9d0fcdc fix 修复 环境变量书写错误 2023-11-03 22:40:18 +08:00
疯狂的狮子Li
b829ba4aa0 fix 修复 websocket 初始化无法连接进程死掉问题(vue代理问题) 2023-11-03 18:36:11 +08:00
疯狂的狮子Li
a232437abc update 优化 !pr50 bug与代码实现 2023-11-02 14:00:48 +08:00
疯狂的狮子Li
f2372d3243 update 优化 !pr50 bug与代码实现 2023-11-02 13:53:44 +08:00
三个三
a8a334b3c3 !50 add 新增 前端接入websocket接收消息
*  add 新增 前端接入websocket接收消息
2023-11-02 04:36:31 +00:00
疯狂的狮子Li
1e3f18ce22
!54 update 优化表格列的显示与隐藏小组件
Merge pull request !54 from bestrevens/dev
2023-11-01 04:09:35 +00:00
疯狂的狮子Li
631f338be2 fix 修复 用户注册缺失 clientid 问题 2023-11-01 10:46:42 +08:00
bestrevens
bf977fe00a
update 优化表格列的显示与隐藏小组件
优化表格列的显示与隐藏小组件,解决小组件之间距离间隔不一样的问题

Signed-off-by: bestrevens <201840026@qq.com>
2023-10-31 08:54:22 +00:00
疯狂的狮子Li
5bc7044032 update 优化 补全操作日志部门数据 2023-10-27 22:44:05 +08:00
疯狂的狮子Li
6ad0ed5316 update 优化 去掉多余的参数 2023-10-26 17:02:12 +08:00
疯狂的狮子Li
ccb2ecc5ee update 更新 表单构建不能使用说明 2023-10-26 17:01:38 +08:00
疯狂的狮子Li
ec0cb472df update 优化 去掉多余的参数 2023-10-25 23:05:32 +08:00
疯狂的狮子Li
cd0a459c2b update 更新 表单构建不能使用说明 2023-10-25 16:21:21 +08:00
疯狂的狮子Li
18fea86a2c
!53 更新登录日志以及在线用户展示信息
Merge pull request !53 from MichelleChung/dev
2023-10-23 12:46:48 +00:00
Michelle.Chung
66bfff450c update 更新 logininfor/index, online/index 字段显示 (客户端, 设备类型) ; 2023-10-23 20:32:38 +08:00
疯狂的狮子Li
ec34c759ec
!52 fix 优化表格列的显示与隐藏小组件不显示tip和浏览器告警
Merge pull request !52 from bestrevens/ts
2023-10-16 07:36:23 +00:00
bestrevens
c1c5ea5e9d
fix 优化表格列的显示与隐藏小组件不显示字段和告警
fix 优化表格列的显示与隐藏小组件不显示字段和告警

Signed-off-by: bestrevens <201840026@qq.com>
2023-10-16 07:30:14 +00:00
疯狂的狮子Li
6fe269efc7 fix 修复 !pr47 导致的打包异常 2023-10-16 15:13:27 +08:00
疯狂的狮子Li
920e079727 update 优化 富文本Editor组件检验图片格式 2023-10-09 12:00:15 +08:00
疯狂的狮子Li
a2f13185e1 fix 修复 HeaderSearch组件跳转query参数丢失问题 2023-10-09 11:57:22 +08:00
疯狂的狮子Li
078bb50130 update vue-quill 1.1.0 => 1.2.0 2023-10-09 11:47:29 +08:00
疯狂的狮子Li
4854d8df00 update 优化 操作日志列表新增IP地址查询 2023-10-09 11:46:53 +08:00
疯狂的狮子Li
ecf062605d update 优化 菜单管理类型为按钮状态可选 2023-10-09 11:41:53 +08:00
疯狂的狮子Li
b989b07121 update 优化 用户初始密码从参数配置查询 2023-10-09 11:19:32 +08:00
疯狂的狮子Li
bf957f06a0
!51 update 优化 通过参数键名获取键值接口的返回体
Merge pull request !51 from David Wei/update/config_response
2023-10-08 08:56:00 +00:00
David Wei
aed8c89ded update 优化 通过参数键名获取键值接口的返回体 2023-10-08 16:05:58 +08:00
疯狂的狮子Li
4085811d24
!48 修复#I8550V
Merge pull request !48 from ahaos/ts
2023-09-28 16:51:40 +00:00
ahao
fe384a3020 fix #I8550V https://gitee.com/dromara/RuoYi-Vue-Plus/issues/I8550V 2023-09-29 00:06:57 +08:00
ahaos
c6f3cd068e
!47 优化表格列的显示与隐藏小组件
Merge pull request !47 from 森爷/ts
2023-09-28 14:15:14 +00:00
DESKTOP-IGCH756\PC
99a6b56233 优化表格列的显示与隐藏小组件 2023-09-28 14:58:34 +08:00
疯狂的狮子Li
8ed32775cb
!44 fix 个人信息修改密码接口隐藏新旧密码参数明文
Merge pull request !44 from Bleachtred/ts
2023-09-26 08:06:46 +00:00
bleachtred
395db813b5 fix 个人信息修改密码接口,隐藏新旧密码参数明文 2023-09-25 15:29:32 +08:00
疯狂的狮子Li
ab1a7204fa update 优化 页面输入框样式 2023-09-17 15:53:25 +08:00
疯狂的狮子Li
92b2b489a4 fix 修复 自定义字典样式不生效的问题 2023-09-14 17:22:36 +08:00
疯狂的狮子Li
956d2ad495 update 优化 !pr40 代码结构 2023-09-09 11:44:56 +08:00
疯狂的狮子Li
cb6cbc4f40
!40 优化字典标签支持数组和多标签
Merge pull request !40 from 抓蛙师/ts
2023-09-09 03:42:40 +00:00
抓蛙师
14538ce399 优化字典标签支持数组和多标签 2023-09-08 18:35:17 +08:00
疯狂的狮子Li
6c16d023f4 fix 修复 login 页面 loading 未关闭问题 2023-09-08 12:28:09 +08:00
疯狂的狮子Li
d12d21c46d
!38 fix #I7WUYJ 菜单切换主题为浅色主题后颜色不正常
Merge pull request !38 from ahaos/tspr
2023-09-02 04:46:07 +00:00
ahao
93fb212e0c fix #I7WUYJ 菜单切换主题为浅色主题后颜色不正常 2023-09-02 00:55:02 +08:00
疯狂的狮子Li
b22d0775b7 fix 修复 导包警告问题 2023-09-01 11:52:15 +08:00
疯狂的狮子Li
c85f0a1995 update 优化 控制台debuger位置错误问题
update 优化 TopNav 菜单样式
fix 修复 布局配置失效问题
2023-09-01 11:38:23 +08:00
疯狂的狮子Li
78d120c423
!37 修复 菜单图标选择器小屏幕显示不全的问题
Merge pull request !37 from David Wei/ts_fix_iconselect
2023-08-29 08:10:41 +00:00
David Wei
e43149f8e6 fix 菜单图标选择器显示不全 2023-08-29 15:48:03 +08:00
疯狂的狮子Li
1d8664ab1d fix 修复 租户与套餐管理 搜索框长度变化问题 2023-08-28 17:21:01 +08:00
疯狂的狮子Li
e7529fbb8f update 优化 登录页面redirect重定向功能 2023-08-25 12:58:52 +08:00
疯狂的狮子Li
e10f112fa0 fix 修复 使用 localStorage 返回值为null问题 2023-08-15 13:53:34 +08:00
疯狂的狮子Li
e906b8ad0a update 优化 全局移除cookie使用 避免安全问题 2023-08-14 12:56:31 +08:00
疯狂的狮子Li
1690563ef0 update 优化 涉及到用户密码的接口 均设置请求加密 2023-08-14 11:25:19 +08:00
疯狂的狮子Li
9087fad3fe update 优化 涉及到用户密码的接口 均设置请求加密 2023-08-14 10:36:59 +08:00
疯狂的狮子Li
f3195be732 update 优化 整体代码结构 2023-08-11 17:59:10 +08:00
疯狂的狮子Li
73df6a1b30
!34 修复编译报类型错误问题
Merge pull request !34 from VergLsm/ts
2023-08-09 07:18:25 +00:00
lishanming
b221ff2566 fix 修复编译报类型错误问题 2023-08-09 15:15:10 +08:00
疯狂的狮子Li
50891e99ac fix 修复 无法获取token问题 将 globalHeaders 改为函数 2023-08-09 12:59:18 +08:00
疯狂的狮子Li
53ac5fb43c
!33 将部门管理 负责人选项改为下拉框选择
Merge pull request !33 from Lionel./deptHead
2023-08-09 02:47:41 +00:00
Lionel
7e54fe7921 将部门管理 负责人选项改为下拉框选择
从当前部门的用户列表选择一个人做绑定 后端接收用户ID
2023-08-08 11:43:11 +08:00
疯狂的狮子Li
3637c16d86 update 优化 删除字典无用状态字段(基本用不上 禁用后还会导致回显问题) 2023-08-07 17:23:27 +08:00
疯狂的狮子Li
b045cb4239 fix 修复 注册页验证码不显示问题 2023-08-01 11:00:41 +08:00
疯狂的狮子Li
0c791a1efc update 优化 封装全局统一请求头 2023-07-25 15:59:35 +08:00
疯狂的狮子Li
0082354aba fix 修复 oss上传与zip下载未传输clientid问题 2023-07-25 11:40:29 +08:00
MichelleChung
acbdfc4639 !31 【轻量级 PR】新增全局请求头 clientid 适配后端 token 校验
Merge pull request !31 from MichelleChung/ts
2023-07-24 11:22:20 +00:00
疯狂的狮子Li
f801f4fb11 fix 修复 固定页面header穿模问题 2023-07-24 16:47:51 +08:00
疯狂的狮子Li
d532dc6fc0
!30 【轻量级 PR】修改验证码路径适配 cloud
Merge pull request !30 from MichelleChung/ts
2023-07-20 14:36:06 +00:00
Michelle.Chung
452972c1e4 update 修改验证码路径适配 cloud ; 2023-07-20 18:35:04 +08:00
ahaos
ac3ad63894 !29 修改列表打开对话框和接口请求顺序
Merge pull request !29 from ahaos/tspr
2023-07-19 14:48:30 +00:00
三个三
d69f0992c7 !27 修复,[VueTypes warn]: VueTypes.extend is deprecated.警告问题
Merge pull request !27 from 三个三/ts
2023-07-14 16:09:34 +00:00
疯狂的狮子Li
e64f4b83c8 update 优化 toggleRowSelection 缺失一个参数警告问题 2023-07-14 22:39:34 +08:00
疯狂的狮子Li
2b1cbaf8a0 update 优化 login 页面编辑器类型警告问题 2023-07-14 22:32:21 +08:00
疯狂的狮子Li
6c86aa42fd update 优化 无用加密前端加密没意义 2023-07-14 15:28:15 +08:00
疯狂的狮子Li
e79a9cf797
!26 update src/api/types.ts.
Merge pull request !26 from Admin/N/A
2023-07-13 12:42:32 +00:00
Admin
4af9f025b0
update src/api/types.ts.
修改符号

Signed-off-by: Admin <zhangchong@chenzhimr.com>
2023-07-13 12:40:37 +00:00
疯狂的狮子Li
2a1d0edd4e update 优化 三方按钮 可能无法点击到的问题 2023-07-13 16:28:59 +08:00
疯狂的狮子Li
75e72bf974 update 优化 三方授权页面 延迟跳转避免无法查看错误信息 2023-07-13 16:19:29 +08:00
疯狂的狮子Li
1d33b01c66 add 新增 对接 maxkey 三方单点登录 优化三方登录按钮位置 2023-07-13 15:38:32 +08:00
疯狂的狮子Li
73c14596ed update 优化 将公钥放置到配置文件方便修改 删除私钥避免泄漏 2023-07-12 16:57:22 +08:00
疯狂的狮子Li
5fa3f9a350 reset 回滚 错误修复 并增加正确修复 2023-07-12 13:52:59 +08:00
疯狂的狮子Li
64aea65cef fix 修复 删除无用的参数获取 2023-07-12 11:14:18 +08:00
疯狂的狮子Li
a681353fe1 fix 修复 解绑三方应用不刷新页面数据问题 2023-07-12 10:48:33 +08:00
疯狂的狮子Li
9719d6d75c fix 修复 部门搜索框使用错误问题 2023-07-12 10:32:31 +08:00
疯狂的狮子Li
c13c622eac
!25 部分优化以及新增功能
Merge pull request !25 from ahaos/tspr
2023-07-11 13:03:01 +00:00
LiuHao
d160c3a61c merge 2023-07-10 22:56:42 +08:00
疯狂的狮子Li
81195fd9c8 add 新增 请求加密传输 合并优化 !pr377 2023-07-10 18:21:52 +08:00
疯狂的狮子Li
d0d67b90bc add 新增 请求加密传输 合并优化 !pr377 2023-07-10 18:20:38 +08:00
疯狂的狮子Li
9e3dd2c6e3 update 优化 页签在Firefox浏览器被遮挡 2023-07-06 09:48:36 +08:00
疯狂的狮子Li
5920b10514 发布 5.1.0-BETA 公测版本 2023-07-05 16:37:17 +08:00
疯狂的狮子Li
617dfe3161 update 优化替换过期的文档地址 2023-07-04 17:46:32 +08:00
疯狂的狮子Li
40175c150c update 优化 下载zip方法增加遮罩层 2023-07-04 16:39:05 +08:00
疯狂的狮子Li
d930b15104 fix 修复 缓存监控图表 支持跟随屏幕大小自适应调整 2023-07-04 15:50:36 +08:00
疯狂的狮子Li
cc69786fd1 update 优化 !pr382 修复一些问题 完事流程逻辑 2023-07-02 16:48:57 +08:00
疯狂的狮子Li
4cf836055a
!23 统一登录,授权
Merge pull request !23 from 三个三/auth
2023-07-02 07:40:13 +00:00
疯狂的狮子Li
88b376bbc2
!21 回退 'Pull Request !20 : 统一登录授权'
Merge pull request !21 from 疯狂的狮子Li/revert-merge-20-dev
2023-07-02 07:33:26 +00:00
疯狂的狮子Li
3fb8f1c251
回退 'Pull Request !20 : 统一登录授权' 2023-07-02 07:32:58 +00:00
三个三
a8f575fe6f !20 统一登录授权
* 统一授权登录
* 对接后端更改做了适配,
* 前端实现切换租户选择第三方授权登录,和优化第三方页面登录注册
2023-07-02 07:29:28 +00:00
thiszhc
14cf3be392 统一授权登录 2023-07-01 16:24:48 +08:00
thiszhc
6e3aec7c50 对接后端更改做了适配, 2023-07-01 15:05:48 +08:00
thiszhc
2b7ffdf19c 前端实现切换租户选择第三方授权登录,和优化第三方页面登录注册 2023-07-01 02:26:58 +08:00
疯狂的狮子Li
db6e95bb96 fix 修复 菜单管理字段不对应问题 2023-06-30 14:54:32 +08:00
疯狂的狮子Li
7b6078a178
!15 适配登录重构的修改
Merge pull request !15 from MichelleChung/ts
2023-06-28 06:28:45 +00:00
Michelle.Chung
892c84f32a update 更新字段命名 activityTimeout -> activeTimeout ;
update 新增字段设备类型 deviceType ;
2023-06-27 09:03:51 +08:00
疯狂的狮子Li
9b6dc3e844 fix 修复 三方调用跳转白屏问题(临时修复) 2023-06-27 08:33:06 +08:00
疯狂的狮子Li
3b4950e0e3 fix 修复 前端参数漏改导致三方跳转失败问题 2023-06-27 08:33:06 +08:00
疯狂的狮子Li
7340997cf5 update 优化 !pr370 完成三方登录授权功能 2023-06-27 08:33:06 +08:00
三个三
3b4ac3e525 !16 扩展第三方登录授权功能
* add 第三方授权
* add 第三方授权登录
2023-06-27 08:33:06 +08:00
yhan219
cab430a428 !12 [需求认领] 对接 powerjob 实现分布式任务调度 集成方式参考框架内 xxl-job
* [需求认领] 对接 powerjob 实现分布式任务调度 集成方式参考框架内 xxl-job
2023-06-27 08:33:06 +08:00
LiuHao
538c52a3ad add 增加cache类型声明 2023-06-23 20:56:42 +08:00
LiuHao
25e80590f6 update modal各方法参数类型 2023-06-23 20:49:22 +08:00
LiuHao
7f68832edd add auth类型声明 2023-06-23 20:45:50 +08:00
LiuHao
374ee5d1a8 update 删除alertSuccess方法参数 2023-06-23 20:40:00 +08:00
LiuHao
d557602f2d update 关闭标签参数可选 2023-06-23 20:22:36 +08:00
疯狂的狮子Li
18dd68edd5 fix 修复 三方调用跳转白屏问题(临时修复) 2023-06-21 17:03:26 +08:00
疯狂的狮子Li
13bb23c717 fix 修复 前端参数漏改导致三方跳转失败问题 2023-06-21 16:08:50 +08:00
LiuHao
319b37fe98 合并 ts 2023-06-20 19:15:58 +08:00
LiuHao
a8ed066d8d update 修改删除tag方法 增加无参refreshPage 2023-06-20 18:57:27 +08:00
疯狂的狮子Li
40e3bcb391 update 优化 !pr370 完成三方登录授权功能 2023-06-20 15:00:29 +08:00
三个三
aae6bb7505 !16 扩展第三方登录授权功能
* add 第三方授权
* add 第三方授权登录
2023-06-20 04:12:49 +00:00
Michelle.Chung
952a2ba906 fix 修正注释错误 ; 2023-06-19 08:49:55 +08:00
LiuHao
3b3fb80231 add 新增路由跳转自定义title 2023-06-18 23:47:10 +08:00
LiuHao
a46c511f1f add 新增ElScrollbarInstance 2023-06-18 22:31:35 +08:00
Michelle.Chung
ed84745897 update 更新列表授权类型展示 ; 2023-06-18 19:58:58 +08:00
Michelle.Chung
44ea10d9c7 add 新增客户端管理页面 ; 2023-06-18 16:58:28 +08:00
yhan219
41d140af11 !12 [需求认领] 对接 powerjob 实现分布式任务调度 集成方式参考框架内 xxl-job
* [需求认领] 对接 powerjob 实现分布式任务调度 集成方式参考框架内 xxl-job
2023-06-16 15:58:13 +00:00
Michelle.Chung
0f54604435 update 适配登录重构的修改(修改token命名, 修改接口传参) ; 2023-06-16 20:32:46 +08:00
LiuHao
d43ae50abc update 修改组件 去除无用引用和代码缩进 2023-06-06 22:52:24 +08:00
LiuHao
9f038ad181 add 新增ele类型声明 2023-06-06 22:52:02 +08:00
LiuHao
dbfe263681 update 修改代码缩进格式 2023-06-06 22:27:31 +08:00
LiuHao
6af68085ff update 修改页面代码 去除ele的引入以及vue的类型声明 2023-06-06 22:23:43 +08:00
LiuHao
490d4ef47e add 新增全局ele类型声明 2023-06-06 22:20:50 +08:00
LiuHao
bc48b224eb update 修改默认导入 2023-06-06 20:55:50 +08:00
LiuHao
9cd7f6cabb update 修改类型声明 2023-06-06 20:55:23 +08:00
LiuHao
3267f59603 add vue全局声明、Ele全局实例、类型声明 2023-06-06 20:54:52 +08:00
LiuHao
bc4554baeb add 相关全局属性 2023-06-06 20:45:34 +08:00
LiuHao
e6a3b6360f add 相关全局属性 2023-06-06 20:44:40 +08:00
LiuHao
548550bb42 add propTypes工具以及vue-types 2023-06-06 20:41:44 +08:00
LiuHao
7c09eb50a7 update 去掉el的引入 2023-06-06 20:06:57 +08:00
LiuHao
d6cb1c6634 update 操纵日志和登录日志 card的shadow -> hover 2023-06-06 16:50:32 +08:00
LiuHao
cbff04778b update 代码生成列表card展示风格。 2023-06-06 16:47:40 +08:00
LiuHao
f6994e5908 update 菜单列表去掉表格 2023-06-06 16:33:19 +08:00
LiuHao
06bc04c04c Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/views/tool/gen/index.vue
2023-06-06 16:27:48 +08:00
疯狂的狮子Li
226e0f3494
!10 update vite/plugins/unocss.ts.
Merge pull request !10 from running0503/N/A
2023-05-31 14:55:02 +00:00
running0503
7757d96f34
update vite/plugins/unocss.ts.
因低浏览器不支持 top-level await,会报 __uno.css:9 Uncaught SyntaxError: Unexpected reserved word

hmrTopLevelAwait
unocss默认是true,低版本浏览器是不支持启动后会报错

Signed-off-by: running0503 <xiangdeshan_120@sina.com>
2023-05-31 07:27:16 +00:00
疯狂的狮子Li
a8ad928324
!9 代码生成,数据名称从后台加载
Merge pull request !9 from WangBQ/ts
2023-05-29 02:26:23 +00:00
疯狂的狮子li
f0df76aa8b fix 修复 角色数据覆盖问题 2023-05-26 11:26:47 +08:00
LiuHao
0ede92a2e5 Merge branch 'ts' into dev 2023-05-24 11:20:52 +08:00
疯狂的狮子li
21ab064cf7 fix 修复 oss 配置 预览开关点×关闭控制台报错问题 2023-05-19 17:40:53 +08:00
疯狂的狮子li
84212c0a1b 发布 5.0.0 SpringBoot3 携手多租户强势来袭 2023-05-19 09:45:06 +08:00
LiuHao
6de98250cc fix issues #I7657W 2023-05-19 01:32:24 +08:00
LiuHao
997f565add update contextmenu color 2023-05-17 13:49:33 +08:00
BQ·Wong
a326e663cd 代码生成,数据名称从后台加载 2023-05-13 11:45:51 +08:00
LiuHao
bf4a8543ca Merge branch 'ts' into dev
# Conflicts:
#	package.json
#	src/layout/components/TagsView/index.vue
2023-05-06 09:25:05 +08:00
LiuHao
9b6cd8b047 DictTag组件,当value没有匹配的值时,展示value 2023-05-05 11:34:55 +08:00
LiuHao
46e7d070a2 恢复翻页/切换路由滚动功能 2023-05-05 11:06:32 +08:00
LiuHao
ec29c057c4 修复开启TopNav后一级菜单路由参数设置无效问题 2023-05-05 10:36:21 +08:00
LiuHao
2885d7e31c Merge remote-tracking branch 'origin/ts' into ts 2023-05-05 10:25:41 +08:00
LiuHao
0e736c889f 优化已选择下拉图标高亮回显 2023-05-05 10:23:41 +08:00
疯狂的狮子li
d192f73ca4 update 优化 避免鼠标移出时无法隐藏滚动条的问题 2023-05-04 19:48:40 +08:00
疯狂的狮子Li
351eedacec fix 修复 角色与用户 无法分页问题 2023-04-28 22:40:55 +08:00
疯狂的狮子li
67864e67b3 fix 修复 oss 路径漏改问题 2023-04-26 22:47:28 +08:00
疯狂的狮子Li
f5a21c9b6f
!7 修改oss模块路由地址
Merge pull request !7 from Yjoioooo/ts
2023-04-25 02:49:40 +00:00
Yjoioooo
b9dccb325f update 修改oss模块路由地址 2023-04-25 10:13:27 +08:00
LiuHao
7cfaeb5531 fix ElSelect导入包 2023-04-24 13:50:25 +08:00
LiuHao
94f96181f3 add DarkMode 2023-04-22 01:05:11 +08:00
LiuHao
5dda9da40d update 升级vite版本4.1.4->4.3.1 2023-04-21 11:24:26 +08:00
LiuHao
1eda36201a update code style 2023-04-21 11:17:07 +08:00
LiuHao
4722a8ef9b fix 升级vite版本4.1.4->4.3.1 2023-04-21 11:14:58 +08:00
LiuHao
0ba7e31e09 fix 部门管理 上级菜单问题 2023-04-20 22:57:33 +08:00
疯狂的狮子li
61417032b7 fix 修复 代码生成菜单选项回显问题 2023-04-20 18:45:29 +08:00
疯狂的狮子li
a0bcdf0cde fix 修复 oss配置 页面权限标识符错误 2023-04-20 18:02:51 +08:00
LiuHao
b263918426 update searchMenu style 2023-04-19 23:25:34 +08:00
LiuHao
771f49354a update 修改列表搜索面板组件类型 2023-04-19 21:29:25 +08:00
LiuHao
ab12c9cc94 update 修改列表搜索面板组件类型 2023-04-19 21:26:07 +08:00
LiuHao
2976130876 add form build 2023-04-19 21:04:42 +08:00
LiuHao
2ddd42bbab update 修改列表搜索面板style 2023-04-19 21:04:24 +08:00
LiuHao
f2d1522c34 update 列表搜索面板组件类型 2023-04-19 21:04:01 +08:00
LiuHao
fda317b628 update 修改非时效性数据存入Local中 2023-04-19 14:41:15 +08:00
LiuHao
f153da4390 fix 修复参数遗漏 2023-04-19 14:30:30 +08:00
LiuHao
20f64b54d5 fix 修改国际化文件名称不规范问题,增加reqeust 国际化配置 2023-04-19 11:05:30 +08:00
LiuHao
4775803427 优化 样式 2023-04-18 23:44:54 +08:00
LiuHao
d2bce3fcbe add i18n 2023-04-18 23:36:26 +08:00
疯狂的狮子li
55e29ce697 add 增加 租户套餐下拉选接口 过滤掉已经关闭的套餐 2023-04-18 13:24:51 +08:00
疯狂的狮子li
802f6240d4 update 优化 套餐新增 状态被覆盖为空问题 2023-04-18 13:08:35 +08:00
LiuHao
91bb79e29f update search style 2023-04-17 23:11:08 +08:00
LiuHao
fb14197b0e update 修改card --hover 2023-04-17 22:36:26 +08:00
LiuHao
e2bc12d186 update 修改 el-card shadow='hover' 2023-04-17 22:23:18 +08:00
LiuHao
b88a09dd7f update 修改dialog弹窗在窗内滚动 2023-04-17 21:56:16 +08:00
LiuHao
2ede1095a3 fix 代码生成-生成信息-上级菜单的数据回显问题 2023-04-17 21:39:21 +08:00
LiuHao
c32e3ce2c9 update 修改tree-select选择器为ele官网选择器 2023-04-17 21:26:23 +08:00
LiuHao
c25842a0e5 remove console.log 2023-04-17 20:50:00 +08:00
疯狂的狮子Li
e7c777ac50 fix 修复 DemoTree 实体缺少属性 2023-04-16 15:42:56 +08:00
疯狂的狮子Li
1a5ed27067 fix 修复 prod 配置文件监控中心路径不正确问题 2023-04-16 15:39:34 +08:00
疯狂的狮子Li
fed8eb76f6 fix 修复 取消oss预览状态修改 图标变化不正常问题 2023-04-14 22:29:42 +08:00
疯狂的狮子Li
f9298a3f41 add 项目代码格式化工具 2023-04-13 22:21:45 +08:00
LiuHao
155f22b72c fix 用户头像上传失败问题 2023-04-13 18:59:33 +08:00
LiuHao
dd01200e2a fix 防重实效问题 2023-04-13 18:38:35 +08:00
LiuHao
35eafbb065 add editorconfig 2023-04-13 18:19:15 +08:00
疯狂的狮子li
a05a782ef5 fix 修复 用户管理权限标识符不正确问题 2023-04-12 16:49:33 +08:00
LiuHao
14b4508b91 fix 用户状态修改按钮显示问题 2023-04-12 10:29:51 +08:00
LiuHao
8111ed9a84 fix 自定义数据权限部门丢失 2023-04-12 10:23:18 +08:00
疯狂的狮子li
9a070b0074 add 增加预编译 2023-04-06 11:28:38 +08:00
疯狂的狮子li
a79fa2527a update 修复页面切换时布局错乱的问题(I6LR1D) 2023-04-06 11:19:43 +08:00
疯狂的狮子li
c65536ee6f update 优化弹窗后导航栏偏移的问题(I3YMWW) 2023-04-06 11:19:31 +08:00
疯狂的狮子li
ccbe849103 update 关闭页签后存在其他页签时不应该跳转首页 2023-04-06 11:14:23 +08:00
疯狂的狮子li
f0b52d7abb update 优化固定头部页签滚动条被隐藏的问题 2023-04-06 11:12:24 +08:00
疯狂的狮子li
d37e031014 update 移除vue-multiselect样式 2023-04-06 11:10:22 +08:00
疯狂的狮子Li
07a9b6e612 update 优化 demo 界面代码 2023-04-05 20:12:11 +08:00
LiuHao
f4522d2caa add 增加预编译tabs css 2023-04-04 14:36:24 +08:00
LiuHao
582df2e467 add plugin vue-setup-extend 2023-04-04 14:28:56 +08:00
LiuHao
8c866f4596 fix name 2023-04-04 14:28:24 +08:00
LiuHao
3b3f26f610 fix import 2023-04-04 14:28:02 +08:00
疯狂的狮子Li
d4ffd28ffb
!5 新增预编译配置
Merge pull request !5 from MichelleChung/ts
2023-04-03 04:00:58 +00:00
zlyx
ee59b3be8b update 更新 vite.config.ts 预编译内容 (thanks: 基哥) ; 2023-04-03 11:48:39 +08:00
疯狂的狮子Li
97187b246b update 调整代码格式 2023-04-03 00:26:04 +08:00
疯狂的狮子Li
a7a31b011a update 删除编译生成的文件 调整忽略策略 2023-04-03 00:09:17 +08:00
疯狂的狮子Li
1595cb282a update 调整代码格式 2023-04-03 00:05:09 +08:00
疯狂的狮子Li
8b01bfd2a0 Merge remote-tracking branch 'origin/ts' into ts 2023-04-02 23:54:03 +08:00
LiuHao
60d064b319 fix type error 2023-04-02 23:33:28 +08:00
疯狂的狮子Li
cc0bedffb9 update 默认端口修改为80 2023-04-02 22:40:36 +08:00
LiuHao
3b93c8ac56 perf hide userPage and rolePage id field 2023-04-02 22:11:47 +08:00
LiuHao
631a831609 fix button style 2023-04-02 22:01:28 +08:00
LiuHao
327e60d9f3 fix profile 2023-04-02 21:52:22 +08:00
LiuHao
457b443404 fix animation and router type 2023-04-02 21:40:03 +08:00
LiuHao
0408b67d6d fix Copyright 2023-04-02 18:08:48 +08:00
LiuHao
c7c63c51de fix style and add plugin 2023-04-02 15:07:14 +08:00
LiuHao
d95fab75a7 perf element global config 2023-04-02 14:15:47 +08:00
LiuHao
251d2411f2 refactor ts 2023-04-02 01:01:56 +08:00
疯狂的狮子li
5c87f1cb2c update 项目正式入驻 dromara 开源社区 更改项目地址 2023-03-23 17:28:43 +08:00
疯狂的狮子li
d2a44d682d update 全新文档 全面上线 2023-03-23 14:20:41 +08:00
疯狂的狮子Li
4a5ba86e38
!1 修复后台验证码获取接口地址
Merge pull request !1 from scmiot/master
2023-03-21 10:36:08 +00:00
scmiot
eec0fd43a3
修复后台验证码获取接口地址,源地址为短信验证码接口。
Signed-off-by: scmiot <scmiot@qq.com>
2023-03-21 10:24:09 +00:00
疯狂的狮子li
8fec6cc405 update 更新 readme 说明 更改框架定位 2023-03-15 17:17:48 +08:00
疯狂的狮子li
6b6c78fa02 update 更新 readme 说明 2023-03-15 16:08:14 +08:00
疯狂的狮子li
d68654327a 合并 vue与cloud vue3 前端项目 2023-03-15 15:59:21 +08:00
93 changed files with 1819 additions and 596 deletions

View File

@ -315,6 +315,9 @@
"watchThrottled": true,
"watchTriggerable": true,
"watchWithFilter": true,
"whenever": true
"whenever": true,
"Slot": true,
"Slots": true,
"createRef": true
}
}

View File

@ -2,16 +2,23 @@
- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [TS](https://www.typescriptlang.org/) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
- 成员项目: 基于 vben5(ant-design-vue) 的前端项目 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5)
- 配套后端代码仓库地址
- [RuoYi-Vue-Plus 5.X(注意版本号)](https://gitee.com/dromara/RuoYi-Vue-Plus)
- [RuoYi-Cloud-Plus 2.X(注意版本号)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
- 成员项目: 基于soybean 的前端项目 [ruoyi-plus-soybean](https://gitee.com/xlsea/ruoyi-plus-soybean)
## 配套后端代码仓库地址
| 介绍 | 项目名 | 项目地址 |
|------------|:-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 🔥 分布式集群框架 | RuoYi-Vue-Plus | - [Gitee](https://gitee.com/dromara/RuoYi-Vue-Plus)<br> - [GitHub](https://github.com/dromara/RuoYi-Vue-Plus)<br> - [GitCode](https://gitcode.com/dromara/RuoYi-Vue-Plus) |
| 🔥 微服务框架 | RuoYi-Cloud-Plus | - [Gitee](https://gitee.com/dromara/RuoYi-Cloud-Plus)<br>- [GitHub](https://github.com/dromara/RuoYi-Cloud-Plus)<br> - [GitCode](https://gitcode.com/dromara/RuoYi-Cloud-Plus) |
## 分支说明
- ts分支(稳定发布主分支 生产可用)
- dev分支(开发分支 开发过程中使用)
## 前端运行
```bash
# 克隆项目
git clone https://gitee.com/JavaLionLi/plus-ui.git
# 安装依赖
npm install --registry=https://registry.npmmirror.com

View File

@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package",
"name": "lx-vue-plus",
"version": "5.3.1-2.3.0",
"name": "ruoyi-vue-plus",
"version": "5.4.0-2.4.0",
"description": "龙翔管理系统",
"author": "LionLi",
"license": "MIT",
@ -23,31 +23,31 @@
"@element-plus/icons-vue": "2.3.1",
"@highlightjs/vue-plugin": "2.1.0",
"@vueup/vue-quill": "1.2.0",
"@vueuse/core": "12.7.0",
"@vueuse/core": "13.1.0",
"animate.css": "4.1.1",
"await-to-js": "3.0.0",
"axios": "1.7.8",
"axios": "1.8.4",
"crypto-js": "4.2.0",
"echarts": "5.5.0",
"element-plus": "2.8.8",
"echarts": "5.6.0",
"element-plus": "2.9.8",
"file-saver": "2.0.5",
"highlight.js": "11.9.0",
"image-conversion": "2.1.1",
"js-cookie": "3.0.5",
"jsencrypt": "3.3.2",
"nprogress": "0.2.0",
"pinia": "2.2.6",
"pinia": "3.0.2",
"screenfull": "6.0.2",
"vue": "3.5.13",
"vue-cropper": "1.1.1",
"vue-i18n": "10.0.5",
"vue-i18n": "11.1.3",
"vue-json-pretty": "2.4.0",
"vue-router": "4.4.5",
"vue-types": "5.1.3",
"vxe-table": "4.5.22"
"vue-router": "4.5.0",
"vue-types": "6.0.0",
"vxe-table": "4.13.7"
},
"devDependencies": {
"@iconify/json": "2.2.276",
"@iconify/json": "^2.2.276",
"@types/crypto-js": "4.2.2",
"@types/file-saver": "2.0.7",
"@types/js-cookie": "3.0.6",
@ -56,8 +56,8 @@
"@unocss/preset-attributify": "66.0.0",
"@unocss/preset-icons": "66.0.0",
"@unocss/preset-uno": "66.0.0",
"@vitejs/plugin-vue": "5.2.1",
"@vue/compiler-sfc": "3.4.23",
"@vitejs/plugin-vue": "5.2.3",
"@vue/compiler-sfc": "3.5.13",
"@vue/eslint-config-prettier": "10.2.0",
"@vue/eslint-config-typescript": "14.4.0",
"autoprefixer": "10.4.20",
@ -66,19 +66,22 @@
"eslint-plugin-vue": "9.32.0",
"globals": "16.0.0",
"prettier": "3.5.2",
"sass": "1.84.0",
"typescript": "~5.7.3",
"sass": "1.87.0",
"typescript": "~5.8.3",
"unocss": "66.0.0",
"unplugin-auto-import": "0.17.5",
"unplugin-icons": "0.18.5",
"unplugin-vue-components": "28.0.0",
"unplugin-auto-import": "19.1.2",
"unplugin-icons": "22.1.0",
"unplugin-vue-components": "28.5.0",
"unplugin-vue-setup-extend-plus": "1.0.1",
"vite": "5.4.11",
"vite": "6.3.2",
"vite-plugin-compression": "0.5.1",
"vite-plugin-svg-icons-ng": "^1.2.2",
"vite-plugin-vue-devtools": "7.7.1",
"vitest": "3.0.5",
"vue-tsc": "^2.2.2"
"vite-plugin-svg-icons-ng": "^1.4.0",
"vite-plugin-vue-devtools": "7.7.5",
"vitest": "3.1.2",
"vue-tsc": "^2.2.8"
},
"overrides": {
"quill": "2.0.2"
},
"engines": {
"node": ">=18.18.0",

View File

@ -24,6 +24,21 @@ export interface ContractInfoVO {
*/
remark: string;
/**
*
*/
manageContractLevel?: string;
/**
*
*/
contractManagerId?: string;
/**
*
*/
contractManager?: string;
}
export interface ContractInfoForm extends BaseEntity {
@ -52,6 +67,21 @@ export interface ContractInfoForm extends BaseEntity {
*/
remark?: string;
/**
*
*/
manageContractLevel?: string;
/**
* id
*/
contractManagerId?: string;
/**
*
*/
contractManager?: string;
}
export interface ContractInfoQuery extends PageQuery {

View File

@ -10,7 +10,7 @@ import { CustomerInfoVO, CustomerInfoForm, CustomerInfoQuery } from '@/api/syste
export const listCustomerInfo = (query?: CustomerInfoQuery): AxiosPromise<CustomerInfoVO[]> => {
return request({
url: '/system/customerInfo/list',
url: '/manage/customerInfo/list',
method: 'get',
params: query
});
@ -22,7 +22,7 @@ export const listCustomerInfo = (query?: CustomerInfoQuery): AxiosPromise<Custom
*/
export const getCustomerInfo = (id: string | number): AxiosPromise<CustomerInfoVO> => {
return request({
url: '/system/customerInfo/' + id,
url: '/manage/customerInfo/' + id,
method: 'get'
});
};
@ -33,7 +33,7 @@ export const getCustomerInfo = (id: string | number): AxiosPromise<CustomerInfoV
*/
export const addCustomerInfo = (data: CustomerInfoForm) => {
return request({
url: '/system/customerInfo',
url: '/manage/customerInfo',
method: 'post',
data: data
});
@ -45,7 +45,7 @@ export const addCustomerInfo = (data: CustomerInfoForm) => {
*/
export const updateCustomerInfo = (data: CustomerInfoForm) => {
return request({
url: '/system/customerInfo',
url: '/manage/customerInfo',
method: 'put',
data: data
});
@ -57,7 +57,7 @@ export const updateCustomerInfo = (data: CustomerInfoForm) => {
*/
export const delCustomerInfo = (id: string | number | Array<string | number>) => {
return request({
url: '/system/customerInfo/' + id,
url: '/manage/customerInfo/' + id,
method: 'delete'
});
};

View File

@ -0,0 +1,240 @@
import { DeptTreeVO, DeptVO } from './../dept/types';
import { RoleVO } from '@/api/system/role/types';
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { UserForm, UserQuery, UserVO, UserInfoVO } from './types';
import { parseStrEmpty } from '@/utils/ruoyi';
/**
*
* @param query
*/
export const listUser = (query: UserQuery): AxiosPromise<UserVO[]> => {
return request({
url: '/operate/user/list',
method: 'get',
params: query
});
};
/**
* ids查询用户
* @param userIds
*/
export const optionSelect = (userIds: (number | string)[]): AxiosPromise<UserVO[]> => {
return request({
url: '/operate/user/optionselect?userIds=' + userIds,
method: 'get'
});
};
/**
*
* @param userId
*/
export const getUser = (userId?: string | number): AxiosPromise<UserInfoVO> => {
return request({
url: '/operate/user/' + parseStrEmpty(userId),
method: 'get'
});
};
/**
*
*/
export const addUser = (data: UserForm) => {
return request({
url: '/operate/user',
method: 'post',
data: data
});
};
/**
*
*/
export const updateUser = (data: UserForm) => {
return request({
url: '/operate/user',
method: 'put',
data: data
});
};
/**
*
* @param userId ID
*/
export const delUser = (userId: Array<string | number> | string | number) => {
return request({
url: '/operate/user/' + userId,
method: 'delete'
});
};
/**
*
* @param userId ID
* @param password
*/
export const resetUserPwd = (userId: string | number, password: string) => {
const data = {
userId,
password
};
return request({
url: '/operate/user/resetPwd',
method: 'put',
headers: {
isEncrypt: true,
repeatSubmit: false
},
data: data
});
};
/**
*
* @param userId ID
* @param status
*/
export const changeUserStatus = (userId: number | string, status: string) => {
const data = {
userId,
status
};
return request({
url: '/operate/user/changeStatus',
method: 'put',
data: data
});
};
/**
*
*/
export const getUserProfile = (): AxiosPromise<UserInfoVO> => {
return request({
url: '/operate/user/profile',
method: 'get'
});
};
/**
*
* @param data
*/
export const updateUserProfile = (data: UserForm) => {
return request({
url: '/operate/user/profile',
method: 'put',
data: data
});
};
/**
*
* @param oldPassword
* @param newPassword
*/
export const updateUserPwd = (oldPassword: string, newPassword: string) => {
const data = {
oldPassword,
newPassword
};
return request({
url: '/operate/user/profile/updatePwd',
method: 'put',
headers: {
isEncrypt: true,
repeatSubmit: false
},
data: data
});
};
/**
*
* @param data
*/
export const uploadAvatar = (data: FormData) => {
return request({
url: '/operate/user/profile/avatar',
method: 'post',
data: data
});
};
/**
*
* @param userId ID
*/
export const getAuthRole = (userId: string | number): AxiosPromise<{ user: UserVO; roles: RoleVO[] }> => {
return request({
url: '/operate/user/authRole/' + userId,
method: 'get'
});
};
/**
*
* @param data ID
*/
export const updateAuthRole = (data: { userId: string; roleIds: string }) => {
return request({
url: '/operate/user/authRole',
method: 'put',
params: data
});
};
/**
*
* @param deptId
*/
export const listUserByDeptId = (deptId: string | number): AxiosPromise<UserVO[]> => {
return request({
url: '/operate/user/list/dept/' + deptId,
method: 'get'
});
};
/**
*
*/
export const deptTreeSelect = (): AxiosPromise<DeptTreeVO[]> => {
return request({
url: '/operate/user/deptTree',
method: 'get'
});
};
/**
*
*/
export const setDeptAdmin = (userId: Array<string | number> | string | number) => {
return request({
url: '/operate/user/setDeptAdmin/' + userId,
method: 'get'
});
};
export default {
listUser,
getUser,
optionSelect,
addUser,
updateUser,
delUser,
resetUserPwd,
changeUserStatus,
getUserProfile,
updateUserProfile,
updateUserPwd,
uploadAvatar,
getAuthRole,
updateAuthRole,
deptTreeSelect,
listUserByDeptId,
setDeptAdmin
};

View File

@ -0,0 +1,90 @@
import { RoleVO } from '@/api/system/role/types';
import { PostVO } from '@/api/system/post/types';
/**
*
*/
export interface UserInfo {
user: UserVO;
roles: string[];
permissions: string[];
}
/**
*
*/
export interface UserQuery extends PageQuery {
userName?: string;
nickName?: string;
phonenumber?: string;
status?: string;
deptId?: string | number;
roleId?: string | number;
userIds?: string;
employeeName?: string;
}
/**
*
*/
export interface UserVO extends BaseEntity {
userId: string | number;
tenantId: string;
deptId: number;
userName: string;
nickName: string;
userType: string;
email: string;
phonenumber: string;
sex: string;
avatar: string;
status: string;
delFlag: string;
loginIp: string;
loginDate: string;
remark: string;
deptName: string;
roles: RoleVO[];
roleIds: any;
postIds: any;
roleId: any;
admin: boolean;
employeeName: string;
}
/**
*
*/
export interface UserForm {
id?: string;
userId?: string;
deptId?: number;
userName: string;
employeeName?: string;
nickName?: string;
password: string;
phonenumber?: string;
email?: string;
sex?: string;
status: string;
remark?: string;
postIds: string[];
roleIds: string[];
}
export interface UserInfoVO {
user: UserVO;
roles: RoleVO[];
roleIds: string[];
posts: PostVO[];
postIds: string[];
roleGroup: string;
postGroup: string;
}
export interface ResetPwdForm {
oldPassword: string;
newPassword: string;
confirmPassword: string;
}

View File

@ -1,6 +1,6 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {DeptForm, DeptQuery, DeptTreeVO, DeptVO} from './types';
import { DeptForm, DeptQuery, DeptTreeVO, DeptVO } from './types';
// 查询部门列表
export const listDept = (query?: DeptQuery) => {

View File

@ -68,3 +68,11 @@ export const delMenu = (menuId: string | number) => {
method: 'delete'
});
};
// 级联删除菜单
export const cascadeDelMenu = (menuIds: Array<string | number>) => {
return request({
url: '/system/menu/cascade/' + menuIds,
method: 'delete'
});
};

View File

@ -1,4 +1,4 @@
import {DeptTreeVO, DeptVO} from './../dept/types';
import { DeptTreeVO, DeptVO } from './../dept/types';
import { RoleVO } from '@/api/system/role/types';
import request from '@/utils/request';
import { AxiosPromise } from 'axios';

View File

@ -1,6 +1,5 @@
import { RoleVO } from '@/api/system/role/types';
import { PostVO } from '@/api/system/post/types';
import { string } from 'vue-types';
/**
*
@ -16,6 +15,7 @@ export interface UserInfo {
*/
export interface UserQuery extends PageQuery {
userName?: string;
nickName?: string;
phonenumber?: string;
status?: string;
deptId?: string | number;
@ -61,6 +61,7 @@ export interface UserForm {
deptId?: number;
userName: string;
employeeName?: string;
nickName?: string;
password: string;
phonenumber?: string;
email?: string;

View File

@ -0,0 +1,63 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ExpressVO, ExpressQuery, ExpressForm } from '@/api/workflow/express/types';
/**
*
* @param query
* @returns {*}
*/
export const listExpress = (query?: ExpressQuery): AxiosPromise<ExpressVO[]> => {
return request({
url: '/workflow/express/list',
method: 'get',
params: query
});
};
/**
*
* @param id
*/
export const getExpress = (id: string | number): AxiosPromise<ExpressVO> => {
return request({
url: '/workflow/express/' + id,
method: 'get'
});
};
/**
*
* @param data
*/
export const addExpress = (data: ExpressForm): AxiosPromise<ExpressVO> => {
return request({
url: '/workflow/express',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateExpress = (data: ExpressForm): AxiosPromise<ExpressVO> => {
return request({
url: '/workflow/express',
method: 'put',
data: data
});
};
/**
*
* @param id
*/
export const delExpress = (id: string | number | Array<string | number>) => {
return request({
url: '/workflow/express/' + id,
method: 'delete'
});
};

View File

@ -0,0 +1,30 @@
export interface ExpressVO {
id: string | number;
tripType: string;
startDate: string;
endDate: string;
tripDays: number;
budgetType?: string;
remark: string;
status?: string;
}
export interface ExpressForm extends BaseEntity {
id?: string | number;
tripType?: string;
startDate?: string;
endDate?: string;
tripDays?: number;
tripMoney?: number;
reason?: string;
budgetType?: string;
currentProjects?: string;
remark?: string;
attachment?: string;
status?: string;
}
export interface ExpressQuery extends PageQuery {
startExpressDays?: number;
endExpressDays?: number;
}

View File

@ -31,9 +31,9 @@ export const pageByFinish = (query: FlowInstanceQuery): AxiosPromise<FlowInstanc
/**
* id获取历史流程图
*/
export const flowImage = (businessId: string | number) => {
export const flowHisTaskList = (businessId: string | number) => {
return request({
url: `/workflow/instance/flowImage/${businessId}` + '?t' + Math.random(),
url: `/workflow/instance/flowHisTaskList/${businessId}` + '?t' + Math.random(),
method: 'get'
});
};

View File

@ -26,7 +26,7 @@
z-index: 1001;
overflow: hidden;
-webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1);
// reset element-ui css
.horizontal-collapse-transition {

View File

@ -44,7 +44,7 @@ const findPathNum = (str, char = '/') => {
return str.split(char).length - 1;
};
const getMatched = (pathList, routeList, matched) => {
let data = routeList.find((item) => item.path == pathList[0] || (item.name += '').toLowerCase() == pathList[0]);
const data = routeList.find((item) => item.path == pathList[0] || (item.name += '').toLowerCase() == pathList[0]);
if (data) {
matched.push(data);
if (data.children && pathList.length) {

View File

@ -95,7 +95,7 @@ const options = ref<any>({
});
const styles = computed(() => {
let style: any = {};
const style: any = {};
if (props.minHeight) {
style.minHeight = `${props.minHeight}px`;
}
@ -121,9 +121,9 @@ const handleUploadSuccess = (res: any) => {
//
if (res.code === 200) {
//
let quill = toRaw(quillEditorRef.value).getQuill();
const quill = toRaw(quillEditorRef.value).getQuill();
//
let length = quill.selection.savedRange.index;
const length = quill.selection.savedRange.index;
// res
quill.insertEmbed(length, 'image', res.data.url);
//

View File

@ -176,7 +176,7 @@ const handleUploadSuccess = (res: any, file: UploadFile) => {
//
const handleDelete = (index: number) => {
let ossId = fileList.value[index].ossId;
const ossId = fileList.value[index].ossId;
delOss(ossId);
fileList.value.splice(index, 1);
emit('update:modelValue', listToString(fileList.value));

View File

@ -27,7 +27,7 @@ const realSrc = computed(() => {
if (!props.src) {
return;
}
let real_src = props.src.split(',')[0];
const real_src = props.src.split(',')[0];
return real_src;
});
@ -35,8 +35,8 @@ const realSrcList = computed(() => {
if (!props.src) {
return [];
}
let real_src_list = props.src.split(',');
let srcList: string[] = [];
const real_src_list = props.src.split(',');
const srcList: string[] = [];
real_src_list.forEach((item: string) => {
if (item.trim() === '') {
return;

View File

@ -189,7 +189,7 @@ const handleUploadSuccess = (res: any, file: UploadFile) => {
const handleDelete = (file: UploadFile): boolean => {
const findex = fileList.value.map((f) => f.name).indexOf(file.name);
if (findex > -1 && uploadList.value.length === number.value) {
let ossId = fileList.value[findex].ossId;
const ossId = fileList.value[findex].ossId;
delOss(ossId);
fileList.value.splice(findex, 1);
emit('update:modelValue', listToString(fileList.value));
@ -225,7 +225,7 @@ const handlePictureCardPreview = (file: any) => {
const listToString = (list: any[], separator?: string) => {
let strs = '';
separator = separator || ',';
for (let i in list) {
for (const i in list) {
if (undefined !== list[i].ossId && list[i].url.indexOf('blob:') !== 0) {
strs += list[i].ossId + separator;
}

View File

@ -0,0 +1,56 @@
<template>
<div style="display: flex; justify-content: space-between">
<div>
<el-button v-if="submitButtonShow" :loading="props.buttonLoading" type="info" @click="submitForm('draft')">暂存</el-button>
<el-button v-if="submitButtonShow" :loading="props.buttonLoading" type="primary" @click="submitForm('submit')"> </el-button>
<el-button v-if="approvalButtonShow" :loading="props.buttonLoading" type="primary" @click="approvalVerifyOpen">审批</el-button>
<el-button v-if="props.id && props.status !== 'draft'" type="primary" @click="handleApprovalRecord">流程进度</el-button>
<slot />
</div>
<div>
<el-button style="float: right" @click="goBack()">返回</el-button>
</div>
</div>
</template>
<script setup lang="ts">
import { propTypes } from '@/utils/propTypes';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const props = defineProps({
status: propTypes.string.def(''),
pageType: propTypes.string.def(''),
buttonLoading: propTypes.bool.def(false),
id: propTypes.string.def('') || propTypes.number.def()
});
const emits = defineEmits(['submitForm', 'approvalVerifyOpen', 'handleApprovalRecord']);
//
const submitForm = async (type) => {
emits('submitForm', type);
};
//
const approvalVerifyOpen = async () => {
emits('approvalVerifyOpen');
};
//
const handleApprovalRecord = () => {
emits('handleApprovalRecord');
};
//
const submitButtonShow = computed(() => {
return (
props.pageType === 'add' ||
(props.pageType === 'update' && props.status && (props.status === 'draft' || props.status === 'cancel' || props.status === 'back'))
);
});
//
const approvalButtonShow = computed(() => {
return props.pageType === 'approval' && props.status && props.status === 'waiting';
});
//
const goBack = () => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
};
</script>

View File

@ -3,21 +3,7 @@
<el-dialog v-model="visible" draggable title="审批记录" :width="props.width" :height="props.height" :close-on-click-modal="false">
<el-tabs v-model="tabActiveName" class="demo-tabs">
<el-tab-pane v-loading="loading" label="流程图" name="image" style="height: 68vh">
<div
ref="imageWrapperRef"
class="image-wrapper"
@wheel="handleMouseWheel"
@mousedown="handleMouseDown"
@mousemove="handleMouseMove"
@mouseup="handleMouseUp"
@mouseleave="handleMouseLeave"
@dblclick="resetTransform"
:style="transformStyle"
>
<el-card class="box-card">
<el-image :src="imgUrl" class="scalable-image" />
</el-card>
</div>
<flowChart :ins-id="insId" v-if="insId" />
</el-tab-pane>
<el-tab-pane v-loading="loading" label="审批信息" name="info">
<div>
@ -73,10 +59,10 @@
</div>
</template>
<script setup lang="ts">
import { flowImage } from '@/api/workflow/instance';
import { flowHisTaskList } from '@/api/workflow/instance';
import { propTypes } from '@/utils/propTypes';
import { listByIds } from '@/api/system/oss';
import FlowChart from '@/components/Process/flowChart.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wf_task_status } = toRefs<any>(proxy?.useDict('wf_task_status'));
const props = defineProps({
@ -87,7 +73,7 @@ const loading = ref(false);
const visible = ref(false);
const historyList = ref<Array<any>>([]);
const tabActiveName = ref('image');
const imgUrl = ref('');
const insId = ref(null);
//
const init = async (businessId: string | number) => {
@ -95,10 +81,10 @@ const init = async (businessId: string | number) => {
loading.value = true;
tabActiveName.value = 'image';
historyList.value = [];
flowImage(businessId).then((resp) => {
flowHisTaskList(businessId).then((resp) => {
if (resp.data) {
historyList.value = resp.data.list;
imgUrl.value = 'data:image/gif;base64,' + resp.data.image;
insId.value = resp.data.instanceId;
if (historyList.value.length > 0) {
historyList.value.forEach((item) => {
if (item.ext) {
@ -124,109 +110,6 @@ const handleDownload = (ossId: string) => {
proxy?.$download.oss(ossId);
};
const imageWrapperRef = ref<HTMLElement | null>(null);
const scale = ref(1); //
const maxScale = 3; //
const minScale = 0.5; //
let isDragging = false;
let startX = 0;
let startY = 0;
let currentTranslateX = 0;
let currentTranslateY = 0;
const handleMouseWheel = (event: WheelEvent) => {
event.preventDefault();
let newScale = scale.value - event.deltaY / 1000;
newScale = Math.max(minScale, Math.min(newScale, maxScale));
if (newScale !== scale.value) {
scale.value = newScale;
resetDragPosition(); // 使
}
};
const handleMouseDown = (event: MouseEvent) => {
if (scale.value > 1) {
event.preventDefault(); //
isDragging = true;
startX = event.clientX;
startY = event.clientY;
}
};
const handleMouseMove = (event: MouseEvent) => {
if (!isDragging || !imageWrapperRef.value) return;
const deltaX = event.clientX - startX;
const deltaY = event.clientY - startY;
startX = event.clientX;
startY = event.clientY;
currentTranslateX += deltaX;
currentTranslateY += deltaY;
//
const bounds = getBounds();
if (currentTranslateX > bounds.maxTranslateX) {
currentTranslateX = bounds.maxTranslateX;
} else if (currentTranslateX < bounds.minTranslateX) {
currentTranslateX = bounds.minTranslateX;
}
if (currentTranslateY > bounds.maxTranslateY) {
currentTranslateY = bounds.maxTranslateY;
} else if (currentTranslateY < bounds.minTranslateY) {
currentTranslateY = bounds.minTranslateY;
}
applyTransform();
};
const handleMouseUp = () => {
isDragging = false;
};
const handleMouseLeave = () => {
isDragging = false;
};
const resetTransform = () => {
scale.value = 1;
currentTranslateX = 0;
currentTranslateY = 0;
applyTransform();
};
const resetDragPosition = () => {
currentTranslateX = 0;
currentTranslateY = 0;
applyTransform();
};
const applyTransform = () => {
if (imageWrapperRef.value) {
imageWrapperRef.value.style.transform = `translate(${currentTranslateX}px, ${currentTranslateY}px) scale(${scale.value})`;
}
};
const getBounds = () => {
if (!imageWrapperRef.value) return { minTranslateX: 0, maxTranslateX: 0, minTranslateY: 0, maxTranslateY: 0 };
const imgRect = imageWrapperRef.value.getBoundingClientRect();
const containerRect = imageWrapperRef.value.parentElement?.getBoundingClientRect() ?? imgRect;
const minTranslateX = (containerRect.width - imgRect.width * scale.value) / 2;
const maxTranslateX = -(containerRect.width - imgRect.width * scale.value) / 2;
const minTranslateY = (containerRect.height - imgRect.height * scale.value) / 2;
const maxTranslateY = -(containerRect.height - imgRect.height * scale.value) / 2;
return { minTranslateX, maxTranslateX, minTranslateY, maxTranslateY };
};
const transformStyle = computed(() => ({
transition: isDragging ? 'none' : 'transform 0.2s ease'
}));
/**
* 对外暴露子组件方法
*/
@ -235,46 +118,10 @@ defineExpose({
});
</script>
<style lang="scss" scoped>
.triangle {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
border-radius: 6px;
}
.triangle::after {
content: ' ';
position: absolute;
top: 8em;
right: 215px;
border: 15px solid;
border-color: transparent #fff transparent transparent;
}
.container {
:deep(.el-dialog .el-dialog__body) {
max-height: calc(100vh - 170px) !important;
min-height: calc(100vh - 170px) !important;
}
}
.image-wrapper {
width: 100%;
overflow: hidden;
position: relative;
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
user-select: none; /* 禁用文本选择 */
cursor: grab; /* 设置初始鼠标指针为可拖动 */
}
.image-wrapper:active {
cursor: grabbing; /* 当正在拖动时改变鼠标指针 */
}
.scalable-image {
object-fit: contain;
width: 100%;
padding: 15px;
}
</style>

View File

@ -0,0 +1,40 @@
<template>
<div>
<div style="height: 68vh" class="iframe-wrapper">
<iframe :src="iframeUrl" style="width: 100%; height: 100%" frameborder="0" scrolling="no" class="custom-iframe" />
</div>
</div>
</template>
<script setup lang="ts">
import { getToken } from '@/utils/auth';
// Props
const props = defineProps({
insId: {
type: [String, Number],
default: null
}
});
const iframeUrl = ref('');
const baseUrl = import.meta.env.VITE_APP_BASE_API;
onMounted(async () => {
const url = baseUrl + `/warm-flow-ui/index.html?id=${props.insId}&type=FlowChart`;
iframeUrl.value = url + '&Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID;
});
</script>
<style scoped>
.iframe-wrapper {
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.custom-iframe {
width: 100%;
border: none;
background: transparent;
}
</style>

View File

@ -0,0 +1,154 @@
<template>
<div
ref="imageWrapperRef"
class="image-wrapper"
@wheel="handleMouseWheel"
@mousedown="handleMouseDown"
@mousemove="handleMouseMove"
@mouseup="handleMouseUp"
@mouseleave="handleMouseLeave"
@dblclick="resetTransform"
:style="transformStyle"
>
<el-card class="box-card">
<el-image :src="props.imgUrl" class="scalable-image" />
</el-card>
</div>
</template>
<script setup lang="ts">
// Props
const props = defineProps({
imgUrl: {
type: String,
default: () => ''
}
});
const imageWrapperRef = ref<HTMLElement | null>(null);
const scale = ref(1); //
const maxScale = 3; //
const minScale = 0.5; //
let isDragging = false;
let startX = 0;
let startY = 0;
let currentTranslateX = 0;
let currentTranslateY = 0;
const handleMouseWheel = (event: WheelEvent) => {
event.preventDefault();
let newScale = scale.value - event.deltaY / 1000;
newScale = Math.max(minScale, Math.min(newScale, maxScale));
if (newScale !== scale.value) {
scale.value = newScale;
resetDragPosition(); // 使
}
};
const handleMouseDown = (event: MouseEvent) => {
if (scale.value > 1) {
event.preventDefault(); //
isDragging = true;
startX = event.clientX;
startY = event.clientY;
}
};
const handleMouseMove = (event: MouseEvent) => {
if (!isDragging || !imageWrapperRef.value) return;
const deltaX = event.clientX - startX;
const deltaY = event.clientY - startY;
startX = event.clientX;
startY = event.clientY;
currentTranslateX += deltaX;
currentTranslateY += deltaY;
//
const bounds = getBounds();
if (currentTranslateX > bounds.maxTranslateX) {
currentTranslateX = bounds.maxTranslateX;
} else if (currentTranslateX < bounds.minTranslateX) {
currentTranslateX = bounds.minTranslateX;
}
if (currentTranslateY > bounds.maxTranslateY) {
currentTranslateY = bounds.maxTranslateY;
} else if (currentTranslateY < bounds.minTranslateY) {
currentTranslateY = bounds.minTranslateY;
}
applyTransform();
};
const handleMouseUp = () => {
isDragging = false;
};
const handleMouseLeave = () => {
isDragging = false;
};
const resetTransform = () => {
scale.value = 1;
currentTranslateX = 0;
currentTranslateY = 0;
applyTransform();
};
const resetDragPosition = () => {
currentTranslateX = 0;
currentTranslateY = 0;
applyTransform();
};
const applyTransform = () => {
if (imageWrapperRef.value) {
imageWrapperRef.value.style.transform = `translate(${currentTranslateX}px, ${currentTranslateY}px) scale(${scale.value})`;
}
};
const getBounds = () => {
if (!imageWrapperRef.value) return { minTranslateX: 0, maxTranslateX: 0, minTranslateY: 0, maxTranslateY: 0 };
const imgRect = imageWrapperRef.value.getBoundingClientRect();
const containerRect = imageWrapperRef.value.parentElement?.getBoundingClientRect() ?? imgRect;
const minTranslateX = (containerRect.width - imgRect.width * scale.value) / 2;
const maxTranslateX = -(containerRect.width - imgRect.width * scale.value) / 2;
const minTranslateY = (containerRect.height - imgRect.height * scale.value) / 2;
const maxTranslateY = -(containerRect.height - imgRect.height * scale.value) / 2;
return { minTranslateX, maxTranslateX, minTranslateY, maxTranslateY };
};
const transformStyle = computed(() => ({
transition: isDragging ? 'none' : 'transform 0.2s ease'
}));
</script>
<style scoped>
.image-wrapper {
width: 100%;
overflow: hidden;
position: relative;
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
user-select: none; /* 禁用文本选择 */
cursor: grab; /* 设置初始鼠标指针为可拖动 */
}
.image-wrapper:active {
cursor: grabbing; /* 当正在拖动时改变鼠标指针 */
}
.scalable-image {
object-fit: contain;
width: 100%;
padding: 15px;
}
</style>

View File

@ -8,10 +8,10 @@
<el-checkbox value="3" name="type">短信</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item v-if="task.flowStatus === 'waiting'" label="附件">
<el-form-item label="附件">
<fileUpload v-model="form.fileId" :file-type="['png', 'jpg', 'jpeg', 'doc', 'docx', 'xlsx', 'xls', 'ppt', 'txt', 'pdf']" :file-size="20" />
</el-form-item>
<el-form-item label="抄送" v-if="task.flowStatus === 'waiting' && buttonObj.copy">
<el-form-item label="抄送" v-if="buttonObj.copy">
<el-button type="primary" icon="Plus" circle @click="openUserSelectCopy" />
<el-tag v-for="user in selectCopyUserList" :key="user.userId" closable style="margin: 2px" @close="handleCopyCloseTag(user)">
{{ user.employeeName }}

View File

@ -47,11 +47,11 @@ const routers = computed(() => permissionStore.getTopbarRoutes());
//
const topMenus = computed(() => {
let topMenus: RouteRecordRaw[] = [];
const topMenus: RouteRecordRaw[] = [];
routers.value.map((menu) => {
if (menu.hidden !== true) {
//
if (menu.path === '/') {
if (menu.path === '/' && menu.children) {
topMenus.push(menu.children ? menu.children[0] : menu);
} else {
topMenus.push(menu);
@ -63,7 +63,7 @@ const topMenus = computed(() => {
//
const childrenMenus = computed(() => {
let childrenMenus: RouteRecordRaw[] = [];
const childrenMenus: RouteRecordRaw[] = [];
routers.value.map((router) => {
router.children?.forEach((item) => {
if (item.parentPath === undefined) {
@ -118,7 +118,7 @@ const handleSelect = (key: string) => {
//
const routeMenu = childrenMenus.value.find((item) => item.path === key);
if (routeMenu && routeMenu.query) {
let query = JSON.parse(routeMenu.query);
const query = JSON.parse(routeMenu.query);
router.push({ path: key, query: query });
} else {
router.push({ path: key });
@ -132,7 +132,7 @@ const handleSelect = (key: string) => {
};
const activeRoutes = (key: string) => {
let routes: RouteRecordRaw[] = [];
const routes: RouteRecordRaw[] = [];
if (childrenMenus.value && childrenMenus.value.length > 0) {
childrenMenus.value.map((item) => {
if (key == item.parentPath || (key == 'index' && '' == item.path)) {

View File

@ -40,16 +40,16 @@ watch(
);
onMounted(() => {
addIframe()
})
addIframe();
});
watchEffect((route) => {
addIframe()
})
watchEffect(() => {
addIframe();
});
function addIframe() {
if (route.meta.link) {
useTagsViewStore().addIframeView(route)
useTagsViewStore().addIframeView(route);
}
}
</script>

View File

@ -18,7 +18,7 @@ const tagsViewStore = useTagsViewStore();
function iframeUrl(url: string | undefined, query: any) {
if (Object.keys(query).length > 0) {
let params = Object.keys(query)
const params = Object.keys(query)
.map((key) => key + '=' + query[key])
.join('&');
return url + '?' + params;

View File

@ -33,7 +33,7 @@
<el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">
<template #reference>
<el-badge :value="newNotice > 0 ? newNotice : ''" :max="99">
<svg-icon icon-class="message" />
<div class="right-menu-item hover-effect" style="display: block"><svg-icon icon-class="message" /></div>
</el-badge>
</template>
<template #default>
@ -98,7 +98,7 @@ import { dynamicClear, dynamicTenant } from '@/api/system/tenant';
import { TenantVO } from '@/api/types';
import notice from './notice/index.vue';
import router from '@/router';
import {ElMessageBoxOptions} from "element-plus/es/components/message-box/src/message-box.type";
import { ElMessageBoxOptions } from 'element-plus/es/components/message-box/src/message-box.type';
const appStore = useAppStore();
const userStore = useUserStore();
@ -171,6 +171,7 @@ const logout = async () => {
redirect: encodeURIComponent(router.currentRoute.value.fullPath || '/')
}
});
proxy?.$tab.closeAllPage();
});
};

View File

@ -59,6 +59,13 @@
</span>
</div>
<div class="drawer-item">
<span>显示页签图标</span>
<span class="comp-style">
<el-switch v-model="settingsStore.tagsIcon" :disabled="!settingsStore.tagsView" class="drawer-switch" />
</span>
</div>
<div class="drawer-item">
<span>固定 Header</span>
<span class="comp-style">
@ -153,6 +160,7 @@ const saveSetting = () => {
const settings = useStorage<LayoutSetting>('layout-setting', defaultSettings);
settings.value.topNav = storeSettings.value.topNav;
settings.value.tagsView = storeSettings.value.tagsView;
settings.value.tagsIcon = storeSettings.value.tagsIcon;
settings.value.fixedHeader = storeSettings.value.fixedHeader;
settings.value.sidebarLogo = storeSettings.value.sidebarLogo;
settings.value.dynamicTitle = storeSettings.value.dynamicTitle;

View File

@ -86,7 +86,7 @@ const resolvePath = (routePath: string, routeQuery?: string): any => {
return props.basePath;
}
if (routeQuery) {
let query = JSON.parse(routeQuery);
const query = JSON.parse(routeQuery);
return { path: getNormalPath(props.basePath + '/' + routePath), query: query };
}
return getNormalPath(props.basePath + '/' + routePath);

View File

@ -63,9 +63,9 @@ const loginByCode = async (data: LoginData) => {
const init = async () => {
//
let host = window.location.host;
const host = window.location.host;
if (domain !== host) {
let urlFull = new URL(window.location.href);
const urlFull = new URL(window.location.href);
urlFull.host = domain;
window.location.href = urlFull.toString();
return;

View File

@ -5,13 +5,14 @@
v-for="tag in visitedViews"
:key="tag.path"
:data-path="tag.path"
:class="isActive(tag) ? 'active' : ''"
:class="{ 'active': isActive(tag), 'has-icon': tagsIcon }"
:to="{ path: tag.path ? tag.path : '', query: tag.query, fullPath: tag.fullPath ? tag.fullPath : '' }"
class="tags-view-item"
:style="activeStyle(tag)"
@click.middle="!isAffix(tag) ? closeSelectedTag(tag) : ''"
@contextmenu.prevent="openMenu(tag, $event)"
>
<svg-icon v-if="tagsIcon && tag.meta && tag.meta.icon && tag.meta.icon !== '#'" :icon-class="tag.meta.icon"/>
{{ tag.title }}
<span v-if="!isAffix(tag)" @click.prevent.stop="closeSelectedTag(tag)">
<close class="el-icon-close" style="width: 1em; height: 1em; vertical-align: middle" />
@ -51,6 +52,7 @@ const router = useRouter();
const visitedViews = computed(() => useTagsViewStore().getVisitedViews());
const routes = computed(() => usePermissionStore().getRoutes());
const theme = computed(() => useSettingsStore().theme);
const tagsIcon = computed(() => useSettingsStore().tagsIcon)
watch(route, () => {
addTags();
@ -285,6 +287,9 @@ onMounted(() => {
}
}
}
.tags-view-item.active.has-icon::before {
content: none !important;
}
.contextmenu {
margin: 0;
background: var(--el-bg-color);

View File

@ -67,7 +67,7 @@ const closeSearch = () => {
};
//
const menuSearch = (queryString: string, cb: (options: any[]) => void) => {
let options = state.menuList.filter((item) => {
const options = state.menuList.filter((item) => {
return item.title.indexOf(queryString) > -1;
});
cb(options);

View File

@ -24,10 +24,9 @@
</template>
<script setup lang="ts" name="layoutBreadcrumbUserNews">
import { storeToRefs } from 'pinia';
import { useNoticeStore } from '@/store/modules/notice';
const noticeStore = storeToRefs(useNoticeStore());
const noticeStore = useNoticeStore();
const { readAll } = useNoticeStore();
//
@ -42,7 +41,7 @@ const newsList = ref([]) as any;
*/
const getTableData = async () => {
state.loading = true;
newsList.value = noticeStore.state.value.notices;
newsList.value = noticeStore.state.notices;
state.loading = false;
};
@ -50,7 +49,7 @@ const getTableData = async () => {
const onNewsClick = (item: any) => {
newsList.value[item].read = true;
//pinia
noticeStore.state.value.notices = newsList.value;
noticeStore.state.notices = newsList.value;
};
//

View File

@ -34,7 +34,7 @@ import i18n from '@/lang/index';
// vxeTable
import VXETable from 'vxe-table';
import 'vxe-table/lib/style.css';
VXETable.config({
VXETable.setConfig({
zIndex: 999999
});

View File

@ -14,8 +14,8 @@ NProgress.configure({ showSpinner: false });
const whiteList = ['/login', '/register', '/social-callback', '/register*', '/register/*'];
const isWhiteList = (path: string) => {
return whiteList.some(pattern => isPathMatch(pattern, path))
}
return whiteList.some((pattern) => isPathMatch(pattern, path));
};
router.beforeEach(async (to, from, next) => {
NProgress.start();

View File

@ -93,132 +93,7 @@ export const constantRoutes: RouteRecordRaw[] = [
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes: RouteRecordRaw[] = [
{
path: '/system/user-auth',
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
children: [
{
path: 'role/:userId(\\d+)',
component: () => import('@/views/system/user/authRole.vue'),
name: 'AuthRole',
meta: { title: '分配角色', activeMenu: '/system/user', icon: '', noCache: true }
}
]
},
{
path: '/system/role-auth',
component: Layout,
hidden: true,
permissions: ['system:role:edit'],
children: [
{
path: 'user/:roleId(\\d+)',
component: () => import('@/views/system/role/authUser.vue'),
name: 'AuthUser',
meta: { title: '分配用户', activeMenu: '/system/role', icon: '', noCache: true }
}
]
},
{
path: '/system/dict-data',
component: Layout,
hidden: true,
permissions: ['system:dict:list'],
children: [
{
path: 'index/:dictId(\\d+)',
component: () => import('@/views/system/dict/data.vue'),
name: 'Data',
meta: { title: '字典数据', activeMenu: '/system/dict', icon: '', noCache: true }
}
]
},
{
path: '/system/oss-config',
component: Layout,
hidden: true,
permissions: ['system:ossConfig:list'],
children: [
{
path: 'index',
component: () => import('@/views/system/oss/config.vue'),
name: 'OssConfig',
meta: { title: '配置管理', activeMenu: '/system/oss', icon: '', noCache: true }
}
]
},
{
path: '/tool/gen-edit',
component: Layout,
hidden: true,
permissions: ['tool:gen:edit'],
children: [
{
path: 'index/:tableId(\\d+)',
component: () => import('@/views/tool/gen/editTable.vue'),
name: 'GenEdit',
meta: { title: '修改生成配置', activeMenu: '/tool/gen', icon: '', noCache: true }
}
]
},
{
path: '/workflow/leaveEdit',
component: Layout,
hidden: true,
permissions: ['workflow:leave:edit'],
children: [
{
path: 'index',
component: () => import('@/views/workflow/leave/leaveEdit.vue'),
name: 'leaveEdit',
meta: { title: '请假申请', activeMenu: '/workflow/leave', noCache: true }
}
]
},
{
path: '/workflow/tripEdit',
component: Layout,
hidden: true,
permissions: ['workflow:businessTrip:edit'],
children: [
{
path: 'index',
component: () => import('@/views/workflow/businessTrip/tripEdit.vue'),
name: 'tripEdit',
meta: { title: '出差申请', activeMenu: '/workflow/businessTrip', noCache: true }
}
]
},
{
path: '/workflow/sealEdit',
component: Layout,
hidden: true,
permissions: ['workflow:seal:edit'],
children: [
{
path: 'index',
component: () => import('@/views/workflow/seal/sealEdit.vue'),
name: 'sealEdit',
meta: { title: '用章申请', activeMenu: '/workflow/seal', noCache: true }
}
]
},
{
path: '/workflow/design',
component: Layout,
hidden: true,
permissions: ['workflow:leave:edit'],
children: [
{
path: 'index',
component: () => import('@/views/workflow/processDefinition/design.vue'),
name: 'design',
meta: { title: '流程设计', activeMenu: '/workflow/processDefinition', noCache: true }
}
]
}
];
/**

View File

@ -27,6 +27,11 @@ const setting: DefaultSettings = {
*/
tagsView: true,
/**
*
*/
tagsIcon: false,
/**
*
*/
@ -42,14 +47,6 @@ const setting: DefaultSettings = {
*/
dynamicTitle: false,
/**
* @type {string | array} 'production' | ['production', 'development']
* @description Need show err logs component.
* The default is only used in the production env
* If you want to also use it in dev, you can pass ['production', 'development']
*/
errorLog: 'production',
/**
*
*/

View File

@ -1,4 +1,4 @@
import { createPinia } from "pinia";
import { createPinia } from 'pinia';
const store = createPinia();

View File

@ -99,14 +99,14 @@ export const usePermissionStore = defineStore('permission', () => {
};
const filterChildren = (childrenMap: RouteRecordRaw[], lastRouter?: RouteRecordRaw): RouteRecordRaw[] => {
let children: RouteRecordRaw[] = [];
childrenMap.forEach(el => {
childrenMap.forEach((el) => {
el.path = lastRouter ? lastRouter.path + '/' + el.path : el.path;
if (el.children && el.children.length && el.component?.toString() === 'ParentView') {
children = children.concat(filterChildren(el.children, el));
} else {
children.push(el);
}
})
});
return children;
};
return {

View File

@ -5,10 +5,10 @@ import { useStorage } from '@vueuse/core';
import { ref } from 'vue';
export const useSettingsStore = defineStore('setting', () => {
// @ts-ignore
const storageSetting = useStorage<LayoutSetting>('layout-setting', {
topNav: defaultSettings.topNav,
tagsView: defaultSettings.tagsView,
tagsIcon: defaultSettings.tagsIcon,
fixedHeader: defaultSettings.fixedHeader,
sidebarLogo: defaultSettings.sidebarLogo,
dynamicTitle: defaultSettings.dynamicTitle,
@ -21,6 +21,7 @@ export const useSettingsStore = defineStore('setting', () => {
const showSettings = ref<boolean>(defaultSettings.showSettings);
const topNav = ref<boolean>(storageSetting.value.topNav);
const tagsView = ref<boolean>(storageSetting.value.tagsView);
const tagsIcon = ref<boolean>(storageSetting.value.tagsIcon);
const fixedHeader = ref<boolean>(storageSetting.value.fixedHeader);
const sidebarLogo = ref<boolean>(storageSetting.value.sidebarLogo);
const dynamicTitle = ref<boolean>(storageSetting.value.dynamicTitle);
@ -38,6 +39,7 @@ export const useSettingsStore = defineStore('setting', () => {
showSettings,
topNav,
tagsView,
tagsIcon,
fixedHeader,
sidebarLogo,
dynamicTitle,

View File

@ -98,6 +98,10 @@ declare global {
*
*/
tagsView: boolean;
/**
*
*/
tagsIcon: boolean;
/**
*
*/
@ -157,8 +161,6 @@ declare global {
* false:
*/
dark: boolean;
errorLog: string;
}
}
export {};

View File

@ -191,7 +191,8 @@ export function download(url: string, params: any, fileName: string) {
const blob = new Blob([resp]);
FileSaver.saveAs(blob, fileName);
} else {
const resText = await resp.data.text();
const blob = new Blob([resp]);
const resText = await blob.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
ElMessage.error(errMsg);

View File

@ -178,11 +178,11 @@ export const handleTree = <T>(data: any[], id?: string, parentId?: string, child
for (const d of data) {
const parentId = d[config.parentId];
const parentObj = childrenListMap[parentId]
const parentObj = childrenListMap[parentId];
if (!parentObj) {
tree.push(d);
} else {
parentObj[config.childrenList].push(d)
parentObj[config.childrenList].push(d);
}
}
return tree;

View File

@ -49,7 +49,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="demoList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="demoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="true" label="主键" align="center" prop="id" />
<el-table-column label="部门id" align="center" prop="deptId" />

View File

@ -33,6 +33,7 @@
v-loading="loading"
:data="treeList"
row-key="id"
border
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>

View File

@ -22,7 +22,7 @@
<script setup lang="ts">
import errImage from '@/assets/401_images/401.gif';
let { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const errGif = ref(errImage + '?' + +new Date());

View File

@ -22,7 +22,7 @@
</template>
<script setup lang="ts">
let message = computed(() => {
const message = computed(() => {
return '找不到网页!';
});
</script>

View File

@ -260,10 +260,9 @@ onMounted(() => {
background: #ffffff;
width: 400px;
padding: 25px 25px 5px 25px;
z-index: 1;
.el-input {
height: 40px;
input {
height: 40px;
}

View File

@ -4,12 +4,12 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="合同名称" prop="contractName">
<el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同编码" prop="contractCode">
<el-input v-model="queryParams.contractCode" placeholder="请输入合同编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="合同名称" prop="contractName">
<el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@ -40,10 +40,30 @@
<el-table v-loading="loading" :data="contractInfoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="" align="center" prop="id" v-if="true" />
<el-table-column label="合同名称" align="center" prop="contractName" />
<el-table-column label="合同类型" align="center" prop="contractType" />
<el-table-column label="合同编码" align="center" prop="contractCode" />
<!-- <el-table-column label="" align="center" prop="id" v-if="true" />-->
<el-table-column label="合同编码" align="center" prop="contractCode" fixed="left"/>
<el-table-column label="合同名称" align="center" prop="contractName" width="300" fixed="left"/>
<el-table-column label="合同负责人" align="center" prop="contractManager" />
<el-table-column label="重要性" align="center" prop="contractLevel" >
<template #default="scope">
<dict-tag :options="manage_contract_level" :value="scope.row.contractLevel" />
</template>
</el-table-column>
<el-table-column label="委托单位" align="center" prop="contractCode" />
<el-table-column label="签约日期" align="center" prop="contractCode" />
<el-table-column label="合同类型" align="center" prop="contractType" >
<template #default="scope">
<dict-tag :options="manage_contract_type" :value="scope.row.contractType" />
</template>
</el-table-column>
<el-table-column label="已开票" align="center" prop="contractCode" />
<el-table-column label="已收款" align="center" prop="contractCode" />
<el-table-column label="未履行" align="center" prop="contractCode" />
<el-table-column label="合同额" align="center" prop="contractCode" />
<el-table-column label="合同结算额" align="center" prop="contractCode" />
<el-table-column label="合同状态" align="center" prop="contractCode" />
<el-table-column label="咨询类型" align="center" prop="contractCode" />
<el-table-column label="业务类型" align="center" prop="contractCode" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
@ -61,12 +81,34 @@
</el-card>
<!-- 添加或修改合同信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="contractInfoFormRef" :model="form" :rules="rules" label-width="80px">
<el-form ref="contractInfoFormRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="合同编码" prop="contractCode">
<el-input v-model="form.contractCode" placeholder="请输入合同编码" />
</el-form-item>
<el-form-item label="合同名称" prop="contractName">
<el-input v-model="form.contractName" placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编码" prop="contractCode">
<el-input v-model="form.contractCode" placeholder="请输入合同编码" />
<el-form-item label="合同类型" prop="contractType">
<el-select v-model="form.contractType" placeholder="请选择">
<el-option v-for="dict in manage_contract_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="合同重要性" prop="manageContractLevel">
<el-select v-model="form.manageContractLevel" placeholder="请选择">
<el-option v-for="dict in manage_contract_level" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="合同重要性" prop="manageContractLevel">
<el-select v-model="form.manageContractLevel" placeholder="请选择">
<el-option v-for="dict in manage_contract_level" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="合同负责人" prop="contractManagerId">
<el-button type="primary" icon="Plus" circle @click="openUserSelect" />
<el-tag v-for="user in selectUserList" :key="user.userId" closable style="margin: 2px"
@close="handleCloseTag(user)">
{{ user.employeeName }}
</el-tag>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
@ -78,6 +120,8 @@
<el-button @click="cancel"> </el-button>
</div>
</template>
<UserSelect ref="userSelectRef" :multiple="false" :data="selectUserIds" @confirm-call-back="userSelectCallBack">
</UserSelect>
</el-dialog>
</div>
</template>
@ -85,7 +129,8 @@
<script setup name="ContractInfo" lang="ts">
import { listContractInfo, getContractInfo, delContractInfo, addContractInfo, updateContractInfo } from '@/api/manage/contract';
import { ContractInfoVO, ContractInfoQuery, ContractInfoForm } from '@/api/manage/contract/types';
import UserSelect from '@/components/UserSelect/index.vue';
import { UserVO } from '@/api/system/user/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const contractInfoList = ref<ContractInfoVO[]>([]);
@ -99,7 +144,12 @@ const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const contractInfoFormRef = ref<ElFormInstance>();
const userFormRef = ref<ElFormInstance>();
//user
const selectUserList = ref<UserVO[]>([]);
//userid
const selectUserIds = ref<string>(undefined);
const userSelectRef = ref<InstanceType<typeof UserSelect>>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
@ -131,7 +181,7 @@ const data = reactive<PageData<ContractInfoForm, ContractInfoQuery>>({
});
const { queryParams, form, rules } = toRefs(data);
const { manage_contract_type,manage_contract_level } = toRefs<any>(proxy?.useDict('manage_contract_type','manage_contract_level'));
/** 查询合同信息列表 */
const getList = async () => {
loading.value = true;
@ -187,6 +237,32 @@ const handleUpdate = async (row?: ContractInfoVO) => {
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改合同信息";
console.log(row)
const newUser: UserVO = {
userId: form.value.contractManagerId,
employeeName: form.value.contractManager,
tenantId: undefined,
deptId: undefined,
userName: undefined,
nickName: undefined,
userType: undefined,
email: undefined,
phonenumber: undefined,
sex: undefined,
avatar: undefined,
status: undefined,
delFlag: undefined,
loginIp: undefined,
loginDate: undefined,
remark: undefined,
deptName: undefined,
roles: undefined,
roleIds: undefined,
postIds: undefined,
roleId: undefined,
admin: undefined
};
selectUserList.value[0] = newUser;
}
/** 提交按钮 */
@ -222,6 +298,46 @@ const handleExport = () => {
}, `contractInfo_${new Date().getTime()}.xlsx`)
}
//
const openUserSelect = () => {
if (userSelectRef.value) {
userSelectRef.value.open();
// UserSelect data 使
userSelectRef.value.$el.querySelector('input')?.focus(); //
console.log('selectUserList')
console.log(selectUserList)
if (selectUserList.value.length !== 0) {
console.log('selectUserList不为空')
selectUserIds.value = selectUserList.value.map((item) => item.userId).join(',');
}else{
selectUserIds.value = undefined;
}
}
};
//
const userSelectCallBack = (data: UserVO[]) => {
if (data && data.length > 0) {
selectUserList.value = data;
selectUserIds.value = data[0].userId.toString();
// ID
form.value.contractManagerId = selectUserIds.value; //
} else {
selectUserList.value = [];
selectUserIds.value = '';
form.value.contractManagerId = ''; //
}
};
//
const handleCloseTag = (user: UserVO) => {
const userId = user.userId;
// 使split
const index = selectUserList.value.findIndex((item) => item.userId === userId);
selectUserList.value.splice(index, 1);
selectUserIds.value = selectUserList.value.map((item) => item.userId).join(',');
};
onMounted(() => {
getList();
});

View File

@ -40,18 +40,19 @@
<el-table v-loading="loading" :data="customerInfoList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="" align="center" prop="id" v-if="true" />
<!-- <el-table-column label="" align="center" prop="id" v-if="true" />-->
<el-table-column label="客户编码" align="center" prop="customerCode" />
<el-table-column label="客户名称" align="center" prop="customerName" />
<el-table-column label="客户类型" align="center" prop="customerType" />
<el-table-column label="客户编码" align="center" prop="customerCode" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:customerInfo:edit']"></el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:customerInfo:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:customerInfo:remove']"></el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:customerInfo:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>

View File

@ -63,6 +63,7 @@
v-loading="loading"
:data="loginInfoList"
:default-sort="defaultSort"
border
@selection-change="handleSelectionChange"
@sort-change="handleSortChange"
>

View File

@ -19,6 +19,7 @@
<el-card shadow="hover">
<el-table
v-loading="loading"
border
:data="onlineList.slice((queryParams.pageNum - 1) * queryParams.pageSize, queryParams.pageNum * queryParams.pageSize)"
style="width: 100%"
>

View File

@ -65,6 +65,7 @@
ref="operLogTableRef"
v-loading="loading"
:data="operlogList"
border
:default-sort="defaultSort"
@selection-change="handleSelectionChange"
@sort-change="handleSortChange"

View File

@ -108,8 +108,8 @@
<el-table-column v-if="columns[3].visible" key="sex" label="性别" align="center" prop="sex" :show-overflow-tooltip="true" >
<template #default="scope">
<dict-tag :options="sys_user_sex" :value="scope.row.sex" />
</template>
</el-table-column>
</template>
</el-table-column>
<el-table-column v-if="columns[4].visible" key="deptName" label="部门" align="center" prop="deptName" :show-overflow-tooltip="true" width="180"/>
<el-table-column v-if="columns[5].visible" key="phonenumber" label="手机号码" align="center" prop="phonenumber" width="120" />
<el-table-column v-if="columns[6].visible" key="employeeHireDate" label="入职时间" align="center" prop="employeeHireDate" width="120" />
@ -117,12 +117,12 @@
<template #default="scope">
<dict-tag :options="opr_yes_no" :value="scope.row.deptAdminFlag" />
</template>
</el-table-column>
</el-table-column>
<el-table-column v-if="columns[8].visible" key="employeeStatus" label="用工状态" align="center" prop="employeeStatus" width="100">
<template #default="scope">
<dict-tag :options="opr_employee_status" :value="scope.row.employeeStatus" />
</template>
</el-table-column>
</el-table-column>
<el-table-column v-if="columns[9].visible" key="status" label="状态" align="center">
<template #default="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>

View File

@ -203,7 +203,6 @@ onMounted(() => {
line-height: 0;
color: #7483a3;
}
}
.register-form {

View File

@ -45,7 +45,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="clientList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" :data="clientList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="true" label="id" align="center" prop="id" />
<el-table-column label="客户端id" align="center" prop="clientId" />
@ -300,7 +300,7 @@ const handleExport = () => {
/** 状态修改 */
const handleStatusChange = async (row: ClientVO) => {
let text = row.status === '0' ? '启用' : '停用';
const text = row.status === '0' ? '启用' : '停用';
try {
await proxy?.$modal.confirm('确认要"' + text + '"吗?');
await changeStatus(row.clientId, row.status);

View File

@ -60,7 +60,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="configList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="参数主键" align="center" prop="configId" />
<el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" />

View File

@ -42,6 +42,7 @@
v-loading="loading"
:data="deptList"
row-key="deptId"
border
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
:default-expand-all="isExpandAll"
>

View File

@ -44,7 +44,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="字典编码" align="center" prop="dictCode" />
<el-table-column label="字典标签" align="center" prop="dictLabel">

View File

@ -53,7 +53,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="typeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="字典编号" align="center" prop="dictId" />
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />

View File

@ -30,6 +30,9 @@
<el-col :span="1.5">
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" @click="handleCascadeDelete" :loading="deleteLoading">级联删除</el-button>
</el-col>
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row>
</template>
@ -39,6 +42,7 @@
v-loading="loading"
:data="menuList"
row-key="menuId"
border
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
:default-expand-all="isExpandAll"
>
@ -129,8 +133,8 @@
</span>
</template>
<el-radio-group v-model="form.isFrame">
<el-radio label="0"></el-radio>
<el-radio label="1"></el-radio>
<el-radio value="0"></el-radio>
<el-radio value="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -207,8 +211,8 @@
</span>
</template>
<el-radio-group v-model="form.isCache">
<el-radio label="0">缓存</el-radio>
<el-radio label="1">不缓存</el-radio>
<el-radio value="0">缓存</el-radio>
<el-radio value="1">不缓存</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -225,7 +229,7 @@
</span>
</template>
<el-radio-group v-model="form.visible">
<el-radio v-for="dict in sys_show_hide" :key="dict.value" :label="dict.value">{{ dict.label }} </el-radio>
<el-radio v-for="dict in sys_show_hide" :key="dict.value" :value="dict.value">{{ dict.label }} </el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -242,7 +246,7 @@
</span>
</template>
<el-radio-group v-model="form.status">
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
@ -257,11 +261,31 @@
</div>
</template>
</el-dialog>
<el-dialog v-model="deleteDialog.visible" :title="deleteDialog.title" destroy-on-close append-to-bod width="750px">
<el-tree
ref="menuTreeRef"
class="tree-border"
:data="menuOptions"
show-checkbox
node-key="menuId"
:check-strictly="false"
empty-text="加载中,请稍候"
:default-expanded-keys="[0]"
:props="{ value: 'menuId', label: 'menuName', children: 'children' } as any"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitDeleteForm" :loading="deleteLoading"> </el-button>
<el-button @click="cancelCascade"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Menu" lang="ts">
import { addMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
import { addMenu, cascadeDelMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types';
import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
@ -404,7 +428,50 @@ const handleDelete = async (row: MenuVO) => {
proxy?.$modal.msgSuccess('删除成功');
};
const deleteLoading = ref<boolean>(false);
const menuTreeRef = ref<ElTreeInstance>();
const deleteDialog = reactive<DialogOption>({
visible: false,
title: '级联删除菜单'
});
/** 级联删除按钮操作 */
const handleCascadeDelete = () => {
menuTreeRef.value?.setCheckedKeys([]);
getTreeselect();
deleteDialog.visible = true;
};
/** 取消按钮 */
const cancelCascade = () => {
menuTreeRef.value?.setCheckedKeys([]);
deleteDialog.visible = false;
};
/** 删除提交按钮 */
const submitDeleteForm = async () => {
const menuIds = menuTreeRef.value?.getCheckedKeys();
if (menuIds.length < 0) {
proxy?.$modal.msgWarning('请选择要删除的菜单');
return;
}
deleteLoading.value = true;
await cascadeDelMenu(menuIds).finally(() => (deleteLoading.value = false));
await getList();
proxy?.$modal.msgSuccess('删除成功');
deleteDialog.visible = false;
};
onMounted(() => {
getList();
});
</script>
<style scoped lang="scss">
.tree-border {
height: 300px;
overflow: auto;
}
</style>

View File

@ -44,7 +44,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="noticeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="序号" align="center" prop="noticeId" width="100" />
<el-table-column label="公告标题" align="center" prop="noticeTitle" :show-overflow-tooltip="true" />

View File

@ -87,10 +87,18 @@
<el-input v-model="form.configKey" placeholder="请输入配置key" />
</el-form-item>
<el-form-item label="访问站点" prop="endpoint">
<el-input v-model="form.endpoint" placeholder="请输入访问站点" />
<el-input v-model="form.endpoint" placeholder="请输入访问站点">
<template #prefix>
<span style="color: #999">{{ protocol }}</span>
</template>
</el-input>
</el-form-item>
<el-form-item label="自定义域名" prop="domain">
<el-input v-model="form.domain" placeholder="请输入自定义域名" />
<el-input v-model="form.domain" placeholder="请输入自定义域名">
<template #prefix>
<span style="color: #999">{{ protocol }}</span>
</template>
</el-input>
</el-form-item>
<el-form-item label="accessKey" prop="accessKey">
<el-input v-model="form.accessKey" placeholder="请输入accessKey" />
@ -239,6 +247,8 @@ const data = reactive<PageData<OssConfigForm, OssConfigQuery>>({
const { queryParams, form, rules } = toRefs(data);
const protocol = computed(() => (form.value.isHttps === 'Y' ? 'https://' : 'http://'));
/** 查询对象存储配置列表 */
const getList = async () => {
loading.value = true;
@ -306,7 +316,7 @@ const submitForm = () => {
};
/** 状态修改 */
const handleStatusChange = async (row: OssConfigVO) => {
let text = row.status === '0' ? '启用' : '停用';
const text = row.status === '0' ? '启用' : '停用';
try {
await proxy?.$modal.confirm('确认要"' + text + '""' + row.configKey + '"配置吗?');
await changeOssConfigStatus(row.ossConfigId, row.status, row.configKey);

View File

@ -70,6 +70,7 @@
v-if="showTable"
v-loading="loading"
:data="ossList"
border
:header-cell-class-name="handleHeaderClass"
@selection-change="handleSelectionChange"
@header-click="handleHeaderCLick"
@ -255,9 +256,9 @@ const handleHeaderCLick = (column: any) => {
handleOrderChange(column.property, column.multiOrder);
};
const handleOrderChange = (prop: string, order: string) => {
let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(',') : [];
let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(',') : [];
let propIndex = orderByArr.indexOf(prop);
const orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(',') : [];
const isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(',') : [];
const propIndex = orderByArr.indexOf(prop);
if (propIndex !== -1) {
if (order) {
//
@ -306,7 +307,7 @@ const handleDownload = (row: OssVO) => {
};
/** 预览开关按钮 */
const handlePreviewListResource = async (preview: boolean) => {
let text = preview ? '启用' : '停用';
const text = preview ? '启用' : '停用';
try {
await proxy?.$modal.confirm('确认要"' + text + '""预览列表图片"配置吗?');
await proxy?.updateConfigByKey('sys.oss.previewListResource', preview);

View File

@ -84,7 +84,7 @@
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="postList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="岗位编号" align="center" prop="postId" />
<el-table-column label="岗位编码" align="center" prop="postCode" />

View File

@ -33,7 +33,7 @@
<right-toolbar v-model:show-search="showSearch" :search="true" @query-table="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="用户账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户姓名" prop="nickName" :show-overflow-tooltip="true" />

View File

@ -55,7 +55,7 @@
</el-row>
</template>
<el-table ref="roleTableRef" v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
<el-table ref="roleTableRef" border v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
@ -323,7 +323,7 @@ const handleSelectionChange = (selection: RoleVO[]) => {
/** 角色状态修改 */
const handleStatusChange = async (row: RoleVO) => {
let text = row.status === '0' ? '启用' : '停用';
const text = row.status === '0' ? '启用' : '停用';
try {
await proxy?.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?');
await changeRoleStatus(row.roleId, row.status);
@ -346,11 +346,11 @@ const getMenuTreeselect = async () => {
/** 所有部门节点数据 */
const getDeptAllCheckedKeys = (): any => {
//
let checkedKeys = deptRef.value?.getCheckedKeys();
const checkedKeys = deptRef.value?.getCheckedKeys();
//
let halfCheckedKeys = deptRef.value?.getHalfCheckedKeys();
const halfCheckedKeys = deptRef.value?.getHalfCheckedKeys();
if (halfCheckedKeys) {
checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys);
checkedKeys?.unshift(...halfCheckedKeys);
}
return checkedKeys;
};
@ -404,14 +404,14 @@ const getRoleDeptTreeSelect = async (roleId: string | number) => {
/** 树权限(展开/折叠)*/
const handleCheckedTreeExpand = (value: boolean, type: string) => {
if (type == 'menu') {
let treeList = menuOptions.value;
const treeList = menuOptions.value;
for (let i = 0; i < treeList.length; i++) {
if (menuRef.value) {
menuRef.value.store.nodesMap[treeList[i].id].expanded = value;
}
}
} else if (type == 'dept') {
let treeList = deptOptions.value;
const treeList = deptOptions.value;
for (let i = 0; i < treeList.length; i++) {
if (deptRef.value) {
deptRef.value.store.nodesMap[treeList[i].id].expanded = value;
@ -438,11 +438,11 @@ const handleCheckedTreeConnect = (value: any, type: string) => {
/** 所有菜单节点数据 */
const getMenuAllCheckedKeys = (): any => {
//
let checkedKeys = menuRef.value?.getCheckedKeys();
const checkedKeys = menuRef.value?.getCheckedKeys();
//
let halfCheckedKeys = menuRef.value?.getHalfCheckedKeys();
const halfCheckedKeys = menuRef.value?.getHalfCheckedKeys();
if (halfCheckedKeys) {
checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys);
checkedKeys?.unshift(...halfCheckedKeys);
}
return checkedKeys;
};

View File

@ -14,10 +14,10 @@
</el-form-item>
</el-form>
<el-row>
<el-table ref="tableRef" :data="userList" height="260px" @row-click="clickRow" @selection-change="handleSelectionChange">
<el-table ref="tableRef" border :data="userList" height="260px" @row-click="clickRow" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="用户账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户姓名" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="status">

View File

@ -51,7 +51,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="tenantList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="tenantList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="id" align="center" prop="id" />
<el-table-column label="租户编号" align="center" prop="tenantId" />
@ -245,7 +245,7 @@ const getList = async () => {
//
const handleStatusChange = async (row: TenantVO) => {
let text = row.status === '0' ? '启用' : '停用';
const text = row.status === '0' ? '启用' : '停用';
try {
await proxy?.$modal.confirm('确认要"' + text + '""' + row.companyName + '"租户吗?');
await changeTenantStatus(row.id, row.tenantId, row.status);
@ -361,7 +361,7 @@ const handleExport = () => {
/**同步租户字典*/
const handleSyncTenantDict = async () => {
await proxy?.$modal.confirm('确认要同步所有租户字典吗?');
let res = await syncTenantDict();
const res = await syncTenantDict();
proxy?.$modal.msgSuccess(res.msg);
};

View File

@ -39,7 +39,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="tenantPackageList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="tenantPackageList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="租户套餐id" align="center" prop="packageId" />
<el-table-column label="套餐名称" align="center" prop="packageName" />
@ -167,11 +167,11 @@ const getMenuTreeselect = async () => {
//
const getMenuAllCheckedKeys = (): any => {
//
let checkedKeys = menuTreeRef.value?.getCheckedKeys();
const checkedKeys = menuTreeRef.value?.getCheckedKeys();
//
let halfCheckedKeys = menuTreeRef.value?.getHalfCheckedKeys();
const halfCheckedKeys = menuTreeRef.value?.getHalfCheckedKeys();
if (halfCheckedKeys) {
checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys);
checkedKeys?.unshift(...halfCheckedKeys);
}
return checkedKeys;
};
@ -194,7 +194,7 @@ const getList = async () => {
//
const handleStatusChange = async (row: TenantPkgVO) => {
let text = row.status === '0' ? '启用' : '停用';
const text = row.status === '0' ? '启用' : '停用';
const [err] = await to(proxy?.$modal.confirm('确认要"' + text + '""' + row.packageName + '"套餐吗?') as Promise<any>);
if (err) {
row.status = row.status === '0' ? '1' : '0';
@ -241,7 +241,7 @@ const handleSelectionChange = (selection: TenantPkgVO[]) => {
// /
const handleCheckedTreeExpand = (value: CheckboxValueType, type: string) => {
if (type == 'menu') {
let treeList = menuOptions.value;
const treeList = menuOptions.value;
for (let i = 0; i < treeList.length; i++) {
if (menuTreeRef.value) {
menuTreeRef.value.store.nodesMap[treeList[i].id].expanded = value as boolean;

View File

@ -7,6 +7,8 @@
<el-col :span="2.5">
<el-form-item label="员工姓名" prop="employeeName">
<el-input v-model="form.employeeName" disabled />
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" disabled />
</el-form-item>
</el-col>
<el-col :span="2.5">
@ -23,6 +25,7 @@
<el-table
ref="tableRef"
v-loading="loading"
border
:row-key="getRowKey"
:data="roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
@row-click="clickRow"
@ -33,7 +36,7 @@
<span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column>
<el-table-column type="selection" :reserve-selection="true" :selectable="checkSelectable" width="55"></el-table-column>
<el-table-column label="角色编号" align="center" prop="roleId" />
<el-table-column label="角色名称" align="center" prop="roleName" />
<el-table-column label="权限字符" align="center" prop="roleKey" />
@ -72,6 +75,7 @@ const roleIds = ref<Array<string | number>>([]);
const roles = ref<RoleVO[]>([]);
const form = ref<Partial<UserForm>>({
employeeName: undefined,
nickName: undefined,
userName: '',
userId: undefined
});
@ -80,8 +84,10 @@ const tableRef = ref<ElTableInstance>();
/** 单击选中行数据 */
const clickRow = (row: RoleVO) => {
row.flag = !row.flag;
tableRef.value?.toggleRowSelection(row, row.flag);
if (checkSelectable(row)) {
row.flag = !row.flag;
tableRef.value?.toggleRowSelection(row, row.flag);
}
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: RoleVO[]) => {
@ -91,6 +97,10 @@ const handleSelectionChange = (selection: RoleVO[]) => {
const getRowKey = (row: RoleVO): string => {
return String(row.roleId);
};
/** 检查角色状态 */
const checkSelectable = (row: RoleVO): boolean => {
return row.status === '0';
};
/** 关闭按钮 */
const close = () => {
const obj: RouteLocationNormalized = {

View File

@ -27,6 +27,9 @@
<el-form-item label="用户名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
</el-form-item>
@ -92,11 +95,11 @@
</el-row>
</template>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column v-if="columns[0].visible" key="userId" label="用户编号" align="center" prop="userId" />
<el-table-column v-if="columns[1].visible" key="userName" label="用户账号" align="center" prop="userName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[2].visible" key="nickName" label="用户姓名" align="center" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[1].visible" key="userName" label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[2].visible" key="nickName" label="用户昵称" align="center" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[3].visible" key="deptName" label="部门" align="center" prop="deptName" :show-overflow-tooltip="true" />
<el-table-column v-if="columns[4].visible" key="phonenumber" label="手机号码" align="center" prop="phonenumber" width="120" />
<el-table-column v-if="columns[5].visible" key="status" label="状态" align="center">
@ -147,8 +150,8 @@
<el-form ref="userFormRef" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户姓名" maxlength="30" />
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -334,7 +337,7 @@ const upload = reactive<ImportOption>({
const columns = ref<FieldOption[]>([
{ key: 0, label: `用户编号`, visible: false, children: [] },
{ key: 1, label: `用户名称`, visible: true, children: [] },
{ key: 2, label: `用户姓名`, visible: true, children: [] },
{ key: 2, label: `用户昵称`, visible: true, children: [] },
{ key: 3, label: `部门`, visible: true, children: [] },
{ key: 4, label: `手机号码`, visible: true, children: [] },
{ key: 5, label: `状态`, visible: true, children: [] },
@ -498,7 +501,7 @@ const handleDelete = async (row?: UserVO) => {
/** 用户状态修改 */
const handleStatusChange = async (row: UserVO) => {
let text = row.status === '0' ? '启用' : '停用';
const text = row.status === '0' ? '启用' : '停用';
try {
await proxy?.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?');
await api.changeUserStatus(row.userId, row.status);

View File

@ -1,6 +1,6 @@
<template>
<div>
<el-table :data="devices" style="width: 100%; height: 100%; font-size: 14px">
<el-table :data="devices" border style="width: 100%; height: 100%; font-size: 14px">
<el-table-column label="设备类型" align="center">
<template #default="scope">
<dict-tag :options="sys_device_type" :value="scope.row.deviceType" />

View File

@ -1,6 +1,6 @@
<template>
<div>
<el-table :data="auths" style="width: 100%; height: 100%; font-size: 14px">
<el-table :data="auths" border style="width: 100%; height: 100%; font-size: 14px">
<el-table-column label="序号" width="50" type="index" />
<el-table-column label="绑定账号平台" width="140" align="center" prop="source" show-overflow-tooltip />
<el-table-column label="头像" width="120" align="center" prop="avatar">

View File

@ -134,7 +134,7 @@ const beforeUpload = (file: UploadRawFile): any => {
/** 上传图片 */
const uploadImg = async () => {
cropper.value.getCropBlob(async (data: any) => {
let formData = new FormData();
const formData = new FormData();
formData.append('avatarfile', data, options.fileName);
const res = await uploadAvatar(formData);
open.value = false;

View File

@ -33,7 +33,7 @@ const userForm = computed(() => props.user);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const userRef = ref<ElFormInstance>();
const rule: ElFormRules = {
nickName: [{ required: true, message: '用户姓名不能为空', trigger: 'blur' }],
nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
email: [
{ required: true, message: '邮箱地址不能为空', trigger: 'blur' },
{

View File

@ -5,7 +5,7 @@
<basic-info-form ref="basicInfo" :info="info" />
</el-tab-pane>
<el-tab-pane label="字段信息" name="columnInfo">
<el-table ref="dragTable" :data="columns" row-key="columnId" :max-height="tableHeight">
<el-table ref="dragTable" border :data="columns" row-key="columnId" :max-height="tableHeight">
<el-table-column label="序号" type="index" min-width="5%" />
<el-table-column label="字段列名" prop="columnName" min-width="10%" :show-overflow-tooltip="true" />
<el-table-column label="字段描述" min-width="10%">

View File

@ -19,7 +19,7 @@
</el-form-item>
</el-form>
<el-row>
<el-table ref="tableRef" :data="dbTableList" height="260px" @row-click="clickRow" @selection-change="handleSelectionChange">
<el-table ref="tableRef" border :data="dbTableList" height="260px" @row-click="clickRow" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="tableName" label="表名称" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="tableComment" label="表描述" :show-overflow-tooltip="true"></el-table-column>

View File

@ -56,7 +56,7 @@
</el-row>
</template>
<el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="tableList" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column label="序号" type="index" width="50" align="center">
<template #default="scope">
@ -113,8 +113,8 @@
</template>
<script setup name="Gen" lang="ts">
import {delTable, genCode, getDataNames, listTable, previewTable, synchDb} from '@/api/tool/gen';
import {TableQuery, TableVO} from '@/api/tool/gen/types';
import { delTable, genCode, getDataNames, listTable, previewTable, synchDb } from '@/api/tool/gen';
import { TableQuery, TableVO } from '@/api/tool/gen/types';
import router from '@/router';
import ImportTable from './importTable.vue';

View File

@ -3,13 +3,13 @@
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="search">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="出差天数" prop="startBusinessTripDays">
<!-- <el-form-item label="出差天数" prop="startBusinessTripDays">
<el-input v-model="queryParams.startBusinessTripDays" placeholder="请输入出差天数" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item prop="endBusinessTripDays"> </el-form-item>
<el-form-item prop="endBusinessTripDays">
</el-form-item> -->
<!-- <el-form-item prop="endBusinessTripDays"> </el-form-item> -->
<!-- <el-form-item prop="endBusinessTripDays">
<el-input v-model="queryParams.endBusinessTripDays" placeholder="请输入出差天数" clearable @keyup.enter="handleQuery" />
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>

View File

@ -15,9 +15,9 @@
</el-card>
<el-card shadow="never" style="height: 78vh; overflow-y: auto">
<el-form ref="businessTripFormRef" v-loading="loading" :disabled="routeParams.type === 'view'" :model="form" :rules="rules" label-width="80px">
<el-form-item label="业务类别" prop="tripType">
<el-select v-model="form.tripType" placeholder="请选择业务类别" style="width: 100%">
<el-option v-for="item in business_type" :key="item.value" :label="item.label" :value="item.value" />
<el-form-item label="邮寄性质" prop="tripType">
<el-select v-model="form.tripType" placeholder="请选择邮寄性质" style="width: 100%">
<el-option v-for="item in opr_oa_exp_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="预算事项" prop="budgetType">
@ -90,7 +90,7 @@ const loading = ref(true);
const businessTripTime = ref<Array<string>>([]);
//
const routeParams = ref<Record<string, any>>({});
const { business_type,opr_oa_trip_budget_type } = toRefs<any>(proxy?.useDict('business_type','opr_oa_trip_budget_type'));
const { opr_oa_exp_type } = toRefs<any>(proxy?.useDict('opr_oa_exp_type'));
// const options = [
// {
// value: '1',

View File

@ -31,10 +31,11 @@
v-loading="loading"
:data="categoryList"
row-key="categoryId"
border
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table-column label="分类名称" prop="categoryName" width="260"/>
<el-table-column label="分类名称" prop="categoryName" width="260" />
<el-table-column label="显示顺序" align="center" prop="orderNum" width="200" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180" />
<el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
@ -77,7 +78,7 @@
</el-col>
</el-row>
</el-form>
<template #footer>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
@ -88,17 +89,16 @@
</template>
<script setup name="Category" lang="ts">
import { listCategory, getCategory, delCategory, addCategory, updateCategory } from "@/api/workflow/category";
import { listCategory, getCategory, delCategory, addCategory, updateCategory } from '@/api/workflow/category';
import { CategoryVO, CategoryQuery, CategoryForm } from '@/api/workflow/category/types';
type CategoryOption = {
categoryId: number;
categoryName: string;
children?: CategoryOption[];
}
const { proxy } = getCurrentInstance() as ComponentInternalInstance;;
};
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const categoryList = ref<CategoryVO[]>([]);
const categoryOptions = ref<CategoryOption[]>([]);
@ -109,32 +109,29 @@ const loading = ref(false);
const queryFormRef = ref<ElFormInstance>();
const categoryFormRef = ref<ElFormInstance>();
const categoryTableRef = ref<ElTableInstance>()
const categoryTableRef = ref<ElTableInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: CategoryForm = {
categoryId: undefined,
categoryName: "",
categoryName: '',
parentId: undefined,
orderNum: 0,
}
orderNum: 0
};
const data = reactive<PageData<CategoryForm, CategoryQuery>>({
form: {...initFormData},
form: { ...initFormData },
queryParams: {
categoryName: undefined,
categoryName: undefined
},
rules: {
categoryId: [
{ required: true, message: "流程分类ID不能为空", trigger: "blur" }
],
parentId: [{ required: true, message: "请选择上级分类", trigger: "change" }],
categoryName: [{ required: true, message: "请输入分类名称", trigger: "blur" }]
categoryId: [{ required: true, message: '流程分类ID不能为空', trigger: 'blur' }],
parentId: [{ required: true, message: '请选择上级分类', trigger: 'change' }],
categoryName: [{ required: true, message: '请输入分类名称', trigger: 'blur' }]
}
});
@ -144,19 +141,19 @@ const { queryParams, form, rules } = toRefs(data);
const getList = async () => {
loading.value = true;
const res = await listCategory(queryParams.value);
const data = proxy?.handleTree<CategoryVO>(res.data, "categoryId", "parentId");
const data = proxy?.handleTree<CategoryVO>(res.data, 'categoryId', 'parentId');
if (data) {
categoryList.value = data;
loading.value = false;
}
}
};
/** 查询流程分类下拉树结构 */
const getTreeselect = async () => {
const res = await listCategory();
categoryOptions.value = [];
//
const data = proxy?.handleTree<CategoryOption>(res.data, "categoryId", "parentId");
const data = proxy?.handleTree<CategoryOption>(res.data, 'categoryId', 'parentId');
if (data) {
categoryOptions.value = data; //
}
@ -166,24 +163,24 @@ const getTreeselect = async () => {
const cancel = () => {
reset();
dialog.visible = false;
}
};
//
const reset = () => {
form.value = {...initFormData}
form.value = { ...initFormData };
categoryFormRef.value?.resetFields();
}
};
/** 搜索按钮操作 */
const handleQuery = () => {
getList();
}
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
};
/** 新增按钮操作 */
const handleAdd = (row?: CategoryVO) => {
@ -195,22 +192,22 @@ const handleAdd = (row?: CategoryVO) => {
form.value.parentId = undefined;
}
dialog.visible = true;
dialog.title = "添加流程分类";
}
dialog.title = '添加流程分类';
};
/** 展开/折叠操作 */
const handleToggleExpandAll = () => {
isExpandAll.value = !isExpandAll.value;
toggleExpandAll(categoryList.value, isExpandAll.value)
}
toggleExpandAll(categoryList.value, isExpandAll.value);
};
/** 展开/折叠操作 */
const toggleExpandAll = (data: CategoryVO[], status: boolean) => {
data.forEach((item) => {
categoryTableRef.value?.toggleRowExpansion(item, status)
if (item.children && item.children.length > 0) toggleExpandAll(item.children, status)
})
}
categoryTableRef.value?.toggleRowExpansion(item, status);
if (item.children && item.children.length > 0) toggleExpandAll(item.children, status);
});
};
/** 修改按钮操作 */
const handleUpdate = async (row: CategoryVO) => {
@ -222,8 +219,8 @@ const handleUpdate = async (row: CategoryVO) => {
const res = await getCategory(row.categoryId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改流程分类";
}
dialog.title = '修改流程分类';
};
/** 提交按钮 */
const submitForm = () => {
@ -231,25 +228,25 @@ const submitForm = () => {
if (valid) {
buttonLoading.value = true;
if (form.value.categoryId) {
await updateCategory(form.value).finally(() => buttonLoading.value = false);
await updateCategory(form.value).finally(() => (buttonLoading.value = false));
} else {
await addCategory(form.value).finally(() => buttonLoading.value = false);
await addCategory(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess("操作成功");
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
getList();
}
});
}
};
/** 删除按钮操作 */
const handleDelete = async (row: CategoryVO) => {
await proxy?.$modal.confirm('是否确认删除"' + row.categoryName + '"的分类?');
loading.value = true;
await delCategory(row.categoryId).finally(() => loading.value = false);
await delCategory(row.categoryId).finally(() => (loading.value = false));
await getList();
proxy?.$modal.msgSuccess("删除成功");
}
proxy?.$modal.msgSuccess('删除成功');
};
onMounted(() => {
getList();

View File

@ -0,0 +1,331 @@
<template>
<div class="p-2">
<el-card shadow="never">
<div style="display: flex; justify-content: space-between">
<div>
<el-button v-if="submitButtonShow" :loading="buttonLoading" type="info" @click="submitForm('draft')">暂存</el-button>
<el-button v-if="submitButtonShow" :loading="buttonLoading" type="primary" @click="submitForm('submit')"> </el-button>
<el-button v-if="approvalButtonShow" :loading="buttonLoading" type="primary" @click="approvalVerifyOpen">审批</el-button>
<el-button v-if="form && form.id && form.status !== 'draft'" type="primary" @click="handleApprovalRecord">流程进度</el-button>
</div>
<div>
<el-button style="float: right" @click="goBack()">返回</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" style="height: 78vh; overflow-y: auto">
<el-form ref="businessTripFormRef" v-loading="loading" :disabled="routeParams.type === 'view'" :model="form" :rules="rules" label-width="80px">
<el-form-item label="业务类别" prop="tripType">
<el-select v-model="form.tripType" placeholder="请选择业务类别" style="width: 100%">
<el-option v-for="item in business_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="预算事项" prop="budgetType">
<el-select v-model="form.budgetType" placeholder="请选择预算事项" style="width: 100%">
<el-option v-for="item in opr_oa_trip_budget_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="出差时间">
<el-date-picker
v-model="businessTripTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
range-separator="To"
start-placeholder="开始时间"
end-placeholder="结束时间"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
@change="changeBusinessTripTime()"
/>
</el-form-item>
<el-form-item label="出差天数" prop="tripDays">
<el-input v-model="form.tripDays" disabled type="number" placeholder="请输入出差天数" />
</el-form-item>
<el-form-item label="差旅金额" prop="tripMoney">
<el-input v-model="form.tripMoney" type="number" placeholder="请输入差旅金额" style="width: 200px;"/>
</el-form-item>
<el-form-item label="在办项目" prop="currentProjects">
<el-input v-model="form.currentProjects" type="textarea" :rows="3" placeholder="请输入在办项目" />
</el-form-item>
<el-form-item label="出差原因" prop="resaon">
<el-input v-model="form.reason" type="textarea" :rows="3" placeholder="请输入出差原因" />
</el-form-item>
<el-form-item label="附件" prop="attachment">
<imageUpload v-model="form.attachment" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
</el-form-item>
</el-form>
</el-card>
<!-- 提交组件 -->
<submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" />
<!-- 审批记录 -->
<approvalRecord ref="approvalRecordRef" />
<el-dialog v-model="dialogVisible.visible" :title="dialogVisible.title" :before-close="handleClose" width="500">
<el-select v-model="flowCode" placeholder="Select" style="width: 240px">
<el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitFlow()"> 确认 </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Trip" lang="ts">
import { addBusinessTrip, getBusinessTrip, updateBusinessTrip } from '@/api/workflow/businessTrip';
import { BusinessTripForm, BusinessTripQuery, BusinessTripVO } from '@/api/workflow/businessTrip/types';
import { startWorkFlow } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { AxiosResponse } from 'axios';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const buttonLoading = ref(false);
const loading = ref(true);
const businessTripTime = ref<Array<string>>([]);
//
const routeParams = ref<Record<string, any>>({});
const { business_type,opr_oa_trip_budget_type } = toRefs<any>(proxy?.useDict('business_type','opr_oa_trip_budget_type'));
// const options = [
// {
// value: '1',
// label: ''
// },
// {
// value: '2',
// label: ''
// },
// {
// value: '3',
// label: ''
// },
// {
// value: '4',
// label: ''
// }
// ];
const flowCodeOptions = [
{
value: 'trip1',
label: '出差申请-普通'
}
// ,
// {
// value: 'leave2',
// label: '-'
// },
// {
// value: 'leave3',
// label: '-'
// },
// {
// value: 'leave4',
// label: '-'
// },
// {
// value: 'leave5',
// label: '-'
// },
// {
// value: 'leave6',
// label: '-'
// }
];
const flowCode = ref<string>('');
const dialogVisible = reactive<DialogOption>({
visible: false,
title: '流程定义'
});
//
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
//
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const businessTripFormRef = ref<ElFormInstance>();
const submitFormData = ref<StartProcessBo>({
businessId: '',
flowCode: '',
variables: {}
});
const taskVariables = ref<Record<string, any>>({});
const initFormData: BusinessTripForm = {
id: undefined,
tripType: undefined,
startDate: undefined,
endDate: undefined,
tripDays: undefined,
remark: undefined,
status: undefined
};
const data = reactive<PageData<BusinessTripForm, BusinessTripQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
startBusinessTripDays: undefined,
endBusinessTripDays: undefined
},
rules: {
id: [{ required: true, message: '主键不能为空', trigger: 'blur' }],
tripType: [{ required: true, message: '业务类别不能为空', trigger: 'blur' }],
tripTime: [{ required: true, message: '出差时间不能为空', trigger: 'blur' }],
tripDays: [{ required: true, message: '出差天数不能为空', trigger: 'blur' }]
}
});
const handleClose = () => {
dialogVisible.visible = false;
flowCode.value = '';
buttonLoading.value = false;
};
const { form, rules } = toRefs(data);
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
businessTripTime.value = [];
businessTripFormRef.value?.resetFields();
};
const changeBusinessTripTime = () => {
const startDate = new Date(businessTripTime.value[0]).getTime();
const endDate = new Date(businessTripTime.value[1]).getTime();
const diffInMilliseconds = endDate - startDate;
form.value.tripDays = Math.floor(diffInMilliseconds / (1000 * 60 * 60 * 24)) + 1;
};
/** 获取详情 */
const getInfo = () => {
loading.value = true;
buttonLoading.value = false;
nextTick(async () => {
const res = await getBusinessTrip(routeParams.value.id);
Object.assign(form.value, res.data);
businessTripTime.value = [];
businessTripTime.value.push(form.value.startDate);
businessTripTime.value.push(form.value.endDate);
loading.value = false;
buttonLoading.value = false;
});
};
/** 提交按钮 */
const submitForm = (status: string) => {
if (businessTripTime.value.length === 0) {
proxy?.$modal.msgError('出差时间不能为空');
return;
}
try {
businessTripFormRef.value?.validate(async (valid: boolean) => {
form.value.startDate = businessTripTime.value[0];
form.value.endDate = businessTripTime.value[1];
if (valid) {
buttonLoading.value = true;
let res: AxiosResponse<BusinessTripVO>;
if (form.value.id) {
res = await updateBusinessTrip(form.value);
} else {
res = await addBusinessTrip(form.value);
}
form.value = res.data;
if (status === 'draft') {
buttonLoading.value = false;
proxy?.$modal.msgSuccess('暂存成功');
proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
} else {
if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') {
flowCode.value = flowCodeOptions[0].value;
dialogVisible.visible = true;
return;
}
//穿
if (flowCode.value === '' || flowCode.value === null) {
flowCode.value = 'xx';
}
await handleStartWorkFlow(res.data);
}
}
});
} finally {
buttonLoading.value = false;
}
};
const submitFlow = async () => {
handleStartWorkFlow(form.value);
dialogVisible.visible = false;
};
//
const handleStartWorkFlow = async (data: BusinessTripForm) => {
try {
submitFormData.value.flowCode = flowCode.value;
submitFormData.value.businessId = data.id;
//
taskVariables.value = {
businessTripDays: data.tripDays,
userList: ['1', '3', '4']
};
submitFormData.value.variables = taskVariables.value;
const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(resp.data.taskId);
}
} finally {
buttonLoading.value = false;
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value.init(form.value.id);
};
//
const submitCallback = async () => {
await proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
};
//
const goBack = () => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
};
//
const approvalVerifyOpen = async () => {
submitVerifyRef.value.openDialog(routeParams.value.taskId);
};
//
const submitButtonShow = computed(() => {
return (
routeParams.value.type === 'add' ||
(routeParams.value.type === 'update' &&
form.value.status &&
(form.value.status === 'draft' || form.value.status === 'cancel' || form.value.status === 'back'))
);
});
//
const approvalButtonShow = computed(() => {
return routeParams.value.type === 'approval' && form.value.status && form.value.status === 'waiting';
});
onMounted(() => {
nextTick(async () => {
routeParams.value = proxy.$route.query;
reset();
loading.value = false;
if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') {
getInfo();
}
});
});
</script>

View File

@ -0,0 +1,238 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="search">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<!-- <el-form-item label="出差天数" prop="startBusinessTripDays">
<el-input v-model="queryParams.startBusinessTripDays" placeholder="请输入出差天数" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<!-- <el-form-item prop="endBusinessTripDays"> </el-form-item> -->
<!-- <el-form-item prop="endBusinessTripDays">
<el-input v-model="queryParams.endBusinessTripDays" placeholder="请输入出差天数" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button v-hasPermi="['workflow:business:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['workflow:business:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col>
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="tripList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="主键" align="center" prop="id" />
<el-table-column label="业务类别" align="center">
<template #default="scope">
<dict-tag :options="business_type" :value="scope.row.tripType" />
</template>
</el-table-column>
<el-table-column label="开始时间" align="center" prop="startDate">
<template #default="scope">
<span>{{ proxy.parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="endDate">
<template #default="scope">
<span>{{ proxy.parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="出差天数" align="center" prop="tripDays" />
<el-table-column label="出差原因" align="center" prop="reason" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column align="center" label="流程状态" min-width="70">
<template #default="scope">
<dict-tag :options="wf_business_status" :value="scope.row.status"></dict-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="162">
<template #default="scope">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5" v-if="scope.row.status === 'draft' || scope.row.status === 'cancel' || scope.row.status === 'back'">
<el-button v-hasPermi="['workflow:business:edit']" size="small" type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>修改</el-button
>
</el-col>
<el-col :span="1.5" v-if="scope.row.status === 'draft' || scope.row.status === 'cancel' || scope.row.status === 'back'">
<el-button v-hasPermi="['workflow:business:remove']" size="small" type="primary" icon="Delete" @click="handleDelete(scope.row)"
>删除</el-button
>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" size="small" icon="View" @click="handleView(scope.row)">查看</el-button>
</el-col>
<el-col :span="1.5" v-if="scope.row.status === 'waiting'">
<el-button size="small" type="primary" icon="Notification" @click="handleCancelProcessApply(scope.row.id)">撤销</el-button>
</el-col>
</el-row>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
</el-card>
</div>
</template>
<script setup name="express" lang="ts">
import { delBusinessTrip, listBusinessTrip } from '@/api/workflow/businessTrip';
import { cancelProcessApply } from '@/api/workflow/instance';
import { BusinessTripForm, BusinessTripQuery, BusinessTripVO } from '@/api/workflow/businessTrip/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'));
const tripList = ref<BusinessTripVO[]>([]);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const { business_type } = toRefs<any>(proxy?.useDict('business_type'));
// const options = [
// {
// value: '1',
// label: ''
// },
// {
// value: '2',
// label: ''
// },
// {
// value: '3',
// label: ''
// },
// {
// value: '4',
// label: ''
// }
// ];
const queryFormRef = ref<ElFormInstance>();
const data = reactive<PageData<BusinessTripForm, BusinessTripQuery>>({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
startBusinessTripDays: undefined,
endBusinessTripDays: undefined
},
rules: {}
});
const { queryParams } = toRefs(data);
/** 查询出差列表 */
const getList = async () => {
loading.value = true;
const res = await listBusinessTrip(queryParams.value);
tripList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: BusinessTripVO[]) => {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.push({
path: `/workflow/tripEdit/index`,
query: {
type: 'add'
}
});
};
/** 修改按钮操作 */
const handleUpdate = (row?: BusinessTripVO) => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.push({
path: `/workflow/tripEdit/index`,
query: {
id: row.id,
type: 'update'
}
});
};
/** 查看按钮操作 */
const handleView = (row?: BusinessTripVO) => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.push({
path: `/workflow/tripEdit/index`,
query: {
id: row.id,
type: 'view'
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: BusinessTripVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除出差编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delBusinessTrip(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'workflow/businessTrip/export',
{
...queryParams.value
},
`businessTrip_${new Date().getTime()}.xlsx`
);
};
/** 撤销按钮操作 */
const handleCancelProcessApply = async (id: string) => {
await proxy?.$modal.confirm('是否确认撤销当前单据?');
loading.value = true;
let data = {
businessId: id,
message: '申请人撤销流程!'
};
await cancelProcessApply(data).finally(() => (loading.value = false));
await getList();
proxy?.$modal.msgSuccess('撤销成功');
};
onMounted(() => {
getList();
});
</script>

View File

@ -34,10 +34,10 @@
<el-table v-loading="loading" border :data="leaveList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column v-if="false" label="主键" align="center" prop="id" />
<el-table-column label="请假类型" align="center" prop="leaveType">
<el-table-column label="请假类型" align="center">
<template #default="scope">
<dict-tag :options="opr_oa_leave_type" :value="scope.row.leaveType" />
</template>
<dict-tag :options="opr_oa_leave_type" :value="scope.row.leaveType"></dict-tag>
</template>
</el-table-column>
<el-table-column label="开始时间" align="center" prop="startDate">
<template #default="scope">
@ -50,10 +50,7 @@
</template>
</el-table-column>
<el-table-column label="请假天数" align="center" prop="leaveDays" />
<el-table-column label="请假原因" align="center" prop="reason" />
<el-table-column label="在办项目" align="center" prop="currentProjects" />
<!-- <el-table-column label="附件" align="center" prop="attachment" /> -->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="请假原因" align="center" prop="remark" />
<el-table-column align="center" label="流程状态" min-width="70">
<template #default="scope">
<dict-tag :options="wf_business_status" :value="scope.row.status"></dict-tag>
@ -96,7 +93,7 @@ import { cancelProcessApply } from '@/api/workflow/instance';
import { LeaveForm, LeaveQuery, LeaveVO } from '@/api/workflow/leave/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { wf_business_status } = toRefs<any>(proxy?.useDict('wf_business_status'));
const { wf_business_status,opr_oa_leave_type } = toRefs<any>(proxy?.useDict('wf_business_status','opr_oa_leave_type'));
const leaveList = ref<LeaveVO[]>([]);
const loading = ref(true);
const showSearch = ref(true);
@ -104,27 +101,27 @@ const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
// const options = [
// {
// value: '1',
// label: ''
// },
// {
// value: '2',
// label: ''
// },
// {
// value: '3',
// label: ''
// },
// {
// value: '4',
// label: ''
// }
// ];
const options = [
{
value: '1',
label: '事假'
},
{
value: '2',
label: '调休'
},
{
value: '3',
label: '病假'
},
{
value: '4',
label: '婚假'
}
];
const queryFormRef = ref<ElFormInstance>();
const { opr_oa_leave_type } = toRefs<any>(proxy?.useDict('opr_oa_leave_type'));
const data = reactive<PageData<LeaveForm, LeaveQuery>>({
form: {},
queryParams: {
@ -225,7 +222,7 @@ const handleExport = () => {
const handleCancelProcessApply = async (id: string) => {
await proxy?.$modal.confirm('是否确认撤销当前单据?');
loading.value = true;
let data = {
const data = {
businessId: id,
message: '申请人撤销流程!'
};

View File

@ -1,17 +1,15 @@
<template>
<div class="p-2">
<el-card shadow="never">
<div style="display: flex; justify-content: space-between">
<div>
<el-button v-if="submitButtonShow" :loading="buttonLoading" type="info" @click="submitForm('draft')">暂存</el-button>
<el-button v-if="submitButtonShow" :loading="buttonLoading" type="primary" @click="submitForm('submit')"> </el-button>
<el-button v-if="approvalButtonShow" :loading="buttonLoading" type="primary" @click="approvalVerifyOpen">审批</el-button>
<el-button v-if="form && form.id && form.status !== 'draft'" type="primary" @click="handleApprovalRecord">流程进度</el-button>
</div>
<div>
<el-button style="float: right" @click="goBack()">返回</el-button>
</div>
</div>
<approvalButton
@submitForm="submitForm"
@approvalVerifyOpen="approvalVerifyOpen"
@handleApprovalRecord="handleApprovalRecord"
:buttonLoading="buttonLoading"
:id="form.id"
:status="form.status"
:pageType="routeParams.type"
/>
</el-card>
<el-card shadow="never" style="height: 78vh; overflow-y: auto">
<el-form ref="leaveFormRef" v-loading="loading" :disabled="routeParams.type === 'view'" :model="form" :rules="rules" label-width="80px">
@ -73,6 +71,7 @@ import { LeaveForm, LeaveQuery, LeaveVO } from '@/api/workflow/leave/types';
import { startWorkFlow } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import ApprovalButton from '@/components/Process/approvalButton.vue';
import { AxiosResponse } from 'axios';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -82,7 +81,7 @@ const loading = ref(true);
const leaveTime = ref<Array<string>>([]);
//
const routeParams = ref<Record<string, any>>({});
const { opr_oa_leave_type } = toRefs<any>(proxy?.useDict('opr_oa_leave_type'));
const { opr_oa_leave_type } = toRefs<any>(proxy?.useDict('opr_oa_leave_type'));
// const options = [
// {
// value: '1',
@ -139,6 +138,8 @@ const dialogVisible = reactive<DialogOption>({
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
//
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
//
const approvalButtonRef = ref<InstanceType<typeof ApprovalButton>>();
const leaveFormRef = ref<ElFormInstance>();
@ -223,9 +224,9 @@ const submitForm = (status: string) => {
buttonLoading.value = true;
let res: AxiosResponse<LeaveVO>;
if (form.value.id) {
res = await updateLeave(form.value);
res = await updateLeave(form.value).finally(() => (buttonLoading.value = false));
} else {
res = await addLeave(form.value);
res = await addLeave(form.value).finally(() => (buttonLoading.value = false));
}
form.value = res.data;
if (status === 'draft') {
@ -263,7 +264,9 @@ const handleStartWorkFlow = async (data: LeaveForm) => {
submitFormData.value.businessId = data.id;
//
taskVariables.value = {
// leave2/6 使
leaveDays: data.leaveDays,
// leave4/5 使
userList: ['1', '3', '4']
};
submitFormData.value.variables = taskVariables.value;
@ -285,30 +288,10 @@ const submitCallback = async () => {
await proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
};
//
const goBack = () => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
};
//
const approvalVerifyOpen = async () => {
submitVerifyRef.value.openDialog(routeParams.value.taskId);
};
//
const submitButtonShow = computed(() => {
return (
routeParams.value.type === 'add' ||
(routeParams.value.type === 'update' &&
form.value.status &&
(form.value.status === 'draft' || form.value.status === 'cancel' || form.value.status === 'back'))
);
});
//
const approvalButtonShow = computed(() => {
return routeParams.value.type === 'approval' && form.value.status && form.value.status === 'waiting';
});
onMounted(() => {
nextTick(async () => {

View File

@ -4,7 +4,7 @@
</div>
</template>
<script setup name="WarmFlow">
<script setup name="WarmFlow" lang="ts">
const { proxy } = getCurrentInstance();
import { onMounted } from 'vue';
import { getToken } from '@/utils/auth';
@ -24,12 +24,12 @@ const iframeLoaded = () => {
};
};
const open = async (definitionId, disabled) => {
let url = baseUrl + `/warm-flow-ui/index.html?id=${definitionId}&disabled=${disabled}`;
const url = baseUrl + `/warm-flow-ui/index.html?id=${definitionId}&disabled=${disabled}`;
iframeUrl.value = url + '&Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID;
};
/** 关闭按钮 */
function close() {
const obj = { path: '/workflow/processDefinition', query: {activeName: proxy.$route.query.activeName}};
const obj = { path: '/workflow/processDefinition', query: { activeName: proxy.$route.query.activeName } };
proxy.$tab.closeOpenPage(obj);
}

View File

@ -197,7 +197,7 @@ import { categoryTree } from '@/api/workflow/category';
import { CategoryTreeVO } from '@/api/workflow/category/types';
import { FlowDefinitionQuery, FlowDefinitionVo, FlowDefinitionForm } from '@/api/workflow/definition/types';
import { UploadRequestOptions, TabsPaneContext } from 'element-plus';
import { ElMessageBoxOptions } from "element-plus/es/components/message-box/src/message-box.type";
import { ElMessageBoxOptions } from 'element-plus/es/components/message-box/src/message-box.type';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -326,7 +326,7 @@ const handleSelectionChange = (selection: any) => {
};
//
const getPageList = async () => {
let query = proxy.$route.query;
const query = proxy.$route.query;
if (query.activeName) {
activeName.value = query.activeName;
}
@ -411,7 +411,7 @@ const handlerBeforeUpload = () => {
};
//
const handlerImportDefinition = (data: UploadRequestOptions): XMLHttpRequest => {
let formData = new FormData();
const formData = new FormData();
uploadDialogLoading.value = true;
formData.append('file', data.file);
formData.append('category', selectCategory.value);
@ -466,6 +466,9 @@ const reset = () => {
*/
const handleAdd = async () => {
reset();
if (queryParams.value.category != '') {
form.value.category = queryParams.value.category;
}
modelDialog.visible = true;
modelDialog.title = '新增流程';
};

View File

@ -352,7 +352,7 @@ const handleInvalid = async (row: FlowInstanceVO) => {
await proxy?.$modal.confirm('是否确认作废?');
loading.value = true;
if ('running' === tab.value) {
let param = {
const param = {
id: row.id,
comment: deleteReason.value
};
@ -381,7 +381,7 @@ const handleInstanceVariable = async (row: FlowInstanceVO) => {
variableLoading.value = true;
variableVisible.value = true;
processDefinitionName.value = row.flowName;
let data = await instanceVariable(row.id);
const data = await instanceVariable(row.id);
variables.value = data.data.variable;
variableLoading.value = false;
};

View File

@ -227,7 +227,8 @@ const handleView = (row) => {
taskId: row.id,
type: 'view',
formCustom: row.formCustom,
formPath: row.formPath
formPath: row.formPath,
instanceId: row.instanceId
});
workflowCommon.routerJump(routerJumpVo, proxy);
};

View File

@ -222,7 +222,7 @@ const handleCancelProcessApply = async (businessId: string) => {
await proxy?.$modal.confirm('是否确认撤销当前单据?');
loading.value = true;
if ('running' === tab.value) {
let data = {
const data = {
businessId: businessId,
message: '申请人撤销流程!'
};