You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.6 KiB
214 lines
5.6 KiB
import { getSimpleForms } from '@/api/bpm/form' |
|
import { updateModelState } from '@/api/bpm/model' |
|
import { BasicColumn, FormSchema, useRender } from '@/components/Table' |
|
import { useMessage } from '@/hooks/web/useMessage' |
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|
import { Button, Switch } from 'ant-design-vue' |
|
import { h } from 'vue' |
|
|
|
export const columns: BasicColumn[] = [ |
|
{ |
|
title: '编号', |
|
dataIndex: 'id', |
|
defaultHidden: true, |
|
width: 100 |
|
}, |
|
{ |
|
title: '流程标识', |
|
dataIndex: 'key', |
|
width: 180 |
|
}, |
|
{ |
|
title: '流程名称', |
|
dataIndex: 'name', |
|
width: 180 |
|
}, |
|
{ |
|
title: '流程分类', |
|
dataIndex: 'category', |
|
width: 120, |
|
customRender: ({ text }) => { |
|
return useRender.renderDict(text, DICT_TYPE.BPM_MODEL_CATEGORY, 'string') |
|
} |
|
}, |
|
{ |
|
title: '表单信息', |
|
dataIndex: 'formType', |
|
width: 180, |
|
customRender: ({ record }) => { |
|
if (record.formId) { |
|
return h(Button, { type: 'link', onClick: handleFormDetail.bind(null, record) }, () => record.formName) |
|
} else if (record.formCustomCreatePath) { |
|
return h(Button, { type: 'link', onClick: handleFormDetail.bind(null, record) }, () => record.formCustomCreatePath) |
|
} else { |
|
return useRender.renderTag('暂无表单') |
|
} |
|
} |
|
}, |
|
{ |
|
title: '创建时间', |
|
dataIndex: 'createTime', |
|
width: 180, |
|
customRender: ({ text }) => { |
|
return useRender.renderDate(text) |
|
} |
|
}, |
|
{ |
|
title: '最新部署的流程定义', |
|
children: [ |
|
{ |
|
title: '流程版本', |
|
dataIndex: 'processDefinition.version', |
|
width: 160, |
|
customRender: ({ record }) => { |
|
if (record.processDefinition) { |
|
return useRender.renderTag('v' + record.processDefinition.version) |
|
} else { |
|
return useRender.renderTag('未部署') |
|
} |
|
} |
|
}, |
|
{ |
|
title: '激活状态', |
|
dataIndex: 'processDefinition.suspensionState', |
|
width: 100, |
|
customRender: ({ record }) => { |
|
if (record.processDefinition) { |
|
if (!Reflect.has(record, 'suspensionState')) { |
|
record.pendingStatus = false |
|
} |
|
return h(Switch, { |
|
checked: record.processDefinition.suspensionState === 1, |
|
checkedChildren: '激活', |
|
unCheckedChildren: '挂起', |
|
onChange(checked: boolean) { |
|
const newStatus = checked ? 0 : 1 |
|
const { createMessage } = useMessage() |
|
updateModelState({ id: record.id, state: newStatus }) |
|
.then(() => { |
|
record.status = newStatus |
|
createMessage.success(`已成功修改流程状态`) |
|
}) |
|
.catch(() => { |
|
createMessage.error('修改流程状态失败') |
|
}) |
|
.finally(() => { |
|
record.pendingStatus = false |
|
}) |
|
} |
|
}) |
|
} |
|
} |
|
}, |
|
{ |
|
title: '部署时间', |
|
dataIndex: 'processDefinition.deploymentTim', |
|
width: 180, |
|
customRender: ({ record }) => { |
|
if (record.processDefinition) { |
|
return useRender.renderDate(record.processDefinition.deploymentTime) |
|
} |
|
} |
|
} |
|
] |
|
} |
|
] |
|
|
|
export const searchFormSchema: FormSchema[] = [ |
|
{ |
|
label: '流程标识', |
|
field: 'key', |
|
component: 'Input', |
|
colProps: { span: 8 } |
|
}, |
|
{ |
|
label: '流程名称', |
|
field: 'name', |
|
component: 'Input', |
|
colProps: { span: 8 } |
|
}, |
|
{ |
|
label: '流程分类', |
|
field: 'category', |
|
component: 'Select', |
|
componentProps: { |
|
options: getIntDictOptions(DICT_TYPE.BPM_MODEL_CATEGORY) |
|
}, |
|
colProps: { span: 8 } |
|
} |
|
] |
|
|
|
export const formSchema: FormSchema[] = [ |
|
{ |
|
label: '编号', |
|
field: 'id', |
|
show: false, |
|
component: 'Input' |
|
}, |
|
{ |
|
label: '流程标识', |
|
field: 'key', |
|
required: true, |
|
component: 'Input', |
|
dynamicDisabled: ({ values }) => !!values.id |
|
}, |
|
{ |
|
label: '流程名称', |
|
field: 'name', |
|
required: true, |
|
component: 'Input', |
|
dynamicDisabled: ({ values }) => !!values.id |
|
}, |
|
{ |
|
label: '流程分类', |
|
field: 'category', |
|
component: 'Select', |
|
defaultValue: 0, |
|
componentProps: { |
|
options: getIntDictOptions(DICT_TYPE.BPM_MODEL_CATEGORY) |
|
} |
|
}, |
|
{ |
|
label: '流程描述', |
|
field: 'description', |
|
component: 'InputTextArea' |
|
}, |
|
{ |
|
label: '表单类型', |
|
field: 'formType', |
|
component: 'Select', |
|
ifShow: ({ values }) => !!values.id, |
|
componentProps: { |
|
options: getIntDictOptions(DICT_TYPE.BPM_MODEL_FORM_TYPE) |
|
} |
|
}, |
|
{ |
|
label: '流程表单', |
|
field: 'formId', |
|
component: 'ApiSelect', |
|
ifShow: ({ values }) => !!values.id && values.formType === 10, |
|
componentProps: { |
|
api: () => getSimpleForms(), |
|
labelField: 'name', |
|
valueField: 'id' |
|
} |
|
}, |
|
{ |
|
label: '表单提交路由', |
|
field: 'formCustomCreatePath', |
|
component: 'Input', |
|
helpMessage: '自定义表单的提交路径,使用 Vue 的路由地址,例如说:bpm/oa/leave/create', |
|
ifShow: ({ values }) => !!values.id && values.formType === 20 |
|
}, |
|
{ |
|
label: '表单查看路由', |
|
field: 'formCustomViewPath', |
|
component: 'Input', |
|
helpMessage: '自定义表单的查看路径,使用 Vue 的路由地址,例如说:bpm/oa/leave/view', |
|
ifShow: ({ values }) => !!values.id && values.formType === 20 |
|
} |
|
] |
|
|
|
function handleFormDetail() { |
|
console.info('handleFormDetail') |
|
}
|
|
|