<template>
    <!-- 交收登记-->
    <a-modal class="custom-detail add-custom "
             :title="selectedRow.contracttype===1? '采购合同-交收登记': '销售合同-交收登记'"
             v-model:visible="visible"
             @cancel="cancel"
             width="890px">
        <template #footer>
            <a-button key="submit"
                      type="primary"
                      @click="cancel">取消
            </a-button>
            <a-button key="submit"
                    type="primary"
                    :loading="loading"
                    @click="submit">交收登记
            </a-button>
        </template>
        <fieldset class="formFieldSet">
            <legend>合同基本信息</legend>
            <a-form class="inlineForm">
                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="合同编号">
                            <span class="white">{{ formatValue(selectedRow.contractno) }}</span>
                        </a-form-item>
                    </a-col>
                    <a-col :span="12">
                        <a-form-item label="定价.
                        类型">
                            <span class="white">{{ getPriceTypeName(selectedRow.pricetype) }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>
                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item :label="selectedRow.contracttype===1? '采购方': '销售方'">
                            <span class="white">{{ formatValue(selectedRow.accountname) }}</span>
                        </a-form-item>
                    </a-col>
                    <a-col :span="12">
                        <a-form-item label="现货品种">
                            <span class="white">{{ formatValue(selectedRow.deliverygoodsname) }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>
                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="合同签署量">
                            <span class="white">{{ formatValue(selectedRow.qty + selectedRow.enumdicname) }}</span>
                        </a-form-item>
                    </a-col>
                    <a-col :span="12">
                        <a-form-item label="合同暂定价">
                            <span class="white">{{ formatValue(selectedRow.price) }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>
                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="点价合约">
                            <span class="white">{{ formatValue(selectedRow.goodsname) }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>
            </a-form>
        </fieldset>
        <fieldset class="formFieldSet">
            <legend>已登记信息</legend>
            <a-form class="inlineForm">
                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="已定价量">
                            <span class="white">{{ selectedRow.pricedqty + selectedRow.enumdicname }}</span>
                        </a-form-item>
                    </a-col>
                    <a-col :span="12">
                        <a-form-item label="已点均价">
                            <span class="white">{{ formatValue(selectedRow.pricedavg) }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>
            </a-form>
        </fieldset>
        <fieldset class="formFieldSet">
            <legend>本次点价信息</legend>
            <a-form class="inlineForm"
                        ref="formRef"
                        :model="formState"
                        :rules="formStateRules">
                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="点价价格"  name="PricedPrice">
                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedPrice" :min="0" placeholder="请输入点价价格"/>
                        </a-form-item>
                    </a-col>
                    <a-col :span="12">
                        <a-form-item label="升贴水">
                            <span class="white">{{ formatValue(selectedRow.pricemove) }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>

                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="商品价格">
                            <span class="white">{{ Number(selectedRow.pricemove) + Number(formState.PricedPrice) }}</span>
                        </a-form-item>
                    </a-col>
                    <a-col :span="12">
                        <a-form-item label="点价数量" name="PricedQty">
                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedQty" :min="0" :max="selectedRow.unpricedqty" placeholder="请输入点价数量"/>
                            <span class="white">未定价量{{selectedRow.unpricedqty}}{{selectedRow.enumdicname}} </span>
                            <span class="white" @click="formState.PricedQty = selectedRow.unpricedqty"> 全部登记</span>
                        </a-form-item>
                    </a-col>
                </a-row>

                <a-row :gutter="24">
                    <a-col :span="12">
                        <a-form-item label="点价金额">
                            <span class="white">{{( Number(selectedRow.pricemove) + Number(formState.PricedPrice)) * formState.PricedQty }}</span>
                        </a-form-item>
                    </a-col>
                </a-row>
            </a-form>
        </fieldset>
    </a-modal>
</template>

<script lang="ts">
import {defineComponent, PropType, reactive, ref,unref} from 'vue';
import {closeModal} from '@/common/setup/modal/index';
import {formatValue} from "@/common/methods";
import {Ermcp3SellBuyContract} from "@/services/go/ermcp/purchase/interface";
import {getPriceTypeName} from "@/views/business/purchase/setup";
import { operationContractReq } from '@/services/proto/contract';
import { message } from 'ant-design-vue';

export default defineComponent({
    name: 'purchase_pending_settlement',
    components: {},
    props: {
        selectedRow: {
            type: Object as PropType<Ermcp3SellBuyContract>,
            default: {},
        },
    },
    setup(props) {
        const {visible, cancel} = closeModal('purchase_pending_settlement');
        const loading = ref<boolean>(false);
        function objectToUint8Array(data: object) {
            const encode = encodeURI(JSON.stringify(data));// 对字符串进行编码
            const base64String = btoa(encode);// 对编码的字符串转化base64
            const padding = '='.repeat((4 - base64String.length % 4) % 4);
            const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
            const rawData = window.atob(base64);
            const outputArray = new Uint8Array(rawData.length);
            for (var i = 0; i < rawData.length; ++i) {
                outputArray[i] = rawData.charCodeAt(i);
            }
            return outputArray;
        }

        const formRef = ref();
        const formState = reactive({ PricedPrice: 0, PricedQty: 0 });
        const numberIstrue = (rule: any, value: any) => {
            if (!value) {
                return Promise.reject(new Error('请输入正确的值'));
            } else {
                return Promise.resolve();
            }
        };
        const formStateRules = {
            PricedPrice: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
            PricedQty: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
        }
        function submit() {
            const wrapEl = unref(formRef);
            wrapEl.validate().then(() => {
                loading.value = true;
                console.log(objectToUint8Array(formState));
                operationContractReq({
                    OperateType: 1, // uint32 操作类型-1:登记2:确认3：拒绝4：撤销
                    Info: {
                        OperateApplyType: 1, // uint32 操作申请类型-1:点价2:结算3:款项4:发票
                        RelatedID: 1, // uint64 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
                        DetailJson : objectToUint8Array(formState), // bytes 明细JSON {}
                    }
                }).then(()=>{
                    message.success('登记成功!')
                    loading.value = false;
                    cancel();
                }).catch(err=>{
                    message.error(err)
                    loading.value = false;
                    cancel();
                })
            });
        }

        return {
            visible,
            cancel,
            submit,
            loading,
            formRef,
            formState,
            formatValue,
            formStateRules,
            getPriceTypeName,
        };
    },
});
</script>

<style lang="less">
</style>;
