<template>
    <div>
        <van-pull-refresh v-model="isLoading"
                          success-text="刷新成功"
                          @refresh="onRefresh"
                          :disabled="isRefreshDisable"
        >
        <mt-header title="人工网点申领" v-if="showNav()">
            <div  slot="left" @click="goBack">
                <mt-button icon="back"></mt-button>
            </div>
        </mt-header>

        <div>
            <div class="flex_center top_info" >
            <div>
            <div class="netType_div"
                 :style="{background: (dataInfo.netType == 1 ? '#13C2C2': '#1890FF')}"
            >
                <span style="margin: 0 auto">{{routerDetail.netTypeName}}</span>
            </div>
            <div class="netNameTitle">{{routerDetail.netName || '未知'}}</div>
            </div>

            <div>
                <div><span class="manualPel">申领人</span></div>
                <div class="netNameTitle"><span>{{routerDetail.telephone || '未知'}}</span></div>
            </div>
            </div>

            <div class="listTitle"><span class="listTitle_span">药具申领</span></div>

            <div
                    class="list-data"
                    v-infinite-scroll="loadMore"
                    :infinite-scroll-disabled="loading"
                    infinite-scroll-distance="10"
                    v-show="!noDataShow"
                    ref="mc1"
            >
                <div class="content" v-for="item in detailInfo" :key="item.id">
                    <div class="title_bor">
                        <div class="title">
                            {{item.medicalName}}
                        </div>
                        <!--<div class="leftManual">
                            还可申领
                            <span style="color: #1890FF;margin: 0px 2px">{{item.available}}</span>
                            <span>{{item.unit}}</span>
                        </div>-->
                    </div>
                    <div class="details">
                        <div class="item">
                            <label class="item-left">生产厂家</label>
                            <label class="item-right">{{item.factoryName || '--'}}</label>
                        </div>
                        <div class="item">
                            <label class="item-left">类型</label>
                            <label class="item-right">{{item.breedName || '--'}}</label>
                        </div>
                        <div class="item">
                            <label class="item-left">规格</label>
                            <label class="item-right">{{item.specs || '--'}}</label>
                        </div>

                        <div class="flex_center">
                            <div class="item">
                                <label class="item-left">库存数量</label>
                                <label class="item-right">{{item.unit || '0'}} </label>
                            </div>
                        <!--<div class="item">
                            <label class="item-left">已申领</label>
                            <label class="item-right">{{item.received || 0}} {{item.receivedUnit}}</label>
                        </div>-->
                        <div class="item">
                            <div class="item-left del" @click="delSingleNumber(item)">-</div> <!--@click="delNumber(item)"-->
                            <input type="number" class="item_input" v-model="item.applyNumber" > <!--@keyup="changeNumber(item)"-->
                            <div class="item-right add" @click="addSingleNumber(item)">+</div> <!--@click="addNumber(item)"-->
                        </div>
                        </div>
                        <!--class="item-right add sub"-->
                        <div class="sub"  @click="singleSub(item)" v-log="['药具领取', '确定按钮']">申请领取</div>
                    </div>
                </div>
            </div>
            <div class="loading" v-if="loading">
                <span id="load-text">{{loadText}}</span>
            </div>
          <!--  <div class="sumi_medical" v-if="!noDataShow">
                <mt-button type="primary" style="width: 200px" @click="onSubmit">申领药具</mt-button>
            </div>-->
            <div v-if="noDataShow">
                <NoData>
                    <template v-slot:content>
                        <span>该网点暂时没有可领用的药具,请与网点管理员联系</span>
                    </template>
                </NoData>
            </div>

            <div>
                <van-dialog v-model="showForm"  show-cancel-button @confirm="confireForm" @cancel="closeForm">
                    <div style="padding: 8px">
                        <div style="font-weight: bold;padding: 7px" slot="title">输入领取人信息</div>
                       <!-- @change="changeIdCard"-->
                        <van-form  ref="pform" :show-error-message="true">
                            <van-field
                                    v-model="formData.idCard"
                                    name="idCard"
                                    class="res_input"
                                    placeholder="请输入领取人身份证号码(必填)"
                                    :rules="[
                                    { required: true, message: '请输入身份证号' },
                                    { validator: idCardValidator, message: '请输入正确的身份证号' }
                                    ]"
                            />
                            <van-field
                                    v-model="formData.residentName"
                                    name="residentName"
                                    class="res_input"
                                    placeholder="请输入领取人姓名(必填)"
                                    :rules="[{ required: true, message: '请填写姓名' }]"
                            />
                        </van-form>
                    </div>
                </van-dialog>
            </div>

        </div>
        </van-pull-refresh>
    </div>
