import { factorySelect, shopSelectByFactory } from "@/services/system";
import { doFetch } from "@/utils/doFetch";
import { Button, Table } from "antd";
import { EditableProTable } from "@ant-design/pro-table";
import { useEffect, useState } from 'react'
import { useModel } from 'umi'

const EditUpload = ({ record, fid, storeId }) => {
  const [value, setvalue] = useState({
    [record.id]: record.uploadList
  });
  const { initialState, setInitialState } = useModel("@@initialState");
  useEffect(() => {
    if (!value) {
      return
    }
    let newlist = Object.keys(value)?.map?.(it => {
      let id = it;
      let newArr = value[id]?.filter(it => typeof (it.id) == "number") ?? [];
      return {
        id,
        uploadList: newArr.map(its => {
          return {
            storePositionId: its?.storePositionId,
            instroeNum: its?.instroeNum,
            remark: its?.remark
          }
        })
      }
    }) ?? [];
    setInitialState(s => {
      return ({
        ...s,
        submit: {
          id: fid,
          materialList: (s.submit && s?.submit?.materialList) ? s?.submit?.materialList?.filter(it => newlist.map(item => item.id).indexOf(it.id) == -1)?.concat(newlist)?.filter(it => it.uploadList?.length > 0) : []
        }
      })
    })
  }, [value]);
  return <EditableProTable
    rowKey={"id"}
    maxLength={1000}
    style={{ marginLeft: 48 }}
    columns={[
      {
        title: <span>库位名称 <b style={{ color: "red" }}>*</b></span>,
        dataIndex: "storePositionName",
        key: "storePositionId",
        search: false,
        valueType: "select",
        request: async (params) => {
          let res = await doFetch({ url: "/ngic-auth/sysStorePosition/queryByStoreId/selection", params: { storeId: params.storeId } });
          return res?.data?.dataList
        },
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        },
        params: { storeId: storeId },
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        },
      },
      {
        title: <span>上架数量 <b style={{ color: "red" }}>*</b></span>,
        dataIndex: "instroeNum",
        key: "instroeNum",
        search: false,
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        },
        valueType: "digit",
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        },
      },
      {
        title: "备注",
        dataIndex: "remark",
        key: "remark",
        search: false,
        editable: (text, record, index) => {
          return !record.materieOutstoreDetailId
        }
      },
      {
        title: "操作",
        valueType: "option",
        width: 70,
        render: (text, record, _, action) => [
          typeof (record.id) == "number" && <a key="delete" onClick={() => { }}>
            删除
          </a>,
        ],
      }
    ]}
    value={value[record.id]}
    recordCreatorProps={{
      newRecordType: "dataSource",
      record: () => ({
        id: Date.now(),
      }),
    }}
    editable={{
      type: "multiple",
      actionRender: (row, config, defaultDoms) => {
        return [defaultDoms.delete];
      },
      onValuesChange: async (records, recordList) => {
        setvalue(s => {
          return ({
            ...s,
            [record.id]: recordList
          })
        });
      },
    }}
    pagination={false}
  />
}

