| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444 | {extend name="common/common2" /}{block name="main"}<style>    a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus{        background-color: #148d8f !important;        border-color: #148d8f !important;    }</style><div id="feeapp">    <div class="panel panel-default">        <div class="panel-heading">            收费科目            <div class="btn-group pull-right">                <a href="javascript:history.go(-1);">返回</a>            </div>        </div>        <div class="panel-body">            <div class="row">                <div class="col-xs-12" style="padding-bottom: 20px;">                    业主:{$owner['name']}                       联系电话:{$owner['phone']}                       类型:{if $owner['type'] == 1}住户{else}租户{/if}                </div>                <div class="col-xs-3" style="min-height: 200px">                    <div class="list-group">                        <a v-for="(item,index) in lists" :key="index" href="javascript:;" @click="selectData(item)" class="list-group-item" :class="curData&&curData.type == item.type&&curData.id == item.id?'active':''">                            <span v-if="item.cate == 1">[住房] </span>                            <span v-if="item.cate == 2">[商铺] </span>                            <span v-if="item.cate == 3">[营业房] </span>                            <span v-if="item.cate == 4">[储藏室] </span>                            <span v-if="item.cate == 5">[停车位] </span>                            {{item.title}}                            <span v-if="item.c_type > 0">({{item.c_type_name}})</span>                        </a>                    </div>                </div>                <div class="col-xs-3" style="min-height: 200px">                    <div class="list-group" v-if="curData && curData.fee.length > 0">                        <a v-for="(item,index) in curData.fee" :key="index" href="javascript:;" @click="selectFee(item)" class="list-group-item"  :class="curFee&&curFee.id == item.id?'active':''">                            [{{item.parent_title}}] {{item.title}}                        </a>                    </div>                </div>                <div class="col-xs-6" style="min-height: 200px">                    <!--                <p><strong>收费详情</strong></p>-->                    <table class="table" v-if="curData && curFee">                        <tr v-if="curFee.area == 1">                            <td style="width: 100px;">产权面积</td>                            <td>{{curData.area}}</td>                        </tr>                        <tr>                            <td>基本单价</td>                            <td>{{curFee.price}}元</td>                        </tr>                        <tr v-if="curFee.area != 0 || curFee.cycle != 0">                            <td>计算公式</td>                            <td v-if="curFee.area == 1">基本单价*产权面积</td>                            <td v-if="curFee.area == 0">基本单价</td>                        </tr>                        <tr v-if="curFee.cycle == 1 && curFee.end">                            <td>最近缴费日期</td>                            <td>                                {{curFee.start}} ~ {{curFee.start}}                            </td>                        </tr>                        <tr v-if="curFee.cycle == 1 && curFee.end">                            <td>历史收费金额</td>                            <td>                                {{curFee.tmoney}}                            </td>                        </tr>                        <tr v-if="curFee.cycle == 1">                            <td>起止日期</td>                            <td>                                <input type="date" v-model="start" max="2100-01-01"> ~ <input type="date" v-model="end" max="2100-01-01">                                <!--<el-date-picker                                    v-model="date"                                    type="daterange"                                    size="small"                                    value-format="yyyy-MM-dd"                                    @change="changeDate"                                    range-separator="至"                                    start-placeholder="开始日期"                                    end-placeholder="结束日期">                                </el-date-picker>-->                            </td>                        </tr>                        <tr>                            <td>总金额</td>                            <td>{{totalPrice}}元</td>                        </tr>                        <tr>                            <td>备注</td>                            <td>                                <el-input                                        type="textarea"                                        :rows="2"                                        placeholder="请输入"                                        v-model="remark">                                </el-input>                            </td>                        </tr>                        <tr>                            <td></td>                            <td>                                <button type="button" @click="saveBtn" class="btn btn-sm btn-primary">保存数据</button>                            </td>                        </tr>                    </table>                </div>            </div>        </div>    </div>    <div class="panel panel-default">        <div class="panel-heading">收费明细</div>        <div class="panel-body">            <div class="row">                <div class="col-xs-12">                    <table class="table">                        <tr>                            <th>资源名称</th>                            <th>科目名称</th>                            <th>应收金额</th>                            <th>起止日期</th>                            <th>备注</th>                            <th>操作</th>                        </tr>                        <tr v-for="(item,index) in selData" :key="index">                            <td>                                <span v-if="item.cate == 1">[住房] </span>                                <span v-if="item.cate == 2">[商铺] </span>                                <span v-if="item.cate == 3">[营业房] </span>                                <span v-if="item.cate == 4">[储藏室] </span>                                <span v-if="item.cate == 5">[停车位] </span>                                {{item.title}}                            </td>                            <td>[{{item.fee_parent_title}}] {{item.fee_title}}</td>                            <td>{{item.total_price}}</td>                            <td v-if="item.start">{{item.start}} ~ {{item.end}}</td>                            <td v-if="!item.start"></td>                            <td>{{item.remark}}</td>                            <td>                                <button type="button" @click="delSelectData(index)" class="btn btn-xs btn-danger">删除</button>                            </td>                        </tr>                    </table>                    <div>                        <form class="form-inline">                            <div class="form-group">                                <label>最晚缴费日期 <span class="text-danger">*</span></label>                                <el-date-picker                                        v-model="lastDate"                                        type="date"                                        size="small"                                        value-format="yyyy-MM-dd"                                        placeholder="选择日期">                                </el-date-picker>                            </div>                            <button type="button" @click="submitOrder" class="btn btn-sm btn-primary">生成缴费单</button>                        </form>                    </div>                </div>            </div>        </div>    </div></div>{/block}{block name="script"}<script>    var lists = {:json_encode($lists)};    var houseId = "{$houseId}";    var vm = new Vue({        el: '#feeapp',        data: {            lists: lists,            curData: null,            curFee: null,            curRet: null,            date: '',            remark: '',            totalPrice: 0,            selData: [],            lastDate: '',            flag: false,            houseId: houseId,            start: '',            end: '',        },        computed: {        },        watch: {            start(val,oldVal){                this.calculationPrice();            },            end(val, oldVal){                this.calculationPrice();            }        },        created: function () {            this.initDate();        },        methods: {            initDate(){                var nowDate = new Date();                var fullYear = nowDate.getFullYear();                var month = nowDate.getMonth() + 1; // getMonth 方法返回 0-11,代表1-12月                var endOfMonth = new Date(fullYear, month, 0).getDate(); // 获取本月最后一天                var endDate = this.getFullDate(nowDate.setDate(endOfMonth));//当月最后一天                var startDate = this.getFullDate(nowDate.setDate(1));//当月第一天                this.date = [startDate,endDate];                this.start = startDate;                this.end = endDate;            },            calculationPrice(){ // 计算总金额                this.date = [this.start,this.end];                let price = Number(this.curFee.price);                let tPrice = price;                this.curFee.MONTHS = [];                if(this.curFee.cycle == 1){ //按周期算                    tPrice = 0;                    if(this.date){                        let months = this.getMonthBetween(this.date[0],this.date[1]);                        console.log('months',months);                        if(months.length == 1){ //不跨月                            let day = this.getDaysBetween(this.date[0],this.date[1]);                            tPrice = Number(tPrice) + (Number(price)/months[0].days) * day;                            this.curFee.MONTHS.push({                                year: months[0].year,                                month: months[0].month,                                money: (Number(price)/months[0].days) * day                            });                        }else{                            for (let o in months){                                let start = this.date[0];                                let end = this.date[1];                                let pri = 0;                                if(start >= months[o].start){                                    let sarr = start.split('-');                                    let day = months[o].days - Number(sarr[2]) + 1;                                    tPrice = Number(tPrice) + (Number(price)/months[o].days) * day;                                    pri = (Number(price)/months[o].days) * day;                                }                                if(end <= months[o].end){                                    let earr = end.split('-');                                    let day = Number(earr[2]);                                    tPrice = Number(tPrice) + (Number(price)/months[o].days) * day;                                    pri = (Number(price)/months[o].days) * day;                                }                                if(start < months[o].start && end > months[o].end){                                    tPrice = Number(tPrice) + Number(price);                                    pri = Number(price);                                }                                this.curFee.MONTHS.push({                                    year: months[o].year,                                    month: months[o].month,                                    money: pri.toFixed(2)                                });                            }                        }                    }else{                        tPrice = 0;                    }                }                if(this.curFee.area == 1){ //按面积算                    tPrice = Number(tPrice) * Number(this.curData.area);                    for(let o in this.curFee.MONTHS){                        this.curFee.MONTHS[o].money = (Number(this.curFee.MONTHS[o].money) * Number(this.curData.area)).toFixed(2);                    }                }                if(this.curFee.cycle == 0 && this.curFee.area == 0){                    tPrice = price;                }                this.totalPrice = Number(tPrice).toFixed(2);                console.log('change',this.totalPrice,this.curFee);            },            selectData(item){                this.curData = item;                this.curFee = null;                this.curRet = null;            },            selectFee(item){                this.curFee = item;                this.curRet = null;                this.remark = '';                if(item.cycle == 1){                    this.initDate();                }else{                    this.date = '';                }                this.calculationPrice();            },            changeDate(){                this.calculationPrice();            },            saveBtn(){                // 先检查是否有该科目的单子,有提示错误                for(let o in this.selData){                    if(this.curData.type == this.selData[o].type && this.curData.id == this.selData[o].id && this.curFee.id == this.selData[o].fee_id){                        this.$message.error('该科目已存在记录');                        return false;                    }                }                this.selData.push({                    type: this.curData.type,                    cate: this.curData.cate,                    id: this.curData.id,                    title: this.curData.title,                    area: this.curData.area,                    fee_id: this.curFee.id,                    fee_title: this.curFee.title,                    fee_parent_title: this.curFee.parent_title,                    price: this.curFee.price,                    months: this.curFee.MONTHS,                    total_price: this.totalPrice,                    start: this.start,                    end: this.end,                    remark: this.remark                });            },            delSelectData(index){                let oldoptions = JSON.parse(JSON.stringify(this.selData));                let newoptions = [];                for(let o in oldoptions){                    if(o != index){                        newoptions.push(oldoptions[o]);                    }                }                this.selData = JSON.parse(JSON.stringify(newoptions));            },            submitOrder(){ //生成欠费单                if(this.selData.length == 0){                    this.$message.error('请选择收费科目');                    return false;                }                if(!this.lastDate){                    this.$message.error('请选择最晚缴费日期');                    return false;                }                if(this.flag){                    return false;                }                this.flag = true;                let that = this;                $.ajax({                    type: 'POST',                    url: '{:url("feeSave")}',                    dataType: 'json',                    data:{                        houseId: this.houseId,                        lastDate: this.lastDate,                        order: JSON.stringify(this.selData)                    },                    success: function(res){                        if(res.code == 1){                            window.location.href = '{:url("HousePay/detail",[],"")}/id/'+res.data.id;                        }else{                            that.$message.error(res.msg);                            that.flag = false;                        }                    },                    error: function(){                        that.$message.error('操作失败');                        that.flag = false;                        return false;                    }                });            },            getFullDate(targetDate) { // 获取时间                var D, y, m, d;                if (targetDate) {                    D = new Date(targetDate);                    y = D.getFullYear();                    m = D.getMonth() + 1;                    d = D.getDate();                } else {                    y = fullYear;                    m = month;                    d = date;                }                m = m > 9 ? m : '0' + m;                d = d > 9 ? d : '0' + d;                return y + '-' + m + '-' + d;            },            getDaysBetween(dateString1,dateString2){ // 获取两个日期之间的天数                var  startDate = Date.parse(dateString1);                var  endDate = Date.parse(dateString2);                if (startDate>endDate){                    return 0;                }                if (startDate==endDate){                    return 1;                }                var days=(endDate - startDate)/(1*24*60*60*1000);                return  days + 1;            },            getMonthBetween (start, end) {                var result = [];                var s = start.split("-");                var e = end.split("-");                var min = new Date();                var max = new Date();                min.setFullYear(s[0], s[1] * 1 - 1, 1);//开始日期                max.setFullYear(e[0], e[1] * 1 - 1, 1);//结束日期                var curr = min;                while (curr <= max) {                    let month = curr.getMonth() + 1;                    let year = curr.getFullYear();                    let endOfMonth = new Date(year, month, 0).getDate(); // 获取本月最后一天                    let endDate = this.getFullDate(curr.setDate(endOfMonth));//当月最后一天                    let startDate = this.getFullDate(curr.setDate(1));//当月第一天                    result.push({                        year: year,                        month: month,                        days: this.getMonthDay(year,month),                        start: startDate,                        end: endDate                    });                    curr.setMonth(month);                }                return result;            },            getMonthDay(year, month){                var d = new Date(year, month, 0);                return d.getDate();            },        }    });</script>{/block}
 |