</template>

<script>
    import {
        addManualMedicalRecord,
        addLossReport,
        getUserInfoByIdCard, getReClaimList
    } from "../utils/api";
    import NoData from './component/noData';
    import { Toast,Indicator } from 'mint-ui';
    import {receiveWay} from "../utils/dictionaries";
    import {idCardValidator} from '../utils/common'

    export default {
        components: {NoData},
        data() {
            return {
                loading: false,
                detailInfo: [],
                loadText:'加载中...',
                noDataShow: false,
                sessionInfo: {},
                routerDetail: {},
                param: {
                    pageIndex: 0,
                    pageSize: 10
                },
                dataInfo: {},
                showForm: false,
                hasError: false,
                formData:{
                    idCard: undefined,
                    residentName: undefined
                },
                isLoading: false,
                isRefreshDisable: false,
                scrollTop: 0
            }
        },
        watch: {
            scrollTop(newval) {
                if (newval> 0) {
                    this.isRefreshDisable = true
                } else {
                    this.isRefreshDisable = false
                }
            }
        },
        mounted() {
            this.$nextTick(() => {
                const list = this.$refs.mc1
                list.addEventListener('scroll', () => {
                    this.scrollTop = list.scrollTop
                })
            })
        },
        created() {
            this.routerDetail = this.$route.query
            // if (this.routerDetail.resource == 1) {
            //     this.showForm = true
            //     let AppPeople = JSON.parse(window.localStorage.getItem('AppPeople'))
            //     if (AppPeople) {
            //         this.formData.residentName = AppPeople.residentName
            //         this.formData.idCard = AppPeople.idCard
            //     }
            // } else {
            //     this.showForm = false
            // }
            // this.sessionInfo = JSON.parse(window.sessionStorage.getItem('mobileTokenIno'))
        },
        methods: {
            idCardValidator,
            //刷新
            onRefresh() {
                this.isLoading = true
                this.loading = true
                this.param.pageIndex = 1
                this.getRecordInfo()
            },
            getRecordInfo(callBack) {
                let par = {
                    id: this.routerDetail.id,
                    ...this.param
                }
                getReClaimList(par).then(({data = {}}) => {
                    const {dataList = []} = data.data
                    dataList.forEach(item => {
                        item['applyNumber'] = 0
                        item['availableCopy'] = item.available
                    })
                    if (this.isLoading) { //刷新时先赋空
                        this.detailInfo = []
                    }
                    this.detailInfo = this.detailInfo.concat(dataList)
                    if (this.detailInfo.length == 0) {
                        this.noDataShow = true
                    } else {
                        this.noDataShow = false
                    }
                    if (dataList.length < this.param.pageSize) {
                        this.loadText = '暂无更多数据'
                    } else {
                        this.loading = false
                    }
                    this.isLoading = false
                    // callBack && callBack()
                }).catch(res => {
                    Toast({
                        message: '系统异常,请联系客服!',
                        duration: 2000
                    });
                    this.loading = false
                }).finally(() => {
                    this.loading = false
                    this.isLoading = false
                })
            },
            loadMore() {
                this.loading = true
                this.param.pageIndex += 1
                this.getRecordInfo()
            },
            changeIdCard() {
                let result = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(this.formData.idCard)
                if (result) {
                    let par = {
                        idCard: this.formData.idCard
                    }
                    getUserInfoByIdCard(par).then(({data}) => {
                        this.formData.residentName = data.data.residentName
                    })
                }
            },
            confireForm() {
                this.$refs.pform.validate(['residentName', 'idCard']).then(() => {
                    window.localStorage.setItem('AppPeople', JSON.stringify(this.formData))
                }).catch((err) => {
                    this.showForm = true
                    console.log(err)
                })
            },
            closeForm() {
                this.$router.push({path:'/'})
            },
            delNumber(val) {
                this.detailInfo.forEach(item => {
                    if (item.id == val.id) {
                        if (item.applyNumber > 0) {
                            item.applyNumber --
                        } else {
                            item.applyNumber = 0
                        }
                    }
                })

                let ava = 0
                let availab = 0
                this.detailInfo.forEach(item => {
                    if (val.breedId == item.breedId) {
                        ava += (+item.applyNumber)
                        if (val.id != item.id) {
                            availab+= (+item.applyNumber)
                        }
                    }
                })

                this.detailInfo.forEach(item => {
                    if (val.breedId == item.breedId) {
                        item.available = val.availableCopy - ava
                        if(item.available <= 0) {
                            item.available = 0
                            if (val.id == item.id) {
                                item.applyNumber = val.availableCopy - availab
                            }
                        }
                    }
                })

            },
            delSingleNumber(val) {
                this.detailInfo.forEach(item => {
                    if (item.id == val.id) {
                        if (item.applyNumber > 0) {
                            item.applyNumber --
                        }
                    }
                })
            },
            addNumber(val) {
                this.detailInfo.forEach(item => {
                    if (item.id == val.id ) {
                        if (item.applyNumber < val.availableCopy) {
                            item.applyNumber ++
                        } else {
                            item.applyNumber = val.availableCopy
                        }
                    }
                })
                let ava = 0
                let availab = 0
                this.detailInfo.forEach(item => {
                    if (val.breedId == item.breedId) {
                        ava += (+item.applyNumber)
                        if (val.id != item.id) {
                            availab+= (+item.applyNumber)
                        }
                    }
                })

                this.detailInfo.forEach(item => {
                    if (val.breedId == item.breedId) {
                        item.available = val.availableCopy - ava
                        if(item.available <=0) {
                            item.available = 0
                            if (val.id == item.id) {
                                item.applyNumber = val.availableCopy - availab
                            }
                        }
                    }
                })

            },
            addSingleNumber(val) {
                this.detailInfo.forEach(item => {
                    if (item.id == val.id ) {
                            item.applyNumber ++
                    }
                })
            },
            changeNumber(val) {
                this.detailInfo.forEach(item => {
                    if (item.id == val.id ) {
                        if (item.applyNumber > val.availableCopy) {
                            item.applyNumber = val.availableCopy
                        }
                        if (item.applyNumber < 0) {
                            item.applyNumber = 0
                        }
                    }
                })

                let ava = 0
                let availab = 0
                this.detailInfo.forEach(item => {
                    if (val.breedId == item.breedId) {
                        ava += (+item.applyNumber)
                        if (val.id != item.id) {
                            availab += (+item.applyNumber)
                        }
                    }
                })
                this.detailInfo.forEach(item => {
                    if (val.breedId == item.breedId) {
                        item.available = val.availableCopy - ava
                        if(item.available <=0) {
                            item.available = 0
                            if (val.id == item.id) {
                                item.applyNumber = val.availableCopy - availab
                            }
                        }
                    }
                })

            },
            onSubmit() {
                let avali = 0
                let info = JSON.parse(window.sessionStorage.getItem('mobileTokenIno'))
                const {phone = '', userId =''} = info
                this.detailInfo.forEach(item => {
                    avali += (+item.applyNumber)
                    item['telephone'] = phone
                    item['networkId'] = this.routerDetail.id
                    item['receiveWay'] = receiveWay[1].id
                    item['produceDate'] = item.produceDate + ' '+'00:00:00'
                    item['expireDate'] = item.expireDate + ' '+'00:00:00'

                })
                let result = []
                for (let i= 0; i< this.detailInfo.length; i++) {
                    if (this.detailInfo[i].applyNumber != '' &&
                        this.detailInfo[i].applyNumber != null &&
                        typeof this.detailInfo[i].applyNumber != 'undefined' &&
                        this.detailInfo[i].applyNumber != '0'
                    ) {
                        result.push(this.detailInfo[i])
                    }
                }
                if (avali == 0) {
                    return  Toast({
                        message: '请先输入数量!',
                        duration: 2000
                    });
                }
                let par = {
                   dataList: result
                }
                addManualMedicalRecord(par).then(({data}) => {
                    if (data.code == 'SUCCESS') {
                        this.$uweb.trackEvent('药具领取结果', '成功')
                        this.$router.push({path:"/manualSuccess",query:{info: data.data}});
                    } else {
                        this.$uweb.trackEvent('药具领取结果', '失败')
                        Toast({
                            message: `${data.msg}`,
                            duration: 2000
                        });
                    }
                })
            },
            //单条确认申领
            singleSub(record) {
                if (+record.applyNumber >0) {
                    Indicator.open()
                    // let info = JSON.parse(window.sessionStorage.getItem('mobileTokenIno'))
                    // const {phone = '', userId =''} = info
                    // let  res = {idCard: undefined, residentName: undefined}
                    // if (this.routerDetail.resource == 1) {
                    //     res.idCard = this.formData.idCard
                    //     res.residentName = this.formData.residentName
                    // } else {
                    //     res.idCard = this.routerDetail.idCar
                    //     res.residentName = this.routerDetail.residentName
                    // }
                    const {updated, applyNumber, id, ...others} = record
                    let par = {
                        ...others,
                        telephone : this.routerDetail.telephone,
                        idCar: this.routerDetail.idCar,
                        networkId: this.routerDetail.networkId,
                        receiveWay: receiveWay[0].id,
                        anewNumber: +record.applyNumber,
                        number: this.routerDetail.number,
                        produceDate: record.produceDate,
                        expireDate: record.expireDate,
                        residentName: this.routerDetail.residentName,
                        createDate: this.routerDetail.createDate,
                        resource: 1,
                        lossAuditStatus: 0,
                        id: this.routerDetail.id
                    }
                    console.log(JSON.stringify(par))
                    addLossReport(par).then(({data}) => {
                        if (data.code == 'SUCCESS') {
                            Indicator.close()
                            this.$notify({ type: 'success', message: '申请成功!' ,className: 'toastIndex',});
                            this.$router.push({path:"/collectRecords",query:{}});
                            // 成功通知
                        } else {
                            Indicator.close()
                            this.$notify({ type: 'danger', message: '申请失败!' , className: 'toastIndex',});
                        }
                    }).catch(() => {
                        Indicator.close()
                    })

                } else {
                    Toast({
                        message: `请输入领取数量`,
                        duration: 2000
                    });
                }
            },
            goBack() {
                window.history.go(-1)
            },
        },
        beforeDestroy() {
            this.detailInfo = []
        }
    }
