1
lzhe
2024-04-18 19f83633217b90cbc9625bca4cf7d5642be4824c
1
已添加2个文件
已修改2个文件
457 ■■■■■ 文件已修改
src/views/mdc/add-station-status.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/state-feedback.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/station-live.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/station.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/add-station-status.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
<template>
    <el-dialog :title="titleMap[mode]" v-model="visible" :width="570" destroy-on-close @closed="$emit('closed')">
        <el-form :model="addDictForm" :rules="addDictRules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="center">
            <el-row>
                <el-col :span="24">
                    <el-form-item label="状态时间">
                        <el-date-picker v-model="addDictForm.date" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="right" value-format="YYYY-MM-DD HH:mm:ss" @change="dateChange">
                    </el-date-picker>
                    </el-form-item>
                </el-col>
                <!-- <el-col :span="24">
                    <el-form-item label="状态" prop="wcs">
                        <el-select v-model="addDictForm.wcs" style="width: 100%">
                            <el-option v-for="item in feedBackStatusList" :key="item.code" :label="item.name" :value="item.code"/>
                        </el-select>
                    </el-form-item>
                </el-col> -->
                <el-col :span="24">
                    <el-form-item label="描述">
                        <el-input v-model="addDictForm.description" placeholder="描述" clearable></el-input>
                    </el-form-item>
                </el-col>
            </el-row>
        </el-form>
        <template #footer>
            <el-button @click="visible=false" >取 æ¶ˆ</el-button>
            <el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="dictSubmit()">保 å­˜</el-button>
        </template>
    </el-dialog>
</template>
<script>
    export default {
        emits: ['success', 'closed'],
        data() {
            return {
                value1: true,
                mode: "add",
                titleMap: {
                    add: '状态反馈',
                    edit: '修改',
                    show: '查看'
                },
                visible: false,
                isSaveing: false,
                //表单数据
                addDictForm: {
                    description: "",
                    date: "",
                    endTime: "",
                    startTime: "",
                    wcs: ""
                },
                //验证规则
                addDictRules: {
                    wcs:[{required: true, message: '请选择状态', trigger: 'change'}]
                }
            }
        },
        mounted() {
        },
        methods: {
            dateChange(val) {
                this.addDictForm.startTime = val[0];
                this.addDictForm.endTime = val[1];
            },
            //显示
            open(mode='add'){
                this.mode = mode;
                this.visible = true;
                return this
            },
            //表单提交方法
            dictSubmit(){
                var obj = Object.assign({},this.addDictForm);
                obj.workstationIds = [this.workstationId]
                var that = this;
                this.$refs.dialogForm.validate(async (valid) => {
                    if (valid) {
                        this.isSaveing = true;
                        this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/overwrite-feedback-check",obj).then(res=> {
                            that.isSaveing = false;
                            if(res.code == 200) {
                                if(res.data) {
                                    that.$confirm(`反馈的时间与已有反馈重叠,是否覆盖`, '', {
                                        type: 'warning'
                                    }).then(() => {
                                        that.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/start-feedback-by-no-immediate",obj).then(res=> {
                                            if(res.code == 200) {
                                                that.$message.success("操作成功");
                                                that.$emit('success', this.addDictForm, this.mode);
                                                that.visible = false;
                                            }
                                        })
                                    }).catch(() => {})
                                }else {
                                    that.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/start-feedback-by-no-immediate",obj).then(res=> {
                                        if(res.code == 200) {
                                            that.$message.success("操作成功");
                                            that.$emit('success', this.addDictForm, this.mode);
                                            that.visible = false;
                                        }
                                    })
                                }
                            }else {
                                this.$alert(res.message, "提示", {type: 'error'});
                            }
                        })
                    }else{
                        return false;
                    }
                })
            },
            //表单注入数据
            setData(data){
                //可以和上面一样单个注入,也可以像下面一样直接合并进去
                //Object.assign(this.addDictForm, data);
            }
        }
    }
</script>
<style>
</style>
src/views/mdc/state-feedback.vue
@@ -2,7 +2,7 @@
 * @Author: lzhe lzhe@example.com
 * @Date: 2024-03-26 10:28:33
 * @LastEditors: lzhe lzhe@example.com
 * @LastEditTime: 2024-04-18 17:10:39
 * @LastEditTime: 2024-04-18 18:07:47
 * @FilePath: /smart-web/src/views/master/person/main/index.vue
 * @Description: è¿™æ˜¯é»˜è®¤è®¾ç½®,请设置`customMade`, æ‰“å¼€koroFileHeader查看配置 è¿›è¡Œè®¾ç½®: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
@@ -273,21 +273,6 @@
                this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/page?current=1&size=15",obj).then(res=> {
                    if(res.code == 200) {
                        this.searchDataList = res.data.records;
                    }
                })
            },
            loadNode(node, resolve, reject) {
                if(node.data.id) {
                    this.parentId = node.data.id;
                }else {
                    this.parentId = '0';
                }
                this.$HTTP.get("/api/blade-system/menu/lazy-list",{parentId: this.parentId}).then(res=> {
                    if(res.code == 200) {
                        res.data.forEach(node => {
                            node.hasChildren = !node.hasChildren;
                        });
                        resolve(res.data);
                    }
                })
            },
