gaoshp
2024-05-03 ff225f1ffef14302b2ba9c9cd25afd7a29c33bf3
update
已添加2个文件
已修改3个文件
644 ■■■■ 文件已修改
src/views/console/base/Dialog.vue 370 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/Shiftsystem.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/Time.vue 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/shift-calendar.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/shiftTime.vue 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/console/base/Dialog.vue
@@ -1,7 +1,7 @@
<template>
    <el-dialog :title="titleMap[mode]" v-model="visible" :width="800" destroy-on-close @closed="$emit('closed')">
    <el-dialog :title="titleMap[mode]" v-model="visible" :width="1100" destroy-on-close @closed="$emit('closed')">
        <el-form :model="form" :rules="rules" :disabled="mode == 'show'" ref="dialogForm" label-width="120px"
            label-position="center">
            label-position="center" v-if="visible">
            <el-row>
                <el-col :span="24" style="padding:12px 0;">
                    ç­åˆ¶è¯¦æƒ…
@@ -18,82 +18,33 @@
                </el-col>
                <el-col :span="12">
                    <el-form-item label="班制颜色" prop="colour">
                        <el-input style="width: 240px" v-model="form.userName" placeholder="班制颜色" clearable></el-input>
                        <el-color-picker size="small" v-model="form.colour" />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="班制时间" prop="userName">
                        <el-input style="width: 240px" v-model="form.userName" placeholder="班制时间" clearable></el-input>
                    <el-form-item label="班制时间" prop="range">
                        <ShiftTime v-model="form.range"></ShiftTime>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row v-for="item in detail.paramValue" :key="item">
            <el-row v-for="item in shiftDetailDTOList" :key="item">
                <el-col :span="24">
                    ç­æ¬¡1
                    ç­æ¬¡{{ item.shiftIndex }}
                </el-col>
                <el-col :span="24">
                <el-col :span="12">
                    <el-form-item label="班次名称" prop="indexName">
                        <el-input style="width: 240px" v-model="form.userName" placeholder="" clearable></el-input>
                        <el-input v-model="item.indexName" placeholder="" clearable></el-input>
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="班次时间" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                <el-col :span="12"></el-col>
                <el-col :span="12">
                    <el-form-item label="班次时间">
                        <Time v-model="item.range"></Time>
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="休息时段1" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="休息时段1" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="休息时段1" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="休息时段1" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                    </el-form-item>
                </el-col>
                <el-col :span="9">
                    <el-form-item label="" prop="userName">
                        <el-time-picker style="width: 100%;" v-model="form.userName" format="HH:mm"
                            placeholder="Arbitrary time" />
                </el-col><el-col :span="12"></el-col>
                <el-col :span="12" v-for="(v, i) in item.shiftRestTimeDTOList" :key="v.restIndex">
                    <el-form-item :label="'休息时段' + (i + 1)">
                        <Time v-model="v.range"></Time>
                    </el-form-item>
                </el-col>
            </el-row>
