Skip to content

Commit

Permalink
feat: Workflow ENABLE disable save
Browse files Browse the repository at this point in the history
feat: Update mobile submit fill

feat: Update mobile approval btn

feat: Update mobile approvals

feat: Update mobile approvals

feat: Update mobile approvals
  • Loading branch information
ZhaoBingyu committed Nov 15, 2023
1 parent c8fa99a commit 81bbdcf
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 64 deletions.
19 changes: 16 additions & 3 deletions clients/mobile/pages/new-approvals/detail/actions/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* eslint-disable max-len */
/* eslint-disable no-case-declarations */
import React, { useEffect, useRef, useState } from 'react';
import { useHistory, useParams } from 'react-router-dom';
import { useSearchParam } from 'react-use';
Expand All @@ -20,11 +22,14 @@ import Warning from './warning';
import { ApprovalDetailParams } from '../../types';
import approvalDetailStore from '../store';
import actionStore from './store';
import detailStore from '@m/pages/new-approvals/detail/store';
import {
getStepBackActivityList, pipelineAgree, pipelineRecall, pipelineReject, pipelineUrge, submitPipelineFillTask,
} from './api';

import './index.scss';
import { buildFormDataReqParams, formDataDiff } from '@home/utils';
import { isEmpty } from 'lodash';

const REQUIRED_PROCESS_INSTANCE = ['DELIVER', 'READ', 'CC'];

Expand All @@ -35,7 +40,7 @@ function ApprovalsActions(): JSX.Element {
const action = useSearchParam('action') || '';
const reasonRequired = useSearchParam('reasonRequired') || 0;
const { remark, handleUserIds, taskDefKey, multiplePersonWay, type } = actionStore;
const { formValues } = approvalDetailStore;
const { formValues } = approvalDetailStore as any;
const { title, actionName } = getAction(action, approvalDetailStore.title);
const commonWords = ['我已阅示,非常赞同', '我已阅示,这个情况还是谨慎处理吧', '我已阅示'];
const [loading, setLoading] = useState(false);
Expand Down Expand Up @@ -99,15 +104,23 @@ function ApprovalsActions(): JSX.Element {
toast.success(`已${actionName}`);
history.go(-2);
approvalDetailStore.isRefresh = true;
detailStore.isRefresh = true;
}).catch((err) => toast.error(err)).finally(() => setLoading(false));
}