src/views/mdc/station-live.vue
@@ -1,24 +1,311 @@
<!--
 * @Date: 2024-04-09 22:11:21
 * @LastEditors: Sneed
 * @LastEditTime: 2024-04-13 22:15:47
 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/mdc/station-live.vue
 çŠ¶æ€åé¦ˆ
 * @Author: lzhe lzhe@example.com
 * @Date: 2024-03-26 10:28:33
 * @LastEditors: lzhe lzhe@example.com
 * @LastEditTime: 2024-04-18 18:27:19
 * @FilePath: /smart-web/src/views/master/person/main/index.vue
 * @Description: è¿™æ˜¯é»˜è®¤è®¾ç½®,请设置`customMade`, æ‰“å¼€koroFileHeader查看配置 è¿›è¡Œè®¾ç½®: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
    <el-main>
        <el-card shadow="never">
            æ•ˆçŽ‡åˆ†æž
        </el-card>
    </el-main>
    <div class="aposcope-main">
        <div class="aposcope-left">
            <div class="left-title">查询条件</div>
            <el-tree :data="tableData" node-key="id" default-expand-all :expand-on-click-node="false" :props="defalutProps" @node-click="handleNodeClick" ref="treeRef" highlight-current />
        </div>
        <div class="aposcope-right">
            <div class="content-machine-box">
                <div class="content-machine-img"><img src="./station.png" alt=""></div>
                <div class="content-machine-detail">
                    <div class="content-machine-name">461</div>
                    <el-form :model="stationForm" ref="dialogForm" label-width="80px" label-position="center" style="width: 100%;">
                        <el-row>
                            <el-col :span="8">
                                <el-form-item label="工位编号">{{stationForm.test}}</el-form-item>
                            </el-col>
                            <el-col :span="8">
                                <el-form-item label="机器品牌">{{stationForm.test}}</el-form-item>
                            </el-col>
                            <el-col :span="8">
                                <el-form-item label="机器编号">{{stationForm.test}}</el-form-item>
                            </el-col>
                            <el-col :span="8">
                                <el-form-item label="机器名称">{{stationForm.test}}</el-form-item>
                            </el-col>
                        </el-row>
                    </el-form>
                </div>
            </div>
            <div class="collect-info-panel">
                <div class="fact-analysis-realtim">
                    <div class="fact-analysis-card">
                        <div class="card-name" style="background-color: rgb(127, 192, 192);">设备状态</div>
                        <div class="card-value" style="background-color: rgba(127, 192, 192, 0.14);"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <save-dialog v-if="dialog.save" ref="saveDialog"  @success="addfeedbackSuccess" @closed="dialog.save=false"></save-dialog>
