页面结构调整,添加工位屏页面,计划产量页面

This commit is contained in:
hzz 2024-01-25 17:09:25 +08:00
parent 2a59ce04f7
commit 9a7df0b5ef
43 changed files with 748 additions and 115 deletions

View File

@ -0,0 +1,114 @@
@font-face {
font-family: "iconfont"; /* Project id 3879194 */
src: url('//at.alicdn.com/t/c/font_3879194_xfchth53vyb.woff2?t=1686011466607') format('woff2'),
url('//at.alicdn.com/t/c/font_3879194_xfchth53vyb.woff?t=1686011466607') format('woff'),
url('//at.alicdn.com/t/c/font_3879194_xfchth53vyb.ttf?t=1686011466607') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-lishijilu:before {
content: "\eaf7";
}
.icon-zhongyingwen:before {
content: "\e607";
}
.icon-baojingxinxi:before {
content: "\e636";
}
.icon-shebeiditu:before {
content: "\e659";
}
.icon-warning:before {
content: "\e606";
}
.icon-back:before {
content: "\e617";
}
.icon-icon-temperature:before {
content: "\e61c";
}
.icon-shengyin:before {
content: "\eae0";
}
.icon-qiya:before {
content: "\e7fb";
}
.icon-shuiya:before {
content: "\eb33";
}
.icon-fenchen:before {
content: "\eb3c";
}
.icon-dianliu:before {
content: "\e665";
}
.icon-guandao:before {
content: "\e63b";
}
.icon-jinggao:before {
content: "\e61b";
}
.icon-zhengque1:before {
content: "\e653";
}
.icon-beikongshuiwupingtaimenhu-tubiao_zhinengwangguan:before {
content: "\e62e";
}
.icon-weibiaoti-:before {
content: "\e61e";
}
.icon-dianji:before {
content: "\e605";
}
.icon-jingshideng:before {
content: "\e60f";
}
.icon-wangguan:before {
content: "\ec5d";
}
.icon-yanwubaojingqi:before {
content: "\ec78";
}
.icon-TVOC-Outlined:before {
content: "\e642";
}
.icon-weibiaoti1:before {
content: "\e634";
}
.icon-ranqi:before {
content: "\e663";
}
.icon-app_icons--:before {
content: "\e61d";
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
import {get,post} from "@/utils/http"
//获取设备在线状态、设备列表
export function mjlDeviceList(){
return get('/screen/cisma/mjlDeviceList')
}
//获取设备在线状态、设备列表
export function mjlDeviceProduction(){
return get('/screen/cisma/mjlDeviceProduction')
}

View File

@ -0,0 +1,13 @@
import {get,post} from "@/utils/http"
//获取设备在线状态、设备列表
export function getStatus(data){
return get('/socket/status',data)
}
export function setOpen(data){
return get('/socket/open',data)
}
export function setClose(data){
return get('/socket/close',data)
}

View File

@ -0,0 +1,6 @@
import {get,post} from "@/utils/http"
//获取设备在线状态、设备列表
export function getPlanProduction(data){
return get('/screen/cisma/getPlanProduction',data)
}

View File

@ -315,6 +315,11 @@ export default {
'年':'Año',
'月':'Mes',
'日':'Fecha',
"再登软件工况物联系统": "GOATS Working Condition IoT",
"富怡立式啧墨切割机": "Richpeace inkjet cutting machine",
"富怡多功能绣花机": "Richpeace embroidery machine",
"JUKI高速直驱平缝机": "JUKI lockstitch sewing machine",
"Yamato包缝机": "Yamato overlock sewing machine",
},
"default":{
'年': 'Year',

View File

@ -90,9 +90,9 @@ export default {
'DevName':'Machine Name',
'JiqiName':'Machine Name',
'ofLegion':'Affiliated Division',
'DevStatus':'Equipment Status',
'DevStatus':'Device Status',
'JiqiStatus':'Machine Status',
"RunTime":'Running hours',
"RunTime":'Working hours',
'finishSchedule':'Complete Schedule',
'deliveryDay':'Delivery Date',
'LoadMore':'Loading More',
@ -160,7 +160,7 @@ export default {
'haltTime':'Emergency Stop hours',
'DevRunComparison':'Running Comparison Diagram',
'TimeUtilizationRate':'Time Utilization',
'UtilizationRate':'Utilization',
'UtilizationRate':'Utilization Rate',
'MicrofactoriesDevChart':'Micro-Factory Equipment IoT',
'MicrofactoriesDevinfo':'Micro-Factory Equipment Information',
'DevRunNum':'Running Equipment Quantity',
@ -324,6 +324,12 @@ export default {
'年':'Year',
'月':'Month',
'日':'Date',
"再登软件工况物联系统": "GOATS Working Condition IoT",
"富怡立式啧墨切割机": "Richpeace inkjet cutting machine",
"富怡多功能绣花机": "Richpeace embroidery machine",
"JUKI高速直驱平缝机": "JUKI lockstitch sewing machine",
"Yamato包缝机": "Yamato overlock sewing machine",
},
"default":{
'年': 'Year',
@ -339,19 +345,19 @@ export default {
'启动': 'Start',
"总数":"Total",
"在线":"Online",
"台":"unit",
"台":"Unit",
"序号":"No.",
"设备名称":"Equipment",
"设备名称":"Device",
"编号":"Num",
"状态":"State",
"稼动率":"rate",
"稼动率":"Rate",
"工作时长":"Working",
},
"MicroExhibition":{
"富怡服装微工厂物联管理平台":"Richpeace Garment Micro Factory IoT Management Platform",
"裁剪设备":"cutting",
"裁剪设备":"Cutting",
"缝前设备":"Before sewing",
"缝中设备":"on sewing",
"后整设备":"finishing",
"缝中设备":"Sewing",
"后整设备":"Finishing",
}
}

View File

@ -323,6 +323,11 @@ export default {
'年': '年',
'月': '月',
'日': '日',
"再登软件工况物联系统": "再登软件工况物联系统",
"富怡立式啧墨切割机": "富怡立式啧墨切割机",
"富怡多功能绣花机": "富怡多功能绣花机",
"JUKI高速直驱平缝机": "JUKI高速直驱平缝机",
"Yamato包缝机": "Yamato包缝机",
},
"default":{
'年': '年',

View File

@ -11,6 +11,7 @@
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
import { selectPermission } from "@/http/rule/index"
import { ElMessage, ElMessageBox } from 'element-plus'
import { getStoredLanguage, saveStoredLanguage, languageHash } from "@/utils/languageStorage";
const routes: Array<RouteRecordRaw> = [
{
path: "/child",
@ -266,13 +267,13 @@ const routes: Array<RouteRecordRaw> = [
name: "MicroExhibitionChild",
component: () => import("../views/MicroExhibition/child/index.vue"),
},
]
]
},
{
path: "/CismaExhibition",
name: "CismaExhibition",
component: () => import("../views/MicroExhibition/indexOld.vue"),
component: () => import("../views/Exhibition/Cisma/index.vue"),
},
{
path: "/ColombiaExhibition",
@ -289,10 +290,15 @@ const routes: Array<RouteRecordRaw> = [
name: "ExhibitionTable",
component: () => import("../views/Exhibition/table/index.vue"),
},
{
path: "/ExhibitionStation_:id",
name: "ExhibitionStation",
component: () => import("../views/Exhibition/Station/index.vue"),
},
{
path: "/MicroExhibitionTable",
name: "MicroExhibitionTable",
component: () => import("../views/MicroExhibition/table.vue"),
component: () => import("../views/Exhibition/Cisma/table.vue"),
},
{
path: "/Hazardous",
@ -396,16 +402,19 @@ router.beforeEach(async (to: any, from, next) => {
// ...
let address = to.name
let hash = to.query.hash
let lang = to.query?.lang||''
let lang = to.query?.lang || ''
let arr = [
'legionProducts', 'devItem', 'tufting', 'Winding', 'Large_Format',
'GetonAgain', 'OffsiteDevList', 'Mechanicschild', 'Mechanicsson','historyData', 'jixieHistoryData'
'GetonAgain', 'OffsiteDevList', 'Mechanicschild', 'Mechanicsson', 'historyData', 'jixieHistoryData'
]
if (lang && languageHash(lang) && languageHash(lang) != getStoredLanguage()) {
saveStoredLanguage(languageHash(lang))
window.location.reload()
return false
}
// 返回 false 以取消导航
if (to.path == "/") {
sessionStorage.setItem("screen_hash", to.query.hash);
next();
} else if (arr.includes(address)) {
next();
@ -427,7 +436,7 @@ router.beforeEach(async (to: any, from, next) => {
})
// router.beforeEach(async (to: any, from, next) => {
// // 返回 false 以取消导航
// if (to.path !== "/SewingBift") {

View File

@ -56,7 +56,7 @@ const setCharts = () => {
yAxis: [
{
type: 'value',
name: t('messages.日产量'),
name: t('default.日产量'),
axisLabel: {
fontSize: 14
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

View File

@ -12,17 +12,18 @@
<div class="container">
<div class="header">
<div class="title">
<Header :title="t('messages.富怡物联管理平台')" :wh="{ width: '100%', height: '100px' }"></Header>
<Header :title="t('messages.再登软件工况物联系统')" :wh="{ width: '100%', height: '100px' }"></Header>
</div>
</div>
<div class="content">
<div class="left">
<BorderVue :title="t('messages.服装模板机')">
<BorderVue :title="t('messages.富怡立式啧墨切割机')">
<div class="box">
<img src="./images/fzmbj.png" class="fzmbj-img" alt="">
<img src="./images/pmqgj.png" class="fzmbj-img" alt="">
<div class="devcard-container">
<DevCard :dev_title="dev_title" :dev_value="mubanji_value">
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData" :seriesData="data_chart.mubanji_series">
<DevCard :dev_title="dev_title" :dev_value="lspmqgj_value">
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData"
:seriesData="data_chart.qiegeji_series">
</BarChart>
</DevCard>
</div>
@ -33,28 +34,29 @@
</div>
<div class="center">
<div class="ctop">
<video controls loop autoplay="true" ref="videoElement" width="780">
<!-- <video controls loop autoplay="true" ref="videoElement" width="780">
<source :src="videoUrl" type="video/mp4" />
</video>
</video> -->
</div>
<div class="cbottom">
<BorderVue :title="t('messages.单头混合毛巾绣花机')">
<BorderVue :title="t('messages.富怡多功能绣花机')">
<div class="box">
<div class="box-top">
<div class="top-item" v-for="(item, index) in mjxhj_data">
<div class="top-item" v-for="(item, index) in xhj_data">
<span class="key-text">{{ item.key }}:</span>
<span class="value-text" :class="{ status: index == 1 }"
:style="{ background: index == 1 ? status_color[item.value] : '' }">{{ index ==
1 ? '' : item.value }}</span>
<span class="value-text" :class="{ status: index == 1 }"
:style="{ background: index == 1 ? status_color[item.value] : '' }">{{ index ==
1 ? '' : item.value }}</span>
</div>
</div>
<div class="box-bottom">
<div class="box-bottom-left">
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData" :seriesData="data_chart.xiuhuaji_series">
</BarChart>
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData"
:seriesData="data_chart.xiuhua_series">
</BarChart>
</div>
<div class="box-bottom-right">
<img src="./images/mjxhj.png" alt="">
<img src="./images/xhj.png" alt="">
</div>
</div>
</div>
@ -62,18 +64,55 @@
</div>
</div>
<div class="right">
<BorderVue :title="t('messages.绘图仪')">
<div class="box">
<img src="./images/hty.png" class="fzmbj-img" alt="">
<div class="devcard-container">
<DevCard :dev_title="dev_title" :dev_value="huituyi_value">
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData" :seriesData="data_chart.huituyi_series">
</BarChart>
</DevCard>
<div class="rtop">
<BorderVue :title="t('messages.JUKI高速直驱平缝机')">
<div class="box">
<div class="box-top">
<div class="top-item" v-for="(item, index) in juki_data">
<span class="key-text">{{ item.key }}:</span>
<span class="value-text" :class="{ status: index == 1 }"
:style="{ background: index == 1 ? status_color[item.value] : '' }">{{ index ==
1 ? '' : item.value }}</span>
</div>
</div>
<div class="box-bottom">
<div class="box-bottom-left">
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData"
:seriesData="data_chart.juki_series">
</BarChart>
</div>
<div class="box-bottom-right">
<img src="./images/juki.png" alt="">
</div>
</div>
</div>
</BorderVue>
</div>
<div class="rbottom">
<BorderVue :title="t('messages.Yamato包缝机')">
<div class="box">
<div class="box-top">
<div class="top-item" v-for="(item, index) in yamato_data">
<span class="key-text">{{ item.key }}:</span>
<span class="value-text" :class="{ status: index == 1 }"
:style="{ background: index == 1 ? status_color[item.value] : '' }">{{ index ==
1 ? '' : item.value }}</span>
</div>
</div>
<div class="box-bottom">
<div class="box-bottom-left">
<BarChart style="width: 100%;height: 100%;" :xData="data_chart.xData"
:seriesData="data_chart.yamato_series">
</BarChart>
</div>
<div class="box-bottom-right">
<img src="./images/yamato.png" alt="">
</div>
</div>
</div>
</BorderVue>
</div>
</div>
</BorderVue>
</div>
</div>
@ -89,16 +128,16 @@ import BarChart from './component/BarChart.vue'
import { getmDeviceList, getmDeviceProduction } from '@/http/MicroExhibition'
import { ref, onMounted, onUnmounted, getCurrentInstance, watch, onUpdated, computed, reactive } from 'vue'
import {columbiaDeviceList,columbiaDeviceProduction} from '@/http/Exhibition/Colombia'
import { mjlDeviceList, mjlDeviceProduction } from '@/http/Exhibition/Bengal'
import { connectWebsocket, closeWebsocket } from "@/utils/websocket"
import { getStoredLanguage, saveStoredLanguage,languageHash } from "@/utils/languageStorage";
import { getStoredLanguage, saveStoredLanguage, languageHash } from "@/utils/languageStorage";
import { useRoute } from 'vue-router'
import { useI18n } from 'vue-i18n'
let route = useRoute()
let { t } = useI18n();
let lang = route.query.lang as string
if (lang &&languageHash(lang)&&languageHash(lang) != getStoredLanguage()) {
if (lang && languageHash(lang) && languageHash(lang) != getStoredLanguage()) {
saveStoredLanguage(languageHash(lang))
window.location.reload()
}
@ -108,13 +147,24 @@ const videoElement = ref(null)
let timer = null
let timers = null
let dev_title = ref([t('messages.RackNum'), t('messages.DevStatus'), t('messages.UtilizationRate'), t('messages.RunTime')])
let mubanji_value = ref([
let lspmqgj_value = ref([
[102014422, '0', '40层', '0min']
])
let huituyi_value = ref([
[102014422, '0', '40层', '0min']
let xhj_data = reactive([
{ key: t('messages.RackNum'), value: '102014422' },
{ key: t('messages.DevStatus'), value: 2 },
{ key: t('messages.UtilizationRate'), value: '40层' },
{ key: t('messages.RunTime'), value: '0min' },
])
let mjxhj_data = reactive([
let juki_data = reactive([
{ key: t('messages.RackNum'), value: '102014422' },
{ key: t('messages.DevStatus'), value: 2 },
{ key: t('messages.UtilizationRate'), value: '40层' },
{ key: t('messages.RunTime'), value: '0min' },
])
let yamato_data = reactive([
{ key: t('messages.RackNum'), value: '102014422' },
{ key: t('messages.DevStatus'), value: 2 },
{ key: t('messages.UtilizationRate'), value: '40层' },
@ -127,39 +177,48 @@ const status_color = {
'3': '#FDDD60',
}
async function getcolumbiaDeviceList() {
const result:any = await columbiaDeviceList();
const result: any = await mjlDeviceList();
if (result.code == 200) {
let {data} = result;
let mubanji = data['服装模板机']
let huituyi = data['绘图仪(一代)']
let xiuhuaji = data['单头混合毛巾绣花机']
mubanji_value.value = [
[mubanji.label,mubanji.status,mubanji.ratio,mubanji.workTime]
]
huituyi_value.value = [
[huituyi.label,huituyi.status,huituyi.ratio,huituyi.workTime]
let { data } = result;
let lspmqgj = data['立式喷墨切割机']
let xiuhuaji = data['多功能绣花机']
let juki = data['JUKI高速直驱平缝机']
let yamato = data['Yamato包缝机']
lspmqgj_value.value = [
[lspmqgj.label, lspmqgj.status, lspmqgj.ratio, lspmqgj.workTime]
]
mjxhj_data[0].value = xiuhuaji.label
mjxhj_data[1].value = xiuhuaji.status
mjxhj_data[2].value = xiuhuaji.ratio
mjxhj_data[3].value = xiuhuaji.workTime
xhj_data[0].value = xiuhuaji.label
xhj_data[1].value = xiuhuaji.status
xhj_data[2].value = xiuhuaji.ratio
xhj_data[3].value = xiuhuaji.workTime
juki_data[0].value = juki.label
juki_data[1].value = juki.status
juki_data[2].value = juki.ratio
juki_data[3].value = juki.workTime
yamato_data[0].value = yamato.label
yamato_data[1].value = yamato.status
yamato_data[2].value = yamato.ratio
yamato_data[3].value = yamato.workTime
}
}
let data_chart = reactive({ mubanji_series: [1,2], xiuhuaji_series: [3,4], huituyi_series: [5,6], xData: [t('messages.计划产量'),t('messages.实际产量')] })
let data_chart = reactive({ qiegeji_series: [1, 2], xiuhua_series: [3, 4], juki_series: [5, 6],yamato_series: [5, 6], xData: [t('default.计划产量'), t('default.实际产量')] })
function getcolumbiaDeviceProduction() {
columbiaDeviceProduction().then((result:any) => {
mjlDeviceProduction().then((result: any) => {
if (result.code == 200) {
let {data} = result;
data_chart.mubanji_series = data.mubanji
data_chart.xiuhuaji_series = data.xiuhuaji
data_chart.huituyi_series = data.huituyi
let { data } = result;
data_chart.qiegeji_series = data.qiegeji
data_chart.xiuhua_series = data.xiuhua
data_chart.juki_series = data.juki
data_chart.yamato_series = data.yamato
}
})
}
@ -175,17 +234,21 @@ function getWebsocket(val) {
if (data.type == 'WorkingState') {
let msg = data.msg
//
if (msg.RackNumber == '104019066') {
huituyi_value.value[0][1] = msg.WorkingState
}
//
if (msg.RackNumber == '10102118') {
mubanji_value.value[0][1] = msg.WorkingState
//
if (msg.RackNumber == '104019306') {
lspmqgj_value.value[0][1] = msg.WorkingState
}
//
if (msg.RackNumber == '1021875') {
mjxhj_data[1].value = msg.WorkingState
if (msg.RackNumber == '1021631') {
xhj_data[1].value = msg.WorkingState
}
//JUKI
if (msg.RackNumber == 'JUKI高速直驱平缝机') {
juki_data[1].value = msg.WorkingState
}
//Yamato
if (msg.RackNumber == 'Yamato包缝机') {
yamato_data[1].value = msg.WorkingState
}
@ -258,6 +321,8 @@ onUnmounted(() => {
align-items: center;
}
.center {
width: 800px;
height: 100%;
@ -282,6 +347,16 @@ onUnmounted(() => {
height: 480px;
}
.rtop {
width: 100%;
height: 490px;
}
.rbottom {
width: 100%;
height: 480px;
}
.box {
width: 100%;
@ -324,12 +399,17 @@ onUnmounted(() => {
justify-content: space-between;
align-items: center;
}
.box-bottom-left {
width: 250px;
height: 100%;
}
.box-bottom-right {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
@ -347,6 +427,7 @@ onUnmounted(() => {
box-sizing: border-box;
padding: 0 20px;
}
.key-text {
width: 60%;
font-size: 18px;
@ -369,5 +450,4 @@ onUnmounted(() => {
width: 24px;
height: 24px;
border-radius: 50%;
}
</style>
}</style>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="61px" height="87px" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient gradientUnits="userSpaceOnUse" x1="0" y1="42" x2="58" y2="42" id="LinearGradient191">
<stop id="Stop192" stop-color="#0033ff" stop-opacity="0.5294117647058824" offset="0" />
<stop id="Stop193" stop-color="#00ffff" offset="1" />
</linearGradient>
</defs>
<g transform="matrix(1 0 0 1 -1847 -1012 )">
<path d="M 57.58803112269304 0.15649613942387075 L 26.45614035087719 1.6000000000000454 L 1 30.799999999999955 L 1 83.20000000000005 " stroke-width="2" stroke="url(#LinearGradient191)" fill="none" transform="matrix(1 0 0 1 1848 1013 )" />
</g>
</svg>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="73px" height="88px" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient gradientUnits="userSpaceOnUse" x1="0" y1="42.5" x2="70" y2="42.5" id="LinearGradient194">
<stop id="Stop195" stop-color="#0033ff" stop-opacity="0.5294117647058824" offset="0" />
<stop id="Stop196" stop-color="#00ffff" offset="1" />
</linearGradient>
</defs>
<g transform="matrix(1 0 0 1 -666 -592 )">
<path d="M 69.58823529411764 1 L 30.88235294117647 1 L 0 35.19718310049065 L 0 85 " stroke-width="2" stroke="url(#LinearGradient194)" fill="none" transform="matrix(1 0 0 1 667 593 )" />
</g>
</svg>

View File

@ -98,10 +98,7 @@ let route = useRoute()
let { t } = useI18n();
let lang = route.query.lang as string
if (lang &&languageHash(lang)&&languageHash(lang) != getStoredLanguage()) {
saveStoredLanguage(languageHash(lang))
window.location.reload()
}
let videoUrl = ref('https://d.tufting222.cn/video/yzy/GEDOS_merge.mp4')
const videoElement = ref(null)

View File

@ -0,0 +1 @@
<svg t="1700290369973" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12267" width="200" height="200"><path d="M492.8 76.8c-10.4 10.4-12.8 33.6-12.8 126.4 0 130.4 6.4 151.2 43.2 134.4L544 328V205.6C544 84 540 64 515.2 64c-5.6 0-16 5.6-22.4 12.8z" p-id="12268" data-spm-anchor-id="a313x.search_index.0.i11.472d3a81w6ezn1" class="selected" fill="#d81e06"></path><path d="M206.4 215.2c-22.4 8-84 96-106.4 150.4C28.8 544 72.8 736.8 214.4 864.8c51.2 45.6 123.2 86.4 185.6 103.2 54.4 15.2 171.2 13.6 228-3.2 164.8-48.8 286.4-176.8 320-338.4 14.4-68.8 14.4-112 0-180-15.2-74.4-52.8-149.6-100-200-32.8-36-40.8-40.8-53.6-33.6-24.8 15.2-20.8 33.6 18.4 85.6 42.4 56.8 60.8 96 74.4 156 27.2 128.8-10.4 254.4-106.4 350.4-150.4 150.4-379.2 152.8-533.6 5.6-145.6-139.2-158.4-365.6-28-521.6 16-19.2 28.8-40.8 28.8-49.6 0-17.6-23.2-31.2-41.6-24z" p-id="12269" data-spm-anchor-id="a313x.search_index.0.i10.472d3a81w6ezn1" class="selected" fill="#d81e06"></path><path d="M337.6 456.8c-55.2 27.2-86.4 108.8-65.6 171.2 32 98.4 143.2 128.8 206.4 56.8 64.8-73.6 41.6-198.4-44-233.6-36-15.2-56.8-14.4-96.8 5.6zM432 492c66.4 34.4 63.2 151.2-4.8 184-32 15.2-46.4 15.2-75.2 0-65.6-33.6-65.6-148.8-0.8-184 27.2-15.2 52-15.2 80.8 0zM596.8 497.6c-7.2 9.6-12.8 28-12.8 40 0 16.8-4 22.4-16 22.4-10.4 0-16 5.6-16 16s5.6 16 16 16c14.4 0 16 5.6 16 48s1.6 48 16 48 16-5.6 16-48 1.6-48 16-48c10.4 0 16-5.6 16-16 0-11.2-5.6-16-16.8-16-12.8 0-16-4-13.6-22.4 1.6-17.6 6.4-22.4 27.2-24 17.6-1.6 27.2-7.2 29.6-18.4 4-13.6 0-15.2-30.4-15.2-27.2 0-37.6 4-47.2 17.6zM732.8 497.6c-7.2 9.6-12.8 28-12.8 40 0 16.8-4 22.4-16 22.4-10.4 0-16 5.6-16 16s5.6 16 16 16c14.4 0 16 5.6 16 48s1.6 48 16 48 16-5.6 16-48 1.6-48 16-48c10.4 0 16-5.6 16-16 0-11.2-5.6-16-16.8-16-12.8 0-16-4-13.6-22.4 1.6-17.6 6.4-22.4 28.8-24 19.2-1.6 25.6-6.4 25.6-18.4 0-23.2-58.4-21.6-75.2 2.4z" p-id="12270" data-spm-anchor-id="a313x.search_index.0.i12.472d3a81w6ezn1" class="selected" fill="#d81e06"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1 @@
<svg t="1700290260842" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4274" width="200" height="200"><path d="M829.952 195.584l-0.512-0.512c-0.512-0.512-1.024-1.536-2.048-2.048-12.288-12.8-32.768-12.8-45.568 0-12.8 12.288-12.8 32.768-0.512 45.568l2.048 2.048 0.512 0.512c148.992 150.016 148.48 392.704-2.048 541.696s-392.704 148.48-541.696-2.048c-148.48-149.504-148.48-391.168 0.512-540.672 0 0 0.512 0 0.512-0.512 12.8-12.288 12.8-32.768 0.512-45.568s-32.768-12.8-45.568 0l-0.512 0.512C20.992 369.664 20.48 651.776 194.048 826.88c174.08 175.616 457.728 176.64 633.344 2.048s176.64-457.728 2.56-633.344z" fill="#92D050" p-id="4275" data-spm-anchor-id="a313x.search_index.0.i3.472d3a81w6ezn1" class="selected"></path><path d="M512.512 416.256c17.92 0 32.768-20.992 32.768-46.08V99.328c0-25.6-14.848-46.08-32.768-46.08s-32.768 20.992-32.768 46.08v270.336c0 25.6 14.848 46.592 32.768 46.592z" fill="#92D050" p-id="4276" data-spm-anchor-id="a313x.search_index.0.i6.472d3a81w6ezn1" class="selected"></path><path d="M399.872 724.992c-58.368 0-103.424-45.568-103.424-107.52 0-57.344 40.96-108.544 103.424-108.544 59.392 0 104.448 46.592 104.448 108.544 0 65.024-45.568 107.52-104.448 107.52z m0-180.736c-39.424 0-66.56 33.28-66.56 73.216 0 41.984 29.696 72.192 66.56 72.192 37.888 0 67.584-30.208 67.584-72.192s-29.696-73.216-67.584-73.216zM686.592 718.848v-123.392c0-32.256-18.432-51.2-48.128-51.2-30.208 0-48.64 20.992-48.64 51.2v123.392h-35.84V512h35.84v25.6c14.336-17.92 32.768-29.184 58.368-29.184 43.52 0 73.728 31.232 73.728 86.528v123.392h-35.328z" fill="#92D050" p-id="4277" data-spm-anchor-id="a313x.search_index.0.i7.472d3a81w6ezn1" class="selected"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,358 @@
<template>
<div class="container">
<div class="header">
<div class="left">
<!-- <img class="image" src="./../../../assets/images/bf_logo.png" alt=""> -->
<div class="title">北京服装学院</div>
</div>
<div class="right">
<!-- <button class="btn" @click="toLogin">登录</button> -->
</div>
<div class="back" @click="back()">
<i class="iconfont icon-back"></i>
</div>
</div>
<div class="content">
<div class="content-item">
<img :src="image" alt="" class="image">
</div>
<div class="content-item">
<div class="dviece-info">
<div v-for="i in deviceList">
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="61px" height="49px"
xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1256 -339 )">
<path
d="M 6.898809552176336 0.6282051036658682 L 33.767857142857146 24.185897411358177 L 6.898809552176339 47.74358971905049 L 1.4523809807477666 43.34615384615385 L 23.60119044867466 24.185897411358177 L 1.4523809807477646 5.025641049444116 L 6.898809552176336 0.6282051036658682 Z M 32.31547616210938 0.6282051036658682 L 59.547619019252245 24.185897411358177 L 32.31547616210938 47.74358971905049 L 27.232142857142858 43.34615384615385 L 49.3809524093192 24.185897410621997 L 27.232142857142858 5.025641050180292 L 32.31547616210938 0.6282051036658682 Z "
fill-rule="nonzero" fill="#00c6b5" stroke="none"
transform="matrix(1 0 0 1 1256 339 )" />
</g>
</svg>&nbsp;<span>{{ i.val }}</span>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="footer-left">
<button class="btn" :class="[isOn ? 'green' : 'gray']" :disabled="!isOn" @click="openDevice">
<img class="image" src="./images/on.svg" alt="">&nbsp;&nbsp;开机
</button>
</div>
<div class="footer-right">
<button class="btn" :class="[isOff ? 'red' : 'gray']" :disabled="!isOff" @click="closeDevice">
<img class="image" src="./images/off.svg" alt="">&nbsp;&nbsp;关机
</button>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, onUnmounted } from "vue";
import { useRoute, useRouter } from "vue-router";
import { getStatus, setOpen, setClose } from "@/http/Exhibition/station"
import { ElNotification, ElMessageBox, ElMessage, ElLoading } from 'element-plus'
const route = useRoute();
const router = useRouter()
let device_id = route.query.id
let deviceList = ref()
let image = ref()
const isOn = ref(false)
const isOff = ref(false)
let timer = null
let isShow = true
//
async function getDeviceStatus(query) {
try {
const result = await getStatus(query)
if (result.code == 200) {
let data = result.data
deviceList.value = [
{ val: data.name },
{ val: data.model },
{ val: data.label },
]
image.value = import.meta.env.VITE_APP_BASE_API + data.img
isOn.value = data.open
isOff.value = data.close
if (!isOn.value && !isOff.value) {
isShow ? ElMessage({ message: '此机器未连接到物联系统!', type: 'warning' }) : ''
isShow = false
}
}
} catch (e) {
clearInterval(timer)
console.log(e);
}
}
//
async function openDevice() {
if (!isOn.value) return
clearInterval(timer)
let queryData = { id: device_id }
let result = await setOpen(queryData)
if (result.code == 200) {
let data = result.data
isOn.value = data.open
isOff.value = data.close
isShow = true
}
timer = setInterval(() => {
getDeviceStatus({ id: device_id })
}, 10000)
}
//
async function closeDevice() {
if (!isOff.value) return
clearInterval(timer)
let queryData = { id: device_id }
let result = await setClose(queryData)
if (result.code == 200) {
let data = result.data
isOn.value = data.open
isOff.value = data.close
if (result.data.open === false) {
ElMessage({ message: data.status, type: 'warning' })
}
timer = setInterval(() => {
getDeviceStatus({ id: device_id })
}, 10000)
isShow = true
}
}
//
function toLogin() {
window.location.href = WS_URL.EDOS_LOGIN
}
//
function back() {
router.back();
}
onMounted(() => {
getDeviceStatus({ id: device_id })
timer = setInterval(() => {
getDeviceStatus({ id: device_id })
}, 10000)
})
onUnmounted(() => {
clearInterval(timer)
})
</script>
<style scoped>
@import url("@/assets/css/styles/iconfont.css");
@font-face {
font-family: '华文行楷';
src: url('@/assets/font/STXINGKA.TTF') format('truetype');
}
.container {
width: 1920px;
height: 1080px;
background: linear-gradient(90deg, rgba(14, 33, 48, 1) 0%, rgba(14, 33, 48, 1) 0%, rgba(14, 37, 53, 1) 100%, rgba(14, 37, 53, 1) 100%);
}
.container .header {
width: 100%;
height: 175px;
background: rgba(215, 215, 215, 0.11372549019607843);
position: relative;
color: rgba(217, 233, 229, 0.996078431372549);
display: flex;
justify-content: space-between;
align-items: center;
}
.container .header .left {
width: 50%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
font-size: 72px;
font-family: "华文行楷", sans-serif;
}
.container .header .left .image {
width: 135px;
height: 135px;
}
.container .header .right {
width: 40%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container .header .right .btn {
width: 185px;
height: 95px;
border: none;
border-radius: 10px;
color: rgba(217, 233, 229, 0.996);
font-size: 28px;
background: rgb(0, 75, 94);
}
.container .header .right .btn:active {
background: rgb(1, 95, 118);
}
.container .content {
box-sizing: border-box;
width: 100%;
height: calc(100% - 175px - 240px);
padding: 10px;
display: flex;
justify-content: center;
align-items: center;
}
.container .content .content-item {
width: 40%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container .content .content-item .image {
max-height: 100%;
max-width: 100%;
object-fit: contain;
}
.container .content .content-item .dviece-info {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
color: rgba(217, 233, 229, 0.996);
font-size: 30px;
}
.container .content .content-item .dviece-info div {
width: 100%;
display: flex;
justify-content: left;
align-items: center;
padding-left: 25%;
}
.container .footer {
width: 100%;
height: 240px;
display: flex;
justify-content: space-between;
align-items: center;
}
.container .footer .green {
background: #007D50;
}
.container .footer .green:active {
background: #009D72;
}
.container .footer .red {
background: #6E0A0A;
}
.container .footer .red:active {
background: #8E0A0A;
}
.container .footer .gray {
background: rgba(120, 120, 120, 0.4);
}
.container .footer .title {
width: calc(100% - 1200px);
height: 100%;
font-size: 72px;
color: rgba(217, 233, 229, 0.996);
display: flex;
justify-content: center;
align-items: center;
}
.container .footer .footer-left,
.container .footer .footer-right {
width: 800px;
height: 100%;
background: rgba(215, 215, 215, 0.11372549019607843);
display: flex;
justify-content: center;
align-items: center;
}
.container .footer .footer-left .btn,
.container .footer .footer-right .btn {
width: 400px;
height: 175px;
border: none;
border-radius: 30px;
font-size: 48px;
display: flex;
justify-content: center;
align-items: center;
color: rgba(217, 233, 229, 0.996);
}
.container .footer .footer-left .btn .image,
.container .footer .footer-right .btn .image {
width: 50px;
height: 119px;
}</style>

View File

@ -10,7 +10,7 @@
<div class="container">
<div class="header">
<div class="title">
<header2 ref="headerref" :width="'100%'" :height="'100px'" :title="'设备工况物联系统'" :titleTip="[]"
<header2 ref="headerref" :width="'100%'" :height="'100px'" :title="title" :titleTip="[]"
:typeFun="['time']" :alarmType="[]"></header2>
</div>
</div>
@ -46,8 +46,12 @@
import header2 from '@/components/headerBox/header2.vue'
import { ref, reactive, onMounted } from 'vue';
import { ElTable, ElTableColumn, ElInput, ElButton, ElMessage, ElMessageBox } from 'element-plus';
import { getPlanProduction, insertPlanProduction } from '@/http/cisma';
import { insertPlanProduction } from '@/http/cisma';
import {useRoute} from 'vue-router'
import {getPlanProduction} from '@/http/Exhibition/table'
const tableData = ref([]);
const route = useRoute()
const title = ref('设备工况物联系统')
onMounted(() => {
//
fetchPlanProduction();
@ -55,11 +59,12 @@ onMounted(() => {
})
async function fetchPlanProduction(): Promise<any> {
try {
const res = await getPlanProduction() as any;
const s = route.params.id
const res = await getPlanProduction({s}) as any;
if (res.code === 200) {
// console.log(res);
tableData.value = res.data
tableData.value = res.data.list
title.value = res.data.name + "设备计划产量"
}
} catch (error) {
console.error('Failed to fetch plan production:', error);
@ -135,13 +140,13 @@ h3 {
}
.table-container {
width: 95%;
width: 100%;
padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
justify-content: center;
align-items: flex-start;
}

View File

@ -81,7 +81,7 @@ const status_color = {
text-align: left;
font-size: 28px;
font-family: "华文新魏", sans-serif;
font-weight: 400;
font-weight: 700;
font-style: normal;
color: #00fffffe;
}

View File

@ -80,11 +80,6 @@ let { t } = useI18n();
let route = useRoute()
const store = useMicroExhibitionStore()
let lang = route.query.lang as string
if (lang &&languageHash(lang)&&languageHash(lang) != getStoredLanguage()) {
saveStoredLanguage(languageHash(lang))
window.location.reload()
}
let videoUrl = ref('https://d.tufting222.cn/video/yzy/a.mp4')
const videoElement = ref(null)
let timer = null

View File

@ -20,8 +20,9 @@
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="item in language" :class="item.name == lang ? 'select' : ''" :command="item.name">{{ item.simple }}</el-dropdown-item>
<el-dropdown-item v-for="item in language" :class="item.name == lang ? 'select' : ''"
:command="item.value">{{ item.simple }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -29,8 +30,8 @@
</div>
<div class="itemlist">
<list v-for="res in routerList" :hash="res.hash" :path="res.path" :is-link="res.isLink" :title="res.title" :key="res.id"
:url="res.url"></list>
<list v-for="res in routerList" :hash="res.hash" :path="res.path" :is-link="res.isLink" :title="res.title"
:key="res.id" :url="res.url"></list>
</div>
</div>
</template>
@ -39,12 +40,13 @@
import { ref, reactive, onMounted, onUnmounted } from "vue";
import list from "@/components/assembly/indexList.vue";
import { useI18n } from "vue-i18n";
import { getStoredLanguage, saveStoredLanguage } from "@/utils/languageStorage";
import { useRoute } from 'vue-router'
import { getStoredLanguage, saveStoredLanguage, languageHash } from "@/utils/languageStorage";
import { useRoute,useRouter } from 'vue-router'
import { getScreenByHash } from "@/http/rule/index"
import {imgurlAddXhr} from "@/utils/devSever"
import { imgurlAddXhr } from "@/utils/devSever"
let langicon = require("@/assets/svg/language.svg")
let route = useRoute()
let router = useRouter()
window.document.title = "大屏物联管理系统";
let { t } = useI18n();
let language = reactive([
@ -64,20 +66,20 @@ let language = reactive([
value: "es",
}
])
let routerList = ref()
let routerList = ref()
let lang = ref(getStoredLanguage() || '简体中文')
function changelang(val) {
saveStoredLanguage(val)
saveStoredLanguage(languageHash(val))
location.reload()
}
async function reqScreenByHash() {
let hash = sessionStorage.getItem('screen_hash')
let res:any = await getScreenByHash({hash});
let res: any = await getScreenByHash({ hash });
if (res.code === 200) {
let {data} = res
routerList.value = data.map((item:any) => {
let { data } = res
routerList.value = data.map((item: any) => {
const regex = /^(http|https):\/\/[^ "]+$/;
let isTrue = regex.test(item.img);
return {
@ -85,11 +87,11 @@ async function reqScreenByHash() {
isLink: false,
path: item.path,
title: item.title,
url: isTrue?item.img:imgurlAddXhr(item.img),
url: isTrue ? item.img : imgurlAddXhr(item.img),
hash: hash
}
})
}
}