<template>
    <div>
        <van-pull-refresh v-model="isLoading"
                          success-text="刷新成功"
                          @refresh="onRefresh"
                          :disabled="isRefreshDisable"
        >
        <mt-header title="领取记录">
            <div slot="left" @click="goBack">
                <mt-button icon="back"></mt-button>
            </div>
            <div slot="right" @click="toLossReport" v-if="!lossVisible">
                <div class="nar_right">
                    <span v-if="detailInfo.length" style="font-size: 14px!important">重新申领</span>
                </div>
            </div>
            <div slot="right" @click="cancelLossReport" v-if="lossVisible">
                <div class="nar_right">
                    <span style="font-size: 14px!important">取消</span>
                </div>
            </div>
        </mt-header>

        <div>

            <div
                    class="list-data"
                    v-infinite-scroll="loadMore"
                    :infinite-scroll-disabled="loading"
                    infinite-scroll-distance="10"
                    id="collectListIds"
                    v-show="!lossVisible"
                    ref="notLoss"
            >
                <div class="content" v-for="item in detailInfo" :key="item.id">
                    <!-- 领取记录-->
                    <div>
                        <div class="title" style="display:flex;justify-content: space-between;align-items: center">
                            <div><span>{{item.medicalName}}</span></div>
                            <div v-if="item.lossAuditStatus === 0" style="min-width: 42px">
                                <div style="color: #FA8C16;">待审核</div>
                            </div>
                            <div v-if="item.lossAuditStatus === 1" style="min-width: 42px">
                                <div style="color: #F5222D;">已报损</div>
                            </div>
                            <div v-if="item.lossAuditStatus === 2" style="min-width: 42px">
                                <div style="color: #F5222D;">已驳回</div>
                            </div>
                        </div>
                        <div class="details">
                            <div class="item">
                                <label class="item-left">规格:</label>
                                <label class="item-right">{{item.specs || '--'}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">领取数量:</label>
                                <label class="item-right">{{item.receivedNum || '--'}} {{item.receivedUnit}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">领取时间:</label>
                                <label class="item-right">{{item.created || '--'}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">领取站点:</label>
                                <label class="item-right">{{item.netName || '--'}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">站点类型:</label>
                                <label class="item-right">{{item.netTypeName || '--'}}</label>
                            </div>
                        </div>
                    </div>
                </div>

            </div>

            <div
                    class="list-data"
                    v-infinite-scroll="loadLossReportMore"
                    :infinite-scroll-disabled="lossLoading"
                    infinite-scroll-distance="10"
                    id="collectListId"
                    v-show="lossVisible"
                    ref="loss"
            >
                <div class="content" v-for="item in lossDetailInfo" :key="item.id">
                    <!--可重新申领列表-->
                    <div class="title" style="display:flex;justify-content: space-between;align-items: flex-start">
                        <div style="word-break: break-all"><span>{{item.medicalName}}</span></div>
                        <!--<div v-if="item.lossAuditStatus === 0" style="min-width: 42px">
                            <div style="color: #FA8C16;">待审核</div>
                        </div>
                        <div v-if="item.lossAuditStatus === 1" style="min-width: 42px">
                            <div style="color: #F5222D;">已报损</div>
                        </div>
                        <div v-if="item.lossAuditStatus === 2" style="min-width: 60px">
                            <div style="border: 1px solid #F5222D;color: #F5222D;padding: 0px 8px">已驳回</div>
                        </div>-->

                        <div style="min-width: 110px" v-if="item.isShow">
                            <div class="sub1"  @click="toApply(item)"  style="white-space: nowrap">领取其他药具</div>
                        </div>
                    </div>
                    <div class="flex_center" @click="getCheckLossInfo(item)">
                        <div class="lossUncheck" v-if="!item.checked"></div>
                        <div class="losscheck" v-if="item.checked">
                            <div class="circle"></div>
                        </div>
                        <div class="details" style="flex: 1;">
                            <div class="item">
                                <label class="item-left">规格:</label>
                                <label class="item-right">{{item.specs || '--'}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">领取数量:</label>
                                <label class="item-right">{{item.receivedNum || '--'}} {{item.receivedUnit}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">领取时间:</label>
                                <label class="item-right">{{item.created || '--'}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">领取站点:</label>
                                <label class="item-right">{{item.netName || '--'}}</label>
                            </div>
                            <div class="item">
                                <label class="item-left">站点类型:</label>
                                <label class="item-right">{{item.netTypeName || '--'}}</label>
                            </div>
                        </div>
                    </div>
                </div>

            </div>

            <div class="loading" v-if="loading">
                <span id="load-text">{{loadText}}</span>
            </div>
            <div v-if="noDataShow">
                <NoData></NoData>
            </div>


            <van-popup
                    v-model="popupVisible"
                    position="bottom"
                    :round="false"
                    :overlay="false"
                    :style="{ height: otherReasonShow ? '240px' :'158px' }"
            >
                <div class="popForm">
                    <div class="first">
                        <div class="require title">重新申领数量</div>
                        <div>
                            <van-stepper v-model.number="formData.anewNumber" min="1" :max="clickInfo.receivedNum" integer/>
                        </div>
                    </div>

                    <div class="require title" style="margin-top: 10px;">重新申领原因</div>
                    <div class="flex_start_wrap">
                        <div v-for="(item, index) in adverseReaction"
                             class="unselected_c_adv adv"
                             :style="{marginLeft: index == 0 ? '0px' : '10px'}"
                             :key="item.value"
                             @click="getAdverse(item)"
                             :id="item.value"
                        >
                            <span style="line-height: 24px;margin: 0px 5px">{{item.label}}</span>
                        </div>
                    </div>
                    <div>
                        <van-field
                                v-if="otherReasonShow"
                                v-model="formData.otherReason"
                                rows="2"
                                autosize
                                type="textarea"
                                style="border: 1px solid #F3F3F3;margin: 12px auto 0px;"
                                placeholder="请输入其他重新申领的原因"
                        />
                    </div>

                    <div class="flex_center" style="margin-top: 12px">
                        <van-button type="primary" block plain style="margin-right: 20px;border-radius: 6px;"
                                    size="small" @click="cancelLossReport">取消
                        </van-button>
                        <van-button type="primary"
                                    block
                                    style="background: #00C99D;border-radius: 6px" size="small"
                                    :loading="btnLoad"
                                    @click="addLossReport"
                        >提交申请
                        </van-button>
                    </div>

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

<script>
    import {getUserCollectRecord, getUserLossReportRecord, addLossReport} from '../utils/api';
    import NoData from "./component/noData";
    import {Toast} from 'mint-ui';
    import {Indicator} from 'mint-ui';

    const adverseReaction = [
        {value: '1', label: '药具污染', checked: false},
        {value: '2', label: '药具报废', checked: false},
        {value: '3', label: '其他原因', checked: false},
    ]
    export default {
        name: "collectRecords",
        components: {NoData},
        data() {
            return {
                loading: false,
                btnLoad: false,
                lossLoading: false,
                detailInfo: [],
                lossDetailInfo: [],
                loadText: '加载中...',
                noDataShow: false,
                lossVisible: false,
                popupVisible: false,
                lossReportReasonUser: undefined,
                clickInfo: {},
                adverseReaction,
                otherReasonShow: false,
                param: {
                    telephone: undefined,
                    pageIndex: 0,
                    pageSize: 10
                },
                lossParam: {
                    telephone: undefined,
                    pageIndex: 0,
                    pageSize: 10
                },
                formData: {
                    anewNumber: undefined,
                    otherReason: undefined,
                    lossReportReasonUser: undefined,
                },
                isLoading: false,
                isRefreshDisable: false,
                scrollTop: 0
            }
        },
        watch: {
            scrollTop(newval) {
                if (newval> 0) {
                    this.isRefreshDisable = true
                } else {
                    this.isRefreshDisable = false
                }
            }
        },
        mounted() {
            this.$nextTick(() => {
                const notlist = this.$refs.notLoss
                notlist.addEventListener('scroll', () => {
                    this.scrollTop = notlist.scrollTop
                })
                const list = this.$refs.loss
                list.addEventListener('scroll', () => {
                    this.scrollTop = list.scrollTop
                })
            })
        },
        methods: {
            //刷新
            onRefresh() {
                this.isLoading = true

                if (this.lossVisible) {//重新申领列表
                    this.lossLoading = false
                    this.lossParam.pageIndex = 1
                    this.getLossRRecordInfo()

                } else {//领取记录列表
                    this.loading = true
                    this.param.pageIndex = 1
                    this.getRecordInfo()
                }

            },
            getRecordInfo(callBack) {
                Indicator.open();
                this.param.telephone = JSON.parse(window.sessionStorage.getItem('mobileTokenIno')).phone
                getUserCollectRecord(this.param).then(({data = {}}) => {
                    if (this.param.pageIndex == 1) {
                        this.detailInfo = []
                    }
                    const {dataList = []} = data.data
                    if (this.isLoading) { //刷新时先赋空
                        this.detailInfo = []
                    }
                    this.detailInfo = this.detailInfo.concat(dataList)
                    if (this.detailInfo.length == 0) {
                        this.noDataShow = true
                    } else {
                        this.noDataShow = false
                    }
                    if (data.data && data.data.length < this.param.pageSize) {
                        this.loadText = '暂无更多数据'
                    } else {
                        this.loading = false
                    }
                    Indicator.close();
                    this.isLoading = false
                    callBack && callBack()
                }).catch(res => {
                    Toast({
                        message: '系统异常,请联系客服!',
                        duration: 2000
                    });
                    this.loading = false
                    this.isLoading = false
                }).finally(() => {
                    this.loading = false
                    this.isLoading = false
                    Indicator.close();
                })
            },
            getLossRRecordInfo(callBack) {
                Indicator.open();
                this.lossParam.telephone = JSON.parse(window.sessionStorage.getItem('mobileTokenIno')).phone
                let par = {
                    ...this.lossParam,
                    lossAuditStatus: -1,
                    lossReportStatus: 0
                }
                getUserLossReportRecord(par).then(({data = {}}) => {
                    const {dataList = []} = data.data
                    if (this.lossParam.pageIndex == 1) {
                        this.lossDetailInfo = []
                    }
                    if (this.isLoading) { //刷新时先赋空
                        this.lossDetailInfo = []
                    }
                    dataList.forEach(item => item['checked'] = false)
                    this.lossDetailInfo = this.lossDetailInfo.concat(dataList)
                    if (this.lossDetailInfo.length == 0) {
                        this.noDataShow = true
                    } else {
                        this.noDataShow = false
                        // document.getElementById("collectListId").setAttribute('class', 'list-data-pop')
                    }
                    if (data.data && data.data.length < this.lossParam.pageSize) {
                        this.loadText = '暂无更多数据'
                    } else {
                        this.lossLoading = false
                    }
                    Indicator.close();
                    this.isLoading = false
                    callBack && callBack()
                    this.isLoading = false
                }).finally(() => {
                    this.lossLoading = false
                    this.isLoading = false
                    Indicator.close();
                })
            },
            loadMore() {
                this.loading = true
                this.param.pageIndex += 1
                this.getRecordInfo()
            },
            loadLossReportMore() {
                this.lossLoading = true
                this.lossParam.pageIndex += 1
                this.getLossRRecordInfo()
            },
            goBack() {
                window.history.go(-1)
            },
            getCheckLossInfo(val) {
                this.clickInfo = val
                this.formData.anewNumber = val.receivedNum
                if (val.checked) {
                    this.lossDetailInfo.forEach(item => {
                        if (item.id == val.id) {
                            item.checked = false
                            this.popupVisible = false
                            document.getElementById("collectListId").setAttribute('class', 'list-data')
                        }
                    })
                    this.lossDetailInfo = [...this.lossDetailInfo]
                } else {
                    if (!this.popupVisible) {
                        this.popupVisible = true
                        document.getElementById("collectListId").setAttribute('class', 'list-data-pop')
                    }
                    this.lossDetailInfo.forEach(item => {
                        item.checked = false
                        if (item.id == val.id) {
                            item.checked = true
                        }
                    })
                }

            },
            //报损
            toLossReport() {
                // this.lossDetailInfo = []
                this.lossParam.pageIndex = 0
                this.lossVisible = true
                this.scrollTop = 0
                this.loadLossReportMore()
            },
            cancelLossReport() {
                // this.detailInfo = []
                this.scrollTop = 0
                this.clickInfo = {}
                this.param.pageIndex = 0
                this.loadMore()
                this.lossVisible = false
                this.popupVisible = false
                this.otherReasonShow = false
                this.formData = {
                    anewNumber: undefined,
                    otherReason: undefined,
                    lossReportReasonUser: undefined,
                }
                this.adverseReaction.forEach(item => {
                    item.checked = false
                    document.getElementById(item.value).setAttribute('class', 'unselected_c_adv adv')
                })
                this.adverseReaction = [...this.adverseReaction]
                document.getElementById("collectListId").setAttribute('class', 'list-data')
            },
            addLossReport() {
                let checkInfo = this.lossDetailInfo.filter(item => item.checked == true)
                if (!checkInfo.length) {
                    Toast({
                        message: '请选择领取记录!',
                        duration: 2000,
                        className: 'toastIndex',
                    })
                    return
                }
                if (!this.formData.lossReportReasonUser) {
                    Toast({
                        message: '请选择重新申领原因!',
                        duration: 2000,
                        className: 'toastIndex',
                    })
                    return
                }
                this.btnLoad = true
                if (this.formData.lossReportReasonUser == '其他原因') {
                    this.formData.lossReportReasonUser = this.formData.otherReason
                }
                let par = {
                    ...this.clickInfo,
                    ...this.formData,
                    lossAuditStatus: 0
                }
                console.log(JSON.stringify(par))
                addLossReport(par).then(({data}) => {
                    this.btnLoad = false
                    if (data.code == 'SUCCESS') {
                        this.toLossReport()
                        // 成功通知
                        this.$notify({ type: 'success', message: '申请成功!' ,className: 'toastIndex',});
                    } else {
                        this.$notify({ type: 'danger', message: '申请失败!' , className: 'toastIndex',});
                    }
                }).finally(() => {
                    this.btnLoad = false
                })
            },
            getAdverse(val) {
                if (val.value == 3) {
                    this.otherReasonShow = true
                    document.getElementById("collectListId").setAttribute('class', 'list-data-other')
                } else {
                    this.otherReasonShow = false
                    document.getElementById("collectListId").setAttribute('class', 'list-data-pop')
                }
                if (val.checked) {
                    this.adverseReaction.forEach(item => {
                        if (item.value == val.value) {
                            item.checked = false
                        }
                    })
                    document.getElementById(val.value).setAttribute('class', 'unselected_c_adv adv')
                    this.adverseReaction = [...this.adverseReaction]
                } else {
                    this.adverseReaction.forEach(item => {
                        if (item.value == val.value) {
                            item.checked = true
                            this.formData.lossReportReasonUser = item.label
                            document.getElementById(val.value).setAttribute('class', 'selected_c_adv adv')
                        } else {
                            item.checked = false
                            document.getElementById(item.value).setAttribute('class', 'unselected_c_adv adv')
                        }
                    })
                    this.adverseReaction = [...this.adverseReaction]
                }
            },
            toApply(record) {//领取该品类下的其他药具
            let par = {
             ...record,
            }
            this.$router.push({path:`/reClaim`,query: par})
            }
        },

        beforeDestroy() {
            this.detailInfo = []
        }
    }
</script>

<style lang="less">
    .van-stepper__minus, .van-stepper__plus {
        width: 20px!important;
        height: 20px!important;
        color:#03053D!important;
        background-color: #ffffff!important;
    }
    .toastIndex {
        z-index: 9999 !important;
    }

    .nar_right {
        font-size: 14px!important;
        line-height: 15px;
        color: #1890FF;
    }

    .require {
        &::before {
            content: '*';
            color: #FF4D4F;
            margin-right: 4px;
        }
    }

    .popForm {
        padding: 0px 16px;

        .first {
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .title {
            font-size: 11px;
            line-height: 14px;
            color: #595959;
        }
    }

    .flex_start_wrap {
        flex-wrap: wrap;
        display: flex;
        justify-content: flex-start;
        align-items: center;
    }

    .adv {
        display: inline-block;
        margin-left: 10px;
        margin-top: 15px;
        font-size: 13px;
    }

    .unselected_c_adv {
        background: #F5F5F5;
        padding: 0px 8px;
        font-size: 14px;
        border-radius: 4px;
        color: #8C8C8C;
    }

    .selected_c_adv {
        background: #E6F7FF;
        padding: 0px 8px;
        font-size: 14px;
        border-radius: 4px;
        color: #1890FF;
    }

    .lossUncheck {
        width: 16px;
        height: 16px;
        border: 1px solid #D9D9D9;
        border-radius: 100px;
        margin: 0px 12px 0px 6px;
    }

    .losscheck {
        width: 16px;
        height: 16px;
        border: 1px solid #1890FF;
        border-radius: 100px;
        margin: 0px 12px 0px 6px;
        padding: 3px;

        .circle {
            width: 8px;
            height: 8px;
            background: #1890FF;
            border-radius: 20px;
        }
    }
</style>
<style scoped>
    .content {
        width: 90%;
        margin: 20px auto 0px;
        padding: 10px;
        border: 1px solid #F3F3F3;
        border-radius: 1rem;
        box-shadow: darkgrey 0px 2px 20px -10px;
    }

    .content_detail {
        width: 90%;
        margin: 10px auto 0px;
        padding: 10px;
        border: 1px solid #F3F3F3;
        color: rgba(69, 90, 100, 0.85);
        border-radius: 1rem;
        /*box-shadow: darkgrey 0px 2px 20px -10px;*/
    }

    .content .title {
        font-weight: bold;
        line-height: 1.5;
        font-size: 14px !important;
        border-bottom: 1px solid #F3F3F3;
        padding: 0px 0px 3px 0px;
    }

    .content_detail .title {
        font-weight: bold;
        line-height: 1.5;
        font-size: 14px !important;
        border-bottom: 1px solid #F3F3F3;
        padding: 0px 0px 3px 0px;
    }

    .content_detail .details .item {
        line-height: 24px;
    }

    .content_detail .details .item .item-right {
        float: right;
    }

    .content .details .item {
        line-height: 24px;
    }

    .content .details .item .item-right {
        float: right;
    }

    .list-data {
        max-height: calc(100vh - 60px);
        overflow-y: auto;
    }

    .list-data-other {
        max-height: calc(100vh - 300px);
        overflow-y: auto;
    }

    .list-data-pop {
        max-height: calc(100vh - 218px);
        overflow-y: auto;
    }

    .loading {
        width: 100%;
        text-align: center;
    }

    .bottom_btn {
        /*position: fixed;*/
        /*z-index: 2;*/
        /*bottom: 20px;*/
        width: 200px;
        margin: 15px auto;
        /*margin-left: calc(50% - 100px) ;*/
    }
    .sub1 {
        /*background: #1bd09f;*/
        /*width: 70px;*/
        color: #1890FF!important;
        border: 1px solid #1890FF;
        padding: 2px 3px;
        border-radius: 2px;
        text-align: center;
        margin: 0px 0px 0px 0px;
    }
</style>

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