gaoshp
2024-10-02 103fd0aa7288b58cf250a55da1cc6c659a2e113e
日历及其他问题修改
已添加2个文件
已修改6个文件
319 ■■■■ 文件已修改
public/index.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/seedrandom.min.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/color.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/Add.vue 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/CalenderTab.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/system/collection.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/workstation/Dialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tpm/machine/Dialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/index.html
@@ -9,6 +9,7 @@
        <script type="text/javascript">
            document.write("<script src='config.js?"+new Date().getTime()+"'><\/script>");
        </script>
        <script src="./seedrandom.min.js"></script>
    </head>
    <body>
        <noscript>
public/seedrandom.min.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f.crypto||f.msCrypto).getRandomValues(n)),S(n)}catch(n){var t=f.navigator,r=t&&t.plugins;return[+new Date,f,r,f.screen,S(a)]}}():n,3),o),u=new m(o);return e.int32=function(){return 0|u.g(4)},e.quick=function(){return u.g(4)/4294967296},e.double=e,j(S(u.S),a),(t.pass||r||function(n,t,r,e){return e&&(e.S&&v(e,u),n.state=function(){return v(u,{})}),r?(c[p]=n,t):n})(e,i,"global"in t?t.global:this==c,t.state)}function m(n){var t,r=n.length,u=this,e=0,o=u.i=u.j=0,i=u.S=[];for(r||(n=[r++]);e<l;)i[e]=e++;for(e=0;e<l;e++)i[e]=i[o=h&o+n[e%r]+(t=i[e])],i[o]=t;(u.g=function(n){for(var t,r=0,e=u.i,o=u.j,i=u.S;n--;)t=i[e=h&e+1],r=r*l+i[h&(i[e]=i[o=h&o+t])+(i[o]=t)];return u.i=e,u.j=o,r})(l)}function v(n,t){return t.i=n.i,t.j=n.j,t.S=n.S.slice(),t}function j(n,t){for(var r,e=n+"",o=0;o<e.length;)t[h&o]=h&(r^=19*t[h&o])+e.charCodeAt(o++);return S(t)}function S(n){return String.fromCharCode.apply(0,n)}if(j(c.random(),a),"object"==typeof module&&module.exports){module.exports=n;try{s=require("crypto")}catch(n){}}else"function"==typeof define&&define.amd?define(function(){return n}):c["seed"+p]=n}("undefined"!=typeof self?self:this,[],Math);
src/utils/color.js
@@ -1,3 +1,10 @@
/*
 * @Date: 2024-03-23 09:49:06
 * @LastEditors: gaoshp
 * @LastEditTime: 2024-10-01 23:40:39
 * @FilePath: /cps-web/src/utils/color.js
 */
import seedrandom from 'seedrandom'
export default {
    //hex颜色转rgb颜色
    HexToRgb(str) {
@@ -25,5 +32,23 @@
        var rgbc = this.HexToRgb(color)
        for (var i = 0; i < 3; i++) rgbc[i] = Math.floor((255 - rgbc[i]) * level + rgbc[i])
        return this.RgbToHex(rgbc[0], rgbc[1], rgbc[2])
    },
    stringToColor(id) {
        const cssColorNames = [
            'yellow',
            'red',
            'orange',
            'purple',
            'brown',
            'green'
        ];
        const rng = new Math.seedrandom(id);
        // ç”Ÿæˆä¸€ä¸ª0到1之间的随机数
        const randomNumber = rng();
        // å°†éšæœºæ•°æ˜ å°„到140以内的整数范围内
        return cssColorNames[Math.floor(randomNumber * (cssColorNames.length - 1))];
    }
}
src/views/console/base/Add.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-05-04 16:37:48
 * @LastEditors: gaoshp
 * @LastEditTime: 2024-10-01 20:21:11
 * @LastEditTime: 2024-10-02 17:15:08
 * @FilePath: /cps-web/src/views/console/base/Add.vue