const one = {
  "materieInstoreNo": {
    "value": null,
    "type": "input",
    "title": "入库单号",
    "name": [
      "materieInstoreNo"
    ],
    "required": false,
    placeholder: "不填写系统自动生成"
  },
  "storeId": {
    "value": null,
    "type": "select",
    "title": "入库仓库",
    "name": [
      "storeId"
    ],
    "required": true,
    "options": {
      database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
      params: {}
    },
  },
  "supplierId": {
    "value": null,
    "type": "select",
    "title": "供应商",
    "name": [
      "supplierId"
    ],
    "required": true,
    "options": {
      database: () => doFetch({ url: "/ngic-auth/sysSupplier/query/selection", params: {} }),
      params: {}
    },
  },
  "businessNo": {
    "value": null,
    "type": "input",
    "title": "相关单号",
    "name": [
      "businessNo"
    ],
    "required": false
  },
  "remark": {
    "value": null,
    "type": "textarea",
    "title": "备注",
    "name": [
      "remark"
    ],
    "required": false,
    "col": {
      "span": 24
    }
  },
  "materialList": {
    value: [],
    title: "物料信息",
    type: "table",
    col: { span: 24 },
    name: ["materialList"],
    required: true,
    linkconfig: {
      urlchangeval: {//根据url接口 改变某个value
        database: (params) => doFetch({ url: "/ngic-workmanship/pmMaterie/queryUnitByMaterieId", params }),
        params: { "materieId": "linked" },
        effectresult: {
          "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
          "productionUnitName": "productionUnitName",
          "materieControlNo": "materialCode",
          "instroeNum": "instroeNum"
        }
      }
    },
    columns: [
      {
        "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
        "dataIndex": "materieId",
        "key": "materieId",
        "valueType": "select",
        "width": 300,
        "request": async () => {
          let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
          return res?.data?.dataList
        },
        "fieldProps": {
          allowClear: true,
          showSearch: true
        },
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        },
      },
      {
        "title": "批次号/SN号",
        "dataIndex": "materieControlNo",
        "key": "materieControlNo"
      },
      {
        "title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
        "dataIndex": "instroeNum",
        "key": "instroeNum",
        valueType: "digit",
        "formItemProps": () => {
          return {
            rules: [{ required: true, message: '此项为必填项' }],
          };
        }
      },
      {
        "title": "库存单位",
        "dataIndex": "productionUnitName",
        "key": "productionUnitName",
        "readonly": 'productionUnitName',
        "width": 88
      },
      {
        title: "操作",
        valueType: "option",
        width: 70,
        render: (text, record, _, action) => [
          <a key="delete" onClick={() => { }}>
            删除
          </a>,
        ],
      },
    ],
    rowKey: "id",
  }
},
  two = {
    "materieInstoreNo": {
      "value": null,
      "type": "input",
      "title": "入库单号",
      "name": [
        "materieInstoreNo"
      ],
      "required": false,
      placeholder: "不填写系统自动生成"
    },
    "storeId": {
      "value": null,
      "type": "select",
      "title": "入库仓库",
      "name": [
        "storeId"
      ],
      "required": true,
      "options": {
        database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
        params: {}
      },
    },
    "supplierId": {
      "value": "2022070124566476657",
      "type": "select",
      "title": "供应商",
      "name": [
        "supplierId"
      ],
      "required": true,
      "disabled": true,
      "options": [
        {
          value: "2022070124566476657",
          label: "南高(默认)"
        }
      ],
    },
    "businessNo": {
      "value": null,
      "type": "input",
      "title": "相关单号",
      "name": [
        "businessNo"
      ],
      "required": false
    },
    "remark": {
      "value": null,
      "type": "textarea",
      "title": "备注",
      "name": [
        "remark"
      ],
      "required": false,
      "col": {
        "span": 24
      }
    },
    "materialList": {
      value: [],
      title: "物料信息",
      type: "table",
      col: { span: 24 },
      name: ["materialList"],
      required: true,
      linkconfig: {
        urlchangeval: {//根据url接口 改变某个value
          database: (params) => doFetch({ url: "/ngic-workmanship/pmMaterie/queryUnitByMaterieId", params }),
          params: { "materieId": "linked" },
          effectresult: {
            "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
            "productionUnitName": "productionUnitName",
            "materieControlNo": "materialCode",
            "instroeNum": "instroeNum"
          }
        }
      },
      columns: [
        {
          "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "materieId",
          "key": "materieId",
          "valueType": "select",
          "width": 300,
          "request": async () => {
            let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": "批次号/SN号",
          "dataIndex": "materieControlNo",
          "key": "materieControlNo"
        },
        {
          "title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "instroeNum",
          "key": "instroeNum",
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
          valueType: "digit"
        },
        {
          "title": "库存单位",
          "dataIndex": "productionUnitName",
          "key": "productionUnitName",
          "readonly": 'productionUnitName',
          "width": 88
        },
        {
          title: "操作",
          valueType: "option",
          width: 70,
          render: (text, record, _, action) => [
            <a key="delete" onClick={() => { }}>
              删除
            </a>,
          ],
        },
      ],
      rowKey: "id",
    }
  },
  three = {
    "materieInstoreNo": {
      "value": null,
      "type": "input",
      "title": "入库单号",
      "name": [
        "materieInstoreNo"
      ],
      "required": false,
      placeholder: "不填写系统自动生成"
    },
    "storeId": {
      "value": null,
      "type": "select",
      "title": "入库仓库",
      "name": [
        "storeId"
      ],
      "required": true,
      "options": {
        database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
        params: {}
      },
    },
    "businessNo": {
      "value": null,
      "type": "input",
      "title": "相关单号",
      "name": [
        "businessNo"
      ],
      "required": false
    },
    "remark": {
      "value": null,
      "type": "textarea",
      "title": "备注",
      "name": [
        "remark"
      ],
      "required": false,
      "col": {
        "span": 24
      }
    },
    "materialList": {
      value: [],
      title: "物料信息",
      type: "table",
      col: { span: 24 },
      name: ["materialList"],
      required: true,
      linkconfig: {
        urlchangeval: {//根据url接口 改变某个value
          database: (params) => doFetch({ url: "/ngic-workmanship/pmMaterie/queryUnitByMaterieId", params }),
          params: { "materieId": "linked" },
          effectresult: {
            "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
            "productionUnitName": "productionUnitName",
            "materieControlNo": "materialCode",
            "instroeNum": "instroeNum",
            "supplierId": "supplierId"
          }
        }
      },
      columns: [
        {
          "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "materieId",
          "key": "materieId",
          "valueType": "select",
          "width": 300,
          "request": async () => {
            let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": <span>供应商编号-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "supplierId",
          "key": "supplierId",
          "valueType": "select",
          "width": 300,
          "request": async () => {
            let res = await doFetch({ url: "/ngic-auth/sysSupplier/query/selection/withNo", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": "批次号/SN号",
          "dataIndex": "materieControlNo",
          "key": "materieControlNo"
        },
        {
          "title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "instroeNum",
          "key": "instroeNum",
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
          valueType: "digit"
        },
        {
          "title": "库存单位",
          "dataIndex": "productionUnitName",
          "key": "productionUnitName",
          "readonly": 'productionUnitName',
          "width": 88
        },
        {
          title: "操作",
          valueType: "option",
          width: 70,
          render: (text, record, _, action) => [
            <a key="delete" onClick={() => { }}>
              删除
            </a>,
          ],
        },
      ],
      rowKey: "id",
    }
  },
  four = {
    "materieInstoreNo": {
      "value": null,
      "type": "input",
      "title": "入库单号",
      "name": [
        "materieInstoreNo"
      ],
      "required": false,
      placeholder: "不填写系统自动生成"
    },
    "storeId": {
      "value": null,
      "type": "select",
      "title": "入库仓库",
      "name": [
        "storeId"
      ],
      "required": true,
      "options": {
        database: () => doFetch({ url: "/ngic-auth/sysStore/selectionBox", params: { factoryIdList: [] } }),
        params: {}
      },
    },
    "businessNo": {
      "value": null,
      "type": "input",
      "title": "相关单号",
      "name": [
        "businessNo"
      ],
      "required": false
    },
    "remark": {
      "value": null,
      "type": "textarea",
      "title": "备注",
      "name": [
        "remark"
      ],
      "required": false,
      "col": {
        "span": 24
      }
    },
    "materialList": {
      value: [],
      title: "物料信息",
      type: "table",
      col: { span: 24 },
      name: ["materialList"],
      required: true,
      linkconfig: {
        urlchangeval: {//根据url接口 改变某个value
          database: (params) => doFetch({ url: "/ngic-workmanship/pmMaterie/queryUnitByMaterieId", params }),
          params: { "materieId": "linked" },
          effectresult: {
            "productionUnit": "productionUnit",//key 为列表更新值  value为response 返回值
            "productionUnitName": "productionUnitName",
            "materieControlNo": "materialCode",
            "instroeNum": "instroeNum",
            "supplierId": "supplierId"
          }
        }
      },
      columns: [
        {
          "title": <span>物料编码-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "materieId",
          "key": "materieId",
          "valueType": "select",
          "width": 300,
          "request": async () => {
            let res = await doFetch({ url: "/ngic-workmanship/pmMaterie/query/selectbox", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": <span>供应商编号-名称 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "supplierId",
          "key": "supplierId",
          "valueType": "select",
          "width": 300,
          "request": async () => {
            let res = await doFetch({ url: "/ngic-auth/sysSupplier/query/selection/withNo", params: {} })
            return res?.data?.dataList
          },
          "fieldProps": {
            allowClear: true,
            showSearch: true
          },
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
        },
        {
          "title": "批次号/SN号",
          "dataIndex": "materieControlNo",
          "key": "materieControlNo"
        },
        {
          "title": <span>入库数量 <b style={{ color: "red" }}>*</b></span>,
          "dataIndex": "instroeNum",
          "key": "instroeNum",
          "formItemProps": () => {
            return {
              rules: [{ required: true, message: '此项为必填项' }],
            };
          },
          valueType: "digit"
        },
        {
          "title": "库存单位",
          "dataIndex": "productionUnitName",
          "key": "productionUnitName",
          "readonly": 'productionUnitName',
          "width": 88
        },
        {
          title: "操作",
          valueType: "option",
          width: 70,
          render: (text, record, _, action) => [
            <a key="delete" onClick={() => { }}>
              删除
            </a>,
          ],
        },
      ],
      rowKey: "id",
    }
  },
  detail = (setselected, dom) => ({
    totalCard: [
      //物料详情
      {
        cardTitle: "基本信息",
        itemData: [
          {
            title: "入库单号",
            key: "materieInstoreNo",
          },
          {
            title: "入库类型",
            key: "instoreTypeName",
          },
          {
            title: "入库仓库",
            key: "storeName",
          },
          {
            title: "相关单号",
            key: "businessNo",
          },
          {
            title: "创建人",
            key: "createUserName",
          },
          {
            title: "创建时间",
            key: "createTime",
          }, {
            title: "状态",
            key: "statusName",
          },
          {
            title: "完成时间",
            key: "finishTime",
          },
          {
            title: "备注",
            key: "remark",
            noshow: "100%",
          },
          {
            title: "工单二维码",
            noshow: true,
            key: "qrCodeUrl",
            type: "img",
            width: 100,
            height: 100
          },
        ],
      },
      {
        cardTitle: "物料信息列表",
        extraContent: dom,
        itemData: [
          {
            key: "materialList",
            type: "table",
            col: { span: 24 },
            columns: [
              {
                title: "物料编码 - 名称",
                dataIndex: "materieName",
                key: "materieName",
                search: false,
                render: (dom, row) => {
                  return (row.materieCode ?? '') + " - " + (row.materieName ?? '')
                }
              },
              {
                title: "供应商编号 - 名称",
                dataIndex: "supplierNo",
                key: "supplierNo",
                search: false,
                render: (dom, row) => {
                  return (row.supplierNo ?? '') + " - " + (row.supplierName ?? '')
                }
              },
              {
                title: "批次号/SN号",
                dataIndex: "materieControlNo",
                key: "materieControlNo",
                search: false,
              },
              {
                title: "入库数量",
                dataIndex: "instroeNum",
                key: "instroeNum",
                search: false,
              },
              {
                title: "未上架数量",
                dataIndex: "remainderNums",
                key: "remainderNums",
                search: false,
              },
              {
                title: "库存单位",
                dataIndex: "productionUnitName",
                key: "productionUnitName",
                search: false,
              },
            ],
            expandable: {
              defaultExpandAllRows: true,
              expandedRowRender: record => <Table
                style={{ marginLeft: 48 }}
                columns={[
                  {
                    title: "库位名称",
                    dataIndex: "storePositionName",
                    key: "storePositionName",
                    search: false,
                    "formItemProps": () => {
                      return {
                        rules: [{ required: true, message: '此项为必填项' }],
                      };
                    },
                  },
                  {
                    title: "上架数量",
                    dataIndex: "instroeNum",
                    key: "instroeNum",
                    search: false,
                    "formItemProps": () => {
                      return {
                        rules: [{ required: true, message: '此项为必填项' }],
                      };
                    },
                  }
                ]}
                dataSource={record.uploadList}
                pagination={false}
              />,
            },
            pagination: "false",
            rowKey: "id",
            rowSelection: {
              onChange: (selectedRowKeys, selectedRows) => {
                setselected(selectedRows)
              },
            }
          },
        ],
      },
      {
        cardTitle: "强制关单信息",
        itemData: [
          {
            title: "关单人",
            key: "closeUserName",
          },
          {
            title: "关单时间",
            key: "closeTime",
          }
        ],
      },
      {
        cardTitle: "上架明细",
        noPrint: true,
        itemData: [
          {
            key: "materialUploadList",
            type: "table",
            col: { span: 24 },
            columns: [
              {
                title: "物料编码 - 名称",
                dataIndex: "materieName",
                key: "materieName",
                search: false,
                render: (dom, row) => {
                  return (row.materieCode ?? '') + " - " + (row.materieName ?? '')
                }
              },
              {
                title: "供应商编号 - 名称",
                dataIndex: "supplierNo",
                key: "supplierNo",
                search: false,
                render: (dom, row) => {
                  return (row.supplierNo ?? '') + " - " + (row.supplierName ?? '')
                }
              },
              {
                title: "批次号/SN号",
                dataIndex: "materieControlNo",
                key: "materieControlNo",
                search: false,
              },
              {
                title: "入库数量",
                dataIndex: "instroeNum",
                key: "instroeNum",
                search: false,
              },
              {
                title: "库存单位",
                dataIndex: "productionUnitName",
                key: "productionUnitName",
                search: false,
              },
            ],
            expandable: {
              defaultExpandAllRows: true,
              expandedRowRender: record => <Table
                style={{ marginLeft: 48 }}
                columns={[
                  {
                    title: "库位名称",
                    dataIndex: "storePositionName",
                    key: "storePositionName",
                    search: false,
                    "formItemProps": () => {
                      return {
                        rules: [{ required: true, message: '此项为必填项' }],
                      };
                    },
                  },
                  {
                    title: "上架数量",
                    dataIndex: "instroeNum",
                    key: "instroeNum",
                    search: false,
                    "formItemProps": () => {
                      return {
                        rules: [{ required: true, message: '此项为必填项' }],
                      };
                    },
                  }
                  ,
                  {
                    title: "备注",
                    dataIndex: "remark",
                    key: "remark",
                    search: false,
                  }
                  ,
                  {
                    title: "操作人",
                    dataIndex: "uploadUserName",
                    key: "uploadUserName",
                    search: false,
                  }
                  ,
                  {
                    title: "操作时间",
                    dataIndex: "uploadTime",
                    key: "uploadTime",
                    search: false,
                  }
                ]}
                dataSource={record.uploadList}
                pagination={false}
              />,
            },
            pagination: "false"
          },
        ],
      },
    ]
  }), doinsert = (fid, storeId) => ({
    totalCard: [
      //物料详情
      {
        cardTitle: "基本信息",
        itemData: [
          {
            title: "入库单号",
            key: "materieInstoreNo",
          },
          {
            title: "入库类型",
            key: "instoreTypeName",
          },
          {
            title: "入库仓库",
            key: "storeName",
          },
          {
            title: "相关单号",
            key: "businessNo",
          },
          {
            title: "备注",
            key: "remark",
          },
          {
            title: "创建人",
            key: "createUserName",
          },
          {
            title: "创建时间",
            key: "createTime",
          },
          {
            title: "状态",
            key: "statusName",
          }
        ],
      },
      {
        cardTitle: "物料信息列表",
        extra: true,
        extrapath: "/ngic-workmanship/wmsMaterieInstore/upload",
        extrakey: "submit",//redux key
        itemData: [
          {
            key: "materialList",
            type: "table",
            col: { span: 24 },
            columns: [
              {
                title: "物料编码 - 名称",
                dataIndex: "materieName",
                key: "materieName",
                search: false,
                render: (dom, row) => {
                  return (row.materieCode ?? '') + " - " + (row.materieName ?? '')
                }
              },
              {
                title: "供应商编号 - 名称",
                dataIndex: "supplierNo",
                key: "supplierNo",
                search: false,
                render: (dom, row) => {
                  return (row.supplierNo ?? '') + " - " + (row.supplierName ?? '')
                }
              },
              {
                title: "批次号/SN号",
                dataIndex: "materieControlNo",
                key: "materieControlNo",
                search: false,
              },
              {
                title: "入库数量",
                dataIndex: "instroeNum",
                key: "instroeNum",
                search: false
              },
              {
                title: "未上架数量",
                dataIndex: "remainderNums",
                key: "remainderNums",
                search: false,
              },
              {
                title: "库存单位",
                dataIndex: "productionUnitName",
                key: "productionUnitName",
                search: false,
              },
            ],
            expandable: {
              expandedRowRender: record => <EditUpload record={record} fid={fid} storeId={storeId} />,
            },
            rowKey: "id"
          },
        ],
      },
    ]
  });




export default {
  one,
  two,
  three,
  four,
  detail,
  doinsert
};