</template>
<script>
import saveDialog from './add-station-status'
    export default {
        name: "state-feedback",
        data(){
            return {
                stationForm: {
                    test: "461"
                },
                dialog: {
                    save: false
                },
                lastLevelId: "",
                current: "1",
                size: "15",
                searchData: {
                    feedBackStatus: [],
                    date: [],
                    endDate: "",
                    startDate: ""
                },
                searchDataList: [],  //右侧数据list
                aList: [],
                defalutProps: {
                    label: 'title',
                      children: 'children',
                    isLeaf: 'hasChildren',
                    disabled: 'disabled'
                },
                parentId: "0",
                tableData: [],
                searchSelection: []
            }
        },
        created(){
        },
        mounted(){
            this.getTreeList();
        },
        components: {
            saveDialog
        },
        methods: {
            addfeedbackSuccess() {
                this.getlist();
            },
            feedBackStatusChange(val) {
                this.getlist();
            },
            handleNodeClick(data) {
                if(data.code) {
                    this.lastLevelId = data.id;
                    var obj = {
                        workstationId: this.lastLevelId,
                    }
                    if(this.searchData.feedBackStatus.length != 0) {
                        obj.feedBackStatus = this.searchData.feedBackStatus;
                    }
                    if(this.searchData.endDate) {
                        obj.endDate = this.searchData.endDate;
                    }
                    if(this.searchData.startDate) {
                        obj.startDate = this.searchData.startDate;
                    }
                    this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/page?current=1&size=15",obj).then(res=> {
                        if(res.code == 200) {
                            this.searchDataList = res.data.records;
                        }
                    })
                }
            },
            getLastLevelIds(tree) {
                if (tree.length === 0) return ""; // å¦‚果没有根节点,返回空
                const lastLevelIds = [];
                const lastLevelCodes = [];
                function traverseTree(node) {
                    if(!node.code) {
                        lastLevelCodes.push(node.id);
                    }
                    if (node.children.length > 0) {
                        node.children.forEach(traverseTree); // é€’归遍历子节点
                    } else {
                        if(node.code) {
                            lastLevelIds.push(node.id); // æœ‰code才行
                        }
                    }
                }
                // åªéåŽ†ç¬¬ä¸€ä¸ªæ ¹èŠ‚ç‚¹
                traverseTree(tree[0]);
                return {lastLevelCodes,lastLevelId:lastLevelIds[0]}; // è¿”回lastLevelCodes:没有code的数组。lastLevelId:有code的第一个id
            },
            buildTree(items) {
              const idMap = {};
              const tree = [];
              // ç¬¬ä¸€æ­¥ï¼šåˆ›å»ºid到对象的映射
              items.forEach(item => {
                idMap[item.id] = { ...item, children: [] };
              });
              // ç¬¬äºŒæ­¥ï¼šæž„建树形结构
              items.forEach(item => {
                const currentNode = idMap[item.id];
                // å¦‚æžœparentId为0,说明是根节点
                if (item.parentId === 0) {
                  tree.push(currentNode);
                } else {
                  // å¦åˆ™ï¼ŒæŸ¥æ‰¾çˆ¶èŠ‚ç‚¹ï¼Œå¹¶å°†å½“å‰èŠ‚ç‚¹æ·»åŠ åˆ°çˆ¶èŠ‚ç‚¹çš„children数组中
                  const parentId = item.parentId;
                  if (idMap[parentId]) {
                    idMap[parentId].children.push(currentNode);
                  }
                }
              });
              return tree;
            },
            addTreeDisable(treeData) {
                var tree = [];
                treeData.forEach(item=> {
                    if(item.code) {
                        item.disabled = false;
                    }else {
                        item.disabled = true;
                    }
                    tree.push(item);
                })
                return tree;
            },
            getTreeList(flag) {
                var obj = {
                    groupCategory: 1,
                    groupType: "group_workstation"
                }
                this.$HTTP.post("/api/blade-cps/group/groupWorkstation/type",obj).then(res=> {
                    if(res.code == 200) {
                        if (res.code == 200) {
                            var treeDisabled = this.addTreeDisable(res.data);
                            this.tableData = this.buildTree(treeDisabled);  //从扁平化变为树状结构
                            this.$nextTick(()=> {
                                this.lastLevelId = this.getLastLevelIds(this.tableData).lastLevelId;
                                this.$refs.treeRef.setCurrentKey(this.lastLevelId);  //第一个节点的第一个子节点最后一级默认选中
                                this.getlist();  //渲染反馈列表
                            })
        
    }
                    }
                })
            },
            getlist() {
                var obj = {
                    workstationId: this.lastLevelId,
                }
                if(this.searchData.feedBackStatus != 0) {
                    obj.feedBackStatus = this.searchData.feedBackStatus;
                }
                if(this.searchData.endDate) {
                    obj.endDate = this.searchData.endDate;
                }
                if(this.searchData.startDate) {
                    obj.startDate = this.searchData.startDate;
                }
                this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/page?current=1&size=15",obj).then(res=> {
                    if(res.code == 200) {
                        this.searchDataList = res.data.records;
                    }
                })
            }
        }
    }
</script>
<style lang="scss" scoped>
<style scoped>
.aposcope-main {
    display: flex;
    min-height: 100%;
    margin: 8px;
}
.aposcope-left {
    width: 240px;
    margin-right: 8px;
    padding: 4px;
    background-color: #fff;
}
.aposcope-right {
    flex: 1;
    padding: 8px;
    background-color: #fff;
}
.left-title {
    font-size: 16px;
    text-align: center;
    height: 38px;
    line-height: 38px;
    border-bottom: 1px solid #e2e2e2;
    background-color: #409eff;
    color: #fff;
    border-radius: 2px 2px 0 0;
}
.content-machine-box {
    display: flex;
    align-items: center;
}
.content-machine-img {
    margin: 14px;
    padding: 2px;
    border: 1px solid #e8e8e8;
    width: 148px;
    height: 145px;
    justify-content: center;
}
.content-machine-img img {
    width: 135px;
    height: 135px;
}
.content-machine-detail {
    display: flex;
    width: calc(100% - 210px);
    flex-direction: column;
    align-items: flex-start;
    align-content: flex-start;
    flex-wrap: nowrap;
}
.content-machine-name {
    margin-bottom: 12px;
    font-size: 24px;
    font-weight: 700;
}
.collect-info-panel {
    background-color: rgba(59, 142, 142, .06);
    padding: 8px;
    padding-top: 0;
}
.fact-analysis-realtim {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: flex-start;
    align-content: flex-start;
    box-sizing: border-box;
    background: #fff;
}
.fact-analysis-card {
    border-radius: 2px;
    box-sizing: border-box;
    display: flex;
    margin: 8px;
}
.fact-analysis-card .card-name {
    width: 98px;
    height: 68px;
    display: flex;
    justify-content: center;
    align-items: center;
    color: #fff;
}
.fact-analysis-card .card-value {
    min-width: 118px;
    max-width: 396px;
    align-items: center;
    padding: 0 8px;
    overflow: hidden;
    word-break: break-all;
}
</style>
src/views/mdc/station.png