-->
<template>
@@ -13,17 +13,20 @@
                    <el-row>
                        <el-col :span="8">
                            <el-form-item label="生产日历编号" prop="code">
                                <el-input v-model="form.code" placeholder="请输入生产日历编号" clearable></el-input>
                                <el-input :disabled="disabled" v-model="form.code" placeholder="请输入生产日历编号"
                                    clearable></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="8">
                            <el-form-item label="生产日历名称" prop="name">
                                <el-input v-model="form.name" placeholder="请输入生产日历名称" clearable></el-input>
                                <el-input :disabled="disabled" v-model="form.name" placeholder="请输入生产日历名称"
                                    clearable></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="8">
                            <el-form-item label="应用年份" prop="year">
                                <el-select v-model="form.year" placeholder="" size="" @change="changeYear">
                                <el-select :disabled="disabled" v-model="form.year" placeholder="" size=""
                                    @change="changeYear">
                                    <el-option v-for="item in options" :key="item.value" :label="item.label"
                                        :value="item.value" />
                                </el-select>
@@ -32,17 +35,17 @@
                        <el-col :span="8">
                            <el-form-item label="应用日期" prop="date">
                                <el-date-picker v-model="form.date" type="daterange" value-format="YYYY-MM-DD"
                                    start-placeholder="开始日期" end-placeholder="结束日期" />
                                    start-placeholder="开始日期" end-placeholder="结束日期" @change="changeDate" />
                            </el-form-item>
                        </el-col>
                        <el-col :span="8" :offset="1">
                            <el-button-group>
                            <!-- <el-button-group>
                                <el-button :type="activeBtn == 0 ? 'primary' : ''"
                                    @click="activeBtn = 0">按规律选中日期</el-button>
                                <el-button :type="activeBtn == 1 ? 'primary' : ''" @click="activeBtn = 1">
                                    æŒ‰é—´éš”选中日期
                                </el-button>
                            </el-button-group>
                            </el-button-group> -->
                        </el-col>
                        <el-col :offset="1">
                            <el-radio-group v-model="holiday">
