Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vben into dev
						commit
						fb9ce28276
					
				|  | @ -326,6 +326,7 @@ setupVbenVxeTable({ | |||
|       }, | ||||
|     }); | ||||
| 
 | ||||
|     // TODO @xingyu:这个要不叫 formatAmount2 这种?虽然不直观,但是容易看出来是金额;
 | ||||
|     vxeUI.formats.add('formatFraction', { | ||||
|       tableCellFormatMethod({ cellValue }) { | ||||
|         if (cellValue === null || cellValue === undefined) { | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmCategoryApi { | ||||
|   /** BPM 流程分类 VO */ | ||||
|   /** 流程分类 VO */ | ||||
|   // TODO @jason:不用 VO 后缀哈
 | ||||
|   export interface CategoryVO { | ||||
|     id: number; | ||||
|     name: string; | ||||
|  |  | |||
|  | @ -2,9 +2,9 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| 
 | ||||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| /** 流程定义 */ | ||||
| export namespace BpmProcessDefinitionApi { | ||||
|   // 流程定义
 | ||||
|   /** 流程定义 */ | ||||
|   // TODO @ziye:不用 VO 后缀哈
 | ||||
|   export interface ProcessDefinitionVO { | ||||
|     id: string; | ||||
|     version: number; | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmFormApi { | ||||
|   // 流程表单
 | ||||
|   /** 流程表单 */ | ||||
|   // TODO @jason:不用 VO 后缀哈
 | ||||
|   export interface FormVO { | ||||
|     id?: number | undefined; | ||||
|     name: string; | ||||
|  | @ -23,6 +24,7 @@ export async function getFormPage(params: PageParam) { | |||
| } | ||||
| 
 | ||||
| /** 获取表单详情 */ | ||||
| // TODO @ziye:应该不会 string 的情况呢。
 | ||||
| export async function getFormDetail(id: number | string) { | ||||
|   return requestClient.get<BpmFormApi.FormVO>(`/bpm/form/get?id=${id}`); | ||||
| } | ||||
|  |  | |||
|  | @ -12,6 +12,7 @@ export namespace BpmModelApi { | |||
|   } | ||||
| 
 | ||||
|   /** 流程定义 VO */ | ||||
|   // TODO @jason:不用 VO 后缀哈
 | ||||
|   export interface ProcessDefinitionVO { | ||||
|     id: string; | ||||
|     key?: string; | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmOALeaveApi { | ||||
|   // TODO @ziye:不用 VO 后缀
 | ||||
|   export interface LeaveVO { | ||||
|     id: number; | ||||
|     status: number; | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmProcessExpressionApi { | ||||
|   /** BPM 流程表达式 VO */ | ||||
|   // TODO @ziye:不用 VO 后缀
 | ||||
|   /** 流程表达式 VO */ | ||||
|   export interface ProcessExpressionVO { | ||||
|     id: number; // 编号
 | ||||
|     name: string; // 表达式名字
 | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ import type { BpmCandidateStrategyEnum, BpmNodeTypeEnum } from '#/utils'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmProcessInstanceApi { | ||||
|   // TODO @芋艿:一些注释缺少或者不对;
 | ||||
|   export type Task = { | ||||
|     id: number; | ||||
|     name: string; | ||||
|  | @ -42,7 +43,7 @@ export namespace BpmProcessInstanceApi { | |||
|     tasks: ApprovalTaskInfo[]; | ||||
|   }; | ||||
| 
 | ||||
|   // 流程实例
 | ||||
|   /** 流程实例 */ | ||||
|   export type ProcessInstanceVO = { | ||||
|     businessKey: string; | ||||
|     category: string; | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmProcessListenerApi { | ||||
|   // TODO @ziye:不用 VO 后缀
 | ||||
|   /** BPM 流程监听器 VO */ | ||||
|   export interface ProcessListenerVO { | ||||
|     id: number; // 编号
 | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import type { BpmProcessInstanceApi } from '../processInstance'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmTaskApi { | ||||
|   // TODO @ziye:不用 VO 后缀;注释使用 /** */ 风格;
 | ||||
|   /** BPM 流程监听器 VO */ | ||||
|   export interface TaskVO { | ||||
|     id: number; // 编号
 | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ import type { PageParam, PageResult } from '@vben/request'; | |||
| import { requestClient } from '#/api/request'; | ||||
| 
 | ||||
| export namespace BpmUserGroupApi { | ||||
|   // TODO @ziye:不用 VO 后缀
 | ||||
|   /** BPM 用户组 VO */ | ||||
|   export interface UserGroupVO { | ||||
|     id: number; | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| <script lang="ts" setup> | ||||
| // TODO @芋艿:是否有更好的组织形式?! | ||||
| // TODO @xingyu:你感觉,这个放到每个 system、infra 模块下,然后新建一个 components,表示每个模块,有一些共享的组件?然后,全局只放通用的(无业务含义的),可以哇? | ||||
| import type { Key } from 'ant-design-vue/es/table/interface'; | ||||
| 
 | ||||
| import type { SystemDeptApi } from '#/api/system/dept'; | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| <script setup lang="ts"> | ||||
| // TODO @芋艿:后续是不是把业务组件,挪到每个模块里;待定; | ||||
| import type { Ref } from 'vue'; | ||||
| 
 | ||||
| import type { SimpleFlowNode } from '../../consts'; | ||||
|  |  | |||
|  | @ -100,7 +100,6 @@ async function handleRemove(file: UploadFile) { | |||
| } | ||||
| 
 | ||||
| async function beforeUpload(file: File) { | ||||
|   // 使用现代的Blob.text()方法替代FileReader | ||||
|   const fileContent = await file.text(); | ||||
|   emit('returnText', fileContent); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| <script setup lang="ts"> | ||||
| // TODO @xingyu:这个组件,只有 pay 在用,和现有的 file-upload 和 image-upload 有点不一致。是不是可以考虑移除,只在 pay 那搞个复用的组件; | ||||
| import type { InputProps, TextAreaProps } from 'ant-design-vue'; | ||||
| 
 | ||||
| import type { FileUploadProps } from './typing'; | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
|  * 下载工具模块 | ||||
|  * 提供多种文件格式的下载功能 | ||||
|  */ | ||||
| // 请使用 @vben/utils/download 代替 packages/@core/base/shared/src/utils/download.ts
 | ||||
| // TODO @ziye:请使用 @vben/utils/download 代替 packages/@core/base/shared/src/utils/download.ts
 | ||||
| 
 | ||||
| /** | ||||
|  * 图片下载配置接口 | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| // TODO @xingyu:感觉 formatToFraction 可以整合起来;【优先级:低】
 | ||||
| /** | ||||
|  * 将一个整数转换为分数保留两位小数 | ||||
|  * @param num | ||||
|  |  | |||
|  | @ -106,6 +106,7 @@ async function initializeDesigner() { | |||
|   } | ||||
| } | ||||
| 
 | ||||
| // TODO @ziye:注释使用 /** */ 风格,高亮更明显哈,方法注释; | ||||
| // 保存表单 | ||||
| function handleSave() { | ||||
|   formModalApi | ||||
|  |  | |||
|  | @ -138,6 +138,7 @@ watch( | |||
|         url="https://doc.iocoder.cn/bpm/use-bpm-form/" | ||||
|       /> | ||||
|     </template> | ||||
| 
 | ||||
|     <DetailModal /> | ||||
|     <Grid table-title="流程表单"> | ||||
|       <template #toolbar-tools> | ||||
|  |  | |||
|  | @ -164,10 +164,10 @@ async function handleCategorySortSubmit() { | |||
|           @press-enter="getList" | ||||
|           class="!w-60" | ||||
|         /> | ||||
|         <Button type="primary" @click="createModel"> | ||||
|         <Button class="ml-2" type="primary" @click="createModel"> | ||||
|           <IconifyIcon icon="lucide:plus" /> 新建模型 | ||||
|         </Button> | ||||
|         <Dropdown placement="bottomRight" arrow> | ||||
|         <Dropdown class="ml-2" placement="bottomRight" arrow> | ||||
|           <Button> | ||||
|             <template #icon> | ||||
|               <IconifyIcon icon="lucide:settings" /> | ||||
|  | @ -207,7 +207,7 @@ async function handleCategorySortSubmit() { | |||
|       </div> | ||||
| 
 | ||||
|       <!-- 按照分类,展示其所属的模型列表 --> | ||||
|       <div class="px-5" ref="categoryGroupRef"> | ||||
|       <div class="px-3" ref="categoryGroupRef"> | ||||
|         <CategoryDraggableModel | ||||
|           v-for="element in categoryGroup" | ||||
|           :class="isCategorySorting ? 'cursor-move' : ''" | ||||
|  |  | |||
|  | @ -344,9 +344,9 @@ const handleRenameSuccess = () => { | |||
|                     v-if="!record.icon" | ||||
|                     class="mr-2.5 flex h-9 w-9 items-center justify-center rounded bg-blue-500 text-white" | ||||
|                   > | ||||
|                     <span style="font-size: 12px">{{ | ||||
|                       record.name.substring(0, 2) | ||||
|                     }}</span> | ||||
|                     <span style="font-size: 12px"> | ||||
|                       {{ record.name.substring(0, 2) }} | ||||
|                     </span> | ||||
|                   </div> | ||||
|                   <img | ||||
|                     v-else | ||||
|  |  | |||
|  | @ -93,6 +93,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | |||
|         url="https://doc.iocoder.cn/bpm/expression/" | ||||
|       /> | ||||
|     </template> | ||||
| 
 | ||||
|     <FormModal @success="onRefresh" /> | ||||
|     <Grid table-title="流程表达式"> | ||||
|       <template #toolbar-tools> | ||||
|  |  | |||
|  | @ -222,6 +222,7 @@ onMounted(() => { | |||
| 
 | ||||
| <template> | ||||
|   <Page auto-content-height> | ||||
|     <!-- TODO @ziye:【优先级:低】这里交互,可以做成类似 vue3 + element-plus 那个一样,滚动切换分类哈?对标钉钉、飞书哈; --> | ||||
|     <!-- 第一步,通过流程定义的列表,选择对应的流程 --> | ||||
|     <template v-if="!selectProcessDefinition"> | ||||
|       <Card | ||||
|  | @ -274,6 +275,7 @@ onMounted(() => { | |||
|                     }" | ||||
|                   > | ||||
|                     <div class="flex items-center"> | ||||
|                       <!-- TODO @ziye:icon、name 会告警~~ --> | ||||
|                       <img | ||||
|                         v-if="definition.icon" | ||||
|                         :src="definition.icon" | ||||
|  |  | |||
|  | @ -28,7 +28,8 @@ import { | |||
| } from '#/utils'; | ||||
| import ProcessInstanceSimpleViewer from '#/views/bpm/processInstance/detail/modules/simple-bpm-viewer.vue'; | ||||
| import ProcessInstanceTimeline from '#/views/bpm/processInstance/detail/modules/time-line.vue'; | ||||
| // 类型定义 | ||||
| 
 | ||||
| /** 类型定义 */ | ||||
| interface ProcessFormData { | ||||
|   rule: any[]; | ||||
|   option: Record<string, any>; | ||||
|  | @ -121,6 +122,7 @@ async function submitForm() { | |||
| 
 | ||||
|     message.success('发起流程成功'); | ||||
| 
 | ||||
|     // TODO @ziye:有告警哈; | ||||
|     closeCurrentTab(); | ||||
| 
 | ||||
|     await router.push({ path: '/bpm/task/my' }); | ||||
|  |  | |||
|  | @ -222,7 +222,7 @@ function setFieldPermission(field: string, permission: string) { | |||
| const activeTab = ref('form'); | ||||
| const taskListRef = ref(); | ||||
| 
 | ||||
| // 监听 Tab 切换,当切换到 "record" 标签时刷新任务列表 | ||||
| /** 监听 Tab 切换,当切换到 "record" 标签时刷新任务列表 */ | ||||
| watch( | ||||
|   () => activeTab.value, | ||||
|   (newVal) => { | ||||
|  | @ -238,7 +238,7 @@ watch( | |||
| /** 初始化 */ | ||||
| const userOptions = ref<SystemUserApi.User[]>([]); // 用户列表 | ||||
| onMounted(async () => { | ||||
|   getDetail(); | ||||
|   await getDetail(); | ||||
|   // 获得用户列表 | ||||
|   userOptions.value = await getSimpleUserList(); | ||||
| }); | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ defineOptions({ name: 'ProcessInstanceBpmnViewer' }); | |||
| </script> | ||||
| 
 | ||||
| <template> | ||||
|   <!-- TODO @ziye:可以后续,找下 antd 有没可以直接用的组件哈 --> | ||||
|   <div> | ||||
|     <h1>BPMN Viewer</h1> | ||||
|   </div> | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import { useVbenModal } from '@vben/common-ui'; | |||
| import { IconifyIcon } from '@vben/icons'; | ||||
| 
 | ||||
| import { Button, message, Space, Tooltip } from 'ant-design-vue'; | ||||
| // TODO @ziye:这个可能,适合放到全局?!因为 element-plus 也用这个; | ||||
| import Vue3Signature from 'vue3-signature'; | ||||
| 
 | ||||
| import { uploadFile } from '#/api/infra/file'; | ||||
|  | @ -36,6 +37,7 @@ const [Modal, modalApi] = useVbenModal({ | |||
|       ), | ||||
|     }); | ||||
|     emits('success', signFileUrl); | ||||
|     // TODO @ziye:下面有个告警哈;ps:所有告警,皆是错误,可以关注 ide 给的提示哈; | ||||
|     modalApi.close(); | ||||
|   }, | ||||
| }); | ||||
|  |  | |||
|  | @ -14,6 +14,7 @@ import { | |||
|   getProcessInstanceManagerPage, | ||||
| } from '#/api/bpm/processInstance'; | ||||
| import { DocAlert } from '#/components/doc-alert'; | ||||
| import { $t } from '#/locales'; | ||||
| import { router } from '#/router'; | ||||
| import { BpmProcessInstanceStatus } from '#/utils'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -93,6 +93,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | |||
|         url="https://doc.iocoder.cn/bpm/listener/" | ||||
|       /> | ||||
|     </template> | ||||
| 
 | ||||
|     <FormModal @success="onRefresh" /> | ||||
|     <Grid table-title="流程监听器"> | ||||
|       <template #toolbar-tools> | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ import { Page } from '@vben/common-ui'; | |||
| import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; | ||||
| import { getProcessInstanceCopyPage } from '#/api/bpm/processInstance'; | ||||
| import { DocAlert } from '#/components/doc-alert'; | ||||
| import { $t } from '#/locales'; | ||||
| import { router } from '#/router'; | ||||
| 
 | ||||
| import { useGridColumns, useGridFormSchema } from './data'; | ||||
|  |  | |||
|  | @ -72,6 +72,7 @@ const [Grid] = useVbenVxeGrid({ | |||
|       /> | ||||
|       <DocAlert title="审批加签、减签" url="https://doc.iocoder.cn/bpm/sign/" /> | ||||
|     </template> | ||||
| 
 | ||||
|     <Grid table-title="待办任务"> | ||||
|       <template #actions="{ row }"> | ||||
|         <TableAction | ||||
|  |  | |||
|  | @ -162,6 +162,7 @@ export function useGridColumns<T = PayAppApi.App>( | |||
|     }, | ||||
|   ]; | ||||
| } | ||||
| 
 | ||||
| /** 新增/修改的表单 */ | ||||
| export function useFormSchema(): VbenFormSchema[] { | ||||
|   return [ | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| <script lang="ts" setup> | ||||
| // TODO @xingyu:是不是不引入 @form-create/ant-design-vue 组件哈;保持和 vben 一致~; | ||||
| import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | ||||
| import type { PayAppApi } from '#/api/pay/app'; | ||||
| 
 | ||||
|  | @ -139,6 +140,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | |||
|       <DocAlert title="支付功能开启" url="https://doc.iocoder.cn/pay/build/" /> | ||||
|     </template> | ||||
| 
 | ||||
|     <!-- TODO @xingyu:建议和别的一致,Modal => FormModal --> | ||||
|     <AppModal @success="onRefresh" /> | ||||
|     <ChannelModal @success="onRefresh" /> | ||||
| 
 | ||||
|  | @ -281,6 +283,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | |||
|         /> | ||||
|       </template> | ||||
|       <template #alipayBarConfig="{ row }"> | ||||
|         <!-- TODO @xingyu:建议用小图标 --> | ||||
|         <TableAction | ||||
|           :actions="[ | ||||
|             { | ||||
|  |  | |||
|  | @ -159,6 +159,7 @@ const [Modal, modalApi] = useVbenModal({ | |||
|   }, | ||||
| }); | ||||
| </script> | ||||
| <!-- TODO @xingyu:支付宝的证书,也是支持上传的哈 --> | ||||
| <template> | ||||
|   <Modal :close-on-click-modal="false" :title="title" class="w-[40%]"> | ||||
|     <Form :schema="channelSchema(formType)" /> | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | ||||
| 
 | ||||
| import { Page, useVbenModal } from '@vben/common-ui'; | ||||
| import { $t } from '@vben/locales'; | ||||
| 
 | ||||
| import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; | ||||
| import { getNotifyTaskPage } from '#/api/pay/notify'; | ||||
|  | @ -59,6 +60,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | |||
|     <template #doc> | ||||
|       <DocAlert title="支付功能开启" url="https://doc.iocoder.cn/pay/build/" /> | ||||
|     </template> | ||||
| 
 | ||||
|     <DetailModal @success="onRefresh" /> | ||||
|     <Grid table-title="支付通知列表"> | ||||
|       <template #actions="{ row }"> | ||||
|  |  | |||
|  | @ -265,6 +265,7 @@ setupVbenVxeTable({ | |||
|     }); | ||||
| 
 | ||||
|     // 添加数量格式化,例如金额
 | ||||
|     // TODO @xingyu:建议金额,和数量分开哈;原因是,有些团队希望金额,单独控制;
 | ||||
|     vxeUI.formats.add('formatNumber', { | ||||
|       cellFormatMethod({ cellValue }, digits = 2) { | ||||
|         if (cellValue === null || cellValue === undefined) { | ||||
|  |  | |||
|  | @ -277,6 +277,7 @@ setupVbenVxeTable({ | |||
|     // 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化
 | ||||
|     // vxeUI.formats.add
 | ||||
|     // add by 星语:数量格式化,例如说:金额
 | ||||
|     // TODO @xingyu:建议金额,和数量分开哈;原因是,有些团队希望金额,单独控制;
 | ||||
|     vxeUI.formats.add('formatNumber', { | ||||
|       cellFormatMethod({ cellValue }, digits = 2) { | ||||
|         if (cellValue === null || cellValue === undefined) { | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ export function getPopupContainer(node?: HTMLElement): HTMLElement { | |||
|   ); | ||||
| } | ||||
| 
 | ||||
| // TODO @xingyu:这个需要 pr 给 vben 官方么?体感上,这个是全局性的哈;
 | ||||
| /** | ||||
|  * VxeTable专用弹窗层 | ||||
|  * 解决问题: https://gitee.com/dapppp/ruoyi-plus-vben5/issues/IB1DM3
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 xingyu4j
						xingyu4j