import React, { useState, useReducer, useRef, memo } from "react"; import { Card, Button } from "antd"; import { useRequest } from "umi"; import { doFetch } from "@/utils/doFetch"; import getPrem from "@/utils/getPrem"; //权限判断fn import Tableform from "@/components/Tableform"; import DrawInitForm from "@/components/DrawInitForm"; import { paFormConditionSelect, queryConValueSelect, } from "@/services/platform"; import defaultFields from "./fields"; const tabList = [ { key: "tab1", tab: 公共字段, }, // { // key: "tab2", // tab: 条件字段, // }, ], initState = { vs: false, fields: {}, iftype: {}, curitem: {}, tabKey: "tab1", formCharId: "", expandedRowKeys: [], }; function reducer(state, action) { let { type } = action, newState = {}; switch (type) { case "add": newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, }; break; case "addcustomFields": newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "condition": //新增条件 newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, }; break; case "editCondition": //编辑条件 newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "edit": newState = { ...state, vs: true, iftype: { title: action.title, val: type, }, fields: { ...action.fields }, curitem: action.curitem, }; break; case "changeTab": newState = { ...state, tabKey: action.tabKey, expandedRowKeys: [], }; break; case "changeFormCharId": newState = { ...state, formCharId: action.formCharId, expandedRowKeys: action.expandedRowKeys, }; break; case "close": newState = { ...state, vs: false, fields: {}, iftype: {}, curitem: {}, }; break; } return newState; } const ExpandedRowRender = memo( (props) => { const { checkedNodeKey, formCharId, expanded, tableRef, columns } = props; return (
{expanded && ( )}
); }, (prev, next) => { if (prev.formCharId == next.formCharId) { return true; } else { return false; } } ); const Fieldmanage = (props) => { let actionRef = useRef(), ChildRef = useRef(); function reload() { actionRef?.current?.reload(); } function reloadChildren() { ChildRef?.current?.reload(); dispatch({ type: "close" }); } const [state, dispatch] = useReducer(reducer, initState), { vs, fields, iftype, curitem, tabKey, formCharId, expandedRowKeys } = state, { checkedNode } = props, columns = [ { title: "字段名称", dataIndex: "fieldName", key: "fieldName", search: false, }, { title: "字段类型", dataIndex: "fieldCharName", key: "fieldCharName", search: false, }, { title: "选项内容", dataIndex: "fieldCharValue", key: "fieldCharValue", search: false, }, { title: "操作", dataIndex: "option_dataindex", key: "option_dataindex", valueType: "option", width: 150, render: (text, row, _, action) => extraAction(text, row, _, action), }, ], columnss = [ { title: "条件字段", dataIndex: "fieldCondName", key: "fieldCondName", render: (_, row) => { return ( {row.fieldCondName}={row.optCondName} ); }, search: false, }, { title: "自定义字段名称", dataIndex: "fieidNames", key: "fieidNames", search: false, }, { title: "操作", dataIndex: "option_dataindex", key: "option_dataindex", valueType: "option", width: 215, render: (text, row, _, action) => extraAction(text, row, _, action, "tab2"), }, ], { run, loading } = useRequest(doFetch, { manual: true, formatResult: (res) => res, onSuccess: (result, params) => { if (result.code == "0000") { reload(); reloadChildren(); } }, }), conditionFields = { formConditionId: { value: null, type: "select", title: "条件字段", name: ["formConditionId"], required: true, options: { database: paFormConditionSelect, params: { formId: checkedNode?.key }, }, linked: true, }, optCondKey: { value: null, type: "select", title: "字段属性值", name: ["optCondKey"], required: true, belinked: { options: { database: queryConValueSelect, params: { formId: checkedNode?.key, formConditionId: "linked", }, }, }, }, }; function extraAction(text, record, _, action, types) { return [ types == "tab2" && getPrem("sysDepartment_save", action, "新增", () => { for (let i in defaultFields) { defaultFields[i].value = null; } let title = "新增自定义字段"; dispatch({ type: "addcustomFields", fields: defaultFields, curitem: record, title, }); }), getPrem("sysDepartment_save", action, "修改", () => { let title; if (tabKey == "tab1") { for (let i in defaultFields) { defaultFields[i].value = record[i]; } title = "修改公共字段"; dispatch({ type: "edit", fields: defaultFields, curitem: record, title, }); } else { if (record.formCharId) { for (let i in defaultFields) { defaultFields[i].value = record[i]; } title = "修改自定义字段"; dispatch({ type: "edit", fields: defaultFields, curitem: record, title, }); } else { for (let i in conditionFields) { conditionFields[i].value = record[i]; } title = "修改条件字段"; dispatch({ type: "editCondition", fields: conditionFields, curitem: record, title, }); } } }), getPrem("sysDepartment_deleteById", action, "删除", null, { title: tabKey == "tab1" ? "确认删除该公共字段?" : record.formCharId ? "确认删除该自定义字段?" : "确认删除该条件字段?", onConfirm: () => { run({ url: tabKey == "tab1" || record.formCharId ? "/ngic-base-business/paFormField/deleteById" : "/ngic-base-business/paFormChar/deleteById", params: { id: record.id }, }); }, }), ]; } let saveData = (values, fn) => { let newfields = JSON.parse(JSON.stringify(values)); //新增&修改 let difrid = iftype.val == "edit" || iftype.val == "editCondition" ? { id: curitem.id } : {}; let params, url; if (tabKey == "tab1") { params = iftype.val == "add" ? { ...newfields, formId: checkedNode?.key, fieldType: 1, } : { ...newfields, ...difrid, }; url = "/ngic-base-business/paFormField/save"; } else { if (iftype.val == "condition") { params = { ...newfields, formId: checkedNode?.key, }; url = "/ngic-base-business/paFormChar/save"; } else if (iftype.val == "editCondition") { params = { ...newfields, formId: checkedNode?.key, ...difrid, }; url = "/ngic-base-business/paFormChar/save"; } else if (iftype.val == "addcustomFields") { params = { ...newfields, formId: checkedNode?.key, fieldType: 2, formCharId: curitem.id, }; url = "/ngic-base-business/paFormField/save"; } else { params = { ...newfields, ...difrid, }; url = "/ngic-base-business/paFormField/save"; } } run({ url, params }); }; return (
{ dispatch({ type: "changeTab", tabKey: key }); }} bordered={false} tabBarExtraContent={ } > {tabKey == "tab1" && ( )} {tabKey == "tab2" && ( { return ( ); }, expandedRowKeys, }} bordered={false} onExpand={(expanded, record) => { if (expanded) { dispatch({ type: "changeFormCharId", formCharId: record.id, expandedRowKeys: [record.id], }); } else { dispatch({ type: "changeFormCharId", formCharId: record.id, expandedRowKeys: [], }); } }} > )} dispatch({ type: "close" })} footer={false} destroyOnClose={true} fields={fields} submitData={(values) => { saveData(values); }} onChange={(changedValues, allValues) => { //联动操作 }} submitting={loading || !vs} width={"60%"} > {(iftype.val == "edit" || iftype.val == "editCondition") && (
修改条件字段注意事项:
1. 修改条件字段中任一属性值内容提交后,仅新增该表单时才生效;
2. 修改前添加的表单数据(如:物料),查看与编辑时仍显示修改前信息,若需应用新的条件,需新增该表单数据;
修改条件字段后可能会影响到历史数据,为确保数据准确性,请谨慎操作!
)}
); }; export default Fieldmanage;