<template>
  <!-- 新增计划 -->
  <a-modal class="commonModal"
           title="新增套保计划"
           v-model:visible="visible"
           centered
           @cancel="cancel"
           width="890px">
    <template #footer>
      <a-button key="submit"
                class="cancelBtn"
                @click="submit(1)">保存草稿
      </a-button>
      <a-button key="submit"
                type="primary"
                :loading="loading"
                @click="submit(2)">提交审核</a-button>
    </template>
    <a-form class="inlineForm"
            ref="formRef"
            :model="formState"
            :rules="rules">
      <a-row :gutter="24">
        <a-col :span="12">
          <a-form-item label="计划类型"
                       name="ContractType">
            <a-select class="inlineFormSelect"
                      style="width: 200px"
                      v-model:value="formState.ContractType"
                      placeholder="请选择计划类型">
              <a-select-option v-for="item in planTye"
                               :value="item.enumitemname"
                               :key="item.autoid">
                {{item.enumdicname}}
              </a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="计划名称"
                       name="HedgePlanNo">
            <a-input class="dialogInput"
                     v-model:value="formState.HedgePlanNo"
                     style="width: 200px"
                     placeholder="请输入计划名称" />
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="现货品种"
                       name="DeliveryGoodsID">
            <a-select class="inlineFormSelect"
                      style="width: 200px"
                      v-model:value="formState.DeliveryGoodsID"
                      @change="chooseMG"
                      placeholder="请选择现货品种">
              <a-select-option v-for="item in DGList"
                               :value="item.data.deliverygoodsid"
                               :key="item.data.deliverygoodsid">
                {{item.data.deliverygoodsname}}
              </a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="商品"
                       name="WRStandardID">
            <a-select class="inlineFormSelect"
                      style="width: 200px"
                      @change="chooseWR"
                      v-model:value="formState.WRStandardID"
                      placeholder="请选择商品">
              <a-select-option v-for="item in gmlist"
                               :value="item.wrstandardid"
                               :key="item.wrstandardid">
                {{item.wrstandardname}}
              </a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="标仓系数"
                       name="">
            <a-input class="dialogInput"
                     v-model:value="formState.ConvertFactor"
                     readonly
                     style="width: 200px"
                     placeholder="请输入标仓系数" />
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="计划量"
                       class="relative"
                       name="PlanQty">
            <a-input-number class="dialogInput"
                            style="width: 200px"
                            :min="0"
                            max="99999999999"
                            v-model:value="formState.PlanQty"
                            placeholder="请输入计划量"></a-input-number>
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="交易用户"
                       name="Tradeuserid">
            <a-select class="inlineFormSelect"
                      style="width: 200px"
                      v-model:value="formState.Tradeuserid"
                      placeholder="请选择交易用户">
              <a-select-option v-for="item in tableList"
                               :value="item.roleid"
                               :key="item.roleid">
                {{item.rolename}}
              </a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="结算币种"
                       name="Currencyid">
            <a-select class="inlineFormSelect"
                      style="width: 200px"
                      v-model:value="formState.Currencyid"
                      placeholder="请选择结算币种">
              <a-select-option v-for="item in priceTyep"
                               :key="item.enumitemname"
                               :value="item.enumitemname">
                {{item.enumdicname}}
              </a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="24">
          <a-form-item label="备注"
                       class="relative"
                       name="Remark">
            <a-input class="dialogInput"
                     v-model:value="formState.Remark"
                     style="width: 636px"
                     placeholder="请输入备注" />
          </a-form-item>
        </a-col>
      </a-row>
    </a-form>
  </a-modal>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';
import { formatTime, initData } from '@/common/methods/index';
import { getPayCurrencyTypeEnumList, getSpotContractTypeEnumList } from '@/common/constants/enumsList';
import { AllEnums } from '@/services/go/commonService/interface';
import { getMiddleGoodsD, handleForm } from '../setup';
import { ErmcpHedgePlanReq } from '@/services/proto/hedgeplan/interface';
import { getLongTypeLoginID } from '@/services/bus/login';
import { LongType } from '@/services/socket/login/interface';
import { hedgePlanReq } from '@/services/proto/hedgeplan';
import { getAreaUserId } from '@/services/bus/user';
import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
import { validateAction } from '@/common/setup/form';
import { FormState } from '../interface';
import { handlerManagerList } from '@/common/setup/user';
import { _closeModal } from '@/common/setup/modal/modal';

export default defineComponent({
    name: 'add-custom',
    emits: ['cancel', 'update'],
    setup(props, context) {
        const { visible, cancel } = _closeModal(context);
        const loading = ref<boolean>(false);
        const planTye = ref<AllEnums[]>(getSpotContractTypeEnumList());
        // 表单
        const { formRef, formState, rules } = handleForm();
        // 品种、品类
        const { DGList, getDG, gmlist, chooseMG, chooseWR, numberUnit } = getMiddleGoodsD(formState);
        // 交易用户
        const { tableList, queryTable } = handlerManagerList(loading, 2);
        // 币种
        const priceTyep = getPayCurrencyTypeEnumList();

        function submit(OperateType: 1 | 2) {
            validateAction<FormState>(formRef, formState).then((param) => {
                const loginId = getLongTypeLoginID() as LongType;
                const userid = getAreaUserId();
                const reqParam: ErmcpHedgePlanReq = {
                    HedgePlanNo: param.HedgePlanNo, // 计划类型
                    ContractType: param.ContractType, // 计划类型
                    DeliveryGoodsID: Number(param.DeliveryGoodsID),
                    WRStandardID: Number(param.WRStandardID), // 现货品种
                    PlanQty: Number(param.PlanQty), // 计划数量
                    OperateType: OperateType,
                    Currencyid: param.Currencyid,
                    ApplyId: Number(loginId),
                    PlanTime: formatTime(new Date(), 's'),
                    ProductType: 1,
                    Biztype: 1,
                    AreaUserID: userid,
                    Remark: param.Remark,
                };
                if (param.ConvertFactor) reqParam.ConvertFactor = param.ConvertFactor;
                if (param.Tradeuserid) reqParam.Tradeuserid = param.Tradeuserid;
                requestResultLoadingAndInfo(hedgePlanReq, reqParam, loading, OperateType === 1 ? ['保存草稿成功', '保存草稿失败:'] : ['提交申请成功', '提交申请失败:']).then(() => {
                    cancel(true);
                });
            });
        }
        initData(() => {
            getDG();
            queryTable();
        });
        return {
            visible,
            cancel,
            submit,
            loading,
            planTye,
            DGList,
            gmlist,
            chooseMG,
            tableList,
            priceTyep,
            formRef,
            formState,
            numberUnit,
            rules,
            chooseWR,
        };
    },
});
</script>

<style lang="less">
.add-custom {
}
</style
>;
