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