gaoshp
2024-11-04 eef1ef0be935d4a3d8fc691b2666f41796b2d4a5
src/views/console/base/Add.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-05-04 16:37:48
 * @LastEditors: gaoshp
 * @LastEditTime: 2024-10-07 18:01:39
 * @LastEditTime: 2024-10-09 23:30:14
 * @FilePath: /cps-web/src/views/console/base/Add.vue
-->
<template>
@@ -98,7 +98,7 @@
                    当前排班优先
                </el-col>
                <el-col :span="4">
                    <el-switch v-model="isHighPriority" active-text="优先" inactive-text="不优先" />
                    <el-switch v-model="isHighPriority" @change="changeHigh" active-text="优先" inactive-text="不优先" />
                </el-col>
                <el-col :span="2">
                    <el-button type="primary" @click="plan">排班</el-button>
@@ -141,6 +141,8 @@
    },
    data() {
        return {
            currentDate: '',
            currentDateItem: null,
            disabled: false,
            modelId: '',
            isHighPriority: false,
@@ -223,7 +225,7 @@
                this.form.date[0] = moment().format('YYYY-MM-DD')
            }
            // console.log(this.months)
            this.$HTTP.post('/api/blade-cps/shift-off-day/list', {
            this.$HTTP.post('/api/smis/shift-off-day/list', {
                year: currentYear,
                startOffDay: `${currentYear}-01-01`,
                endOffDay: `${currentYear}-12-31`
@@ -284,7 +286,6 @@
                }
                this.form.date = [moment().format('YYYY-MM-DD'), moment(`${currentYear}-12-31`).format('YYYY-MM-DD')]
            } else {
                console.log('>>>>>>>>>>', this.drawerInfo)
                this.disabled = true
                this.form.code = this.drawerInfo.code
                this.form.name = this.drawerInfo.name
@@ -299,9 +300,8 @@
                        let list = this.drawerInfo.calendarDayVOList.filter(v => v.modelId === item)
                        let ext = {
                            modelId: item,
                            isHighPriority: list[0].isHighPriority,
                            // isHighPriority: list[0].isHighPriority,
                        }
                        console.log(list)
                        this.setDayRange(list, ext)
                    })
                }, 1000)
