mirror of
https://gitee.com/yudaocode/yudao-ui-admin-vben.git
synced 2025-12-30 10:32:25 +00:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e06e380957 | ||
|
|
3e7a104aa8 | ||
|
|
c3b115673d | ||
|
|
c97a2a9135 | ||
|
|
62f27cfb3a | ||
|
|
8a7b1b1a85 | ||
|
|
bd0a80b64a | ||
|
|
2e97171437 | ||
|
|
06fcac16fa | ||
|
|
43b933341b | ||
|
|
89c0a036b4 | ||
|
|
fb33d662f6 | ||
|
|
60183b6110 | ||
|
|
b716516b85 | ||
|
|
ee0d67182c | ||
|
|
ac237eebd0 | ||
|
|
4044a080fc | ||
|
|
26df81a16f | ||
|
|
f496637790 | ||
|
|
762faab90c |
@@ -7,7 +7,7 @@ VITE_PUBLIC_PATH = /
|
||||
# 本地开发代理,可以解决跨域及多地址代理
|
||||
# 如果接口地址匹配到,则会转发到http://localhost:3000,防止本地出现跨域问题
|
||||
# 可以有多个,注意多个不能换行,否则代理将会失效
|
||||
VITE_PROXY = [["/dev-api","http://localhost:48080/admin-api"],["/upload","http://localhost:48080/admin-api/infra/file/upload"]]
|
||||
VITE_PROXY = [["/dev-api","http://localhost:48080/admin-api"]]
|
||||
# VITE_PROXY=[["/api","http://vben.xingyuv.com/test"]]
|
||||
|
||||
# 是否删除Console.log
|
||||
@@ -18,9 +18,6 @@ VITE_GLOB_BASE_URL = "http://localhost:48080"
|
||||
# 接口地址,如果没有跨域问题,直接在这里配置即可
|
||||
VITE_GLOB_API_URL = /dev-api
|
||||
|
||||
# 文件上传接口 可选
|
||||
VITE_GLOB_UPLOAD_URL = /upload
|
||||
|
||||
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
|
||||
VITE_GLOB_API_URL_PREFIX =
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ VITE_PUBLIC_PATH = /
|
||||
# 本地开发代理,可以解决跨域及多地址代理
|
||||
# 如果接口地址匹配到,则会转发到http://localhost:3000,防止本地出现跨域问题
|
||||
# 可以有多个,注意多个不能换行,否则代理将会失效
|
||||
VITE_PROXY = [["/dev-api","http://api-dashboard.yudao.iocoder.cn/admin-api"],["/upload","http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload"]]
|
||||
VITE_PROXY = [["/dev-api","http://api-dashboard.yudao.iocoder.cn/admin-api"]]
|
||||
# VITE_PROXY=[["/api","http://vben.xingyuv.com/test"]]
|
||||
|
||||
# 是否删除Console.log
|
||||
@@ -18,9 +18,6 @@ VITE_GLOB_BASE_URL = "http://api-dashboard.yudao.iocoder.cn"
|
||||
# 接口地址,如果没有跨域问题,直接在这里配置即可
|
||||
VITE_GLOB_API_URL = /dev-api
|
||||
|
||||
# 文件上传接口 可选
|
||||
VITE_GLOB_UPLOAD_URL = /upload
|
||||
|
||||
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
|
||||
VITE_GLOB_API_URL_PREFIX =
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@ VITE_GLOB_BASE_URL = "http://localhost:48080"
|
||||
# 接口地址 可以由nginx做转发或者直接写实际地址
|
||||
VITE_GLOB_API_URL = http://localhost:48080/admin-api
|
||||
|
||||
# 文件上传地址 可以由nginx做转发或者直接写实际地址
|
||||
VITE_GLOB_UPLOAD_URL = /upload
|
||||
|
||||
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
|
||||
VITE_GLOB_API_URL_PREFIX =
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@ VITE_GLOB_BASE_URL = "http://127.0.0.1:48080"
|
||||
# 接口地址,如果没有跨域问题,直接在这里配置即可
|
||||
VITE_GLOB_API_URL = http://127.0.0.1:48080/admin-api
|
||||
|
||||
# 文件上传地址 可以由nginx做转发或者直接写实际地址
|
||||
VITE_GLOB_UPLOAD_URL = /upload
|
||||
|
||||
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
|
||||
VITE_GLOB_API_URL_PREFIX =
|
||||
|
||||
|
||||
@@ -17,9 +17,6 @@ VITE_GLOB_BASE_URL = "http://localhost:48080"
|
||||
# 接口地址,如果没有跨域问题,直接在这里配置即可
|
||||
VITE_GLOB_API_URL = http://localhost:48080/admin-api
|
||||
|
||||
# 文件上传地址 可以由nginx做转发或者直接写实际地址
|
||||
VITE_GLOB_UPLOAD_URL = /upload
|
||||
|
||||
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
|
||||
VITE_GLOB_API_URL_PREFIX =
|
||||
|
||||
|
||||
BIN
.image/工作流设计器-bpmn.jpg
Normal file
BIN
.image/工作流设计器-bpmn.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
BIN
.image/工作流设计器-simple.jpg
Normal file
BIN
.image/工作流设计器-simple.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
31
README.md
31
README.md
@@ -1,4 +1,4 @@
|
||||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
||||
**新版本更新中,master仓库不再维护,请关注v5-dev分支进度**
|
||||
|
||||
**「我喜欢写代码,乐此不疲」**
|
||||
**「我喜欢做开源,以此为乐」**
|
||||
@@ -15,9 +15,8 @@
|
||||
- 视频教程:<https://doc.iocoder.cn/video/>
|
||||
- 交流群:<https://doc.iocoder.cn/qun/>
|
||||
|
||||
## 外包项目请联系
|
||||
## 外包项目请联系【非项目需求请勿扫码,非客服,不解答项目问题】
|
||||
|
||||
微信号:xinyu370
|
||||
|
||||