@@ -107,9 +58,14 @@
<script>
import deepmerge from 'deepmerge'
import http from "@/utils/request"
import ShiftTime from './shiftTime'
import Time from './Time'
export default {
    emits: ['success', 'closed'],
    components: {
        ShiftTime,
        Time
    },
    props: {
        option: {
            type: Object
@@ -119,56 +75,9 @@
        }
    },
    watch: {
        detail() {
            let len = this?.detail?.paramValue - 0 || 1
            let shiftDetailDTOList = []
            for (let i = 0; i < len; i++) {
                shiftDetailDTOList.push({
                    shiftStartTime: 0,
                    shiftEndTime: 0,
                    shiftIndex: i + 1,
                    indexName: '',
                    restNumber: i + 1,
                    shiftRestTimeDTOList: [
                        {
                            restStartTime: 0,
                            restEndTime: 0,
                            restIndex: 1,
                        },
                        {
                            restStartTime: 0,
                            restEndTime: 0,
                            restIndex: 2,
                        },
                        {
                            restStartTime: 0,
                            restEndTime: 0,
                            restIndex: 3,
                        },
                        {
                            restStartTime: 0,
                            restEndTime: 0,
                            restIndex: 4,
                        }
                    ]
                })
            }
            return this.shiftDetailDTOList = shiftDetailDTOList
        }
    },
    computed: {
        options() {
            let group = deepmerge([], this.option.group)
            group[0].disabled = true
            return {
                ...this.option,
                group,
                calendarList: this.calendarList,
                linkWays: this.linkWays,
                work_type: this.work_type,
                machining_type: this.machining_type
            }
        },
    },
    data() {
        return {
@@ -178,100 +87,193 @@
                edit: '编辑班制',
                // show: '查看'
            },
            params: {},
            visible: false,
            isSaveing: false,
            //表单数据
            form: {
                id: "",
                userName: "",
                avatar: "",
                name: "",
                dept: "",
                group: []
                id: '',
                code: '',
                isUsed: '',
                name: '',
                colour: '',
                startTime: '',
                endTime: '',
                range: [],
                shiftNumber: '',
                number: '',
            },
            options: [
                {
                    label: '上日',
                    value: 0
                },
                {
                    label: '当日',
                    value: 1
                },
                {
                    label: '次日',
                    value: 2
                }
            ],
            shiftDetailDTOList: [],
            //验证规则
            rules: {
                avatar: [
                    { required: true, message: '请上传头像' }
                ],
                userName: [
                    { required: true, message: '请输入登录账号' }
                range: [
                    { required: true, message: '' }
                ],
                name: [
                    { required: true, message: '请输入真实姓名' }
                    { required: true, message: '' }
                ],
                password: [
                    { required: true, message: '请输入登录密码' },
                    {
                        validator: (rule, value, callback) => {
                            if (this.form.password2 !== '') {
                                this.$refs.dialogForm.validateField('password2');
                            }
                            callback();
                        }
                    }
                code: [
                    { required: true, message: '' }
                ],
                password2: [
                    { required: true, message: '请再次输入密码' },
                    {
                        validator: (rule, value, callback) => {
                            if (value !== this.form.password) {
                                callback(new Error('两次输入密码不一致!'));
                            } else {
                                callback();
                            }
                        }
                    }
                ],
                dept: [
                    { required: true, message: '请选择所属部门' }
                ],
                group: [
                    { required: true, message: '请选择所属角色', trigger: 'change' }
                ]
            },
            //所需数据选项
            calendarList: [],
            work_type: [],
            machining_type: [],
            linkWays: [
                {
                    label: '关联机器',
                    value: '0'
                }, {
                    label: '创建同名机器',
                    value: '1'
                }
            ]
        }
    },
    created() {
        this.$API.workstation.calendarList.get().then(res => {
            this.calendarList = res.data
        })
        this.$API.system.dic.getDic.get({ code: 'work_type' }).then(res => {
            this.work_type = res.data
        })
        this.$API.system.dic.getDic.get({ code: 'machining_type' }).then(res => {
            this.machining_type = res.data
        })
    },
    methods: {
        //显示
        open(mode = 'add', params) {
            this.mode = mode;
            this.visible = true;
            this.params = params
            this.$nextTick(() => {
                this.visible = true;
            })
            this.form = {
                id: params?.id,
                code: params?.code,
                isUsed: params?.isUsed,
                name: params?.name,
                colour: params?.colour,
                startTime: params?.startTime,
                endTime: params?.endTime,
                range: [params?.startTime || 0, params?.endTime || 1440],
                shiftNumber: params?.shiftNumber || this?.detail?.paramValue - 0,
                number: params?.number || 1
            }
            if (params?.shiftDetailVOList?.length > 0) {
                this.shiftDetailDTOList = params?.shiftDetailVOList?.map((item, index) => {
                    let shiftRestTimeDTOList = item?.shiftRestTimeVOList.map(item => {
                        return {
                            ...item,
                            range: [item.restStartTime, item.restEndTime]
                        }
                    })
                    while (shiftRestTimeDTOList.length < 4) {
                        shiftRestTimeDTOList.push({
                            range: [0, 0],
                            restStartTime: 0,
                            restEndTime: 0,
                        })
                    }
                    return {
                        range: [item.shiftStartTime || 0, item.shiftEndTime || 1440],
                        shiftStartTime: item.shiftStartTime,
                        shiftEndTime: item.shiftEndTime,
                        shiftIndex: index + 1,
                        indexName: item.indexName,
                        restNumber: index + 1,
                        shiftRestTimeDTOList
                    }
                })
            } else {
                let len = this?.detail?.paramValue - 0 || 1
                let shiftDetailDTOList = []
                for (let i = 0; i < len; i++) {
                    shiftDetailDTOList.push({
                        range: [0, 0],
                        shiftStartTime: 0,
                        shiftEndTime: 0,
                        shiftIndex: i + 1,
                        indexName: '',
                        restNumber: i + 1,
                        shiftRestTimeDTOList: [
                            {
                                range: [0, 0],
                                restStartTime: 0,
                                restEndTime: 0,
                            },
                            {
                                range: [0, 0],
                                restStartTime: 0,
                                restEndTime: 0,
                            },
                            {
                                range: [0, 0],
                                restStartTime: 0,
                                restEndTime: 0,
                            },
                            {
                                range: [0, 0],
                                restStartTime: 0,
                                restEndTime: 0,
                            }
                        ]
                    })
                }
                this.shiftDetailDTOList = shiftDetailDTOList
            }
            console.log(this.shiftDetailDTOList, '>>>?????s')
            return this
        },
        //表单提交方法
        submit() {
            console.log(this.form, this.shiftDetailDTOList)
            this.$refs.dialogForm.validate(async (valid) => {
                if (valid) {
                    this.isSaveing = true;
                    var res = await this.$API.demo.post.post(this.form);
                    let data = {
                        shiftNumber: this?.detail?.paramValue - 0,
                        ...this.form, shiftDetailDTOList: this.shiftDetailDTOList.map(item => {
                            return {
                                shiftStartTime: item.range[0],
                                shiftEndTime: item.range[1],
                                shiftIndex: item.shiftIndex,
                                indexName: item.indexName,
                                restNumber: item.restNumber,
                                shiftRestTimeDTOList: item.shiftRestTimeDTOList.filter(v => {
                                    return v.range[1] > v.range[0]
                                }).map((v, i) => {
                                    return {
                                        restStartTime: v.range[0],
                                        restEndTime: v.range[1],
                                        restIndex: i + 1,
                                    }
                                })
                            }
                        })
                    }
                    data.startTime = data.range[0]
                    data.endTime = data.range[1]
                    try {
                        data.startTime = data.range[0]
                        data.endTime = data.range[1]
                        delete data.range
                    } catch (error) {
                    }
                    let res
                    try {
                        if (this.form.id) {
                            res = await this.$HTTP.put('/api/blade-cps/shift', data).catch(() => {
                                throw new Error()
                            })
                        } else {
                            res = await this.$HTTP.post('/api/blade-cps/shift', data).catch(() => {
                                throw new Error()
                            })
                        }
                    } catch (error) {
                        this.isSaveing = false;
                    }
                    this.isSaveing = false;
                    if (res.code == 200) {
                        this.$emit('success', this.form, this.mode)
@@ -287,12 +289,6 @@
        },
        //表单注入数据
        setData(data) {
            this.form.id = data.id
            this.form.userName = data.userName
            this.form.avatar = data.avatar
            this.form.name = data.name
            this.form.group = data.group
            this.form.dept = data.dept
            //可以和上面一样单个注入,也可以像下面一样直接合并进去
            //Object.assign(this.form, data)
src/views/console/base/Shiftsystem.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-04-09 20:19:46
 * @LastEditors: Sneed
 * @LastEditTime: 2024-05-02 00:31:01
 * @LastEditTime: 2024-05-03 00:11:11
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/console/base/Shiftsystem.vue
-->
<template>
@@ -56,7 +56,7 @@
                </el-row>
            </el-main>
        </el-container>
        <Dialog ref="dialog" :option="{ types, status, group }" :detail="detail"></Dialog>
        <Dialog ref="dialog" :option="{ types, status, group }" :detail="detail" @success="success"></Dialog>
    </el-container>
</template>
@@ -202,6 +202,9 @@
        this.init()
    },
    methods: {
        success() {
            this.$refs.table.reload(this.params)
        },
        init() {
            this.$HTTP.get('/api/blade-system/param/detail?paramKey=system.shift.max').then(res => {
                if (res.code === 200) {
@@ -257,12 +260,25 @@
            })
        },
        table_add() {
            this.$refs.dialog.open()
            this.$refs.dialog.open('add', {
            })
        },
        table_edit() {
            this.$refs.dialog.open()
            this.$refs.dialog.open('edit', this.info)
        },
        del() {
            this.$confirm(`确定删除数据?`, '', {
                type: 'warning'
            }).then(() => {
                this.$HTTP.delete(`/api/blade-cps/shift/${this.info.id}`).then(res => {
                    if (res.code === 200) {
                        this.$refs.table.reload(this.params)
                    }
                })
            }).catch(() => {
            })
        }
    },
src/views/console/base/Time.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,131 @@
<!--
 * @Date: 2024-05-02 16:31:11
 * @LastEditors: Sneed
 * @LastEditTime: 2024-05-03 00:39:17
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/console/base/Time.vue
-->
<template>
    <div>
        <el-select v-model="startDay" placeholder="" size="" style="width: 80px" @change="change">
            <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
        </el-select>
        <el-time-picker style="width: 80px" :clearable="false" v-model="start" value-format="HH:mm" format="HH:mm"
            placeholder="" @change="change" />
        <span style="padding: 0 10px">-</span>
        <el-select v-model="endDay" placeholder="" size="" style="width: 80px" @change="change">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
        </el-select>
        <el-time-picker style="width: 80px" :clearable="false" v-model="end" value-format="HH:mm" format="HH:mm"
            placeholder="" @change="change" />
    </div>
</template>
<script>
import moment from 'moment'
export default {
    props: {
        modelValue: { type: Array, default: [0, 0] },
    },
    watch: {
        value(val) {
            this.$emit('update:modelValue', val)
            let base = moment(moment().format('YYYY-MM-DD') + ' 00:00')
            let base1 = moment(moment().format('YYYY-MM-DD') + ' 00:00')
            let startTime = base.add(val[0], 'm').format('HH:mm')
            let endTime = base1.add(val[1], 'm').format('HH:mm')
            this.start = startTime
            this.end = endTime
            this.startDay = this.getDes(val[0])
            this.endDay = this.getDes(val[1])
        },
    },
    data() {
        return {
            value: [],
            options1: [
                {
                    label: '上日',
                    value: 0
                },
                {
                    label: '当日',
                    value: 1
                },
                {
                    label: '次日',
                    value: 2
                }
            ],
            options: [
                {
                    label: '上日',
                    value: 0
                },
                {
                    label: '当日',
                    value: 1
                },
                {
                    label: '次日',
                    value: 2
                }
            ],
            startDay: 1,
            endDay: 1,
            start: '00:00',
            end: '00:00'
        }
    },
    created() {
        if (!this.modelValue || this?.modelValue.length === 0) {
            this.value = [0, 1440]
            this.startDay = 1
            this.endDay = 2
            this.start = '00:00'
            this.end = '00:00'
        } else {
            this.value = this.modelValue
        }
    },
    methods: {
        getDes(num) {
            if (num < 0) {
                return 0
            } else if (num >= 0 && num < 1440) {
                return 1
            } else {
                return 2
            }
        },
        change() {
            let arr = []
            let base = moment(moment().format('YYYY-MM-DD') + ' 00:00')
            let startTime = moment(`${moment().format('YYYY-MM-DD')} ${this.start}`)
            let endTime = moment(`${moment().format('YYYY-MM-DD')} ${this.end}`)
            if (this.startDay === 0) {
                startTime.subtract(1, 'd')
            } else if (this.startDay === 2) {
                startTime.add(1, 'd')
            }
            let arrItem0 = startTime.diff(base) / 60000
            if (this.endDay === 0) {
                endTime.subtract(1, 'd')
            } else if (this.endDay === 2) {
                endTime.add(1, 'd')
            }
            let arrItem1 = endTime.diff(base) / 60000
            console.log('>>>>', arrItem1, arrItem0)
            if (arrItem1 <= arrItem0) {
                return this.$message.warning('开始时间大于结束时间,请重新输入');
            }
            console.log('>>>>', arrItem1, arrItem0)
            // this.endDay = this.getDes(arrItem0)
            arr.push(arrItem0, arrItem1)
            this.value = arr
        }
    }
}
</script>
<style lang="scss" scoped></style>
src/views/console/base/shift-calendar.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2024-04-04 21:51:24
 * @LastEditors: Sneed
 * @LastEditTime: 2024-04-28 23:45:46
 * @LastEditTime: 2024-05-02 22:18:25
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/console/base/shift-calendar.vue
-->
<template>
src/views/console/base/shiftTime.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
<!--
 * @Date: 2024-05-02 16:31:11
 * @LastEditors: Sneed
 * @LastEditTime: 2024-05-03 00:38:58
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/console/base/shiftTime.vue
-->
<template>
    <div>
        <el-select v-model="startDay" placeholder="" size="" style="width: 80px" @change="change">
            <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
        </el-select>
        <el-time-picker style="width: 80px" :clearable="false" v-model="start" value-format="HH:mm" format="HH:mm"
            placeholder="" @change="change" />
        <span style="padding: 0 10px">-</span>
        <el-select disabled v-model="endDay" placeholder="" size="" style="width: 80px">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
        </el-select>
        <el-time-picker disabled style="width: 80px" :clearable="false" v-model="end" value-format="HH:mm"
            format="HH:mm" placeholder="" />
    </div>
</template>
<script>
import moment from 'moment'
export default {
    props: {
        modelValue: { type: [], default: [0, 1440] },
    },
    watch: {
        value(val) {
            this.$emit('update:modelValue', val)
            let base = moment(moment().format('YYYY-MM-DD') + ' 00:00')
            let base1 = moment(moment().format('YYYY-MM-DD') + ' 00:00')
            let startTime = base.add(val[0], 'm').format('HH:mm')
            let endTime = base1.add(val[1], 'm').format('HH:mm')
            this.start = startTime
            this.end = endTime
            this.startDay = this.getDes(val[0])
            this.endDay = this.getDes(val[1])
        },
        modelValue() {
            this.value = this.modelValue
        }
    },
    data() {
        return {
            value: [],
            options1: [
                {
                    label: '上日',
                    value: 0
                },
                {
                    label: '当日',
                    value: 1
                },
            ],
            options: [
                {
                    label: '上日',
                    value: 0
                },
                {
                    label: '当日',
                    value: 1
                },
                {
                    label: '次日',
                    value: 2
                }
            ],
            startDay: 1,
            endDay: 2,
            start: '00:00',
            end: '00:00'
        }
    },
    created() {
        if (!this.modelValue || this?.modelValue.length === 0) {
            this.value = [0, 1440]
            this.startDay = 1
            this.endDay = 2
            this.start = '00:00'
            this.end = '00:00'
        } else {
            this.value = this.modelValue
        }
    },
    methods: {
        getDes(num) {
            if (num < 0) {
                return 0
            } else if (num >= 0 && num < 1440) {
                return 1
            } else {
                return 2
            }
        },
        change() {
            let arr = []
            let base = moment(moment().format('YYYY-MM-DD') + ' 00:00')
            let startTime = moment(`${moment().format('YYYY-MM-DD')} ${this.start}`)
            if (this.startDay === 0) {
                startTime.subtract(1, 'd')
            }
            let arrItem0 = startTime.diff(base) / 60000
            let arrItem1 = startTime.add(1, 'd').diff(base) / 60000
            // this.endDay = this.getDes(arrItem0)
            arr.push(arrItem0, arrItem1)
            this.value = arr
        }
    }
}
</script>
<style lang="scss" scoped></style>