@@ -325,7 +325,6 @@
            }
        },
        setDay() {
            console.log('setDay1')
            let currentYear = moment(this.form.year, 'YYYY').format('YYYY') - 0
            this.months.forEach((item, i) => {
                let start = moment(`${currentYear}-${i + 1}-01`)
@@ -365,20 +364,39 @@
                    this.months[i].attributes.push({
                        dates: dates.map(v => v.calendarDate),
                        ...ext,
                        highlight: color.stringToColor(ext.modelId),
                        // highlight: color.stringToColor(ext.modelId),
                        highlight: {
                            style: {
                                'background-color': ban.colour
                            }
                        },
                        popover: {
                            label: `${ban?.code}-${ban?.name}`
                        },
                    })
                    // 优先
                    console.log('------------->>>>', dates)
                    let hiIndex = this.months[i].attributes.findIndex(v => v.bar)
                    if (hiIndex > -1) {
                        this.months[i].attributes[hiIndex].dates.push(...dates.filter(v => v.isHighPriority === 1).map(v => v.calendarDate))
                    } else {
                        this.months[i].attributes.push({
                            dates: dates.filter(v => v.isHighPriority === 1).map(v => v.calendarDate),
                            bar: {
                                style: {
                                    backgroundColor: 'red',
                                }
                            },
                        })
                    }
                    this.months[i].attributes[1] = {
                        highlight: true,
                        dates: []
                    }
                }
            })
            console.log(this.months, 'rll')
            console.log(this.months, 'rllllllll')
        },
        pushDate(start) {
            if (start.unix() >= moment(this.form.date[0]).unix() && start.unix() <= moment(this.form.date[1]).unix()) {
@@ -386,32 +404,124 @@
            }
            return false
        },
        dayclick(day, item) {
        changeHigh(val) {
            console.log('------------changeHigh')
            if (this.currentDateItem) {
                // 设置优先
                let index = this.currentDateItem.attributes.findIndex(item => !!item.bar)
                if (val) {
                    if (index === -1) {
                        this.currentDateItem.attributes.push({
                            bar: {
                                style: {
                                    backgroundColor: 'red',
                                }
                            },
                            dates: [this.currentDate]
                        })
                    } else {
                        this.currentDateItem.attributes[index].dates.push(this.currentDate)
                    }
                } else {
                    let i = this.currentDateItem.attributes[index].dates.findIndex(v => v === this.currentDate)
                    this.currentDateItem.attributes[index].dates.splice(i, 1)
                }
            } else {
                this.isHighPriority = false
            }
            console.log(this.months)
        },
        dayclick(day, item) {
            let index = item.attributes[1].dates.findIndex(v => v === day.id)
            if (index >= 0) {
                item.attributes[1].dates.splice(index, 1)
            } else {
                item.attributes[1].dates.push(day.id)
            }
            let list = this.getPlanDate()
            let highDates = this.getHighDate()
            this.currentDate = day.id
            if (list.find(v => v.calendarDate === day.id)) {
                this.currentDateItem = item
                if (highDates.indexOf(this.currentDate) > -1) {
                    this.isHighPriority = true
                } else {
                    this.isHighPriority = false
                }
            } else {
                this.currentDateItem = null
                this.isHighPriority = false
            }
            console.log('------currentDate', this.currentDate, item, highDates)
        },
        getHighDate() {
            let list = []
            this.months.forEach(item => {
                item.attributes.forEach((v, i) => {
                    if (i > 1 && v.bar) {
                        v.dates.forEach(child => {
                            list.push(child)
                        })
                    }
                })
            })
            return list
        },
        getPlanDate() {
            // 优先级
            let list = []
            this.months.forEach(item => {
                item.attributes.forEach((v, i) => {
                    if (i > 1 && v.modelId) {
                        v.dates.forEach(child => {
                            // 重复排班去重
                            let repeatIndex = list.findIndex(v => v.calendarDate === child)
                            if (repeatIndex > -1) {
                                list.splice(repeatIndex, 1, {
                                    modelId: v.modelId,
                                    // isHighPriority: v.isHighPriority,
                                    calendarDate: child,
                                    ...this.setOffDay(child)
                                })
                            } else {
                                list.push({
                                    modelId: v.modelId,
                                    // isHighPriority: v.isHighPriority,
                                    calendarDate: child,
                                    ...this.setOffDay(child)
                                })
                            }
                        })
                    }
                })
            })
            return list
        },
        plan() {
            if (!this.modelId) {
                return this.$message.warning('请选择班次方案');
            }
            let dateDTOList = this.months.map(item => item.attributes[1].dates)
            console.log('------plan', dateDTOList)
            let list = dateDTOList.flat(2).map(v => {
                return {
                    modelId: this.modelId,
                    isHighPriority: this.isHighPriority ? 1 : 0,
                    // isHighPriority: this.isHighPriority ? 1 : 0,
                    calendarDate: v,
                    ...this.setOffDay(v)
                }
            })
            let ext = {
                modelId: this.modelId,
                isHighPriority: this.isHighPriority ? 1 : 0,
                // isHighPriority: this.isHighPriority ? 1 : 0,
            }
            this.setDayRange(list, ext)
        },
        setOffDay(time) {
@@ -428,21 +538,19 @@
            })
        },
        save() {
            let list = []
            this.months.forEach(item => {
                item.attributes.forEach((v, i) => {
                    if (i > 1) {
                        v.dates.forEach(child => {
                            list.push({
                                modelId: v.modelId,
                                isHighPriority: v.isHighPriority,
                                calendarDate: child,
                                ...this.setOffDay(child)
                            })
                        })
            let highDates = this.getHighDate()
            let list = this.getPlanDate().map(v => {
                if (highDates.indexOf(v.calendarDate) > -1) {
                    return {
                        ...v,
                        isHighPriority: 1
                    }
                })
                } else {
                    return {
                        ...v,
                        isHighPriority: 0
                    }
                }
            })
            this.$refs.dialogForm.validate(async (valid) => {
                if (valid) {
@@ -458,7 +566,7 @@
                            status: 1,
                            dateDTOList: list
                        }
                        this.$HTTP.post('/api/blade-cps/calendar', data).then(res => {
                        this.$HTTP.post('/api/smis/calendar', data).then(res => {
                            if (res.code === 200) {
                                this.$emit('success')
                            } else {
@@ -470,7 +578,7 @@
                            id: this.drawerInfo.id,
                            dateDTOList: list
                        }
                        this.$HTTP.put('/api/blade-cps/calendar', data).then(res => {
                        this.$HTTP.put('/api/smis/calendar', data).then(res => {
                            if (res.code === 200) {
                                this.$emit('success')
                            } else {