index.js 2.7 KB
Newer Older
1
import React, { useEffect, useState, useRef } from 'react';
王绍森's avatar
王绍森 committed
2 3 4
import ZdyTable from '@/webPublic/one_stop_public/Table';
import styles from './index.less';
import { fetchTemplateByCode, fetchTableItem } from '@/webPublic/Services';
5
import { isJSON } from '@/webPublic/zyd_public/utils/utils';
王绍森's avatar
王绍森 committed
6

7
export default function RenderForm({ get = 'web', isCg = 'yes', style, ...rest }) {
8 9 10 11 12 13 14 15 16 17 18 19 20
	let content = rest?.postData?.unifiedServicePatternModel?.content;
	if (isJSON(content)) {
		content = JSON.parse(content);
	}
	const tableRoot = useRef();
	useEffect(() => {
		const timerId = setTimeout(() => {
			const div = tableRoot.current && tableRoot.current.root;
			if (div) {
				div.style.overflow = 'unset';
			}
			let new_element = document.createElement('style');
			new_element.innerHTML = `main>div>#web_table .login-form>div>div>div{
21 22
      overflow: inherit !important;
      }`;
23 24 25 26 27 28 29 30 31 32 33
			document.body.appendChild(new_element);
		}, 0);
		return () => {
			clearTimeout(timerId);
		};
	}, []);
	if (!content) {
		return null;
	}
	return (
		<div className={styles.zyd_onestop_style_class} style={style}>
34 35 36 37 38
			<ZdyTable ref={tableRoot}
                get={get}
                {...rest}
                isQuery={true}
                init={undefined}
39
                {...content}
40
      />
41 42
		</div>
	);
王绍森's avatar
王绍森 committed
43 44 45 46 47 48 49 50
}

/**
 * 根据表单code渲染表单
 * @param {Object} content 表单内容,传入对象
 * @param {String} templateCode 表单模板
 */
export function RenderFormByContent({ content, templateCode, form, get, isCg }) {
51 52 53 54 55 56 57 58 59 60 61
	const [formTemplate, setFormTemplate] = useState();
	useEffect(
		() => {
			fetchTemplateByCode(templateCode).then((res) => {
				if (res) {
					setFormTemplate(res);
				}
			});
		},
		[templateCode],
	);
王绍森's avatar
王绍森 committed
62

63 64 65 66 67 68 69 70 71 72 73
	return formTemplate ? (
		<RenderForm
			get={get}
			isCg={isCg}
			postData={{
				content: JSON.stringify(content),
				unifiedServicePatternModel: formTemplate,
			}}
			form={form}
		/>
	) : null;
王绍森's avatar
王绍森 committed
74 75 76 77 78 79 80 81 82 83
}

/**
 *渲染元数据库中的某条数据
 * @param {Object} objId 元数据库id
 * @param {String} dataTypeKey 元数据库表格键
 * @param {String} dataTypeValue 键对应的值
 * @param {Function} onLoad 数据加载的回调函数
 */
export function RenderFormByObjId({
84 85 86 87 88 89 90 91
	objId,
	dataTypeKey,
	dataTypeValue,
	onLoad,
	templateCode,
	form,
	get,
	isCg,
王绍森's avatar
王绍森 committed
92
}) {
93 94 95 96 97 98 99 100 101 102 103 104
	const [content, setContent] = useState({});
	useEffect(
		() => {
			fetchTableItem({ dataObjId: objId, key: dataTypeKey, value: dataTypeValue }).then((res) => {
				setContent(res || {});
				if (onLoad) {
					onLoad(res);
				}
			});
		},
		[objId, dataTypeKey, dataTypeValue],
	);
王绍森's avatar
王绍森 committed
105

106 107 108 109 110 111 112 113 114
	return (
		<RenderFormByContent
			get={get}
			isCg={isCg}
			content={content}
			templateCode={templateCode}
			form={form}
		/>
	);
王绍森's avatar
王绍森 committed
115
}