import React, { useState, useRef, useReducer } from "react";
import {
Modal,
Button,
Drawer,
Tooltip,
Popconfirm,
message,
Switch,
} from "antd";
import AutoTable from "@/components/AutoTable";
import getPrem from "@/utils/getPrem"; //权限判断fn
import InitForm from "@/components/InitForm";
import { useRequest } from "umi";
import defaultFields from "./fields";
import { doFetch } from "@/utils/doFetch";
import { deviceprovideDetail, deleteProvideCheck } from "@/services/device";
import { usercusDetails } from "@/utils/detailTotalCard";
import Details from "@/components/Details";
import { useAsyncEffect } from "ahooks";
import tempfields from "@/utils/tempfields";
const initState = {
vs: false,
fields: {},
iftype: {},
details: {
dataSource: {},
totalCard: [],
},
visible: false,
};
function reducer(state, action) {
let { type } = action,
newState = {};
switch (type) {
case "add":
newState = {
...state,
vs: true,
iftype: {
title: "新增客户",
val: type,
},
fields: { ...action.fields },
};
break;
case "edit":
newState = {
...state,
vs: true,
iftype: {
title: "编辑客户",
val: type,
},
fields: { ...action.fields },
};
break;
case "cdetails":
let n = 1,
dataSource = action.dataSource;
let special = action?.dataSource?.customerCharList?.map?.((it) => {
n++;
let key = n.toString();
dataSource[key] = it?.fieldRealValue;
return {
title: it?.fieldName,
key: key,
};
});
let extraspecial = [
{
cardTitle: "特殊属性",
itemData: special,
},
];
newState = {
...state,
details: {
dataSource: action.dataSource,
totalCard: [...usercusDetails, ...extraspecial],
},
visible: true,
};
break;
case "close":
newState = {
vs: false,
fields: {},
iftype: {},
details: {
dataSource: {},
totalCard: [],
},
visible: false,
};
break;
}
return newState;
}
const Deviceprovide = (props) => {
let actionRef = useRef(),
ChildRef = null;
function reload() {
actionRef?.current?.reload();
ChildRef?.onRefresh();
}
const [state, dispatch] = useReducer(reducer, initState),
{ vs, fields, iftype, details, visible } = state,
columns = [
{
title: "客户编号",
dataIndex: "customerNo",
key: "customerNo",
},
{
title: "客户名称",
dataIndex: "customerName",
key: "customerName",
render: (_, row) => {
return (
);
},
},
{
title: "联系电话",
dataIndex: "telephone",
key: "telephone",
},
{
title: "邮箱",
dataIndex: "email",
key: "email",
},
{
title: "地址",
dataIndex: "address",
key: "address",
search: false,
},
{
title: "备注",
dataIndex: "remark",
key: "remark",
search: false,
},
{
title: "评分",
dataIndex: "score",
key: "score",
render: (_, row) => {
return {row.score}星
;
},
},
{
title: "状态",
dataIndex: "status",
key: "status",
valueType: "select",
options: [
{
label: "启用",
value: 1,
},
{
label: "关闭",
value: 0,
},
],
render: (text, row, _, action) => {
return (
{
run({
url: "/ngic-auth/sysCustomer/update/status",
params: { id: row.id, status: row.status == 1 ? 0 : 1 },
});
}}
onCancel={() => {}}
okText="确定"
cancelText="取消"
disabled={!getPrem("equipmentCustomer_updatestatus", "ifs")}
>
);
},
},
{
title: "操作",
valueType: "option",
width: 150,
render: (text, row, _, action) => extraAction(text, row, _, action),
},
],
{ run, loading } = useRequest(doFetch, {
manual: true,
formatResult: (res) => res,
onSuccess: (result, params) => {
if (result.code == "0000") {
message.success("操作成功!");
reload();
dispatch({ type: "close" });
}
},
});
const [extrafields, setextrafields] = useState({});
const [subdata, setsubdata] = useState([]);
const [curitem, setcuritem] = useState({});
function extraAction(text, record, _, action) {
return [
getPrem("equipmentCustomer_save", action, "修改", async () => {
await setcuritem({
...record,
key: "edit",
});
}),
getPrem("equipmentCustomer_deleteById", action, "删除", null, {
title: "确认删除该客户?",
onConfirm: () => {
run({
url: "/ngic-auth/sysCustomer/deleteById",
params: { id: record.id },
});
},
}),
];
}
let saveData = (values, fn) => {
let newfields = JSON.parse(JSON.stringify(values));
//新增&修改
let difrid = iftype.val == "edit" ? { id: curitem.id } : {};
let customerUserList = newfields?.customerUserList?.map((it) => {
delete it.id;
return it;
});
let customerCharList = subdata.map((it, i) => {
let key = "field" + i.toString();
it.fieldRealValue = values[key];
delete newfields[key];
return it;
});
let params = {
...newfields,
customerUserList,
customerCharList,
};
run({
url: "/ngic-auth/sysCustomer/save",
params: { ...params, ...difrid },
});
};
let extrarender = [
,
];
useAsyncEffect(async () => {
let result = await tempfields(
"/ngic-auth/sysCustomerChar/queryCommonList",
{ id: curitem.id }
);
await setextrafields(result?.fields);
await setsubdata(result?.data);
if (curitem.key == "edit") {
doFetch({
url: "/ngic-auth/sysCustomer/query/detail",
params: { id: curitem.id },
}).then((res) => {
if (res.code == "0000") {
let data = res?.data?.data || {};
for (let i in defaultFields) {
defaultFields[i].value = data[i];
}
dispatch({
type: "edit",
fields: { ...defaultFields, ...result?.fields },
});
}
});
}
}, [curitem]);
return (
(ChildRef = node)}
>
dispatch({ type: "close" })}
footer={false}
destroyOnClose={true}
width={1000}
>
{
saveData(values);
}}
onChange={(changedValues, allValues) => {
//联动操作
}}
submitting={loading || !vs}
>
dispatch({ type: "close" })}
destroyOnClose={true}
afterVisibleChange={(v) => {}}
width="100%"
className="drawerDetails"
{...details}
>
);
};
export default Deviceprovide;