function requestAction(): Promise<any> | undefined {
let _formData = {};
if (isEmpty(detailStore?.defaultValue)) {
_formData = buildFormDataReqParams(detailStore?.formSchema, 'create', formValues);
} else {
const newValue = formDataDiff(formValues, detailStore?.defaultValue, detailStore?.formSchema);
_formData = buildFormDataReqParams(detailStore?.formSchema, 'updated', newValue);
}
const submitData = {
examineID: taskID,
taskID: processInstanceID,
remark: remark || '',
formData: formValues,
formData: _formData,
};
switch (action) {
case 'AGREE':
Expand All @@ -119,7 +132,7 @@ function ApprovalsActions(): JSX.Element {
case 'FILL_IN':
return submitPipelineFillTask({
id: taskID,
forMData: formValues,
forMData: _formData,
});
case 'CANCEL':
return pipelineRecall(processInstanceID);
Expand Down
20 changes: 16 additions & 4 deletions clients/mobile/pages/new-approvals/detail/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,16 @@ const formatPipelineDetail = async (processInstanceId: any, { type, taskId, task
canViewStatusAndMsg: config?.canViewStatusMsg === 1,
flowName: pipelineInfo?.displayName,
tableId: tableID,
formData: pipelineFormData?.entity,
FormData: pipelineFormData?.entity,
formData: pipelineFormData?.entity || pipelineFormData,
FormData: pipelineFormData?.entity || pipelineFormData,
formSchema: pipelineFormSchema?.schema,
...btnObj,
};
const taskDetailModelsObj = {
taskId: taskId,
taskDefKey: nodeData?.nodeDefKey,
formData: pipelineFormData?.entity,
FormData: pipelineFormData?.entity,
formData: pipelineFormData?.entity || pipelineFormData,
FormData: pipelineFormData?.entity || pipelineFormData,
formSchema: pipelineFormSchema?.schema,
fieldPermission: fieldPermission,
// operatorPermission: !isFinish && (taskType === 'fillIn' ? fillInOperatorPermission : operatorPermission),
Expand All @@ -110,15 +110,22 @@ class ApprovalsDetailStore {
@observable canMsg = false;
@observable formValues = {};
@observable isRefresh = false;
@observable formSchema = null;
@observable defaultValue = {};

@action init = (title: string): void => {
this.title = title;
this.formSchema = null;
this.defaultValue = {};
};

@action initForm = async (
index: number, processInstanceId: string, type: string, taskId?: string, taskType?: string,
): Promise<boolean> => {
try {
this.formSchema = null;
this.defaultValue = {};

const resp = await formatPipelineDetail(processInstanceId, { type, taskId, taskType });

const {
Expand All @@ -134,12 +141,17 @@ class ApprovalsDetailStore {
}
if (model.formSchema?.properties || taskDetailModels.length === 1) {
const formData = model?.formData;
this.formSchema = model.formSchema;
this.defaultValue = model?.formData;
return {
formSchema: model.formSchema,
formData,
...mapTaskDetail(model),
};
}
this.formSchema = model?.formSchema;
this.defaultValue = model?.formSchema;

return {
formSchema: model?.formSchema,
formData: model?.formData,
Expand Down
95 changes: 54 additions & 41 deletions clients/mobile/pages/new-approvals/detail/tab/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -149,42 +149,55 @@ function ApprovalsDetailTab(props: ApprovalsDetailTabProps): JSX.Element {
className='h-full'
value={toJS(task.formData)}
schema={toJS(task.formSchema)}
onSubmit={(val) => store.formValues = val}
onSubmit={(val) =>{
store.formValues = val;
}}
onFormValueChange={(values)=>{
const _value: any = {};
for (const key in values) {
if (key?.startsWith('field')) {
_value[key] = values[key];
}
}
store.formValues = _value;
}}
readOnly={type === 'APPLY_PAGE' || type === 'HANDLED_PAGE' }
usePermission>
<button type='submit' ref={submitRef} className='hidden'/>
</FormRenderer>
</div>

{(!!task.custom?.length || !!task.system?.length) && (
<div className='flex justify-between action-buttons-container'>
{!!task.custom?.length && (
<div className='action-button-custom-wrapper text-secondary'>
{
task.custom.map((item) => {
return (
<div
key={item.key}
className='action-button__custom flex justify-center items-center'
ref={item.key === 'MORE' ? reference : undefined}
onClick={
item.key === 'MORE' ?
undefined : () => onActionClick(item.key, item.reasonRequired)
}
>
{!!item.icon && <Icon name={item.icon} size='.2rem' className='mb-4'/>}
<div className='action-button__custom-text body2 truncate w-full'>
{item.text}
{
// (!!task.custom?.length || !!task.system?.length) &&
(
<div className='flex justify-between action-buttons-container'>
{!!task.custom?.length && (
<div className='action-button-custom-wrapper text-secondary'>
{
task.custom.map((item) => {
return (
<div
key={item.key}
className='action-button__custom flex justify-center items-center'
ref={item.key === 'MORE' ? reference : undefined}
onClick={
item.key === 'MORE' ?
undefined : () => onActionClick(item.key, item.reasonRequired)
}
>
{!!item.icon && <Icon name={item.icon} size='.2rem' className='mb-4'/>}
<div className='action-button__custom-text body2 truncate w-full'>
{item.text}
</div>
</div>
</div>
);
})
}
{task.custom.length < 3 && <div style={{ flex: 3 - task.custom.length }}/>}
</div>
)}
);
})
}
{task.custom.length < 3 && <div style={{ flex: 3 - task.custom.length }}/>}
</div>
)}

{/* {type === 'WAIT_HANDLE_PAGE' && !!task.system?.length && task.system.map((item) => {
{/* {type === 'WAIT_HANDLE_PAGE' && !!task.system?.length && task.system.map((item) => {
return (
<div
key={item.key}
Expand All @@ -195,19 +208,19 @@ function ApprovalsDetailTab(props: ApprovalsDetailTabProps): JSX.Element {
</div>
);
})} */}
{type === 'WAIT_HANDLE_PAGE' && (taskType === 'fillIn' ? _systemFill : _systemApproval).map((item: any) => {
return (
<div
key={item.key}
className={cs('action-button__system flex justify-center items-center', item.className)}
onClick={() => onActionClick(item.key, item.reasonRequired)}>
{!!item.icon && <Icon name={item.icon} size='.2rem' className='mr-4'/>}
<div className='truncate'>{item.text}</div>
</div>
);
})}
</div>
)}
{type === 'WAIT_HANDLE_PAGE' && (taskType === 'fillIn' ? _systemFill : _systemApproval).map((item: any) => {
return (
<div
key={item.key}
className={cs('action-button__system flex justify-center items-center', item.className)}
onClick={() => onActionClick(item.key, item.reasonRequired)}>
{!!item.icon && <Icon name={item.icon} size='.2rem' className='mr-4'/>}
<div className='truncate'>{item.text}</div>
</div>
);
})}
</div>
)}

<div className='safe-area-bottom'/>
</>
Expand Down
35 changes: 26 additions & 9 deletions clients/mobile/pages/new-approvals/tasks/tab/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ import { observer } from 'mobx-react';
import { useHistory } from 'react-router-dom';

import toast from '@lib/toast';
import { ApprovalsTabProps, Task } from '@m/pages/approvals/types';
import { ApprovalsTabProps, Task } from '@m/pages/new-approvals/types';
import PullRefresh from '@m/qxp-ui-mobile/pull-refresh';
import TaskCard from '@m/components/task-card';
import List from '@m/qxp-ui-mobile/list';
import { Empty } from '@m/qxp-ui-mobile/empty';
import { readAll } from '@home/pages/approvals/api';
import { readAll } from '@home/pages/new-approvals/api';
import { approvalDetailPath, approvalDetailPathApproval } from '@m/constant';
import detailStore from '@m/pages/approvals/detail/store';
import detailStore from '@m/pages/new-approvals/detail/store';

import { Filter } from './filter';
import { store } from './store';
import RadioButtonGroup from '@c/radio/radio-button-group';
import { APPROVAL, FILL_IN, listData } from '@home/pages/approvals/constant';
import { APPROVAL, FILL_IN, listData } from '@home/pages/new-approvals/constant';

const mapPageKey: any = {
APPLY_PAGE: 'FILL_IN_APPLY_PAGE',
Expand Down Expand Up @@ -46,23 +46,38 @@ const ApprovalsTab = (props: ApprovalsTabProps): JSX.Element => {
}, [type, tagType]);

function loadApprovals(pageKey: number): Promise<void> {
store[storeType].finished = false;
store[mapPageKey[storeType]].finished = false;
if (mapPageKey[storeType]) {
store[mapPageKey[storeType]].loadApprovals({ pageKey, filter, filterKey, tagType });
store[mapPageKey[storeType]].loadApprovals({ pageKey, filter, filterKey, tagType })
.finally(()=>{
store[storeType].finished = true;
store[mapPageKey[storeType]].finished = true;
detailStore.isRefresh = false;
});
}
return store[storeType].loadApprovals({ pageKey, filter, filterKey, tagType });
return store[storeType].loadApprovals({ pageKey, filter, filterKey, tagType })
.finally(()=>{
store[storeType].finished = true;
store[mapPageKey[storeType]].finished = true;
detailStore.isRefresh = false;
});
}

useEffect(() => {
if (!store[storeType].inited) return;
store[storeType].clear();
store[mapPageKey[storeType]].clear();
loadApprovals(1);
}, [props.filter]);

useEffect(() => store[storeType].clear, []);

useEffect(() => {
if (detailStore.isRefresh) {
store[storeType].clear();
store[mapPageKey[storeType]].clear();
loadApprovals(1);
detailStore.isRefresh = false;
}
}, [detailStore.isRefresh]);

Expand Down Expand Up @@ -166,7 +181,8 @@ const ApprovalsTab = (props: ApprovalsTabProps): JSX.Element => {
(<PullRefresh
onRefresh={() => loadApprovals(1)}
className='flex-1'>
<List finished={store[storeType].finished}
<List
finished={store[storeType].finished}
style={{ padding: '0 .16rem' }}
onLoad={() => loadApprovals(store[storeType].page + 1)}
className='h-full overflow-scroll safe-area-bottom'>
Expand All @@ -189,7 +205,8 @@ const ApprovalsTab = (props: ApprovalsTabProps): JSX.Element => {
(<PullRefresh
onRefresh={() => loadApprovals(1)}
className='flex-1'>
<List finished={store[mapPageKey[storeType]].finished}
<List
finished={store[mapPageKey[storeType]].finished}
style={{ padding: '0 .16rem' }}
onLoad={() => loadApprovals(store[mapPageKey[storeType]].page + 1)}
className='h-full overflow-scroll safe-area-bottom'>
Expand Down
3 changes: 3 additions & 0 deletions clients/mobile/pages/new-approvals/tasks/tab/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class ApprovalsStore {
@observable finished = false;
@observable inited = false;
@observable readAllEnabled = false;
@observable isRefresh = false;

@action
loadApprovals = async (props: LoadApprovalsProps): Promise<void> => {
Expand Down Expand Up @@ -105,6 +106,7 @@ class ApprovalsStore {
throw e;
}
if (!this.inited) this.inited = true;
this.isRefresh = false;
};

@action
Expand All @@ -114,6 +116,7 @@ class ApprovalsStore {
this.finished = false;
this.inited = false;
this.readAllEnabled = false;
this.isRefresh = false;
};
}

Expand Down
16 changes: 10 additions & 6 deletions clients/portal/modules/new-work-flow/api.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,16 @@ export type SaveWorkFlowParamsType = {
};

// 创建/修改流程
export function saveWorkFlow(flowData: SaveWorkFlowParamsType): Promise<WorkFlowData> {
const pipelineFlowData = getPipelineWorkFlowParams(flowData);
return httpClient<WorkFlowData>('/api/v1/pipeline/node', pipelineFlowData).then((res)=>{
saveTrigger(flowData, res);
return res;
});
export function saveWorkFlow(flowData: SaveWorkFlowParamsType | any): Promise<WorkFlowData> | any {
if (flowData?.status !== 'ENABLE') {
const pipelineFlowData = getPipelineWorkFlowParams(flowData);
return httpClient<WorkFlowData>('/api/v1/pipeline/node', pipelineFlowData).then((res)=>{
saveTrigger(flowData, res);
return res;
});
} else {
return Promise.resolve();
}
}

export function toggleWorkFlow(data: any): Promise<unknown> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ export default function useSave(appID: string, id?: string): (
const callback = useRef<{ onOk?: Noop; onError?: Noop }>();
const saveMutation = useMutation(saveWorkFlow, {
onSuccess: (respData: any) => {
toast.success('保存成功');
if (respData) {
toast.success('保存成功');
}
callback.current?.onOk?.();
if (appID && respData?.name && !id) {
history.replace(`/apps/flow/${appID}/${respData?.name}`);
Expand Down

0 comments on commit 81bbdcf

Please sign in to comment.