|
||||
|
||||
@@ -51,11 +50,11 @@
|
||||
|
||||
支持 Spring Boot、Spring Cloud 两种架构:
|
||||
|
||||
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
|
||||
① Spring Boot 单体架构:<https://doc.iocoder.cn>
|
||||
|
||||

|
||||
|
||||
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
|
||||
② Spring Cloud 微服务架构:<https://cloud.iocoder.cn>
|
||||
|
||||

|
||||
|
||||
@@ -97,18 +96,22 @@
|
||||
|
||||
### 工作流程
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|-------|----------------------------------------|
|
||||
| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 |
|
||||
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
|
||||
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 |
|
||||
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 |
|
||||
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 |
|
||||
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 |
|
||||
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
|
||||
| | 功能 | 描述 |
|
||||
|----|-------|-----------------------------------------|
|
||||
| 🚀 | 流程模型 | 配置工作流的流程模型,支持 BPMN 和仿钉钉/飞书设计器 |
|
||||
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
|
||||
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 |
|
||||
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 |
|
||||
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转派、委派、退回、加减签等操作 |
|
||||
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,支持流程预测,展示未来审批人信息 |
|
||||
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
|
||||
|
||||

|
||||
|
||||
| BPMN 设计器 | 钉钉/飞书设计器 |
|
||||
|------------------------------|--------------------------------|
|
||||
|  |  |
|
||||
|
||||
### 支付系统
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "yudao-ui-admin-vben",
|
||||
"version": "2.1.0-snapshot",
|
||||
"version": "2.4.0-snapshot",
|
||||
"author": {
|
||||
"name": "xingyuv",
|
||||
"email": "xingyu4j@vip.qq.com",
|
||||
|
||||
@@ -206,7 +206,7 @@ function end() {
|
||||
endMovetime.value = +new Date()
|
||||
// 判断是否重合
|
||||
if (status.value && isEnd.value === false) {
|
||||
let moveLeftDistance = Number.parseInt((moveBlockLeft.value || '').replace('px', ''))
|
||||
let moveLeftDistance = Number.parseInt((moveBlockLeft.value || 0))
|
||||
moveLeftDistance = (moveLeftDistance * 310) / Number.parseInt(setSize.imgWidth)
|
||||
const data = {
|
||||
captchaType: captchaType.value,
|
||||
|
||||
@@ -9,7 +9,6 @@ export function useGlobSetting(): Readonly<GlobConfig> {
|
||||
VITE_GLOB_API_URL,
|
||||
VITE_GLOB_APP_SHORT_NAME,
|
||||
VITE_GLOB_API_URL_PREFIX,
|
||||
VITE_GLOB_UPLOAD_URL,
|
||||
VITE_GLOB_APP_TENANT_ENABLE,
|
||||
VITE_GLOB_APP_CAPTCHA_ENABLE,
|
||||
} = getAppEnvConfig()
|
||||
@@ -26,7 +25,7 @@ export function useGlobSetting(): Readonly<GlobConfig> {
|
||||
apiUrl: VITE_GLOB_API_URL,
|
||||
shortName: VITE_GLOB_APP_SHORT_NAME,
|
||||
urlPrefix: VITE_GLOB_API_URL_PREFIX,
|
||||
uploadUrl: VITE_GLOB_UPLOAD_URL,
|
||||
uploadUrl: VITE_GLOB_API_URL + '/infra/file/upload',
|
||||
tenantEnable: VITE_GLOB_APP_TENANT_ENABLE,
|
||||
captchaEnable: VITE_GLOB_APP_CAPTCHA_ENABLE,
|
||||
}
|
||||
|
||||
2
src/types/config.d.ts
vendored
2
src/types/config.d.ts
vendored
@@ -176,8 +176,6 @@ export interface GlobEnvConfig {
|
||||
VITE_GLOB_API_URL_PREFIX?: string
|
||||
// Project abbreviation
|
||||
VITE_GLOB_APP_SHORT_NAME: string
|
||||
// Upload url
|
||||
VITE_GLOB_UPLOAD_URL?: string
|
||||
// 租户开关
|
||||
VITE_GLOB_APP_TENANT_ENABLE: string
|
||||
// 验证码开关
|
||||
|
||||
@@ -52,7 +52,9 @@ export function getDictOptions(dictType: string, valueType?: 'string' | 'number'
|
||||
? `${dict.value}`
|
||||
: valueType === 'boolean'
|
||||
? `${dict.value}` === 'true'
|
||||
: Number.parseInt(`${dict.value}`),
|
||||
: valueType === 'number' && !isNaN(parseFloat(`${dict.value}`))
|
||||
? Number.parseInt(`${dict.value}`)
|
||||
: dict.value,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import type { RequestOptions, Result, UploadFileParams } from '@/types/axios'
|
||||
import { ContentTypeEnum, RequestEnum } from '@/enums/httpEnum'
|
||||
import { downloadByData } from '@/utils/file/download'
|
||||
import { useGlobSetting } from '@/hooks/setting'
|
||||
import {getAccessToken, getRefreshToken, getTenantId, setAccessToken} from '@/utils/auth'
|
||||
import { getAccessToken, getRefreshToken, getTenantId, setAccessToken } from '@/utils/auth'
|
||||
|
||||
export * from './axiosTransform'
|
||||
|
||||
@@ -126,13 +126,12 @@ export class VAxios {
|
||||
const config = res.config
|
||||
// 二进制数据则直接返回,例如说 Excel 导出
|
||||
if (
|
||||
res.request.responseType === 'blob' ||
|
||||
res.request.responseType === 'arraybuffer'
|
||||
res.request.responseType === 'blob'
|
||||
|| res.request.responseType === 'arraybuffer'
|
||||
) {
|
||||
// 注意:如果导出的响应为 json,说明可能失败了,不直接返回进行下载
|
||||
if (res.data.type === 'application/json') {
|
||||
if (res.data.type === 'application/json')
|
||||
res.data = await new Response(res.data).json()
|
||||
}
|
||||
}
|
||||
// 处理 accessToken 过期的情况
|
||||
if (res.data.code === 401) {
|
||||
@@ -289,7 +288,6 @@ export class VAxios {
|
||||
this.axiosInstance
|
||||
.request<any, AxiosResponse<Result>>(conf)
|
||||
.then((res: AxiosResponse<Result>) => {
|
||||
debugger
|
||||
if (transformResponseHook && isFunction(transformResponseHook)) {
|
||||
try {
|
||||
const ret = transformResponseHook(res, opt)
|
||||
@@ -298,12 +296,19 @@ export class VAxios {
|
||||
catch (err) {
|
||||
reject(err || new Error('request error!'))
|
||||
}
|
||||
return
|
||||
// 注释 return,解决无法导出的问题。参见 https://t.zsxq.com/79cmo 说明。
|
||||
}
|
||||
resolve(res as unknown as Promise<T>)
|
||||
else {
|
||||
resolve(res as unknown as Promise<T>)
|
||||
}
|
||||
|
||||
// download file
|
||||
if (typeof res != 'undefined')
|
||||
downloadByData(res?.data as unknown as BlobPart, title || 'export')
|
||||
if (res && typeof res !== 'undefined' && res.headers) {
|
||||
const contentType = res.headers['content-type']
|
||||
// ExcelUtils.java的write函数setContentType顺序问题,导致没有contentType
|
||||
if (!contentType || !contentType.startsWith('application/json'))
|
||||
downloadByData(res?.data as unknown as BlobPart, title || 'export')
|
||||
}
|
||||
})
|
||||
.catch((e: Error | AxiosError) => {
|
||||
if (requestCatchHook && isFunction(requestCatchHook)) {
|
||||
@@ -344,7 +349,6 @@ export class VAxios {
|
||||
this.axiosInstance
|
||||
.request<any, AxiosResponse<Result>>(conf)
|
||||
.then((res: AxiosResponse<Result>) => {
|
||||
debugger
|
||||
if (transformResponseHook && isFunction(transformResponseHook)) {
|
||||
try {
|
||||
const ret = transformResponseHook(res, opt)
|
||||
|
||||
@@ -7,6 +7,7 @@ import CloumInfoForm from './components/CloumInfoForm.vue'
|
||||
import FinishForm from './components/FinishForm.vue'
|
||||
import { PageWrapper } from '@/components/Page'
|
||||
import { getCodegenTable, updateCodegenTable } from '@/api/infra/codegen'
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
|
||||
const Step = Steps.Step
|
||||
|
||||
@@ -47,9 +48,15 @@ async function handleStep2Next(step2Values: any) {
|
||||
async function handleSubmit() {
|
||||
basicInfoValue.value.id = query.id as unknown as number
|
||||
const genTable = {
|
||||
table: basicInfoValue.value,
|
||||
columns: columnsInfoValue.value,
|
||||
table: cloneDeep(basicInfoValue.value),
|
||||
columns: cloneDeep(columnsInfoValue.value),
|
||||
}
|
||||
genTable.columns.forEach((column: any) => {
|
||||
delete column.editValueRefs
|
||||
delete column.submitCbs
|
||||
delete column.cancelCbs
|
||||
delete column.validCbs
|
||||
})
|
||||
await updateCodegenTable(genTable)
|
||||
}
|
||||
|
||||
|
||||
@@ -29,11 +29,8 @@ export const columns: BasicColumn[] = [
|
||||
},
|
||||
{
|
||||
title: '部门',
|
||||
dataIndex: 'deptId',
|
||||
dataIndex: 'deptName',
|
||||
width: 120,
|
||||
customRender: ({ record }) => {
|
||||
return useRender.renderTag(record.dept && record.dept.name)
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '手机号码',
|
||||
|
||||
Reference in New Issue
Block a user