@@ -116,6 +119,7 @@
<script>
import moment from 'moment'
import { Calendar, DatePicker } from 'v-calendar';
import color from '@/utils/color'
export default {
    components: {
        Calendar,
@@ -127,10 +131,17 @@
            default: () => {
                return []
            }
        }
        },
        drawerInfo: {
            type: Object,
            default: () => {
                return {}
            }
        },
    },
    data() {
        return {
            disabled: false,
            modelId: '',
            isHighPriority: false,
            dateDTOList: [],
@@ -203,16 +214,6 @@
        checkboxGroup1() {
            this.setDay()
        },
        dateDTOList(val) {
            this.months.forEach(month => {
                if (val.length > 0) {
                    month.attributes[1].highlight = 'yellow'
                } else {
                    month.attributes[1].highlight = true
                }
            })
        },
        'form.year'(val) {
            this.months = []
            let currentYear = moment(val, 'YYYY').format('YYYY') - 0
@@ -260,7 +261,6 @@
                    })
                }
                console.log(this.months, '?/')
            })
        },
        shiftList() {
@@ -268,23 +268,52 @@
        }
    },
    created() {
        this.init()
    },
    methods: {
        init() {
            let len = 15
            let currentYear = moment().format('YYYY') - 0
            this.form.year = currentYear
            if (!this.drawerInfo.id) {
                let len = 15
                let currentYear = moment().format('YYYY') - 0
                this.form.year = currentYear
                for (let i = 0; i < len; i++) {
                    this.options.push({
                        label: currentYear + i,
                        value: currentYear + i
                    })
                }
                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
                this.form.year = moment(this.drawerInfo.calendarDayVOList[0].calendarDate, 'YYYY-MM-DD').format('YYYY') - 0
                setTimeout(() => {
                    let currentYear = moment().format('YYYY') - 0
                    this.form.date = [`${currentYear}-01-01`, `${currentYear}-12-31`]
                    if (currentYear == this.form.year) {
                        this.form.date[0] = moment().format('YYYY-MM-DD')
                    }
                    [...new Set(this.drawerInfo.calendarDayVOList.map(v => v.modelId))].forEach(item => {
                        let list = this.drawerInfo.calendarDayVOList.filter(v => v.modelId === item)
                        let ext = {
                            modelId: item,
                            isHighPriority: list[0].isHighPriority,
                        }
                        console.log(list)
                        this.setDayRange(list, ext)
                    })
                }, 1000)
            for (let i = 0; i < len; i++) {
                this.options.push({
                    label: currentYear + i,
                    value: currentYear + i
                })
            }
            this.form.date = [moment().format('YYYY-MM-DD'), moment(`${currentYear}-12-31`).format('YYYY-MM-DD')]
            // console.log(this.form)
        },
        changeDate() {
            if (this.checkboxGroup1.length > 0) {
                this.setDay()
            } else {
            }
        },
        change(val) {
            this.checkboxGroup1 = []
@@ -296,12 +325,12 @@
            }
        },
        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`)
                let end = i == 11 ? moment(`${currentYear + 1}-${i + 1}-01`) : moment(`${currentYear}-${i + 2}-01`)
                let dates = []
                console.log(start.format('YYYY-MM-DD'), start.unix() >= moment(this.form.date[0]).unix() && start.unix() <= moment(this.form.date[1]).unix())
                while (start.unix() < end.unix()) {
                    if (this.checkboxGroup1.includes(start.day()) && this.holiday === 0) {
                        this.pushDate(start) && dates.push(start.format('YYYY-MM-DD'))
@@ -317,8 +346,35 @@
                    start.add(1, 'd')
                }
                this.months[i].attributes[1].dates = dates
                console.log(this.months, 'jieguo')
            })
            console.log(this.months, 'rll')
        },
        setDayRange(list, ext) {
            let currentYear = moment(this.form.year, 'YYYY').format('YYYY') - 0
            this.months.forEach((item, i) => {
                let start = moment(`${currentYear}-${i + 1}-01`)
                let end = i == 11 ? moment(`${currentYear + 1}-${i + 1}-01`) : moment(`${currentYear}-${i + 2}-01`)
                let dates = []
                list.forEach(v => {
                    if (moment(v.calendarDate).unix() >= start.unix() && moment(v.calendarDate).unix() < end.unix()) {
                        dates.push(v)
                    }
                })
                if (dates.length > 0) {
                    this.months[i].attributes.push({
                        dates: dates.map(v => v.calendarDate),
                        ...ext,
                        highlight: color.stringToColor(ext.modelId)
                    })
                    this.months[i].attributes[1] = {
                        highlight: true,
                        dates: []
                    }
                }
            })
            console.log(this.months, 'rll')
        },
        pushDate(start) {
            if (start.unix() >= moment(this.form.date[0]).unix() && start.unix() <= moment(this.form.date[1]).unix()) {
@@ -329,20 +385,17 @@
        dayclick(day, item) {
            let index = item.attributes[1].dates.findIndex(v => v === day.id)
            console.log(index)
            if (index >= 0) {
                item.attributes[1].dates.splice(index, 1)
            } else {
                item.attributes[1].dates.push(day.id)
            }
            console.log(index, item.attributes[1].dates)
        },
        plan() {
            if (!this.modelId) {
                return this.$message.warning('请选择班次方案');
            }
            let dateDTOList = this.months.map(item => item.attributes[1].dates)
            console.log(this.months, '>>>>>>>>>>', dateDTOList.flat(2))
            let list = dateDTOList.flat(2).map(v => {
                return {
                    modelId: this.modelId,
@@ -351,8 +404,11 @@
                    ...this.setOffDay(v)
                }
            })
            console.log(list)
            this.dateDTOList = list
            let ext = {
                modelId: this.modelId,
                isHighPriority: this.isHighPriority ? 1 : 0,
            }
            this.setDayRange(list, ext)
        },
        setOffDay(time) {
            let { id: offDayId } = this.offDays.find(v => moment(time).unix() >= moment(v.startOffDay).unix() && moment(time).unix() <= moment(v.endOffDay).unix()) || {}
@@ -363,30 +419,62 @@
            }
        },
        planCancel() {
            this.dateDTOList = []
            this.months.forEach((item, i) => {
                item.attributes = item.attributes.slice(0, 2)
            })
        },
        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)
                            })
                        })
                    }
                })
            })
            this.$refs.dialogForm.validate(async (valid) => {
                if (valid) {
                    if (this.dateDTOList.length == 0) {
                    if (list.length == 0) {
                        return this.$message.warning('未排班');
                    }
                    let data = {
                        codeRuleId: '',
                        code: this.form.code,
                        name: this.form.name,
                        year: this.form.year,
                        status: 1,
                        dateDTOList: this.dateDTOList
                    }
                    this.$HTTP.post('/api/blade-cps/calendar', data).then(res => {
                        if (res.code === 200) {
                            this.$emit('success')
                        } else {
                            this.$message.warning(res.msg);
                    if (!this.drawerInfo.id) {
                        let data = {
                            codeRuleId: '',
                            code: this.form.code,
                            name: this.form.name,
                            year: this.form.year,
                            status: 1,
                            dateDTOList: list
                        }
                    })
                    console.log(this.form, this.dateDTOList)
                        this.$HTTP.post('/api/blade-cps/calendar', data).then(res => {
                            if (res.code === 200) {
                                this.$emit('success')
                            } else {
                                this.$message.warning(res.msg);
                            }
                        })
                    } else {
                        let data = {
                            id: this.drawerInfo.id,
                            dateDTOList: list
                        }
                        this.$HTTP.put('/api/blade-cps/calendar', data).then(res => {
                            if (res.code === 200) {
                                this.$emit('success')
                            } else {
                                this.$message.warning(res.msg);
                            }
                        })
                    }
                } else {
                    this.$message.warning('请检查必填项');
                }
src/views/console/base/CalenderTab.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-04-04 22:45:43
 * @LastEditors: gaoshp
 * @LastEditTime: 2024-10-01 20:16:51
 * @LastEditTime: 2024-10-02 20:52:59
 * @FilePath: /cps-web/src/views/console/base/CalenderTab.vue
-->
<template>
@@ -21,7 +21,7 @@
            <el-header>
                <span>日历【{{ selectInfo.code }}】{{ selectInfo.name }}</span>
                <el-button type="primary" style="margin-left: auto;" size="small" @click="relationWork">关联工位</el-button>
                <!-- <el-button type="primary" size="small">编辑日历</el-button> -->
                <el-button type="primary" size="small" @click="edit">编辑日历</el-button>
                <el-popconfirm title="确定删除吗?" @confirm="table_del">
                    <template #reference>
                        <el-button type="primary" size="small">删除</el-button>
@@ -29,13 +29,20 @@
                </el-popconfirm>
            </el-header>
            <el-main>
                <el-row :gutter="12" v-show="shiftListName">
                    {{ shiftListName }}
                <el-row :gutter="12" v-show="shiftListName.length > 0">
                    <el-button v-for="item in shiftListName">{{ item.code + '-' + item.name
                        }}</el-button>
                </el-row>
                <el-row>
                    <el-col :span="6" style="padding:  10px;" v-for="item in months" :key="item.month">
                        <Calendar :initial-page="{ month: item.month + 1, year: item.year }" :rows="1"
                            disable-page-swipe :nav-visibility="''" :attributes='item.attributes' />
                            disable-page-swipe :nav-visibility="''" :attributes='item.attributes'>
                            <!-- <template #day-popover="row">
                                <div class="text-xs text-gray-700 dark:text-gray-300">
                                    123123{{ row }}
                                </div>
                            </template> -->
                        </Calendar>
                    </el-col>
                </el-row>
                <!-- :initial-page="{ month: item.month + 1, year: item.year }" -->
@@ -44,7 +51,7 @@
        </el-container>
        <el-drawer v-if="drawer" v-model="drawer" size="80%" title="生产日历" :direction="direction"
            :before-close="handleClose">
            <Add v-if="drawer" :shiftList="shiftList" @success="success"></Add>
            <Add v-if="drawer" :shiftList="shiftList" :drawerInfo="drawerInfo" @success="success"></Add>
        </el-drawer>
        <el-drawer v-model="raworkVisible" size="80%" title="生产日历" :direction="direction" :before-close="handleClose">
            <el-container v-if="raworkVisible">
@@ -66,6 +73,7 @@
import 'v-calendar/style.css';
import Add from './Add.vue'
import moment from 'moment';
import color from '@/utils/color'
export default {
    components: {
        Calendar,
@@ -75,7 +83,7 @@
    data() {
        return {
            shiftList: [],
            shiftListName: '',
            shiftListName: [],
            selectInfo: {},
            drawer: false,
            months: [],
@@ -92,6 +100,9 @@
                label: 'title',
                children: 'children',
            },
            drawerInfo: {},
            color
        }
    },
    created() {
@@ -99,6 +110,10 @@
        this.init()
    },
    methods: {
        edit() {
            this.drawer = true
            this.drawerInfo = this.selectInfo
        },
        relationWork() {
            this.$HTTP.post('/api/blade-cps/group/groupWorkstation', { groupCategory: 1, groupType: 'group_workstation' }).then(res => {
                if (res.code === 200) {
@@ -188,22 +203,24 @@
            })
        },
        select(row) {
            this.selectInfo = {
                ...row
            }
            this.months = []
            this.$HTTP.get(`/api/blade-cps/calendar/${row.id}`).then(res => {
                if (res.code === 200) {
                    console.log(res.data)
                    this.setDay(res.data)
                    let current = this.shiftList.find(v => v.id == res.data.calendarDayVOList[0].modelId)
                    console.log('////', this.shiftList, res.data.calendarDayVOList[0].id)
                    if (current) {
                        this.shiftListName = `${current.code}-${current.name}`
                    let modelIds = [...new Set(res.data.calendarDayVOList.map(v => v.modelId))]
                    if (modelIds.length > 0) {
                        this.shiftListName = this.shiftList.filter(v => modelIds.includes(v.id))
                    } else {
                        this.shiftListName = ''
                        this.shiftListName = []
                    }
                }
                this.selectInfo = {
                    ...row,
                    calendarDayVOList: res.data.calendarDayVOList
                }
            })
        },
@@ -217,6 +234,7 @@
        },
        add() {
            this.drawer = true
            this.drawerInfo = {}
        },
        load(flag) {
            if (flag) this.current = 0;
@@ -261,6 +279,20 @@
                    })
                    for (let i = 0; i < 12; i++) {
                        data.calendarDayVOList.map(v => v.modelId)
                        let modelIds = [...new Set(data.calendarDayVOList.map(v => v.modelId))]
                        let ext = modelIds.map(v => {
                            let ban = this.shiftListName.find(item => item.id === v)
                            return {
                                highlight: color.stringToColor(v),
                                dates: data.calendarDayVOList.filter(item => {
                                    return moment(item.calendarDate).month() === i && item.modelId === v
                                }).map(v => v.calendarDate),
                                popover: {
                                    label: `${ban?.code}-${ban?.name}`
                                },
                            }
                        })
                        this.months.push({
                            year: year,
                            month: i,
@@ -272,16 +304,11 @@
                                        return moment(item).month() === i
                                    })
                                },
                                {
                                    highlight: true,
                                    dates: data.calendarDayVOList.filter(item => {
                                        console.log(moment(item).month(), '>>>123')
                                        return moment(item.calendarDate).month() === i
                                    }).map(v => v.calendarDate),
                                }
                                ...ext
                            ]
                        })
                    }
                    console.log(this.months, '------------')
                }
            })
src/views/console/system/collection.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<!--
 * @Date: 2024-10-02 20:34:08
 * @LastEditors: gaoshp
 * @LastEditTime: 2024-10-02 20:34:22
 * @FilePath: /cps-web/src/views/console/system/collection.vue
-->
<template>
    <div>
        caijidian
    </div>
</template>
<script>
export default {
}
</script>
<style lang="scss" scoped></style>
src/views/console/workstation/Dialog.vue
@@ -45,7 +45,7 @@
                    <el-form-item label="生产日历" prop="calendarCode">
                        <el-select v-model="form.calendarCode" style="width: 240px">
                            <el-option v-for="item in options.calendarList" :key="item.id" :label="item.name"
                                :value="item.id" />
                                :value="item.code" />
                        </el-select>
                    </el-form-item>
                </el-col>
@@ -89,7 +89,7 @@
                    <el-form-item label="加工属性" prop="properties">
                        <el-select v-model="form.properties" style="width: 240px">
                            <el-option v-for="item in options.machining_type" :key="item.dictKey"
                                :label="item.dictValue" :value="item.dictKey" />
                                :label="item.dictValue" :value="item.dictKey - 0" />
                        </el-select>
                    </el-form-item>
                </el-col>
src/views/tpm/machine/Dialog.vue
@@ -51,7 +51,7 @@
                    <el-form-item label="生命状态" prop="machineLifeStatus">
                        <el-select v-model="form.machineLifeStatus" placeholder="" style="width: 240px">
                            <el-option v-for="item in options.machineLifeStatus" :key="item.value" :label="item.label"
                                :value="item.value" />
                                :value="item.value - 0" />
                        </el-select>
                    </el-form-item>
                </el-col>
@@ -243,7 +243,7 @@
                    <el-form-item label="使用状态" prop="machineUseStatus">
                        <el-select v-model="form.machineUseStatus" placeholder="" style="width: 240px">
                            <el-option v-for="item in options.machineUseStatus" :key="item.value" :label="item.label"
                                :value="item.value" />
                                :value="item.value - 0" />
                        </el-select>
                    </el-form-item>
                </el-col>