var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
import { CardForm } from '@component/ui';
import { ProForm, ProFormDatePicker, ProFormSelect, ProFormText, ProFormTextArea, ProFormTreeSelect, ProFormDependency, } from '@ant-design/pro-components';
import { getAqServiceStandard } from 'actions/service.action';
import React, { useRef, useState } from 'react';
import { checkPolicy, getExpertList, } from './action';
import { getExecutedOrganList } from 'actions/base.action';
import { Button, Divider, Form, Input, Space } from 'antd';
import { useReportContext } from './context';
import { getStorage } from "@component/utils";
import { PlusOutlined } from "@ant-design/icons";
import { concat, find, isEmpty, omit, uniqueId } from "lodash";
export default function () {
    const [organId, setOrganId] = React.useState();
    const form = Form.useFormInstance();
    const { poltform } = useReportContext();
    const [userOptions, setUserOptions] = useState([]);
    const organInputRef = useRef(null);
    const expertInputRef = useRef(null);
    const [organ_items, set_organ_items] = useState([]);
    const [expert_items, set_expert_items] = useState([]);
    const [organ_name, set_organ_name] = useState('');
    const [expert_name, set_expert_name] = useState('');
    function onOrganChange(value) {
        return __awaiter(this, void 0, void 0, function* () {
            form.resetFields(['user']);
            setOrganId([]);
            setOrganId(value.value);
            const options = yield getExpertList({
                serviceOrganId: value.value,
                certificationStatus: 3,
            });
            console.log('options', options);
            setUserOptions(options);
        });
    }
    function onOrganNameChange(event) {
        set_organ_name(event.target.value);
    }
    function onExpertNameChange(event) {
        set_expert_name(event.target.value);
    }
    function addOrganItem() {
        if (organ_name && !find(organ_items, ['label', organ_name])) {
            set_organ_items([
                ...organ_items,
                {
                    value: uniqueId(),
                    label: organ_name,
                },
            ]);
        }
    }
    function addExpertItem() {
        if (expert_name && !find(expert_items, ['label', expert_name])) {
            set_expert_items([
                ...expert_items,
                {
                    value: uniqueId(),
                    label: expert_name,
                },
            ]);
        }
    }
    return (_jsxs(CardForm, { children: [_jsx(ProForm.Item, { noStyle: true, name: "serviceObjectType", hidden: true }), _jsx(ProFormDependency, Object.assign({ name: [''] }, { children: ({}, { setFieldsValue }) => (_jsx(ProFormText, { name: "policyNumber", label: "\u4FDD\u5355\u53F7", formItemProps: {
                        validateTrigger: ['onChange', 'onBlur'],
                    }, rules: [
                        { required: true },
                        {
                            validateTrigger: 'onBlur',
                            validator: (_, value) => __awaiter(this, void 0, void 0, function* () {
                                const result = yield checkPolicy({ policyNumber: value });
                                if (result) {
                                    return Promise.resolve();
                                }
                                else {
                                    return Promise.reject('保单不存在');
                                }
                            }),
                        },
                    ], placeholder: "\u8BF7\u8F93\u5165\u4FDD\u5355\u53F7", fieldProps: {
                        onChange: (e) => __awaiter(this, void 0, void 0, function* () {
                            var _a;
                            const value = (_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.value;
                            const data = yield checkPolicy({ policyNumber: value });
                            if (data) {
                                setFieldsValue({
                                    customerName: data === null || data === void 0 ? void 0 : data.customerName
                                });
                            }
                            else {
                                setFieldsValue({
                                    customerName: null
                                });
                            }
                        })
                    } })) })), _jsx(ProForm.Item, Object.assign({ noStyle: true, shouldUpdate: true }, { children: (form) => {
                    return (_jsx(ProFormSelect, { name: "aqServiceStandardCategory", label: "\u670D\u52A1\u6807\u51C6\u7C7B\u522B", request: getAqServiceStandard, placeholder: "\u8BF7\u9009\u62E9\u670D\u52A1\u6807\u51C6\u7C7B\u522B", rules: [{ required: true, message: '请选择服务标准类别' }], fieldProps: {
                            labelInValue: true,
                        } }));
                } })), poltform == 'insure' && (_jsxs(_Fragment, { children: [_jsx(ProFormTreeSelect, { fieldProps: {
                            showSearch: true,
                            onChange: onOrganChange,
                            allowClear: true,
                            labelInValue: true,
                            dropdownRender: (menu) => (_jsxs(_Fragment, { children: [menu, _jsx(Divider, { style: { margin: '8px 0' } }), _jsxs(Space, Object.assign({ style: { padding: '0 8px 4px' } }, { children: [_jsx(Input, { placeholder: "\u8BF7\u8F93\u5165\u670D\u52A1\u673A\u6784", ref: organInputRef, value: organ_name, onChange: onOrganNameChange }), _jsx(Button, Object.assign({ type: "text", icon: _jsx(PlusOutlined, {}), onClick: addOrganItem }, { children: "\u6DFB\u52A0\u670D\u52A1\u673A\u6784" }))] }))] })),
                        }, name: "organ", label: "\u670D\u52A1\u673A\u6784", params: {
                            items: organ_items
                        }, request: (params) => __awaiter(this, void 0, void 0, function* () {
                            return getExecutedOrganList(omit(params, ['items'])).then(data => {
                                if (!isEmpty(data)) {
                                    return concat([], params.items, data);
                                }
                                return organ_items;
                            });
                        }), placeholder: "\u8BF7\u9009\u62E9\u670D\u52A1\u673A\u6784", rules: [{ required: true, message: '请选择服务机构' }] }), _jsx(ProFormSelect, { name: "user", label: "\u670D\u52A1\u4E13\u5BB6", placeholder: "\u8BF7\u9009\u62E9\u670D\u52A1\u4E13\u5BB6", rules: [{ required: true, message: '请选择服务专家' }], fieldProps: {
                            labelInValue: true,
                            options: concat([], userOptions, expert_items),
                            notFoundContent: organId ? '暂无数据' : '请选择服务专家',
                            dropdownRender: (menu) => (_jsxs(_Fragment, { children: [menu, _jsx(Divider, { style: { margin: '8px 0' } }), _jsxs(Space, Object.assign({ style: { padding: '0 8px 4px' } }, { children: [_jsx(Input, { placeholder: "\u8BF7\u9009\u62E9\u670D\u52A1\u4E13\u5BB6", ref: expertInputRef, value: expert_name, onChange: onExpertNameChange }), _jsx(Button, Object.assign({ type: "text", icon: _jsx(PlusOutlined, {}), onClick: addExpertItem }, { children: "\u6DFB\u52A0\u670D\u52A1\u4E13\u5BB6" }))] }))] })),
                        } })] })), poltform == 'expert' && (getStorage('roleId') == '10000000003' || getStorage('roleId') == '10000000001') && (_jsx(ProFormSelect, { name: "user", label: "\u670D\u52A1\u4E13\u5BB6", placeholder: "\u8BF7\u9009\u62E9\u670D\u52A1\u4E13\u5BB6", rules: [{ required: true, message: '请选择服务专家' }], request: () => {
                    return getExpertList({
                        serviceOrganId: getStorage('organId'),
                        certificationStatus: 3,
                    });
                    return [];
                }, fieldProps: {
                    labelInValue: true,
                } })), _jsx(ProFormText, { name: "customerName", label: "\u5BA2\u6237\u540D\u79F0", readonly: true, rules: [{ required: true }], placeholder: "\u8BF7\u8F93\u5165\u5BA2\u6237\u540D\u79F0" }), _jsx(ProFormText, { name: "address", label: "\u670D\u52A1\u5730\u5740", rules: [{ required: true }], placeholder: "\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740" }), _jsx(ProFormDatePicker, { name: "serviceStartAt", label: "\u670D\u52A1\u65E5\u671F", fieldProps: {
                    style: {
                        width: '100%',
                    },
                }, placeholder: "\u8BF7\u9009\u62E9\u670D\u52A1\u65E5\u671F", rules: [{ required: true, message: '请选择服务日期' }] }), _jsx(ProFormText, { name: "actualServiceCost", label: "\u5B9E\u9645\u652F\u4ED8\u91D1\u989D(\u5143)", rules: [{ required: true }], placeholder: "\u8BF7\u8F93\u5165\u5B9E\u9645\u652F\u4ED8\u91D1\u989D" }), _jsx(ProFormTextArea, { labelCol: {
                    span: 3,
                }, colProps: {
                    span: 24,
                }, fieldProps: {
                    maxLength: 500,
                    showCount: true,
                }, name: "serviceContent", label: "\u670D\u52A1\u5185\u5BB9\u7B80\u8FF0", placeholder: "\u8BF7\u8F93\u5165\u670D\u52A1\u5185\u5BB9\u7B80\u8FF0" }), _jsx(ProFormTextArea, { labelCol: {
                    span: 3,
                }, colProps: {
                    span: 24,
                }, fieldProps: {
                    maxLength: 500,
                    showCount: true,
                }, name: "remark", label: "\u5907\u6CE8", placeholder: "\u8BF7\u8F93\u5165\u5907\u6CE8" })] }));
}