index.js 3.8 KB
Newer Older
王绍森's avatar
王绍森 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/**
 * 审核按钮封装
 * 徐立
 * 2020-3-28
 * data 为 'affair/getIdFormDetail' 接口请求到的数据
 * callback 提交完成后执行回调函数
 * form form表单控件
 */
import React, { useState } from 'react';
import { preHandle } from '@/webPublic/one_stop_public/utils/myutils';
import { connect } from 'dva';
import Btn from './pagesBtn';
import styles from './styles.less';
import ModalDiy from '@/baseComponent/ModalDiy';
15 16
import { callbackSubmitData } from '@/webPublic/one_stop_public/models/callbackExamineProcess';
import { getToken } from '@/utils/authority';
17
import { isJSON } from '@/webPublic/zyd_public/utils/utils';
王绍森's avatar
王绍森 committed
18 19

function AuditButton(props) {
20 21 22 23
	const [visible, setVisible] = useState(false);
	const [modalContent, setModalContent] = useState('');
	const [isSubmitLoading, setSubmitLoading] = useState(false);
	const [affairOkParams, setAffairParams] = useState({});
王绍森's avatar
王绍森 committed
24

25 26 27 28
	function affairOk() {
		// 有taskIds属性时,是批量审核,
		const { dispatch, callback, data, form, taskIds } = props;
		const { oldKey, btnValue } = affairOkParams;
王绍森's avatar
王绍森 committed
29

30 31 32 33
		form.validateFieldsAndScroll((err, values) => {
			if (err) return;
			setSubmitLoading(true);
			preHandle(values);
34 35 36 37 38 39 40 41 42 43 44 45
			let payload = {
				taskIds: taskIds || [data.taskId], // 接口里面的taskId 任务Id
				code: taskIds ? undefined : data.code,
				// 审核相关内容
				examineMap: JSON.stringify({
					[oldKey]: btnValue, // 每个配置按钮对应的对象内容 oldkey = 接口中 key btnValue = 接口中 value
					// reason: value, // 审批理由
					code: taskIds ? undefined : data.code,
				}),
				taskForm: JSON.stringify(values), // 审批表单的参数值
				apiData: data,
				taskFormKey: data?.taskFormKey,
46 47
        userNowInfo: (isJSON(localStorage.getItem('user')) && JSON.parse(localStorage.getItem('user'))) || {},
        buttonInfo:
48 49 50 51
					data?.btns && data?.btns.length ? data?.btns.find((x) => x.value === btnValue) : {},
				token: getToken(),
			};
			payload = callbackSubmitData(payload);
52 53
			dispatch({
				type: 'affair/getExamineProcess',
54
				payload,
55 56 57 58 59 60 61 62 63 64
				callback: (val) => {
					setSubmitLoading(false);
					setVisible(false);
					if (callback) {
						callback(val);
					}
				},
			});
		});
	}
王绍森's avatar
王绍森 committed
65

66 67 68
	function hideModal() {
		setVisible(false);
	}
王绍森's avatar
王绍森 committed
69

70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
	/**
	 * 根据不同值,返回对应样式
	 */
	function getStyle(key, value) {
		if (key === 'examine') {
			switch (value) {
				case 1:
					return [`${styles.btn_margin}`, `${styles.btn}`, `${styles.btn_reject}`].join(' ');
				case 2:
					return [`${styles.btn_margin}`, `${styles.btn}`, `${styles.btn_no}`].join(' ');
				case 0:
					return 'deafalut';
				case '1':
					return [`${styles.btn_margin}`, `${styles.btn}`, `${styles.btn_reject}`].join(' ');
				case '2':
					return [`${styles.btn_margin}`, `${styles.btn}`, `${styles.btn_no}`].join(' ');
				case '0':
					return 'deafalut';
				default:
					return 'deafalut';
			}
		} else {
			return 'deafalut';
		}
	}
王绍森's avatar
王绍森 committed
95

96 97 98 99 100
	function showModal(str, key, value) {
		setModalContent(`确定${str}吗?`);
		setAffairParams({ oldKey: key, btnValue: value });
		setVisible(true);
	}
王绍森's avatar
王绍森 committed
101

102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
	const {
		data: { isHandle, btns },
	} = props;
	if (!isHandle || !Array.isArray(btns) || btns.length < 1) return null;
	return (
		<>
			<div className={styles.btn_page}>
				{btns.map((item) => (
					<Btn
						get="8"
						key={item.value}
						btnOne={() => {
							showModal(item.name, item.key, item.value);
						}}
						text={item.name}
						style={getStyle(item.key, item.value)}
					/>
				))}
			</div>
			<ModalDiy
				visible={visible}
				title="提示"
				handleCancel={hideModal}
				handleOk={affairOk}
				confirmLoading={isSubmitLoading}>
				<div style={{ fontSize: 16, textAlign: 'center', height: 150, lineHeight: '150px' }}>
					{modalContent}
				</div>
			</ModalDiy>
		</>
	);
王绍森's avatar
王绍森 committed
133 134 135
}

export default connect()(AuditButton);