[element ui + vue2] el-table根据不同的条件展示不同金额、与时间选择器嵌套(根据不同条件对日期选择进行可选以及不可选)

效果要求:

1.月份应收金额=购买时长括号内的金额*车位数,天数应收金额=购买时长括号内的金额*车位数*天数(仅限定一天);

2.实收金额自由输入任意金额;

3.月份开始日期选择范围必须大于当前有效期的截止日期(如当前有效期2024-11-21 ~ 2024-12-21,延期开始日期必须大于2024-12-21,同理,截止有效日期必须大于延期开始日期)

4.当购买时长为月份为单位的时候,延期截止日期必须是不可选,而且和延期开始日期联动,天为单位的时候,延期截止日期自由选择。

html:

 <el-table-column prop="purchaseTime" header-align="center" align="center" label="延期时长" min-width="40">
                </el-table-column>
                <el-table-column prop="state" header-align="center" align="center" label="月卡状态" min-width="40"
                    v-if="deLayType == 1">
                    <template slot-scope="scope">
                        <el-tag type="danger" v-if="scope.row.state === 2">过期</el-tag>
                        <el-tag type="primary" v-else>正常</el-tag>
                    </template>
                </el-table-column>
                <el-table-column prop="ysMoney" header-align="center" align="center" label="应收金额" min-width="40"
                    v-if="deLayType == 1">
                    <template slot-scope="scope">
                        <span>{{ getChargeMoney(scope.row) }}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="chargeMoney" header-align="center" align="center" label="实收金额" min-width="40"
                    :render-header="addRedStar" v-if="deLayType == 1">
                    <template slot-scope="scope">
                        <el-input v-model="scope.row.chargeMoney" placeholder="" type="number"></el-input>
                    </template>
                </el-table-column>
                <el-table-column header-align="center" align="center" label="当前有效期" min-width="100">
                    <template slot-scope="scope">
                        <span>{{ getYmd(scope.row.startTime) }} ~ {{ getYmd(scope.row.endTime) }}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="startTimes" header-align="center" align="center" label="延期开始日期" min-width="100" :render-header="addRedStar">
                    <template slot-scope="scope">
                        <el-date-picker v-model="scope.row.startTimes" type="date" placeholder="选择日期"
                            @change="onStartTimeChange($event, scope.row)" :picker-options="pickerOptions(scope.row)">
                        </el-date-picker>
                    </template>
                </el-table-column>
                <el-table-column prop="endtimes" header-align="center" align="center" label="延期截止日期" min-width="100" :render-header="addRedStar">
                    <template slot-scope="scope">
                        <el-date-picker v-model="scope.row.endtimes" type="date" :disabled="dayDisabled" :placeholder="scope.row.cycleUnit == '月'? '选择日期':'请先选择开始日期'"
                        :picker-options="pickerOptions_1(scope.row)">
                        </el-date-picker>
                    </template>
                </el-table-column>

需求点:

1.

   getChargeMoney(row) {
            const price = (() => {
                const { purchaseTime, carPorts } = row
                const price = getNumber(purchaseTime)
                
                const { cycleUnit, cycle } = row
                if (cycleUnit === '月') {
                    return price * carPorts
                }

                const { startTimes, endtimes } = row
                if (startTimes && endtimes && endtimes > startTimes) {
                    const diff = Math.floor((endtimes.getTime() - startTimes.getTime()) / 86400000)
                    return diff * price * carPorts
                }
                return price
            })()
            this.$set(row, 'ysMoney', price)
            return price
        },
/**
 * 获取中文括号内的字符串()
 */
export const getNumber = str => {
  if (str) {
    let regex = /((.+?))/g;
    str = str.match(regex)[0];
    str = str.substring(1, str.length - 1);
    return str;
  }
};

2.简单,直接v-model="scope.row.chargeMoney"

3.

 computed: {
        pickerOptions() {
            return function (row = {}) {
                return {
                    disabledDate(time) {
                        let that = this
                        let times = row.endTime
                        return time.getTime() < Date.parse(new Date(times))
                    }
                }
            }
        },
        pickerOptions_1() {
            return function (row = {}) {
                return {
                    disabledDate(time) {
                        let that = this
                        let times = row.startTimes
                        return time.getTime() < Date.parse(new Date(times))
                    }
                }
            }
        }
    },

4.三元表达式区分选择器。(按照周期提加月份),dayDisabled 默认值为true

  onStartTimeChange(value, row) {
            if (row.cycleUnit == '月') {
                if (value instanceof Date) {
                    const date = new Date(value)
                    date.setMonth(date.getMonth() + row.cycle)
                    this.$set(row, 'endtimes', date)
                }
            }
            if(row.cycleUnit == '天' && value && !row.endtimes){
                this.dayDisabled = false
            }
        },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值