|
@@ -1,171 +1,197 @@
|
|
<template>
|
|
<template>
|
|
- <!--这是印花模块的模块展示内容-->
|
|
|
|
- <div for="IN03" id="top" class="top top03" style="padding: 32px 0 0px 0;" @click="switchIndex">
|
|
|
|
- <div title="进入数据消费平台"
|
|
|
|
- style="cursor: pointer;height: 38px;width: 38px;text-align: center;float: right;margin: 0px 49px 0px 10px;"
|
|
|
|
- @click.stop="toAdmin"><img src="../../assets/image/toAdmin.png">
|
|
|
|
- </div>
|
|
|
|
- <div title="返回主视图"
|
|
|
|
- style="cursor: pointer;height: 38px;width: 38px;text-align: center;float: right;margin: 0 10px;"
|
|
|
|
- @click.stop="backMasterViewByFac"><img src="../../assets/image/view.png">
|
|
|
|
|
|
+ <div @click="HideWindow">
|
|
|
|
+ <!--这是印花模块的模块展示内容-->
|
|
|
|
+ <div for="IN03" id="top" class="top top03" style="padding: 32px 0 0px 0;" @click="switchIndex">
|
|
|
|
+ <div title="进入数据消费平台"
|
|
|
|
+ style="cursor: pointer;height: 38px;width: 38px;text-align: center;float: right;margin: 0px 49px 0px 10px;"
|
|
|
|
+ @click.stop="toAdmin"><img src="../../assets/image/toAdmin.png">
|
|
|
|
+ </div>
|
|
|
|
+ <div title="返回主视图"
|
|
|
|
+ style="cursor: pointer;height: 38px;width: 38px;text-align: center;float: right;margin: 0 10px;"
|
|
|
|
+ @click.stop="backMasterViewByFac"><img src="../../assets/image/view.png">
|
|
|
|
+ </div>
|
|
|
|
+ <div title="AI分析" ref="icon_btn_ai"
|
|
|
|
+ style="cursor: pointer;height: 38px;width: 38px;float: right;margin: 0 10px;" @click.stop="OpenAI">
|
|
|
|
+ <img src="../../assets/image/icon-ai1.png">
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="bg20"></div>
|
|
|
|
+ <div v-if="isShowAI" class="abs aiPanel" @click.stop="void(0)">
|
|
|
|
+ <div class="triangle2"></div>
|
|
|
|
+ <div class="triangle"></div>
|
|
|
|
+ <div v-for="(p,index) in compProctList" style="margin-top:10px">
|
|
|
|
+ <span style="margin-right: 5px;">产线</span><el-select style="width: 100px;" v-model="p.ai_prouct_no"><el-option v-for="item in cxList" :key="item.index" :label="item.name" :value="item.index"></el-option> </el-select>
|
|
|
|
+ <span style="margin-right: 5px;margin-left: 5px;">日期</span><el-date-picker v-model="p.compDate" type="date" :value-format="'YYYY-MM-DD'" placeholder="选择日期"></el-date-picker>
|
|
|
|
+ <span style="margin-right: 5px;margin-left: 5px;">时点</span><el-select style="width: 100px;" v-model="p.compDateHour1"><el-option v-for="item in hourList" :key="item.code" :label="item.name" :value="item.code"></el-option> </el-select>
|
|
|
|
+ <!--<span> 到 </span>
|
|
|
|
+ <el-select style="width: 100px;" v-model="p.compDateHour2"><el-option v-for="item in hourList" :key="item.code" :label="item.name" :value="item.code"></el-option> </el-select>
|
|
|
|
+
|
|
|
|
+ <el-button v-if="index==compProctList.length-1 && compProctList.length<cxList.length" style="margin:10px" @click="addAILine" title="添加产线">+</el-button>
|
|
|
|
+ <el-button v-else style="margin:10px" @click="removeAILine(index)" title="移除该产线">-</el-button>-->
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <div class="bg20"></div>
|
|
|
|
- <template v-if="showIndexData=='index'">
|
|
|
|
- <div class="abs" style="left:50%;top:10%;width: 210px;margin-left:-105px;text-align: center;">
|
|
|
|
- <div>请选择要查看的产线</div>
|
|
|
|
- <div class="cx">
|
|
|
|
- <span @click="switchCX(item.index)" :class="item.active?'btn active':'btn'" v-for="item in cxList" :style="{backgroundImage: item.active?`url(${btnFrontBg})`:''}">{{ item.name }}</span>
|
|
|
|
- <div @click="switchCX(0)" :class="currentCXNo==0?'btn active':'btn'" :style="{width:'94%', backgroundImage: currentCXNo==0 ?`url(${btnFrontBg})`:''}">全部</div>
|
|
|
|
|
|
+ <div v-if="compProctList.length>1 " style="text-align: center;">
|
|
|
|
+ <el-button style="margin:10px" @click.stop="compAILine">AI工艺比对分析</el-button>
|
|
|
|
+ <el-button style="margin:10px" @click.stop="HideWindow">关闭</el-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="abs title_row" style="left: 3%;top:6%;font-weight: normal;">
|
|
|
|
- <div class="title_left_line"></div><span>产线状态</span><span style="color:#27e6ff">(今日)</span>
|
|
|
|
- </div>
|
|
|
|
- <div class="abs data_row" style="left: 3%;top:8%;font-weight: normal;">
|
|
|
|
- <div style="margin-left: 10px;"><table cellspacing="0">
|
|
|
|
- <tbody>
|
|
|
|
- <tr style="background-color:transparent">
|
|
|
|
- <td style="border:0">
|
|
|
|
- <div class="littleFont">产线<span style="color:#27e6ff">(开动)</span></div>
|
|
|
|
- <div style="font-size: 32px;">{{ ReplaceNull(deviceStatData.status.openProd,'-') }}<span style="font-size: 12px;">条</span></div>
|
|
|
|
- </td>
|
|
|
|
- <td style="border:0;padding-left: 40px;">
|
|
|
|
- <div class="littleFont">设备<span style="color:#27e6ff">(开机)</span></div>
|
|
|
|
- <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ ReplaceNull(deviceStatData.status.open,'-') }}<span style="font-size: 12px;"> 台</span></div>
|
|
|
|
- </td>
|
|
|
|
- <td style="border:0;padding-left: 40px;">
|
|
|
|
- <div class="littleFont">设备<span style="color:#27e6ff">(总数)</span></div>
|
|
|
|
- <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ ReplaceNull(deviceStatData.status.total,'-') }}<span style="font-size: 12px;"> 台</span></div>
|
|
|
|
- </td>
|
|
|
|
- </tr>
|
|
|
|
- </tbody>
|
|
|
|
- </table></div>
|
|
|
|
- </div>
|
|
|
|
- <div class="abs title_row" style="left: auto;top:6%;font-weight: normal;right: 14%;"><div class="title_left_line"></div><span>生产情况</span><span style="color:#27e6ff">(今日)</span></div>
|
|
|
|
- <div class="abs data_row" style="left: auto;top:8%;font-weight: normal;right: 3%;">
|
|
|
|
- <div style="margin-left: 10px;"><table cellspacing="0">
|
|
|
|
- <tbody>
|
|
|
|
- <tr style="background-color:transparent">
|
|
|
|
- <td style="border:0">
|
|
|
|
- <div class="littleFont">白坯<span style="color:#27e6ff">(投放量)</span></div>
|
|
|
|
- <div style="font-size: 32px;">{{ ReplaceNull(deviceStatData.status.baiPei,'-') }}<span style="font-size: 12px;">米</span></div>
|
|
|
|
- </td>
|
|
|
|
- <td style="border:0;padding-left: 40px;">
|
|
|
|
- <div class="littleFont">产量<span style="color:#27e6ff">(米数)</span></div>
|
|
|
|
- <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ ReplaceNull(deviceStatData.status.length,'-') }}<span style="font-size: 12px;"> 米</span></div>
|
|
|
|
- </td>
|
|
|
|
- <td style="border:0;padding-left: 40px;">
|
|
|
|
- <div class="littleFont">产量<span style="color:#27e6ff">(重量)</span></div>
|
|
|
|
- <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ReplaceNull(deviceStatData.status.weight,'-') }}<span style="font-size: 12px;"> 吨</span></div>
|
|
|
|
- </td>
|
|
|
|
- </tr>
|
|
|
|
- </tbody>
|
|
|
|
- </table></div>
|
|
|
|
- </div>
|
|
|
|
- <div class="abs bottompanel">
|
|
|
|
- <div style="width: 15%;height:calc(184px*var(--hRate));display: flex;">
|
|
|
|
- <div style="width: 70%;height: 100%;border-right: 1px solid #1a7c90;">
|
|
|
|
- <div class="title_row" style="font-weight: normal;margin-top: 10px;"><span style="font-size: 48px;letter-spacing: 5px;margin-right: 20%;">{{currentCXNo==0?'全部':currentCXNo+'号'}}</span><span style="color:#fff;line-height: 48px;">产线</span></div>
|
|
|
|
- <div style="padding-left: 5px;color: #27e6ff;margin-top: calc(52px*var(--hRate));width: 88%;">
|
|
|
|
- <div style="color: #fff;"><span>开机数</span><span style="float: right;">总数</span></div>
|
|
|
|
- <div style="font-size: 22px;margin-top: calc(16px*var(--hRate));"><span>{{ ReplaceNull(effInfo.open,'-') }}<span class="littleFont">台</span></span>
|
|
|
|
- <span style="float: right;">{{ ReplaceNull(effInfo.total,'-') }}<span class="littleFont">台</span></span>
|
|
|
|
- </div>
|
|
|
|
- <div style="position: relative;margin-top: calc(16px*var(--hRate));">
|
|
|
|
- <div class="abs fac_progress_value" :style="{width:(effInfo.open/effInfo.total*100)+'%'}"></div>
|
|
|
|
- <div class="abs fac_progress" style="background-color: #5f686e;"></div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <template v-if="showIndexData=='index'">
|
|
|
|
+ <div class="abs" style="left:50%;top:10%;width: 210px;margin-left:-105px;text-align: center;">
|
|
|
|
+ <div>请选择要查看的产线</div>
|
|
|
|
+ <div class="cx">
|
|
|
|
+ <span @click="switchCX(item.index)" :class="item.active?'btn active':'btn'" v-for="item in cxList" :style="{backgroundImage: item.active?`url(${btnFrontBg})`:''}">{{ item.name }}</span>
|
|
|
|
+ <div @click="switchCX(0)" :class="currentCXNo==0?'btn active':'btn'" :style="{width:'94%', backgroundImage: currentCXNo==0 ?`url(${btnFrontBg})`:''}">全部</div>
|
|
</div>
|
|
</div>
|
|
- <div style="width: 30%;height: 100%;margin-left: 4%;">
|
|
|
|
- <div style="color: #fff;"><span>单位能耗</span></div>
|
|
|
|
- <div style="font-size: 22px;margin-top: calc(16px*var(--hRate));;color: red;">
|
|
|
|
- <span>{{ ReplaceNull(effInfo.energy,'-') }}<span class="littleFont">元/米</span></span>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <div class="abs title_row" style="left: 3%;top:6%;font-weight: normal;">
|
|
|
|
+ <div class="title_left_line"></div><span>产线状态</span><span style="color:#27e6ff">(今日)</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="abs data_row" style="left: 3%;top:8%;font-weight: normal;">
|
|
|
|
+ <div style="margin-left: 10px;"><table cellspacing="0">
|
|
|
|
+ <tbody>
|
|
|
|
+ <tr style="background-color:transparent">
|
|
|
|
+ <td style="border:0">
|
|
|
|
+ <div class="littleFont">产线<span style="color:#27e6ff">(开动)</span></div>
|
|
|
|
+ <div style="font-size: 32px;">{{ ReplaceNull(deviceStatData.status.openProd,'-') }}<span style="font-size: 12px;">条</span></div>
|
|
|
|
+ </td>
|
|
|
|
+ <td style="border:0;padding-left: 40px;">
|
|
|
|
+ <div class="littleFont">设备<span style="color:#27e6ff">(开机)</span></div>
|
|
|
|
+ <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ ReplaceNull(deviceStatData.status.open,'-') }}<span style="font-size: 12px;"> 台</span></div>
|
|
|
|
+ </td>
|
|
|
|
+ <td style="border:0;padding-left: 40px;">
|
|
|
|
+ <div class="littleFont">设备<span style="color:#27e6ff">(总数)</span></div>
|
|
|
|
+ <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ ReplaceNull(deviceStatData.status.total,'-') }}<span style="font-size: 12px;"> 台</span></div>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ </tbody>
|
|
|
|
+ </table></div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="abs title_row" style="left: auto;top:6%;font-weight: normal;right: 14%;"><div class="title_left_line"></div><span>生产情况</span><span style="color:#27e6ff">(今日)</span></div>
|
|
|
|
+ <div class="abs data_row" style="left: auto;top:8%;font-weight: normal;right: 3%;">
|
|
|
|
+ <div style="margin-left: 10px;"><table cellspacing="0">
|
|
|
|
+ <tbody>
|
|
|
|
+ <tr style="background-color:transparent">
|
|
|
|
+ <td style="border:0">
|
|
|
|
+ <div class="littleFont">白坯<span style="color:#27e6ff">(投放量)</span></div>
|
|
|
|
+ <div style="font-size: 32px;">{{ ReplaceNull(deviceStatData.status.baiPei,'-') }}<span style="font-size: 12px;">米</span></div>
|
|
|
|
+ </td>
|
|
|
|
+ <td style="border:0;padding-left: 40px;">
|
|
|
|
+ <div class="littleFont">产量<span style="color:#27e6ff">(米数)</span></div>
|
|
|
|
+ <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ ReplaceNull(deviceStatData.status.length,'-') }}<span style="font-size: 12px;"> 米</span></div>
|
|
|
|
+ </td>
|
|
|
|
+ <td style="border:0;padding-left: 40px;">
|
|
|
|
+ <div class="littleFont">产量<span style="color:#27e6ff">(重量)</span></div>
|
|
|
|
+ <div style="font-size:24px;height: 38px;line-height: 48px;color: #27e6ff;">{{ReplaceNull(deviceStatData.status.weight,'-') }}<span style="font-size: 12px;"> 吨</span></div>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ </tbody>
|
|
|
|
+ </table></div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="abs bottompanel">
|
|
|
|
+ <div style="width: 15%;height:calc(184px*var(--hRate));display: flex;">
|
|
|
|
+ <div style="width: 70%;height: 100%;border-right: 1px solid #1a7c90;">
|
|
|
|
+ <div class="title_row" style="font-weight: normal;margin-top: 10px;"><span style="font-size: 48px;letter-spacing: 5px;margin-right: 20%;">{{currentCXNo==0?'全部':currentCXNo+'号'}}</span><span style="color:#fff;line-height: 48px;">产线</span></div>
|
|
|
|
+ <div style="padding-left: 5px;color: #27e6ff;margin-top: calc(52px*var(--hRate));width: 88%;">
|
|
|
|
+ <div style="color: #fff;"><span>开机数</span><span style="float: right;">总数</span></div>
|
|
|
|
+ <div style="font-size: 22px;margin-top: calc(16px*var(--hRate));"><span>{{ ReplaceNull(effInfo.open,'-') }}<span class="littleFont">台</span></span>
|
|
|
|
+ <span style="float: right;">{{ ReplaceNull(effInfo.total,'-') }}<span class="littleFont">台</span></span>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="position: relative;margin-top: calc(16px*var(--hRate));">
|
|
|
|
+ <div class="abs fac_progress_value" :style="{width:(effInfo.open/effInfo.total*100)+'%'}"></div>
|
|
|
|
+ <div class="abs fac_progress" style="background-color: #5f686e;"></div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div style="color: #fff;margin-top: calc(26px*var(--hRate));"><span>开机率</span></div>
|
|
|
|
- <div style="font-size: 22px;margin-top: calc(16px*var(--hRate));color:#27e6ff ;">
|
|
|
|
- <span>{{ ReplaceNull(effInfo.ratio,'-') }}<span class="littleFont">%</span></span>
|
|
|
|
|
|
+ <div style="width: 30%;height: 100%;margin-left: 4%;">
|
|
|
|
+ <div style="color: #fff;"><span>单位能耗</span></div>
|
|
|
|
+ <div style="font-size: 22px;margin-top: calc(16px*var(--hRate));;color: red;">
|
|
|
|
+ <span>{{ ReplaceNull(effInfo.energy,'-') }}<span class="littleFont">元/米</span></span>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="color: #fff;margin-top: calc(26px*var(--hRate));"><span>开机率</span></div>
|
|
|
|
+ <div style="font-size: 22px;margin-top: calc(16px*var(--hRate));color:#27e6ff ;">
|
|
|
|
+ <span>{{ ReplaceNull(effInfo.ratio,'-') }}<span class="littleFont">%</span></span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <div :style="{width: '26%',marginLeft:'1%',marginRight: isFullScreen?'2%':'0'}">
|
|
|
|
- <div class="title_row" style="font-weight: normal;line-height: 30px;"><div class="title_left_line" style="margin-top: 7px;"></div><span>生产效率</span><span style="color:#27e6ff">(今日)</span></div>
|
|
|
|
- <div class="data_row scxl_block">
|
|
|
|
- <div :style="{padding: '10px',width: isFullScreen?'96%':'89%'}"><table cellspacing="0" style="width: 100%;font-size: 14px;text-align: center;">
|
|
|
|
- <thead>
|
|
|
|
- <tr style="font-weight:normal;color: #1fc1d7;background-color: #2dbcd436;">
|
|
|
|
- <td style="border:0">班组</td>
|
|
|
|
- <td style="border:0">生产时间(H)</td>
|
|
|
|
- <td style="border:0">已生产数(米)</td>
|
|
|
|
- <td style="border:0">总重量(吨)</td>
|
|
|
|
- <td style="border:0">稼动率(%)</td>
|
|
|
|
- </tr>
|
|
|
|
- </thead>
|
|
|
|
- <tbody>
|
|
|
|
- <tr style="font-weight:normal;background-color:transparent;color: #ffffff;font-size: 14px;">
|
|
|
|
- <td style="border:0">A班</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull(effInfo.timeA,'-') }}</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull(effInfo.lengthA,'-') }}</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull(effInfo.weightA,'-') }}</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull((effInfo.effA*100).toFixed(0),'-') }}%</td>
|
|
|
|
- </tr>
|
|
|
|
- <tr style="font-weight:normal;background-color:transparent;color: #ffffff;background-color: #2dbcd436;font-size: 14px;">
|
|
|
|
- <td style="border:0">B班</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull(effInfo.timeB,'-') }}</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull(effInfo.lengthB,'-') }}</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull(effInfo.weightB,'-') }}</td>
|
|
|
|
- <td style="border:0">{{ ReplaceNull((effInfo.effB*100).toFixed(0),'-') }}%</td>
|
|
|
|
- </tr>
|
|
|
|
- </tbody>
|
|
|
|
- </table>
|
|
|
|
- <div style="width: 100%;display: flex;margin-top: calc(42px*var(--hRate));font-size: 14px;justify-content: center;text-align: center;" >
|
|
|
|
- <div style="width: 50%;">
|
|
|
|
- <div style="color: #fff;"><span>米数</span></div>
|
|
|
|
- <div style="font-size: 22px;color:#27e6ff">
|
|
|
|
- <span>{{ ReplaceNull(effInfo.length,'-') }}<span class="littleFont">米</span></span>
|
|
|
|
|
|
+ <div :style="{width: '26%',marginLeft:'1%',marginRight: isFullScreen?'2%':'0'}">
|
|
|
|
+ <div class="title_row" style="font-weight: normal;line-height: 30px;"><div class="title_left_line" style="margin-top: 7px;"></div><span>生产效率</span><span style="color:#27e6ff">(今日)</span></div>
|
|
|
|
+ <div class="data_row scxl_block">
|
|
|
|
+ <div :style="{padding: '10px',width: isFullScreen?'96%':'89%'}"><table cellspacing="0" style="width: 100%;font-size: 14px;text-align: center;">
|
|
|
|
+ <thead>
|
|
|
|
+ <tr style="font-weight:normal;color: #1fc1d7;background-color: #2dbcd436;">
|
|
|
|
+ <td style="border:0">班组</td>
|
|
|
|
+ <td style="border:0">生产时间(H)</td>
|
|
|
|
+ <td style="border:0">已生产数(米)</td>
|
|
|
|
+ <td style="border:0">总重量(吨)</td>
|
|
|
|
+ <td style="border:0">稼动率(%)</td>
|
|
|
|
+ </tr>
|
|
|
|
+ </thead>
|
|
|
|
+ <tbody>
|
|
|
|
+ <tr style="font-weight:normal;background-color:transparent;color: #ffffff;font-size: 14px;">
|
|
|
|
+ <td style="border:0">A班</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull(effInfo.timeA,'-') }}</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull(effInfo.lengthA,'-') }}</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull(effInfo.weightA,'-') }}</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull((effInfo.effA*100).toFixed(0),'-') }}%</td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr style="font-weight:normal;background-color:transparent;color: #ffffff;background-color: #2dbcd436;font-size: 14px;">
|
|
|
|
+ <td style="border:0">B班</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull(effInfo.timeB,'-') }}</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull(effInfo.lengthB,'-') }}</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull(effInfo.weightB,'-') }}</td>
|
|
|
|
+ <td style="border:0">{{ ReplaceNull((effInfo.effB*100).toFixed(0),'-') }}%</td>
|
|
|
|
+ </tr>
|
|
|
|
+ </tbody>
|
|
|
|
+ </table>
|
|
|
|
+ <div style="width: 100%;display: flex;margin-top: calc(42px*var(--hRate));font-size: 14px;justify-content: center;text-align: center;" >
|
|
|
|
+ <div style="width: 50%;">
|
|
|
|
+ <div style="color: #fff;"><span>米数</span></div>
|
|
|
|
+ <div style="font-size: 22px;color:#27e6ff">
|
|
|
|
+ <span>{{ ReplaceNull(effInfo.length,'-') }}<span class="littleFont">米</span></span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <div style="width: 50%;">
|
|
|
|
- <div style="color: #fff;"><span>重量</span></div>
|
|
|
|
- <div style="font-size: 22px;color:#27e6ff">
|
|
|
|
- <span>{{ ReplaceNull(effInfo.weight,'-') }}<span class="littleFont">吨</span></span>
|
|
|
|
|
|
+ <div style="width: 50%;">
|
|
|
|
+ <div style="color: #fff;"><span>重量</span></div>
|
|
|
|
+ <div style="font-size: 22px;color:#27e6ff">
|
|
|
|
+ <span>{{ ReplaceNull(effInfo.weight,'-') }}<span class="littleFont">吨</span></span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="width: 26%;margin-right: 2%;">
|
|
|
|
+ <div class="title_row" style="line-height: 30px;"><div class="title_left_line" style="margin-top: 7px;"></div>
|
|
|
|
+ <span>生产趋势</span><span style="color:#27e6ff">(30天)</span>
|
|
|
|
+ <span style="margin-left: auto !important;">
|
|
|
|
+ <span :class="buttonCode1=='Length'?'fac_btn active':'fac_btn'" @click="LoadSCLine('Length')">米数</span>
|
|
|
|
+ <span :class="buttonCode1=='Weight'?'fac_btn active':'fac_btn'" @click="LoadSCLine('Weight')">重量</span>
|
|
|
|
+ </span>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <div style="width: 26%;margin-right: 2%;">
|
|
|
|
- <div class="title_row" style="line-height: 30px;"><div class="title_left_line" style="margin-top: 7px;"></div>
|
|
|
|
- <span>生产趋势</span><span style="color:#27e6ff">(30天)</span>
|
|
|
|
- <span style="margin-left: auto !important;">
|
|
|
|
- <span :class="buttonCode1=='Length'?'fac_btn active':'fac_btn'" @click="LoadSCLine('Length')">米数</span>
|
|
|
|
- <span :class="buttonCode1=='Weight'?'fac_btn active':'fac_btn'" @click="LoadSCLine('Weight')">重量</span>
|
|
|
|
- </span>
|
|
|
|
|
|
+ <div :class="isFullScreen?'data_row sc_qushi_block_full':'data_row sc_qushi_block'" ref="echarts_sc_qushi"></div>
|
|
</div>
|
|
</div>
|
|
- <div :class="isFullScreen?'data_row sc_qushi_block_full':'data_row sc_qushi_block'" ref="echarts_sc_qushi"></div>
|
|
|
|
- </div>
|
|
|
|
- <div style="width: 26%;">
|
|
|
|
- <div class="title_row" style="line-height: 30px;"><div class="title_left_line" style="margin-top: 7px;"></div>
|
|
|
|
- <span>能耗趋势</span><span style="color:#27e6ff">(30天)</span>
|
|
|
|
- <span style="margin-left: auto !important;">
|
|
|
|
- <span :class="buttonCode2=='price'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('price')">折算</span>
|
|
|
|
- <span :class="buttonCode2=='electricity'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('electricity')">电</span>
|
|
|
|
- <span :class="buttonCode2=='steam'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('steam')">气</span>
|
|
|
|
- <span :class="buttonCode2=='water'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('water')">水</span>
|
|
|
|
- </span>
|
|
|
|
|
|
+ <div style="width: 26%;">
|
|
|
|
+ <div class="title_row" style="line-height: 30px;"><div class="title_left_line" style="margin-top: 7px;"></div>
|
|
|
|
+ <span>能耗趋势</span><span style="color:#27e6ff">(30天)</span>
|
|
|
|
+ <span style="margin-left: auto !important;">
|
|
|
|
+ <span :class="buttonCode2=='price'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('price')">折算</span>
|
|
|
|
+ <span :class="buttonCode2=='electricity'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('electricity')">电</span>
|
|
|
|
+ <span :class="buttonCode2=='steam'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('steam')">气</span>
|
|
|
|
+ <span :class="buttonCode2=='water'?'fac_btn active':'fac_btn'" @click="LoadUsedLine('water')">水</span>
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ <div :class="isFullScreen?'data_row used_qushi_block_full':'data_row used_qushi_block'" ref="echarts_used_qushi"></div>
|
|
</div>
|
|
</div>
|
|
- <div :class="isFullScreen?'data_row used_qushi_block_full':'data_row used_qushi_block'" ref="echarts_used_qushi"></div>
|
|
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- </template>
|
|
|
|
|
|
+ </template>
|
|
|
|
+ </div>
|
|
</template>
|
|
</template>
|
|
<script>
|
|
<script>
|
|
import { ref ,watch,onUnmounted,onMounted} from 'vue';
|
|
import { ref ,watch,onUnmounted,onMounted} from 'vue';
|
|
import {useRouter} from 'vue-router';
|
|
import {useRouter} from 'vue-router';
|
|
import api from "@/api/system";
|
|
import api from "@/api/system";
|
|
import * as echarts from 'echarts';
|
|
import * as echarts from 'echarts';
|
|
|
|
+import { ElDatePicker,ElMessage } from 'element-plus';
|
|
|
|
+import 'element-plus/dist/index.css'; // 确保导入样式文件
|
|
export default {
|
|
export default {
|
|
props:{
|
|
props:{
|
|
clickEvent:{
|
|
clickEvent:{
|
|
@@ -185,6 +211,18 @@ export default {
|
|
},
|
|
},
|
|
setup(props,{emit}) {
|
|
setup(props,{emit}) {
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
+ const isShowAI = ref(false);
|
|
|
|
+ const icon_btn_ai = ref(null);
|
|
|
|
+ const compProctList=ref([{
|
|
|
|
+ ai_prouct_no:'',
|
|
|
|
+ compDate:new Date().Format("yyyy-MM-dd"),
|
|
|
|
+ compDateHour1:''
|
|
|
|
+ },{
|
|
|
|
+ ai_prouct_no:'',
|
|
|
|
+ compDate:new Date().Format("yyyy-MM-dd"),
|
|
|
|
+ compDateHour1:''
|
|
|
|
+ }]);
|
|
|
|
+ const hourList=ref([]);
|
|
let lines={};
|
|
let lines={};
|
|
let oldLineState={};
|
|
let oldLineState={};
|
|
let deviceStatData=ref({'status':{},'eff':[]});
|
|
let deviceStatData=ref({'status':{},'eff':[]});
|
|
@@ -210,6 +248,7 @@ export default {
|
|
let lineArrow001=null;
|
|
let lineArrow001=null;
|
|
let lineArrow002=null;
|
|
let lineArrow002=null;
|
|
let getDataTimer = null;
|
|
let getDataTimer = null;
|
|
|
|
+ //产线列表
|
|
const cxList=ref([
|
|
const cxList=ref([
|
|
{"name":1,active:false,index:1},
|
|
{"name":1,active:false,index:1},
|
|
{"name":2,active:false,index:2},
|
|
{"name":2,active:false,index:2},
|
|
@@ -220,6 +259,18 @@ export default {
|
|
{"name":7,active:false,index:7},
|
|
{"name":7,active:false,index:7},
|
|
{"name":8,active:false,index:8},
|
|
{"name":8,active:false,index:8},
|
|
])
|
|
])
|
|
|
|
+ let compMarkerts={};
|
|
|
|
+ //产线提示框位置,元素顺序为默认位置,左位置和右位置
|
|
|
|
+ const markerPos=[
|
|
|
|
+ [[-140, 87, 11],[-130, 87, 11],[-80, 87, 11]],
|
|
|
|
+ [[-130, 75, 11],[-130, 75, 11],[-80, 75, 11]],
|
|
|
|
+ [[-120, 64, 11],[-130, 64, 11],[-80, 64, 11]],
|
|
|
|
+ [[-110, 53, 11],[-130, 53, 11],[-80, 53, 11]],
|
|
|
|
+ [[-101, 43, 11],[-130, 43, 11],[-80, 43, 11]],
|
|
|
|
+ [[-94, 33, 11],[-130, 33, 11],[-80, 33, 11]],
|
|
|
|
+ [[-87, 21, 11],[-130, 21, 11],[-80, 21, 11]],
|
|
|
|
+ [[-80, 10, 11],[-130, 10, 11],[-80, 10, 11]]
|
|
|
|
+ ];
|
|
const btnFrontBg = require('@/assets/image/nav_btn_front.png');
|
|
const btnFrontBg = require('@/assets/image/nav_btn_front.png');
|
|
watch(() => props.clickEvent, newVal=> {
|
|
watch(() => props.clickEvent, newVal=> {
|
|
if(newVal==null){
|
|
if(newVal==null){
|
|
@@ -280,22 +331,25 @@ export default {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})();
|
|
})();
|
|
- if(window.LINELIST==null){
|
|
|
|
- var rootItem = await player.Native.ModelTree.getRootItems();
|
|
|
|
- var rootObj=null;
|
|
|
|
- for (var i = 0; i < rootItem.length; i++) {
|
|
|
|
|
|
+ var rootItem = await player.Native.ModelTree.getRootItems();
|
|
|
|
+ var rootObj=null;
|
|
|
|
+ for (var i = 0; i < rootItem.length; i++) {
|
|
if(rootItem[i].name=="T_03"){
|
|
if(rootItem[i].name=="T_03"){
|
|
rootObj = rootItem[i]
|
|
rootObj = rootItem[i]
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- if(rootObj==null){
|
|
|
|
|
|
+ }
|
|
|
|
+ if(rootObj==null){
|
|
console.log('未找到该模型的根节点')
|
|
console.log('未找到该模型的根节点')
|
|
window.location.reload();
|
|
window.location.reload();
|
|
return;
|
|
return;
|
|
- }
|
|
|
|
- var items = await player.Native.ModelTree.getSubItems(rootObj.item)
|
|
|
|
- if(items.length==1 && items[0].name=='RootNode') rootObj = items[0];
|
|
|
|
|
|
+ }
|
|
|
|
+ var items = await player.Native.ModelTree.getSubItems(rootObj.item)
|
|
|
|
+ for(let i=0;i<items.length;i++){
|
|
|
|
+ if(items[i].name=='RootNode') rootObj = items[i];
|
|
|
|
+ }
|
|
|
|
+ if(window.LINELIST==null){
|
|
|
|
+
|
|
//获取产线列表
|
|
//获取产线列表
|
|
items = await player.Native.ModelTree.getSubItems(rootObj.item);
|
|
items = await player.Native.ModelTree.getSubItems(rootObj.item);
|
|
items.forEach(ele=>{
|
|
items.forEach(ele=>{
|
|
@@ -303,8 +357,9 @@ export default {
|
|
//if(ele.name=='Line001') lineArrow001=ele;
|
|
//if(ele.name=='Line001') lineArrow001=ele;
|
|
//if(ele.name=='Line002') lineArrow002=ele;
|
|
//if(ele.name=='Line002') lineArrow002=ele;
|
|
})
|
|
})
|
|
- window.LINELIST = lines;
|
|
|
|
|
|
+ window.LINELIST = lines;
|
|
}
|
|
}
|
|
|
|
+ drawLineNo(rootObj);
|
|
updateLineState();
|
|
updateLineState();
|
|
if(window.IN03Markers==null){
|
|
if(window.IN03Markers==null){
|
|
window.IN03Markers = [];
|
|
window.IN03Markers = [];
|
|
@@ -356,6 +411,70 @@ export default {
|
|
console.log('--------创建标记总耗时:',new Date().getTime()-t1)
|
|
console.log('--------创建标记总耗时:',new Date().getTime()-t1)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ //绘制编号
|
|
|
|
+ async function drawLineNo(rootObj){
|
|
|
|
+ if(player!=null && player.Native!=null){
|
|
|
|
+ (async()=>{
|
|
|
|
+ let marklst = await player.Native.GisMarker.getMarkerList();
|
|
|
|
+ if(marklst!=null){
|
|
|
|
+ for(var i=0;i<marklst.length;i++){
|
|
|
|
+ if(player!=null && player.Native!=null)player.Native.GisMarker.destroy(marklst[i].id)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })();
|
|
|
|
+ }
|
|
|
|
+ //隐藏模型产线编号
|
|
|
|
+ let imgId = await player.Native.GisMarker.loadImage("data://icon/rz-new/pp.png");
|
|
|
|
+ window.IN03Markers = {};
|
|
|
|
+ for(let i=0;i<8;i++){
|
|
|
|
+ let objectTxt = "Text00"+(i+1);
|
|
|
|
+ let object = await player.Native.ModelTree.findItemByName(objectTxt, rootObj.item,true,3);
|
|
|
|
+ player.Native.ModelTree.setItemVisible([object.item],false);
|
|
|
|
+ objectTxt = "Plane0"+(11+i+1);
|
|
|
|
+ object = await player.Native.ModelTree.findItemByName(objectTxt, rootObj.item,true,3);
|
|
|
|
+ player.Native.ModelTree.setItemVisible([object.item],false);
|
|
|
|
+ let line = i+1;
|
|
|
|
+ var options = {
|
|
|
|
+ "text": line,
|
|
|
|
+ // "parentNode": parentObj.item,
|
|
|
|
+ "visible": true,
|
|
|
|
+ "maxLod": 350,
|
|
|
|
+ //"minLod": 0,
|
|
|
|
+ "textFontSize": 18,
|
|
|
|
+ // "size": [48, 48],
|
|
|
|
+ // "textColor": parseInt("0xFFFFFFFF"),
|
|
|
|
+ "contentPadding": [5, 5, 5, 5],
|
|
|
|
+ "nodeOffset": [0, -24],
|
|
|
|
+ "userData": "line|"+line
|
|
|
|
+ };
|
|
|
|
+ options.pos = markerPos[i][0];
|
|
|
|
+ //options.parentNode=tmp.item;
|
|
|
|
+ options.imgId = imgId
|
|
|
|
+ options.imgSize = [16, 24];
|
|
|
|
+ var markPtr = await player.Native.GisMarker.create(options);
|
|
|
|
+ window.IN03Markers[markPtr] = options;
|
|
|
|
+ }
|
|
|
|
+ //标记点击
|
|
|
|
+ player.Native.GisMarker.EventGisMarkerLClick.connect((event) => {
|
|
|
|
+ let markerLClickObj = window.IN03Markers[event.markerId];
|
|
|
|
+ if(markerLClickObj==null){
|
|
|
|
+ //emit('markerLClick',{});
|
|
|
|
+ markerLClickObj = compMarkerts[event.markerId];
|
|
|
|
+ if(markerLClickObj!=null){
|
|
|
|
+ var params = JSON.stringify(compProctList.value);
|
|
|
|
+ emit('OpenIframeWin',{class:'newwin in03Win',src:'/in03-ai-comp#'+params,title:'AI工艺对比分析'});
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ setTimeout(function(dataType){
|
|
|
|
+ if(dataType==null) return;
|
|
|
|
+ dataType = dataType.split("|");
|
|
|
|
+ if(dataType[0]=='line') switchCX(dataType[1]);
|
|
|
|
+ },100,markerLClickObj["userData"]);
|
|
|
|
+ //emit('markerLClick',markerLClickObj);
|
|
|
|
+ return;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
//更新产线状态颜色
|
|
//更新产线状态颜色
|
|
async function updateLineState(){
|
|
async function updateLineState(){
|
|
updateLineStateTimer = setTimeout(() => {
|
|
updateLineStateTimer = setTimeout(() => {
|
|
@@ -651,14 +770,170 @@ export default {
|
|
[0.001388561848385436, 0.544853112866498, 0.838530355619688], 1);
|
|
[0.001388561848385436, 0.544853112866498, 0.838530355619688], 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ function HideWindow(){
|
|
|
|
+ if(isShowAI.value){
|
|
|
|
+ player.Native.Camera.moveTo([-90.4534875451608, -201.60779996809177, 156.1529830648182],
|
|
|
|
+ [-80.69618225097656,21.59876251220703,11.815500259399414],
|
|
|
|
+ [0.001388561848385436, 0.544853112866498, 0.838530355619688], 1);
|
|
|
|
+ }
|
|
|
|
+ isShowAI.value=false;
|
|
|
|
+ for(var k in compMarkerts){
|
|
|
|
+ if(player!=null && player.Native!=null)player.Native.GisMarker.destroy(k);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
//切换到数据消费后台
|
|
//切换到数据消费后台
|
|
function toAdmin(){
|
|
function toAdmin(){
|
|
window.open(process.env.VUE_APP_SSO+'?role='+(showIndexData=='index'?"producer":"manager"));
|
|
window.open(process.env.VUE_APP_SSO+'?role='+(showIndexData=='index'?"producer":"manager"));
|
|
}
|
|
}
|
|
|
|
+ function OpenAI(){
|
|
|
|
+ isShowAI.value=true;
|
|
|
|
+ }
|
|
|
|
+ function addAILine(){
|
|
|
|
+ compProctList.value.push({
|
|
|
|
+ ai_prouct_no:'',
|
|
|
|
+ compDate:'',
|
|
|
|
+ compDateHour1:''
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ function removeAILine(ind){
|
|
|
|
+ let tmpList=[];
|
|
|
|
+ for(let i=0;i<compProctList.value.length;i++){
|
|
|
|
+ if(i!=ind){
|
|
|
|
+ tmpList.push(compProctList.value[i]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ compProctList.value = tmpList;
|
|
|
|
+ }
|
|
|
|
+ async function compAILine(){
|
|
|
|
+ if(compProctList.value[0].ai_prouct_no=='' || compProctList.value[1].ai_prouct_no==''){
|
|
|
|
+ ElMessage({
|
|
|
|
+ message:'请选择需要分析的产线!',
|
|
|
|
+ type:'error',
|
|
|
|
+ customClass: 'custom-message'
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(compProctList.value[0].compDate=='' || compProctList.value[1].compDate==''|| compProctList.value[0].compDateHour1==''|| compProctList.value[1].compDateHour1==''){
|
|
|
|
+ ElMessage({
|
|
|
|
+ message:'请选择需要分析的日期和时点!',
|
|
|
|
+ type:'error',
|
|
|
|
+ customClass: 'custom-message'
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ for(var k in compMarkerts){
|
|
|
|
+ if(player!=null && player.Native!=null)player.Native.GisMarker.destroy(k);
|
|
|
|
+ }
|
|
|
|
+ var loadingMsg = ElMessage({
|
|
|
|
+ message:'正在进行工艺分析中...',
|
|
|
|
+ type:'info',
|
|
|
|
+ customClass: 'custom-message',
|
|
|
|
+ duration:0
|
|
|
|
+ });
|
|
|
|
+ compMarkerts = {};
|
|
|
|
+ var lineNo1 = compProctList.value[0].ai_prouct_no*1;
|
|
|
|
+ var lineNo2 = compProctList.value[1].ai_prouct_no*1;
|
|
|
|
+ ///api/yr/compare?line1=1&line2=2&time1=2025-05-13%2008:00:00&time2=2025-05-13%2009:00:00
|
|
|
|
+ var v={
|
|
|
|
+ line1:lineNo1,
|
|
|
|
+ line2:lineNo2,
|
|
|
|
+ time1:compProctList.value[0].compDate+" "+compProctList.value[0].compDateHour1+":00:00",
|
|
|
|
+ time2:compProctList.value[1].compDate+" "+compProctList.value[1].compDateHour1+":00:00",
|
|
|
|
+ };
|
|
|
|
+ api.GetYrGyComper(v).then((res)=>{
|
|
|
|
+ loadingMsg.close();
|
|
|
|
+ if(res.code!=200 || res.data==null){
|
|
|
|
+ ElMessage({
|
|
|
|
+ message:'获取数据失败!',
|
|
|
|
+ type:'error',
|
|
|
|
+ customClass: 'custom-message'
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ var line1Data=res.data[0];
|
|
|
|
+ var line2Data=res.data[1];
|
|
|
|
+ MarkLineComper(line1Data,line2Data);
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ async function MarkLineComper(line1Data,line2Data){
|
|
|
|
+ player.Native.Camera.moveTo([-94.61742308377592, -231.88112394996935, 91.21216074507522],
|
|
|
|
+ [-80.69618225097656,21.59876251220703,11.815500259399414],
|
|
|
|
+ [-0.0033254334820971166, 0.29907134022370024, 0.9542249603468546], 1);
|
|
|
|
+ var lineNo1 = compProctList.value[0].ai_prouct_no*1;
|
|
|
|
+ var lineNo2 = compProctList.value[1].ai_prouct_no*1;
|
|
|
|
+ var imgid = await player.Native.GisMarker.loadImage(lineNo1==lineNo2?"data://icon/qietu/tip-m.png":"data://icon/qietu/tip-r.png");
|
|
|
|
+ var tipText = "";
|
|
|
|
+ if(lineNo1!=lineNo2){
|
|
|
|
+ tipText = lineNo1+"#产线("+compProctList.value[0].compDate+")\r "+compProctList.value[0].compDateHour1
|
|
|
|
+ +"时 \r 合格率(%):"+line1Data.rate
|
|
|
|
+ +" \r 重 量(T):"+line1Data.weight
|
|
|
|
+ +" \r 米 长(m):"+line1Data.length
|
|
|
|
+ +" \r 水(m3) :"+line1Data.water
|
|
|
|
+ +" \r 电(kWh) :"+line1Data.electricity
|
|
|
|
+ +" \r 气(GJ) :"+line1Data.gas;
|
|
|
|
+ }else{
|
|
|
|
+ tipText = lineNo1+"#产线("+compProctList.value[0].compDate+")\r "+
|
|
|
|
+ compProctList.value[0].compDateHour1+"时 "+
|
|
|
|
+ compProctList.value[1].compDateHour1+"时\r合格率(%):"+line1Data.rate+" 合格率(%):"+line2Data.rate
|
|
|
|
+ +" \r重 量(T):"+line1Data.weight.toString().padEnd(5," ")+" 重 量(T):"+line2Data.weight.toString().padEnd(5," ")
|
|
|
|
+ +" \r米 长(m):"+line1Data.length.toString().padEnd(5," ")+" 米 长(m):"+line2Data.length.toString().padEnd(5," ")
|
|
|
|
+ +" \r水(m3) :"+line1Data.water.toString().padEnd(5," ")+" 水(m3) :"+line2Data.water.toString().padEnd(5," ")
|
|
|
|
+ +" \r电(kWh) :"+line1Data.electricity.toString().padEnd(5," ")+" 电(kWh) :"+line2Data.electricity.toString().padEnd(5," ")
|
|
|
|
+ +" \r气(GJ) :"+line1Data.gas.toString().padEnd(5," ")+" 气(GJ) :"+line2Data.gas.toString().padEnd(5," ");
|
|
|
|
+ }
|
|
|
|
+ var options = {
|
|
|
|
+ "text": tipText,
|
|
|
|
+ "visible": true,
|
|
|
|
+ //"maxLod": 130,
|
|
|
|
+ "minLod": 0,
|
|
|
|
+ "textFontSize":16,
|
|
|
|
+ "textColor": parseInt("0xffffffff"),
|
|
|
|
+ "contentPadding":[10,5,10,10],
|
|
|
|
+ "nodeOffset": lineNo1==lineNo2 ? [-130,-175]:[-200,-175],
|
|
|
|
+ "userData":"comp|"
|
|
|
|
+ };
|
|
|
|
+ options.pos = lineNo1==lineNo2 ? markerPos[lineNo1-1][0] : markerPos[lineNo1-1][1];
|
|
|
|
+ options.imgId = imgid
|
|
|
|
+ options.imgSize = lineNo1!=lineNo2 ? [260, 170] :[310, 170];
|
|
|
|
+ var ptr = await player.Native.GisMarker.create(options);
|
|
|
|
+ compMarkerts[ptr] = options;
|
|
|
|
+ if(lineNo1!=lineNo2){
|
|
|
|
+ var options = {
|
|
|
|
+ "text": lineNo2+"#产线("+compProctList.value[1].compDate+")\r "+compProctList.value[1].compDateHour1
|
|
|
|
+ +"时 \r 合格率(%):"+line2Data.rate
|
|
|
|
+ +" \r 重 量(T):"+line2Data.weight
|
|
|
|
+ +" \r 米 长(m):"+line2Data.length
|
|
|
|
+ +" \r 水(m3) :"+line2Data.water
|
|
|
|
+ +" \r 电(kWh) :"+line2Data.electricity
|
|
|
|
+ +" \r 气(GJ) :"+line2Data.gas,
|
|
|
|
+ "visible": true,
|
|
|
|
+ //"maxLod": 130,
|
|
|
|
+ "minLod": 0,
|
|
|
|
+ "textFontSize":16,
|
|
|
|
+ "textColor": parseInt("0xffffffff"),
|
|
|
|
+ "contentPadding":[10,5,10,10],
|
|
|
|
+ "nodeOffset":[-50,-170],
|
|
|
|
+ "userData":"comp|"
|
|
|
|
+ };
|
|
|
|
+ options.pos = markerPos[lineNo2-1][2];
|
|
|
|
+ var imgid = await player.Native.GisMarker.loadImage("data://icon/qietu/tip-l.png");
|
|
|
|
+ options.imgId = imgid
|
|
|
|
+ options.imgSize = [260, 170];
|
|
|
|
+ var ptr = await player.Native.GisMarker.create(options);
|
|
|
|
+ compMarkerts[ptr] = options;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
onMounted(()=>{
|
|
onMounted(()=>{
|
|
if(BODY_H_RATE>0.9) isFullScreen.value=true;
|
|
if(BODY_H_RATE>0.9) isFullScreen.value=true;
|
|
else isFullScreen.value=false;
|
|
else isFullScreen.value=false;
|
|
oldLineState = window.IN345LINE;//初始化产线初始状态
|
|
oldLineState = window.IN345LINE;//初始化产线初始状态
|
|
|
|
+ var hour1Opts = [];
|
|
|
|
+ for (var i = 0; i < 24; i++) {
|
|
|
|
+ if(i<10) hour1Opts.push({"name":'0'+i+'时',"code":'0'+i});
|
|
|
|
+ else hour1Opts.push({"name":i+'时',"code":i});
|
|
|
|
+ }
|
|
|
|
+ hourList.value = hour1Opts;
|
|
|
|
+ window.IN03Markers=null;
|
|
})
|
|
})
|
|
onUnmounted(()=>{
|
|
onUnmounted(()=>{
|
|
clearTimeout(getDataTimer);
|
|
clearTimeout(getDataTimer);
|
|
@@ -676,6 +951,7 @@ export default {
|
|
window.IN03Markers=null;
|
|
window.IN03Markers=null;
|
|
})
|
|
})
|
|
return{
|
|
return{
|
|
|
|
+ HideWindow,
|
|
switchIndex,
|
|
switchIndex,
|
|
echarts_sc_qushi,
|
|
echarts_sc_qushi,
|
|
echarts_used_qushi,
|
|
echarts_used_qushi,
|
|
@@ -693,11 +969,27 @@ export default {
|
|
LoadSCLine,
|
|
LoadSCLine,
|
|
backMasterViewByFac,
|
|
backMasterViewByFac,
|
|
toAdmin,
|
|
toAdmin,
|
|
|
|
+ OpenAI,
|
|
|
|
+ isShowAI,
|
|
|
|
+ icon_btn_ai,
|
|
|
|
+ compProctList,
|
|
|
|
+ hourList,
|
|
|
|
+ addAILine,
|
|
|
|
+ removeAILine,
|
|
|
|
+ compAILine,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|
|
<style scope="IN03">
|
|
<style scope="IN03">
|
|
|
|
+.custom-message {
|
|
|
|
+ top: 40% !important; /* 例如,将消息框定位到距离顶部50px */
|
|
|
|
+ left: 50% !important;
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
+}
|
|
|
|
+.el-popper{
|
|
|
|
+ z-index: 99999 !important;
|
|
|
|
+}
|
|
.bg20{
|
|
.bg20{
|
|
z-index: 1; pointer-events: none;position: absolute;
|
|
z-index: 1; pointer-events: none;position: absolute;
|
|
top: calc(22px * var(--hRate));
|
|
top: calc(22px * var(--hRate));
|
|
@@ -787,4 +1079,39 @@ export default {
|
|
border: 1px solid #008899;
|
|
border: 1px solid #008899;
|
|
background: rgb(0 85 102 / 40%);
|
|
background: rgb(0 85 102 / 40%);
|
|
}
|
|
}
|
|
|
|
+.aiPanel{
|
|
|
|
+ width: 460px;
|
|
|
|
+ height: auto;
|
|
|
|
+ right: 2%;
|
|
|
|
+ top: 7.5% !important;
|
|
|
|
+ left: auto !important;
|
|
|
|
+ border: 1px solid #008899;
|
|
|
|
+ background: rgb(0 85 102 / 92%);
|
|
|
|
+ z-index: 10000 !important;
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ padding: 5px;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+}
|
|
|
|
+.aiPanel .triangle{
|
|
|
|
+ width: 0;
|
|
|
|
+ height: 0;
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: -10px;
|
|
|
|
+ right: 130px;
|
|
|
|
+ border-width: 6px;
|
|
|
|
+ border-style: solid;
|
|
|
|
+ border-color:transparent transparent rgb(0 85 102 / 92%) transparent ;
|
|
|
|
+ border-radius: 4rpx;
|
|
|
|
+}
|
|
|
|
+.aiPanel .triangle2{
|
|
|
|
+ width: 0;
|
|
|
|
+ height: 0;
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: -12px;
|
|
|
|
+ right: 130px;
|
|
|
|
+ border-width: 6px;
|
|
|
|
+ border-style: solid;
|
|
|
|
+ border-color:transparent transparent #008899 transparent ;
|
|
|
|
+ border-radius: 4rpx;
|
|
|
|
+}
|
|
</style>
|
|
</style>
|