#
whycq
2023-10-12 6885f777b4edabdf1ba05413a311befdc2fff72a
#
2个文件已修改
465 ■■■■ 已修改文件
Monitor-APP/App.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/pages/home/home.vue 464 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/App.vue
@@ -27,7 +27,6 @@
            //检测当前平台,如果是安卓则启动安卓更新
            getVersion() {
                let that = this;
                console.log(this.downloadFlag);
                if (this.downloadFlag) {
                    return
                }
Monitor-APP/pages/home/home.vue
@@ -3,7 +3,7 @@
        <uni-transition :duration="duration" :mode-class="homeMode" :show="homeViewShow">
            <view class="home-view">
                <view class="head">
                    <text>自动仓库WCS监控平台</text>
                    <text>自动仓库监控平台</text>
                </view>
                <!-- 日历 -->
                <view class="time-tools">{{calendar}}</view>
@@ -11,281 +11,30 @@
                <view class="button-right" @click="ejected()"></view>
                <!-- 主视图 -->
                <view class="main">
                    <view class="mian-item">
                        <view class="mian-item-box">
                            <y-box>
                                <view class="box-item">
                                    <text class="item-title">自动化立体仓库</text>
                                    <text class="item-subTitle">Automatic Storageand Retrieval System</text>
                                    <text class="item-text" style="text-align: left;">利用立体仓库设备可实现仓库高层合理化、存取自动化、操作简便化;自动化立体仓库是当前技术水平较高的形式。自动化立体仓库的主体由货架、巷道式堆垛起重机、入(出)库工作台和自动运进(出)及操作控制系统组成。货架是钢结构或钢筋混凝土结构的建筑物或结构体,货架内是标准尺寸的货位空间,巷道堆垛起重机穿行于货架之间的巷道中,完成存、取货的工作。管理上采用计算机及条形码技术。</text>
                                </view>
                                <view class="box-item">
                                    <text class="item-title">仓库数据</text>
                                    <text class="item-subTitle">warehouse data</text>
                                    <view class="img-box">
                    <view class="main-y" v-for="item in locs">
                        <view class="y-it"><view class="y-it-desc">工作站编号:</view><view class="margin">{{item.devNo}}</view></view>
                        <view class="y-it"><view class="y-it-desc">工作站编号:</view><view class="margin">{{item.locSts$}}</view></view>
                                        
                                        <view class="item-img">
                                            <image src="../../static/a1.png" mode="aspectFit"></image>
                                            <view class="flex-col" style="width: calc(100% - 5vw);">
                                                <view class="flex-row" style="position: relative;" >
                                                    <view style="width: 2vw;padding-left: 2vw;;font-size: 2vw;">{{baseInfo.xDistance}}</view>
                                                    <view style="position: absolute;bottom: 0;left: 10vw;">KM</view>
                                                </view>
                                                <view style="height: 100%;text-align: left;text-indent: 2em;">累计走行距离(千米)</view>
                                            </view>
                                        </view>
                        <view class="y-it" v-if="item.agvWaitPakin"><view class="y-it-desc">物料号:</view><view class="margin">{{item.agvWaitPakin.matnr}}</view></view>
                        <view class="y-it" v-if="item.agvWaitPakin"><view class="y-it-desc">序列码:</view><view class="margin">{{item.agvWaitPakin.batch}}</view></view>
                        <view class="y-it" v-if="item.agvWaitPakin"><view class="y-it-desc">料箱码:</view><view class="margin">{{item.agvWaitPakin.suppCode}}</view></view>
                        <view class="y-it" v-if="item.agvWaitPakin"><view class="y-it-desc">数量:</view><view class="margin">{{item.agvWaitPakin.anfme}}</view></view>
                                        
                                        <view class="item-img">
                                            <image src="../../static/b1.png" mode="aspectFit"></image>
                                            <view class="flex-col" style="width: calc(100% - 5vw);">
                                                <view class="flex-row" style="position: relative;" >
                                                    <view style="width: 2vw;padding-left: 2vw;;font-size: 2vw;">{{baseInfo.yDistance}}</view>
                                                    <view style="position: absolute;bottom: 0;left: 10vw;">KM</view>
                                                </view>
                                                <view style="height: 100%;text-align: left;text-indent: 2em;">累计升降距离(千米)</view>
                                            </view>
                                        </view>
                        <view class="y-it" v-if="item.agvWrkMast"><view class="y-it-desc">工作号:</view><view class="margin">{{item.agvWrkMast.wrkNo}}</view></view>
                        <view class="y-it" v-if="item.agvWrkMast"><view class="y-it-desc">工作状态:</view><view class="margin">{{item.agvWrkMast.wrkSts$}}</view></view>
                        <view class="y-it" v-if="item.agvWrkMast"><view class="y-it-desc">工作类型:</view><view class="margin">{{item.agvWrkMast.ioType$}}</view></view>
                                        
                                        <view class="item-img">
                                            <image src="../../static/c1.png" mode="aspectFit"></image>
                                            <view class="flex-col" style="width: calc(100% - 5vw);">
                                                <view class="flex-row" style="position: relative;" >
                                                    <view style="-width: 2vw;padding-left: 2vw;;font-size: 2vw;">{{baseInfo.xDuration}}</view>
                                                    <view style="position: absolute;bottom: 0;left: 10vw;">H</view>
                                                </view>
                                                <view style="height: 100%;text-align: left;text-indent: 2em;">累计走行时长(小时)</view>
                                            </view>
                                        </view>
                        <view class="y-it" v-if="item.agvWrkDetl"><view class="y-it-desc">物料号:</view><view class="margin">{{item.agvWrkDetl.matnr}}</view></view>
                        <view class="y-it" v-if="item.agvWrkDetl"><view class="y-it-desc">序列码:</view><view class="margin">{{item.agvWrkDetl.batch}}</view></view>
                        <view class="y-it" v-if="item.agvWrkDetl"><view class="y-it-desc">料箱码:</view><view class="margin">{{item.agvWrkDetl.suppCode}}</view></view>
                        <view class="y-it" v-if="item.agvWrkDetl"><view class="y-it-desc">数量:</view><view class="margin">{{item.agvWrkDetl.anfme}}</view></view>
                                        
                                        <view class="item-img">
                                            <image src="../../static/d1.png" mode="aspectFit"></image>
                                            <view class="flex-col" style="width: calc(100% - 5vw);">
                                                <view class="flex-row" style="position: relative;" >
                                                    <view style="width: 2vw;padding-left: 2vw;;font-size: 2vw;">{{baseInfo.yDuration}}</view>
                                                    <view style="position: absolute;bottom: 0;left: 10vw;">H</view>
                                                </view>
                                                <view style="height: 100%;text-align: left;text-indent: 2em;">累计升降时长(小时)</view>
                                            </view>
                                        </view>
                                    </view>
                                </view>
                                <view class="box-item">
                                    <view class="flex-row" style="width: 100%;">
                                        <!-- 左侧 -->
                                        <view class="flex-col" style="align-items: flex-start;justify-content: flex-start;">
                                            <text class="item-title">库位使用率</text>
                                            <text class="item-subTitle">EQUIPMENT USAGE THIS MONTH</text>
                                        </view>
                                        <!-- 右侧 -->
                                        <view style="margin-left: auto;">
                                            <!-- 百分比 -->
                                            <view class="flex-col" style="align-items: flex-end;justify-content: flex-end;" >
                                                <!-- style="justify-content: flex-end;position: absolute;top: 0;right: 1vw;text-align: right;" -->
                                                <text class="item-title">{{baseInfo.usedPr}}%</text>
                                                <text class="item-subTitle">同比上月 + 5%</text>
                                            </view>
                                        </view>
                                    </view>
                                    <view class="flex-col" style="width: 100%;align-items: flex-start;position: relative;font-size: 1vw">
                                        <!-- 进度条 -->
                                        <view class="flex-row" style="width: 100%;position: relative;margin-top: 5%;">
                                            <view class="progressBar" style="width: 80%;height: 2vw;">
                                                <view class="progress" :style="'width:'+ baseInfo.usedPr + '%'"></view>
                                            </view>
                                            <view style="position: absolute;bottom: 0;right: 0;font-size: 2.5vw;color: #FF5722;;">{{baseInfo.used}}</view>
                                        </view>
                                    </view>
                                </view>
                            </y-box>
                        </view>
                    </view>
                    <view class="mian-item">
                        <view class="mian-item-box">
                            <view style="width: 100%;height: 100%;">
                                <view style="height: 35%;">
                                    <!-- 折线图 -->
                                    <y-box>
                                        <view class="box-item">
                                            <view class="flex-row" style="width: 100%;">
                                                <!-- 左侧 -->
                                                <view class="flex-col" style="align-items: flex-start;justify-content: flex-start;">
                                                    <text class="item-title">入出库统计</text>
                                                    <text class="item-subTitle">ORDER STATISTICS</text>
                                                </view>
                                                <!-- 右侧 -->
                                                <view style="margin-left: auto;">
                                                    <!-- 百分比 -->
                                                    <view class="flex-col" style="align-items: flex-end;justify-content: flex-end;" >
                                                        <!-- style="justify-content: flex-end;position: absolute;top: 0;right: 1vw;text-align: right;" -->
                                                        <text class="item-title">31</text>
                                                        <text class="item-subTitle">今日订单数</text>
                                                    </view>
                                                </view>
                                            </view>
                                            <view class="charts-box">
                                                <qiun-data-charts type="line" :chartData="chartsDataLine1" :echartsH5="true" :echartsApp="true"/>
                                            </view>
                                        </view>
                                    </y-box>
                                </view>
                                <!-- null -->
                                <view style="height: 2%;"></view>
                                <view style="height: 43%;">
                                    <y-box>
                                        <view class="box-item">
                                            <view class="flex-row" style="width: 100%;">
                                                <!-- 左侧 -->
                                                <view class="flex-col" style="align-items: flex-start;justify-content: flex-start;">
                                                    <text class="item-title">库存类型</text>
                                                    <text class="item-subTitle">INCOME DATE</text>
                                                </view>
                                                <!-- 右侧 -->
                                                <view style="margin-left: auto;">
                                                    <!-- 百分比 -->
                                                    <view class="flex-col" style="align-items: flex-end;justify-content: flex-end;" >
                                                        <text class="item-title">今天</text>
                                                        <text class="item-subTitle">Today</text>
                                                    </view>
                                                </view>
                                            </view>
                                            <view class="flex-row" style="width: 100%;">
                                                <!-- 左 -->
                                                <view class="charts-box-ring">
                                                    <qiun-data-charts type="ring" :opts="{legend:{position:'bottom'}}" :eopts="ringOpts" :chartData="chartsDataPie2" :echartsH5="true" :echartsApp="true"/>
                                                </view>
                                                <!-- 右 -->
                                                <view>
                                                    <view class="flex-row sub-info">
                                                        <image src="../../static/g1.png" mode="aspectFit"></image>
                                                        <view style="width: 8vw;height: 4vw;line-height: 4vw;">在库</view>
                                                        <view style="width: 8vw;height: 4vw;line-height: 4vw;font-size: 2vw;">{{baseInfo.stockCount}}</view>
                                                    </view>
                                                    <view class="flex-row sub-info" style="margin-top: 2vh;">
                                                        <image src="../../static/f1.png" mode="aspectFit"></image>
                                                        <view style="width: 8vw;height: 4vw;line-height: 4vw;">空库</view>
                                                        <view style="width: 8vw;height: 4vw;line-height: 4vw;font-size: 2vw;">{{baseInfo.emptyCount}}</view>
                                                    </view>
                                                    <view class="flex-row sub-info" style="margin-top: 2vh;">
                                                        <image src="../../static/e1.png" mode="aspectFit"></image>
                                                        <view style="width: 8vw;height: 4vw;line-height: 4vw;">锁定</view>
                                                        <view style="width: 8vw;height: 4vw;line-height: 4vw;font-size: 2vw;">{{baseInfo.noneCount}}</view>
                                                    </view>
                                                </view>
                                            </view>
                                        </view>
                                    </y-box>
                                </view>
                                <view style="height: 2%;"></view>
                                <view style="height: 18%;">
                                    <y-box>
                                        <view class="flex-col" style="width: 100%;height: 100%;font-size: 4vh;justify-content: center;letter-spacing: 1vh;">
                                            <!-- 嘉善边锋机械股份有限公司 -->
                                            <!-- 自动仓库WCS监控平台 -->
                                            <image src="../../static/vietnam.jpg" mode="" style="width: 100%;"></image>
                                        </view>
                                    </y-box>
                                </view>
                            </view>
                        </view>
                    </view>
                </view>
                
            </view>
        </uni-transition>
        <!-- 全板/拣料信息 -->
        <uni-transition :duration="duration" :mode-class="infoMode" :show="infoViewShow">
            <view class="home-view">
                <view class="head">
                    <text>{{infoText.title}}</text>
                </view>
                <!-- 日历 -->
                <view class="time-tools">{{calendar}}</view>
                <view class="button-left" @click="ejected()"></view>
                <view class="button-right" @click="ejected()"></view>
                <!-- 主体 -->
                <view class="info-main">
                    <view class="info-box">
                        <y-box>
                            <!-- 文本容器 -->
                            <view class="text-content">
                                <!-- head -->
                                <view class="swiper-head">
                                    <view>工作号: {{infoText.workNo}}</view>
                                    <view>源库位: {{infoText.sourceLocNo}}</view>
                                    <view>目标站: {{infoText.staNo}}</view>
                                    <view v-show="infoText.ctnNo" style="color: red">锁码物料</view>
                                    <!-- <view style="width: 10%;">数量</view> -->
                                </view>
                                <!-- body -->
                                <view class="swiper-body" :class="textred" >
                                    <!-- swiper 一些说明
                                    circular 是否采用衔接滑动,即播放到末尾后重新回到开头
                                    vertical 滑动方向是否为纵向
                                    display-multiple-items 同时显示的滑块数量 -->
                                    <swiper class="swiper-body-main" vertical="true"
                                    display-multiple-items="2"
                                    circular="true" :autoplay="true" :interval="3000" :duration="2000">
                                        <swiper-item class="swiper-item">
                                            <view>
                                                <view>料号:{{infoText.matnr}}</view>
                                                <view class="swiper-margin">规格:{{infoText.specs}}</view>
                                                <view v-show="!infoText.orderNo" class="swiper-margin">箱号:{{infoText.barcode}}</view>
                                            </view>
                                            <view>
                                                <view>批次:{{infoText.batch}}</view>
                                                <view class="swiper-margin">出库数量:{{infoText.count}}</view>
                                            </view>
                                        </swiper-item>
                                        <!-- <swiper-item class="swiper-item" v-show="!infoText.orderNo">
                                        </swiper-item> -->
                                        <swiper-item class="swiper-item" v-show="infoText.orderNo">
                                            <view>
                                                <view>订单号:{{infoText.orderNo}}</view>
                                                <view class="swiper-margin">箱号:{{infoText.barcode}}</view>
                                            </view>
                                            <view>
                                                <view>已出箱数:{{infoText.doneOfTray}}</view>
                                                <view class="swiper-margin">总箱数:{{infoText.totalOfTray}}</view>
                                            </view>
                                        </swiper-item>
                                    </swiper>
                                </view>
                            </view>
                        </y-box>
                    </view>
                </view>
            </view>
        </uni-transition>
        <!-- 异常信息 -->
        <uni-transition :duration="duration" :mode-class="errorInfoMode" :show="errorInfoViewShow">
            <view class="error-info-view">
                <view class="head">
                    <text>{{infoText.title}}</text>
                </view>
                <!-- 日历 -->
                <view class="time-tools">{{calendar}}</view>
                <view class="button-left"></view>
                <view class="button-right"></view>
                <!-- 主体 -->
                <view class="info-main" >
                    <view class="info-box">
                        <y-box>
                            <view class="info-box-text">
                                <view class="flex-col info-box-text-item">{{infoText.error}}</view>
                            </view>
                        </y-box>
                    </view>
                </view>
            </view>
        </uni-transition>
        
        <!-- 自定义弹出层 -->
        <view class="eject-mask" v-show="ejectShow">
@@ -306,7 +55,7 @@
                            <input type="text" v-model="basePort">
                        </view>
                    </view>
                    <view class="item">
                    <!-- <view class="item">
                        <view class="desc">ledId:</view>
                        <view class="input">
                            <input type="text" v-model="baseLedId">
@@ -317,7 +66,7 @@
                        <view class="input">
                            <input type="text" v-model="baseCrnId">
                        </view>
                    </view>
                    </view> -->
                    <view class="item">
                        <view class="desc">Url:</view>
                        <view class="input">
@@ -344,6 +93,7 @@
    export default {
        data() {
            return {
                locs: [],
                series: [],
                homeViewShow: true,
                infoViewShow: false    ,
@@ -382,11 +132,11 @@
                height: '',
                showCharts: false,
                ejectShow: false,
                baseIP: '',
                basePort: '',
                baseIP: '10.10.10.40',
                basePort: '8081',
                baseLedId: '',
                baseCrnId: '',
                baseUrl: '',
                baseUrl: 'tzskwms',
                info: null,
                error: null,
                infoType: 0,
@@ -433,24 +183,43 @@
            that.baseLedId = BaseLedId
            that.basePort = BasePort
            that.baseCrnId = BaseCrnId
            // this.getUrl()
            this.getUrl()
            this.getVisualized()
        },
        onLoad() {
            setInterval(()=>{
                this.getServerData()
                this.initlineChart()
                this.initPieChart()
                this.getOther()
                this.getDate2()
                this.getInfo()
                this.getError()
                // this.getDate2()
                // this.getInfo()
                // this.getError()
                // this.getInfo2()
                // this.getError2()
                this.getUrl()
                // this.getUrl()
                this.controller()
            },1000)
        },
        methods: {
            getVisualized() {
                let that = this
                let param = {stationCode: 'CS-101'}
                uni.request({
                    url: `${that.commonUrl}/agv/basDevp/visualized/list/auth`,
                    header: { 'Access-Control-Allow-Origin': '*'},
                    method: 'POST',
                    data: JSON.stringify(param),
                    success(res) {
                        res = res.data
                        if (res.code === 200 && res.data.body.length>0) {
                            that.locs = [];
                            for (let k of res.data.body) {
                                for (let i of k.loc) {
                                    that.locs.push(i)
                                }
                            }
                        }
                    }
                })
            },
            timeOuts() {
                console.log(this.times);
            },
@@ -472,26 +241,7 @@
                let that = this
                let result = ycqdata.dataError2
                var    res = result.data
                if (res.data && res.data !== "") {
                    var errorInfo = res.data
                    if (that.infoType == 1) {
                        that.infoType = 3
                        that.infoText.title = "其他信息"
                        // that.infoText.title = "异常"
                        that.infoText.error = errorInfo
                        return
                    }
                    that.infoType = 2
                    that.infoText.title = "其他信息"
                    // that.infoText.title = "异常"
                    that.infoText.error = errorInfo
                } else {
                    if (that.infoType == 1) {
                        return
                    }
                    that.infoType = 0
                }
                that.errorModel(res)
            },
            getInfo() {
                let that = this
@@ -511,6 +261,50 @@
                        that.infoType = 0
                    }
                })
            },
            getError() {
                let that = this
                uni.request({
                    url: that.commonUrl + "/monitor/led/error",
                    data: {ledId:that.baseLedId},
                    method:"GET",
                    success(result) {
                        that.timeOut = false
                        that.times = 0
                        var    res = result.data
                        that.errorModel(res)
                    },
                    fail(err) {
                        that.timeOut = true
                        that.infoType = 0
                    }
                })
            },
            errorModel(res) {
                let that = this
                if (res.data && res.data !== "") {
                    var errorInfo = res.data
                    if (that.infoType == 1) {
                        that.infoType = 3
                        that.infoText.title = "其他信息"
                        // that.infoText.title = "异常"
                        that.infoText.error = errorInfo
                        return
                    }
                    that.infoType = 2
                    that.infoText.title = "其他信息"
                    // that.infoText.title = "异常"
                    that.infoText.error = errorInfo
                } else {
                    if (that.infoType == 1) {
                        return
                    }
                    that.infoType = 0
                }
                
            },
            infoModel(res) {
@@ -561,43 +355,6 @@
                    }
                    that.infoType = 0
                }
            },
            getError() {
                let that = this
                uni.request({
                    url: that.commonUrl + "/monitor/led/error",
                    data: {ledId:that.baseLedId},
                    method:"GET",
                    success(result) {
                        that.timeOut = false
                        that.times = 0
                        var    res = result.data
                        if (res.data && res.data !== "") {
                            var errorInfo = res.data
                            if (that.infoType == 1) {
                                that.infoType = 3
                                that.infoText.title = "其他信息"
                                // that.infoText.title = "异常"
                                that.infoText.error = errorInfo
                                return
                            }
                            that.infoType = 2
                            that.infoText.title = "其他信息"
                            // that.infoText.title = "异常"
                            that.infoText.error = errorInfo
                        } else {
                            if (that.infoType == 1) {
                                return
                            }
                            that.infoType = 0
                        }
                    },
                    fail(err) {
                        that.timeOut = true
                        that.infoType = 0
                    }
                })
            },
            // 控制器
            controller() {
@@ -847,6 +604,33 @@
<style>
    /* @import url("../../static/css/common.css"); */
    @import url("home.css");
    .main-y {
        font-size: 40rpx;
        background-color: rgba(255, 255, 255, .05);
        width:19vw;
        height: 28vh;
        margin-top: 4px;
        backdrop-filter: blur(3px);
        display: flex;
        flex-direction: column;
        align-items: stretch;
        justify-content: center;
        /* text-align: left; */
    }
    .y-it {
        display: flex;
        /* background-color: #FF5722; */
    }
    .y-it-desc {
        width: 240rpx;
        text-align: right;
        /* background-color: #FF5722; */
    }
    .margin {
        margin-left: 20rpx;
    }
    /* 列 */
    .flex-col {
        display: flex;
@@ -982,11 +766,11 @@
    
    /* 共用 */
    .main {
        width: 100vw;
        height: 88vh;
        margin-top: 1vh;
        margin: 16rpx;
        display: flex;
        flex-wrap: wrap;
        justify-content: space-around;
    }
    .mian-item {
        width: 50%;