123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import MemberItem from '../components/MemberItem'
- import consts from '@/utils/consts'
- import { useState } from 'react'
- import { useRequest } from 'ahooks'
- import { addExecutor, delExecutor, queryExecutorList, updateExecutor } from '@/services/api/business'
- import { ApprovalType, ExecutorSetType } from '@/enums/gc'
- import { QuestionCircleFilled } from '@ant-design/icons'
- import { Form, message, Tooltip } from 'antd'
- import ProForm, { ProFormDependency, ProFormRadio, ProFormSelect, ProFormText } from '@ant-design/pro-form'
- import type { ModalAction } from '@/components/Modal'
- import { useDispatch } from '@umijs/max'
- const setTypeOptions = [
- {
- label: (
- <div>
- <span className="mr-1">预置成员</span>
- <Tooltip title="审批用户为该角色绑定成员">
- <QuestionCircleFilled style={{ color: 'orange' }} />
- </Tooltip>
- </div>
- ),
- value: ExecutorSetType.PRESET_MEMBER
- },
- {
- label: (
- <div>
- <span className="mr-1">步骤设置</span>
- <Tooltip title="审批用户为该角色动态配置">
- <QuestionCircleFilled style={{ color: 'orange' }} />
- </Tooltip>
- </div>
- ),
- value: ExecutorSetType.STEP_SETTING
- }
- ]
- type iState = {
- total: number
- }
- export default function useScripts(modal: ModalAction) {
- const dispatch = useDispatch()
- const [state, seState] = useState<iState>({
- total: 0
- })
- const {
- run: query,
- refresh,
- loading
- } = useRequest(queryExecutorList, {
- manual: true,
- onSuccess: (result, params) => {
- const { subjectID, businessType } = params[0]
- seState({ total: result.data.total })
- dispatch({
- type: 'business/updateProcessMap',
- payload: {
- ID: `${subjectID}_${businessType}`,
- process: result.data.items
- }
- })
- }
- })
- const addOrEdit = (mode: 'add' | 'edit', initialValues?: API.ExecutorItem) => {
- const text = mode === 'add' ? '新增执行者' : '编辑执行者'
- modal.open({
- title: text,
- okText: '确定',
- cancelText: '取消',
- type: 'form',
- initialValues: initialValues ?? {
- setType: ExecutorSetType.PRESET_MEMBER,
- approvalType: ApprovalType.TARGET
- },
- children: (
- <ProForm submitter={false} layout="horizontal" labelCol={{ span: 5 }} isKeyPressSubmit>
- <ProFormText hidden name="ID" />
- <ProFormText
- label="执行者名称"
- name="name"
- rules={[{ required: true, message: '请输入' }]}
- placeholder="请输入"
- />
- <ProFormRadio.Group
- label="配置方式"
- name="setType"
- options={setTypeOptions}
- rules={[{ required: true, message: '请选择' }]}
- />
- <ProFormDependency name={['setType']}>
- {({ name }) => {
- if (name === ExecutorSetType.PRESET_MEMBER)
- return (
- <Form.Item label="成员" name="members" rules={[{ required: true, message: '请选择' }]}>
- <MemberItem />
- </Form.Item>
- )
- return <ProFormSelect name="" label="范围选择" />
- }}
- </ProFormDependency>
- </ProForm>
- ),
- onOk: async (values: API.ExecutorItem) => {
- let requestFn: Nullable<() => Promise<viod>> = null
- if (mode === 'add') {
- requestFn = addExecutor
- values.businessType = business
- } else {
- requestFn = updateExecutor
- }
- try {
- await requestFn?.(values)
- refresh()
- modal.close()
- message.success(text + '成功')
- } catch (error) {}
- }
- })
- }
- const del = (ID: string) => {
- modal.open({
- title: '删除执行者',
- okText: '确定',
- cancelText: '取消',
- children: <div>确定删除该执行者吗?</div>,
- onOk: async () => {
- try {
- const { code = -1 } = await delExecutor({ ID })
- if (code === consts.RET_CODE.SUCCESS) {
- refresh()
- modal.close()
- message.success('删除成功')
- }
- } catch (error) {}
- }
- })
- }
- return { query, total: state.total, loading, addOrEdit, del }
- }
|