<style lang="scss" scoped>
	@import url("@/asset/css/flex.css");
    .reimbursementInfor{
        height: 100vh;
    }
    .reimbursementInforHeaderBox{
        background: linear-gradient(-30deg, #4FA9FF, #4779FF);
    }
    .reimbursementInforTitle{
        position: relative;
        z-index: 3
    }
    .reimbursementInforTitle.fixed{
        position: fixed;
        left: 0;
        top: 0;
        right: 0;
        z-index: 3;
        background: linear-gradient(-30deg, #4FA9FF, #4779FF);
    }
    .reimbursementInforTitle.fixed .reimbursementInforTsBox{
        // top: 22rpx;
    }
    .reimbursementInforTsBox{
        width: 60%;
        position: absolute;
        top: 118rpx;
        left: 80rpx;
        right: 300rpx;
        overflow: hidden;
    }
    .reimbursementInforT-text{

    }
    .reimbursementInforText{
        font-weight: 500;
        font-size: 32rpx;
        color: #FFFFFF;
        white-space: nowrap;
        margin: 0 22rpx 20rpx;
    }
    .reimbursementInforText.active{
        color: #257BF1;
        background: #FFFFFF;
        border-radius: 6rpx;
        padding: 5rpx 20rpx;
    }
    .saveBox{
        position: fixed;
        right: 50rpx;
        bottom: 50rpx;
        z-index: 2;
    }
    .saveBox view{
        background: #257BF2;
        box-shadow: 0rpx 0rpx 10rpx #fff;
        color: #fff;
        width: 100rpx;
        height: 100rpx;
        border-radius: 50%;
    }
</style>
<template>
    <view style="height: 100vh;">
        <scroll-view class="reimbursementInforBox" scroll-y="true"
        :enable-back-to-top="true" :enable-flex="true"
        @scroll="scroll" style="height: 100vh;">
            <view class="reimbursementInforHeaderBox">
                <view class="reimbursementInforTitle"
                :class="[boxOption>0?'fixed':'']"
                :style="[boxOption>0?'titleStyle':'']">
                    <headers textAlign="left" :title="pageTitle" color="#fff"></headers>
                    <scroll-view class="reimbursementInforTsBox" :scroll-x="true"
                    :scroll-left="scrollLeft">
                        <view class="reimbursementInforT-text row-aic-n">
                            <view class="reimbursementInforText" 
                            :class="[params.type==item.id?'active':'']"
                            v-for="(item,index) in titles"
                            :id="`refs_${index+1}`"
                            :key="index"
                            @click="getType(item)">{{ item.name }}</view>
                        </view>
                    </scroll-view>
                </view>
                <headeDatas v-show="params.type<5" :currencyList="currencyList" :data="params" @change="getNewData"></headeDatas>
            </view>
            <!-- 车信息-->
            <productInfor1 :data="params" v-show="params.type==1" @change="getNewData" :optionList="busTypeList"></productInfor1>
            <!-- 酒店信息-->
            <productInfor2 :data="params" v-if="params.type==2" @change="getNewData" :optionList="hotelTypeList"></productInfor2>
            <!-- 餐食信息-->
            <productInfor3 :data="params" v-else-if="params.type==3" @change="getNewData" :optionList="diningTypeList"></productInfor3>
            <!-- 门票信息-->
            <productInfor4 :data="params" v-else-if="params.type==4" @change="getNewData" :optionList="scenicTypeList"></productInfor4>
            <!-- 其它信息-->
            <otherInfor1 :currencyList="currencyList" :data="params" v-else-if="params.type==5" @change="getNewData" :options="otherTypeList"></otherInfor1>
            <!-- 小费收入-->
            <otherInfor2 :currencyList="currencyList" :data="params" v-else-if="params.type==6" @change="getNewData"></otherInfor2>
            <!-- 团费小计-->
            <otherInfor3 :currencyList="currencyList" :data="params" v-else-if="params.type==7" @change="getNewData"></otherInfor3>
            <!-- 自费收入-->
            <otherInfor4 :currencyList="currencyList" :data="params" v-else-if="params.type==8" @change="getNewData"></otherInfor4>
            <!-- 自费支出-->
            <otherInfor5 :currencyList="currencyList" :data="params" v-else-if="params.type==9" @change="getNewData"></otherInfor5>
            <!-- 购物报账-->
            <otherInfor6 :currencyList="currencyList" :data="params" v-else-if="params.type==10" @change="getNewData" :options="shopTypeList"></otherInfor6>
        </scroll-view>
        <view v-if="params.IsOperation==0" class="saveBox" @click="saveData">
            <view class="row justify-center items-center">
                <text>保存</text>
            </view>    
        </view>
    </view>
</template>
<script>
import headers from "@/components/header/header";
import headeDatas from "./components/headeDatas";
import productInfor1 from "./components/report/productInfor1";
import productInfor2 from "./components/report/productInfor2";
import productInfor3 from "./components/report/productInfor3";
import productInfor4 from "./components/report/productInfor4";
import otherInfor1 from "./components/report/otherInfor1";
import otherInfor2 from "./components/report/otherInfor2";
import otherInfor3 from "./components/report/otherInfor3";
import otherInfor4 from "./components/report/otherInfor4";
import otherInfor5 from "./components/report/otherInfor5";
import otherInfor6 from "./components/report/otherInfor6";
export default {
    components: {
        headers,
        headeDatas,
        productInfor1,
        productInfor2,
        productInfor3,
        productInfor4,
        otherInfor1,
        otherInfor2,
        otherInfor3,
        otherInfor4,
        otherInfor5,
        otherInfor6,
    },
    data() {
        return {
            pageTitle: '',
            boxOption: 0,
            titleStyle: {
                opacity: 0,
            },
            scrollTop: 100,
            old: {
                scrollTop: 0
            },
            titles:[
                {
                    name:'车辆',
                    id: 1,
                    val: 'refs1',
                    left: 0,
                },
                {
                    name:'酒店',
                    id: 2,
                    val: 'refs2',
                    left: 0,
                },
                {
                    name:'餐食',
                    id: 3,
                    val: 'refs3',
                    left: 0,
                },
                {
                    name:'门票',
                    id: 4,
                    val: 'refs4',
                    left: 0,
                },
                {
                    name:'其他费用',
                    id: 5,
                    val: 'refs5',
                    left: 0,
                },
                {
                    name:'小费收入',
                    id: 6,
                    val: 'refs6',
                    left: 0,
                },
                {
                    name:'团费小计',
                    id: 7,
                    val: 'refs7',
                    left: 0,
                },
                {
                    name:'自费收入',
                    id: 8,
                    val: 'refs8',
                    left: 0,
                },
                {
                    name:'自费支出',
                    id: 9,
                    val: 'refs9',
                    left: 0,
                },
                {
                    name:'购物报账',
                    id: 10,
                    val: 'refs10',
                    left: 0,
                },
            ],
            currencyVisible: false,
            oldDataIndex: 1,
            loading: false,
            msg:{
                TCIDs: ''
            },
            datas: {},
            params:{
                IsOperation: 0,//0-可以操作，1-已制单，不能操作
                IsEditHotel: 0,//是否有修改酒店价格、付款方式权限
                IsEditHotelPeople: 0,//是否有修改酒店人数权限
                CreateBy: null,//线路负责人
                CreateByName: null,//线路负责人
                CreateByPhoto: null,//电话
                CreateByAccount: null,//联系方式
                BusOrderState: 0,//车订单信息
                Complain_Extend: null,//供应商投诉信息
                HotelOrderListReport: [],//酒店信息，合团
                BusPlanListReport: null,//车信息
                HotelList: [],//酒店列表
                PriceHotelResult: [],//酒店团情况
                ScenicList: [],//景点
                DiningList: [],//餐厅
                PriceShopList: null,//购物店列表
                HouseStatistics: {},//房间信息
                BusList: [],//车
                OtherOrderInfo: {
                    OtherList:[],//其他费用 
                    TipList:[],//小费收入
                    TeamList:[],//团费小计
                    SelfPlayingIncomeList:[],//自费收入
                    SelfPlayingExpendList:[],//自费支出
                },//其他订单信息
                LeaderApply: {},//领队用款
                LeaderShopList: [],//	购物店信息(领队报账的时候填写)
            },
            busTypeList:[],
            hotelTypeList:[],
            diningTypeList:[],
            scenicTypeList:[],
            otherTypeList:[
                {
                    name:'导游津贴',
                    id: 1,
                },
                {
                    name:'司机津贴',
                    id: 2,
                },
                {
                    name:'其他支出',
                    id: 0,
                },
            ],
            scrollLeft: 0,
            currencyList: [],
            shopTypeList: [],
        }
    },
    onLoad(option){
        if(option.TCIDs){
            this.msg.TCIDs = option.TCIDs
        }
        this.b2b_user_info = uni.getStorageSync('b2b_user')
        this.init()
    },
    created() {
        this.contentHeight = this.$utils.calcContentHeight(-40) + "px";
        this.mainColor = this.$uiConfig.mainColor;
    },
    mounted() {
        const that = this
        uni.getSystemInfo({
          success(res) {
            that.titleStyle = {
              paddingTop: `${res.statusBarHeight}px`
            };
          },
        });
        this.getOptionData()
        this.getCurrencyList()
        this.$nextTick(() => {
            this.titles.forEach((x, index) => {
            // 查询当前元素的位置
            uni.createSelectorQuery()
                .in(this) // 限定在当前组件内查询（关键！）
                .select(`#refs_${index + 1}`) // 匹配元素的 id
                .fields({
                    position: true, // 获取位置信息（left/top）
                    size: true      // 获取尺寸（width/height）
                })
                .exec((res) => {
                    if (res[0]) {
                        const { left, top, width, height } = res[0];
                        // console.log(`元素 ${index} 的横向位置（left）:`, left); // 单位：px
                        // console.log(`元素 ${index} 的宽度:`, width);
                        x.left = width*(index)
                    } else {
                        console.log(`未找到元素 refs_${index + 1}`);
                    }
                });
            });
        });
    },
    methods: {
        VerificationBusList(){
            let msg = ''
            for(let i=0;i<this.params.BusList.length;i++){
                let obj = this.params.BusList[i]
                for(let j=0;j<obj.ReimburseList.ReimburseDetailsList.length;j++){
                    let child = obj.ReimburseList.ReimburseDetailsList[j]
                    if(msg==''&&
                    (child.CurrencyId==0||child.CurrencyId=='')&&
                    (obj.ReimburseList.SettlementType>0||obj.ReimburseList.Remarks!=''||
                    obj.ReimburseList.VoucherPicList.length>0||child.StartPlace!=''||
                    child.EndPlace!=''||child.UserNum>0||child.UnitPrice>0||child.UserType)
                    ){
                        msg = `请选择车辆币种`//日期:${obj.PlanDateStr}
                    }
                    if(msg==''&&child.StartPlace==''&&
                    (obj.ReimburseList.SettlementType>0||obj.ReimburseList.Remarks!=''||
                    obj.ReimburseList.VoucherPicList.length>0||child.CurrencyId||
                    child.EndPlace!=''||child.UserNum>0||child.UnitPrice>0||child.UserType)
                    ){
                        msg = `请输入车辆出发地`
                    }
                    if(msg==''&&child.EndPlace==''&&
                    (obj.ReimburseList.SettlementType>0||obj.ReimburseList.Remarks!=''||
                    obj.ReimburseList.VoucherPicList.length>0||child.StartPlace!=''||
                    child.CurrencyId||child.UserNum>0||child.UnitPrice>0||child.UserType)
                    ){
                        msg = `请输入车辆目的地`
                    }
                }
                // obj.ReimburseList.ReimburseDetailsList = obj.ReimburseList.ReimburseDetailsList.filter(x=> {return x.UserNum>0&&x.UnitPrice>0&&x.UserType})
            }
            return msg
        },
        VerificationHotel(){
            let msg = ''
            for(let i=0;i<this.params.HotelOrderListReport.length;i++){
                let obj = this.params.HotelOrderListReport[i]
                for(let j=0;j<obj.HotelOrderList.length;j++){
                    let child = obj.HotelOrderList[j]
                    for(let x=0;x<child.ReimburseList.ReimburseDetailsList.length;x++){
                        let grandson = child.ReimburseList.ReimburseDetailsList[x]
                        if(msg==''&&(grandson.CurrencyId==0||grandson.CurrencyId=='')&&
                        (child.ReimburseList.SettlementType>0||child.ReimburseList.Remarks!=''||
                        child.ReimburseList.VoucherPicList.length>0||grandson.UserNum>0||
                        grandson.UnitPrice>0||grandson.UserType)
                        ){
                            msg = `请选择酒店币种`
                        }
                    }
                    // child.ReimburseList.ReimburseDetailsList = child.ReimburseList.ReimburseDetailsList.filter(x=> {return x.UserNum>0&&x.UnitPrice>0&&x.UserType})
                }
            }
            return msg
        },
        VerificationDining(){
            let msg = ''
            for(let i=0;i<this.params.DiningList.length;i++){
                let obj = this.params.DiningList[i]
                for(let j=0;j<obj.DiningSummaryList.length;j++){
                    let child = obj.DiningSummaryList[j]
                    for(let x=0;x<child.ReimburseList.ReimburseDetailsList.length;x++){
                        let grandson = child.ReimburseList.ReimburseDetailsList[x]
                        if(msg==''&&(grandson.CurrencyId==0||grandson.CurrencyId=='')&&
                        (child.ReimburseList.SettlementType>0||child.ReimburseList.Remarks!=''||
                        child.ReimburseList.VoucherPicList.length>0||grandson.UserNum>0||
                        grandson.UnitPrice>0||grandson.UserType)
                        ){
                            msg = `请选择餐币种`
                        }
                    }
                    // child.ReimburseList.ReimburseDetailsList = child.ReimburseList.ReimburseDetailsList.filter(x=> {return x.UserNum>0&&x.UnitPrice>0&&x.UserType})
                }
            }
            return msg
        },
        VerificationScenic(){
            let msg = ''
            for(let i=0;i<this.params.ScenicList.length;i++){
                let obj = this.params.ScenicList[i]
                for(let j=0;j<obj.ScenicStatisticsList.length;j++){
                    let child = obj.ScenicStatisticsList[j]
                    for(let x=0;x<child.ReimburseList.ReimburseDetailsList.length;x++){
                        let grandson = child.ReimburseList.ReimburseDetailsList[x]
                        if(msg==''&&(grandson.CurrencyId==0||grandson.CurrencyId=='')&&
                        (child.ReimburseList.SettlementType>0||child.ReimburseList.Remarks!=''||
                        child.ReimburseList.VoucherPicList.length>0||grandson.UserNum>0||
                        grandson.UnitPrice>0||grandson.UserType)
                        ){
                            msg = `请选择门票币种`
                        }
                    }
                    // child.ReimburseList.ReimburseDetailsList = child.ReimburseList.ReimburseDetailsList.filter(x=> {return x.UserNum>0&&x.UnitPrice>0&&x.UserType})
                }
            }
            return msg
        },
        saveData(){
            let msg = ''
            if(this.params.type==1) msg = this.VerificationBusList()
            else if(this.params.type==2) msg = this.VerificationHotel()
            else if(this.params.type==3) msg = this.VerificationDining()
            else if(this.params.type==4) msg = this.VerificationScenic()
            if(msg) {
                return uni.showToast({
                    title: msg,
                    icon: "none",
                })
            }
            console.log(this.params.BusList,'-----')
            if(this.loading) return
            this.loading = true
            uni.showLoading()
            this.apipost("dmcstatistics_post_SetNewLeaderApplyList_V2", this.params, (res) => {
                if(res.resultCode == 1) {
                    this.loading = false
                    uni.hideLoading()
                    this.init()
                }
                
            }, (failed) => {
                this.loading = false
                uni.showToast({
                    title: failed.message,
                    icon: "none",
                });
            }, (error) => {
                this.loading = false
            })
        },
        getNewData(params){
            this.params = JSON.parse(JSON.stringify(params))
        },
        getType(item){
            this.params.type = item.id
            this.oldDataIndex = item.id
            this.scrollLeft = item.left
        },
        init() {
            uni.showLoading()
            this.apipost("dmcstatistics_post_GetNewLeaderPayMoneyStatics", this.msg, (res) => {
                if (res.resultCode == 1) {
                    this.params = res.data;
                    for(let i=1;i<5;i++){
                        this.$set(this.params, `dataIndex${i}`, 0);
                    }
                    this.$set(this.params, `type`, this.oldDataIndex);
                    for(let i=0;i<this.params.ScenicList.length;i++){
                        this.$set(this.params.ScenicList[i], `TotalMoney`, 0);
                        this.$set(this.params.ScenicList[i], `scenicIndex`, 0);
                    }
                    for(let i=0;i<this.params.DiningList.length;i++){
                        this.$set(this.params.DiningList[i], `TotalMoney`, 0);
                        this.$set(this.params.DiningList[i], `diningIndex`, 0);
                    }
                    for(let i=0;i<this.params.HotelOrderListReport.length;i++){
                        this.$set(this.params.HotelOrderListReport[i], `TotalMoney`, 0);
                        this.$set(this.params.HotelOrderListReport[i], `hotelIndex`, 0);
                    }
                    if(res.data.CountryIds) this.getShoppingType(res.data.CountryIds)
                    // console.log(this.params.HotelOrderListReport,'-----酒店')
                    // console.log(this.params.BusList,'-----车信息')
                    // console.log(this.params.ScenicList,'-----景点')
                    // console.log(this.params.DiningList,'-----餐厅')
                    // console.log(this.params.LeaderShopList ,'-----购物店信息')
                    // console.log(this.params.LeaderApply ,'-----领队用款申请信息')
                    // console.log(this.params.OtherOrderInfo,'-----其他信息')
                    setTimeout(()=>{
                        uni.hideLoading()
                    },1000)
                }
            }, (failed) => {
                uni.hideLoading()
                uni.showToast({
                    title: failed.message,
                    icon: "none",
                });
            }, (error) => {
                uni.hideLoading()
            })
        },
        getShoppingType(id){
            this.apipost("Shopping_Post_GetList", {
                QCountry: id
            }, (res) => {
                if (res.resultCode == 1) {
                    this.shopTypeList = []
                    res.data.forEach(x=>{
                        this.shopTypeList.push({
                            id: x.ID,
                            name: x.Name,
                        })
                    })
                }
            })
        },
        scroll(e) {
            this.old.scrollTop = e.detail.scrollTop
            this.boxOption = Math.floor((e.detail.scrollTop - 100) / 1.5);
            this.titleStyle.opacity =
                e.detail.scrollTop - 200 < 0 ?
                0 :
                Math.floor(e.detail.scrollTop - 100) / 100 > 1 ?
                1 :
                Math.floor(e.detail.scrollTop - 100) / 100;
                
            this.$forceUpdate();
        },
        getOptionData(){
            this.apipost("dmcstatistics_post_GetReimburseTypeList", {
                Type: ''
            }, (res) => {
                if (res.resultCode == 1) {
                    res.data.forEach(x => {
                        x.name = x.TypeName
                        x.id = x.ID
                    });
                    this.busTypeList = res.data.filter(x=>{return x.UserTypeId==4})
                    this.hotelTypeList = res.data.filter(x=>{return x.UserTypeId==1})
                    this.diningTypeList = res.data.filter(x=>{return x.UserTypeId==2})
                    this.scenicTypeList = res.data.filter(x=>{return x.UserTypeId==3})
                }
            }, (failed) => {
                uni.showToast({
                    title: failed.message,
                    icon: "none",
                });
            }, (error) => {

            })
        },
        getCurrencyList(){
            this.apipost("financeinfo_post_GetList", {
                Name: '',
            }, (res) => {
                if (res.resultCode == 1) {
                    for(let i=0;i<res.data.length;i++){
                        let data = res.data[i]
                        this.currencyList.push({
                            name: data.Name,
                            id: data.ID,
                        })
                    }
                }
            }, (failed) => {
                uni.showToast({
                    title: failed.message,
                    icon: "none",
                });
            }, (error) => {

            })
        }
    }
}
</script>