</script>

<style scoped lang="less">
    .content {
        width: 90%;
        margin: 20px auto 0px;
        padding: 10px;
        border: 1px solid #F3F3F3;
        border-radius: 1rem;
        box-shadow: darkgrey 0px 2px 20px -10px;
        .title {
            font-weight: bold;
            line-height: 1.5;
            font-size: 14px!important;
            padding: 0px 0px 3px 0px;
            /*width: 70%;*/

        }
        .leftManual {
            font-size: 12px;
            color: #595959;
        }
        .sub {
            background: #1bd09f;
            /*width: 70px;*/
            color: #F3F3F3!important;
            padding: 5px 10px;
            border-radius: 5px;
            text-align: center;
            margin: 10px 0px 0px 0px;
        }
    }

    .manualPel {
        color: #595959;
        font-size: 12px;
    }
    .content .title_bor {
        border-bottom: 1px solid #F3F3F3;
    }

    .content .details .item {
        line-height: 24px;
        .del {
            font-size: 26px;
            display: inline-block;
            padding: 0px 8px;
        }
        .item_input {
            width: 40px;
            background: #F5F5F5;
            border-radius: 4px;
            border: 0px;
            line-height: 24px;
            text-align: center;
        }
        .add {
            font-size: 26px;
            display: inline-block;
            /*padding: 0px 8px;*/
        }
        .sub {
          margin-left: 60px!important;
            background: #26a2ff;
            color: #F3F3F3!important;
            padding: 3px 10px;
            border-radius: 5px;
        }
    }

    .content .details .item .item-right {
        /*float: right;*/
        font-size: 12px;
        margin-left: 8px;
        color: #262626;
    }
    .content .details .item .item-left {
        color: #595959;
        font-size: 12px;
    }
    .list-data{
        /*height: calc(100% - 40px);*/
        max-height: calc(100vh - 180px);
        overflow-y: auto;
        margin-bottom: 10px;
    }
    .loading{
        height: 80px;
        width: 100%;
        text-align: center;
    }

    .listTitle {
        margin: 20px 0px 0px 12px;
        .listTitle_span {
            font-weight: 600;
            font-size: 16px;
        }
    }
    .top_info {
        border: 1px solid #F3F3F3;
        border-radius: 0px 0px 16px 16px;
        padding: 12px;
        box-shadow: darkgrey 0px 2px 20px -10px;
    }
    .netType_div {
        text-align: center;
        color: white;
        border-radius: 8px 2px;
        padding: 4px 9px;
        width: 95px;
        font-size: 10px
    }
    .netNameTitle {
        font-size: 14px!important;
        font-weight: 500;
        margin-top: 11px
    }

    .sumi_medical {
        position: fixed;
        z-index: 2;
        left: calc(50% - 100px);
        bottom: 20px;
    }
</style>
<style lang="less">
    .res_input {
        input[type=text], input[type=date] {
            background: #fff;
            padding: 1.375rem 0.75rem!important;
        }
    }
</style>

<style lang="less">
    .van-pull-refresh__track {
        height: 100vh!important;
    }
</style>