123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682 |
- <template>
- <div
- id="playerMap"
- ref="playerMap"
- class="app-container yunMapDiv"
- style="height: 200%"
- >
- <!-- 全屏 -->
- <el-row :gutter="20" class="rowCls">
- <div class="headerBg">
- <h2>现场工控端</h2>
- <div class="battonDiv">
- <el-tooltip
- v-if="!isFullSreen"
- class="item"
- effect="dark"
- :content="$t('largeScreen.common.screening')"
- placement="top-start"
- >
- <a @click="fullPing()"><i class="el-icon-full-screen"></i></a>
- </el-tooltip>
- <el-tooltip
- v-else
- class="item"
- effect="dark"
- :content="$t('largeScreen.common.cancel')"
- placement="top-start"
- >
- <a @click="exitFullPing()"><i class="el-icon-switch-button"></i></a>
- </el-tooltip>
- </div>
- </div>
- <!--
- <el-image
- style="width: 100%; height: 100%"
- :src="url"
- fit="fill"
- ></el-image> -->
- </el-row>
- <!-- 区域模块 -->
- <div style="text-align: left; margin-left: 5%">
- <!-- 搜索-部分 -->
- <div class="defaultRow noBorder">
- <el-select
- v-model="currentStationId"
- :span="2"
- @change="selectChange"
- :placeholder="$t('common.pleaseSelect')"
- >
- <el-option
- v-for="item in options"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- >
- </el-option>
- </el-select>
- <span :span="2" style="margin-left: 2%">
- <el-button
- plain
- type="primary"
- icon="el-icon-view"
- size="medium"
- @click="readView"
- >
- 读RFID
- </el-button>
- </span>
- <span :span="2" style="margin-right: 5%; float: right">
- <el-button
- plain
- type="primary"
- icon="el-icon-view"
- size="medium"
- @click="navigator"
- >
- 我的班表
- </el-button>
- </span>
- </div>
- <el-tabs style="text-align: left; margin-top: 25px" @tab-click="tabClick">
- <el-tab-pane label="未完成">
- <span class="tabTitle" slot="label"
- ><el-badge :value="taskCount" class="badge"
- ><i class="el-icon-date"></i> 未完成</el-badge
- >
- </span>
- <el-col
- :span="index == 0 ? 12 : 8"
- :gutter="24"
- v-for="(item, index) in taskData.slice(0, 3)"
- :key="item.id"
- :offset="index == 0 ? 0 : 1"
- v-show="item.status < 3 ? true : false"
- :style="
- index == 0
- ? 'zoom:1;min-width:300px;'
- : 'zoom:0.6;min-width:180px;'
- "
- >
- <el-card :gutter="24" class="box-card" style="margin: 5px" >
- <div class="card_content" >
- <el-tag effect="dark" style="float:right;" v-if="item.deviceName" >{{ item.deviceName }}</el-tag>
- <div class="block card_header" @click="view(item)">
- <el-image
- style="
- width: 90px;
- height: 80px;
- max-width: 200%;
- max-height: 200%;
- "
- :src="resolveLogo('status' + (index + 1) + '.png')"
- fit="fill"
- >
- </el-image>
- <span style="text-align: center;"><h2>{{ item.name }}_{{ item.content }}</h2></span>
- <div class="itemNo" style="margin-top: 10px" >任务编号: {{ item.no }}</div>
- </div>
- <el-form style="margin-top: 10px">
- <el-form-item label="零件名称:">
- <span>{{ item.name }}</span>
- </el-form-item>
- <el-form-item label="零件系统码:" v-if="item.completeBatchNo">
- <span>{{ item.completeBatchNo }}</span>
- </el-form-item>
- <el-form-item label="工序号:">
- <span>{{ item.taskNo }}</span>
- </el-form-item>
- <el-form-item label="托盘编号:">
- <span>{{ item.clampNo }}</span>
- </el-form-item>
- <el-form-item label="额定时间:">
- <span>{{ item.time }}分钟</span>
- <!--<div class="timeprogress">
- <el-progress
- :text-inside="true"
- :stroke-width="15"
- :percentage="setPercentage(item.time, item.left)"
- color="#FF3366"
- :format="setItemText(item.time, item.left)"
- ></el-progress>
- </div>-->
- </el-form-item>
- <!-- <el-form-item>-->
- <!-- <span style="margin: 2% 0; float: right">-->
- <!-- <el-button-->
- <!-- plain-->
- <!-- type="primary"-->
- <!-- icon="el-icon-view"-->
- <!-- size="medium"-->
- <!-- :disabled="index == 0 ? false : true"-->
- <!-- @click.native="finishTask(item)"-->
- <!-- >-->
- <!-- 完成-->
- <!-- </el-button>-->
- <!-- </span>-->
- <!-- </el-form-item>-->
- </el-form>
- </div>
- </el-card>
- </el-col>
- </el-tab-pane>
- <el-tab-pane label="已完成">
- <span class="tabTitle" slot="label">
- <i class="el-icon-date"></i> 已完成
- </span>
- <div class="tableTransparent">
- <el-table
- style="height:100%;min-height:80px;"
- :header-cell-style="{ background: '#1890ff', color: '#fff' }"
- :key="tableKey"
- ref="table"
- v-loading="loading"
- :data="tableData.records"
- border
- fit
- row-key="id"
- >
- <el-table-column
- :label="$t('common.serialNo')"
- width="55px"
- align="center"
- >
- <template slot-scope="scope">
- <div>
- {{
- scope.$index +
- (queryParams.current - 1) * queryParams.size +
- 1
- }}
- </div>
- </template>
- </el-table-column>
- <el-table-column prop="name" label="零件名称" align="center">
- </el-table-column>
- <el-table-column prop="procedureNo" label="工序号" width="80" align="center">
- </el-table-column>
- <el-table-column prop="procedureName" label="工序名称" align="center">
- </el-table-column>
- <el-table-column prop="ratedWorkHours" label="额定时间" width="100" align="center">
- </el-table-column>
- <el-table-column prop="activeTime" label="实际时间" width="100" align="center">
- </el-table-column>
- <el-table-column prop="startTime" label="开始时间" width="150" align="center">
- </el-table-column>
- <el-table-column prop="endTime" label="结束时间" width="150" align="center">
- </el-table-column>
- <el-table-column prop="overTime" label="是否超时" width="100" align="center">
- <template slot-scope="{ row }">
- {{ row.overTime>0 ? "是" : "否" }}
- </template>
- </el-table-column>
- <el-table-column prop="preResourceName" label="前序加工设备" width="150" align="center">
- </el-table-column>
- </el-table>
- <pagination
- v-show="tableData.total > 0"
- :limit.sync="queryParams.size"
- :page.sync="queryParams.current"
- :total="Number(tableData.total)"
- @pagination="fetch"
- />
- </div>
- </el-tab-pane>
- </el-tabs>
- </div>
- <!-- 【查看】组件 -->
- <task-view
- ref="view"
- :dialog-visible="tenantViewVisible"
- @get-data="showRFID"
- @close="viewClose"
- />
- <!-- 【查看】组件 -->
- <task-view1
- ref="view1"
- :dialog-visible="view1Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- <task-view2
- ref="view2"
- :dialog-visible="view2Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- <!-- 【查看】组件 -->
- <task-view3
- ref="view3"
- :dialog-visible="view3Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- <task-view4
- ref="view4"
- :dialog-visible="view4Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- <task-view5
- ref="view5"
- :dialog-visible="view5Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- <task-view6
- ref="view6"
- :dialog-visible="view6Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- <task-view7
- ref="view7"
- :dialog-visible="view7Visible"
- @close="viewClose"
- @success="editSuccess"
- />
- </div>
- </template>
- <script>
- // 【查看】组件
- import TaskView from "./components/View";
- import TaskView1 from "./components/View1";
- import TaskView2 from "./components/View2";
- import TaskView3 from "./components/View3";
- import TaskView4 from "./components/View4";
- import TaskView5 from "./components/View5";
- import TaskView6 from "./components/View6";
- import TaskView7 from "./components/View7";
- import { fullScreen, exitFullScreen, initQueryParams } from "@/utils/commons";
- import stationMgrApi from "@/api/machiningClient/stationMgr";
- import taskMgrApi from "@/api/runManageCenter/taskMgr";
- import machiningClientApi from "@/api/machiningClient/machiningClient"
- import Pagination from "@/components/Pagination"
- export default {
- name: "TouchScreen",
- components: {Pagination, TaskView,TaskView1,TaskView2,TaskView3,TaskView4, TaskView5, TaskView6,TaskView7},
- props: {},
- data() {
- return {
- tableKey: 0,
- queryParams: initQueryParams({}),
- RFIDParams: {
- url: "192.168.11.130",
- port: "102",
- taskId: "",
- taskNodeId: "",
- data: {
- content: "",
- positionIndex: ""
- }
- },
- options: [
- ],
- currentStationId: "",
- currentStationName: "",
- taskCount: "",
- taskData: [
- ],
- current: 1,
- timer: null,
- confirmDisabled: true,
- tenantViewVisible: false,
- view1Visible: false,
- view2Visible: false,
- view3Visible: false,
- view4Visible: false,
- view5Visible: false,
- view6Visible: false,
- view7Visible: false,
- isFullSreen: false, // 默认不全屏
- loading: false,
- uniqueCode: "",
- tableData: {
- total: 0
- }
- };
- },
- // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
- created() {
- this.getStation();
- },
- watch: {
- 'taskData': {
- handler(val, oldVal) {
- // 加载列表数据
- //console.log(val[0])
- //console.log(oldVal[0])
- if(oldVal.length>0 && val.length>0 && val[0].id!=oldVal[0].id){
- window.location.reload()
- }
- },
- deep: true
- }
- },
- computed: {
- currentUser() {
- return this.$store.state.account.user;
- },
- },
- mounted() {
- //setInterval(this.getStation, 2000);
- this.timerTask()
- },
- methods: {
- tabClick(e){
- console.log("被选择的tab:", e.index)
- // 待执行-tab
- if(e.index == 0){
- //this.getStation()
- this.timerTask()
- }
- // 已完成-tab
- if(e.index == 1){
- this.clearTimer()
- this.fetch()
- }
- },
- // 全屏
- fullPing() {
- this.$nextTick(() => {
- // 显示【退出全屏】
- this.isFullSreen = true;
- // 如果是退出全屏
- let $playerMap = this.$refs.playerMap;
- if ($playerMap) {
- fullScreen($playerMap);
- }
- });
- },
- //定时器处理
- timerTask(){
- let that = this
- that.timer = setInterval(()=>{
- this.getStation();
- }, 10000)
- },
- clearTimer(){
- if(this.timer){
- clearInterval(this.timer)
- this.timer = null
- }
- },
- // 退出全屏
- exitFullPing() {
- this.$nextTick(() => {
- // 显示【全屏】
- this.isFullSreen = false;
- // 如果是全屏
- exitFullScreen(document.getElementById("playerMap"));
- });
- },
- selectChange(value) {
- console.log(value);
- },
- getStation() {
- stationMgrApi.getStation({ userId: this.$store.state.account.user.id })
- .then((res) => {
- res = res.data;
- if (res.isSuccess) {
- if (res.data.length > 0) {
- this.options = res.data;
- this.currentStationId = this.options[0].id
- this.currentStationName = this.options[0].name
- taskMgrApi.getStationTasks({ resourceId : this.currentStationId,type : "0" }).then((res) => {
- res = res.data;
- if (res.isSuccess) {
- // if (res.data.length > 0) {
- this.taskData = res.data;
- // }
- }
- });
- }
- }
- }).catch(()=>{ this.clearTimer()});
- },
- readView() {
- //this.tenantViewVisible = true
- //this.$refs.view2.read(null)
- let currentNode = this.taskData[0]
- this.RFIDParams.taskId = currentNode.id
- this.RFIDParams.taskNodeId = currentNode.taskNodeId
- this.RFIDParams.data.positionIndex = this.currentStationName.substr(-1)
- let that = this
- /*machiningClientApi.read(this.RFIDParams).then(res => {
- if(res.data.result!="false"){
- this.$message({
- message: "RFID: "+res.data.result,
- type: "success"
- })
- that.uniqueCode = res.data.result
- }else {
- this.$message({
- message: "获取RFID数据失败",
- type: "warning"
- })
- }
- });*/
- },
- showRFID(code) {
- console.log(code);
- },
- resolveLogo(logo) {
- return require(`@/assets/yunMap/${logo}`);
- },
- view (item) {
- // let that = this;
- // let current = that.options.filter(function (c, i, a) {
- // if (c.value == that.currentStationId) {
- // return c
- // }
- // })
- // item.procedurePosition = current[0].name;
- // 只有开始中的页面可以点击进入详情页面操作
- console.log("开始")
- item.currentStationName = this.currentStationName
- if(item.exeStatus === '2' && item.interfaceType === '04' && item.step=="1"){
- if(item.taskName == '上料' || item.nodeName == '上料' ){
- this.$refs.view1.setTenant(item)
- this.view1Visible = true
- }else if(item.taskName.indexOf('翻面')>-1){
- item.uniqueCode = this.uniqueCode
- this.$refs.view2.setTenant(item)
- this.view2Visible = true
- }else if(item.taskName.indexOf('下料')>-1){
- if(item.taskName.indexOf('OP')>-1 || item.taskName.indexOf('热处理')>-1){
- //工序下料
- item.uniqueCode = this.uniqueCode
- this.$refs.view6.setTenant(item)
- this.view6Visible = true
- }else{
- item.uniqueCode = this.uniqueCode
- this.$refs.view3.setTenant(item)
- this.view3Visible = true
- }
- }else if(item.taskName.indexOf('上料')>-1){
- //工序上料或热处理上料
- item.uniqueCode = this.uniqueCode
- this.$refs.view5.setTenant(item)
- this.view5Visible = true
- }
- }
- },
- viewClose() {
- this.view1Visible = false
- this.view2Visible = false
- this.view3Visible = false
- this.view4Visible = false
- this.view5Visible = false
- this.view6Visible = false
- this.view7Visible = false
- },
- editSuccess(){
- // this.getStation()
- // this.taskData.shift();
- console.log("init query task")
- this.$nextTick(() => {
- this.getStation()
- });
- },
- setPercentage(time, left) {
- return this.formatGap(time, left)[0] > 100
- ? 100
- : this.formatGap(time, left)[0];
- },
- // 设置进度文本内容
- setItemText(time, left) {
- return () => {
- return this.formatGap(time, left)[1];
- };
- },
- //时间差转换
- formatGap(time, left) {
- return [Number(parseInt((100 * left) / time)), "剩余" + left + "分钟"];
- },
- fetch(params = {}) {
- this.loading = true
- if (this.queryParams.timeRange) {
- this.queryParams.map.deliveryTime_st = this.queryParams.timeRange[0]
- this.queryParams.map.deliveryTime_ed = this.queryParams.timeRange[1]
- }
- this.queryParams.current = params.current ? params.current : this.queryParams.current
- this.queryParams.size = params.size ? params.size : this.queryParams.size
- console.log(this.$store.state.account.user.id)
- this.queryParams.model.updateUser = this.$store.state.account.user.id
- taskMgrApi.getFinishList(this.queryParams).then(response => {
- const res = response.data
- if (res.isSuccess) {
- this.tableData = res.data
- console.log(this.tableData)
- // 给列表设置条数
- this.$emit('setTabNums', res.data.total, 'tab2')
- }
- // eslint-disable-next-line no-return-assign
- }).finally(() => this.loading = false)
- },
- getFullTime(date) {
- var yy = date.getFullYear(); //年
- var mm = date.getMonth() + 1; //月
- var dd = date.getDate(); //日
- var hh = date.getHours(); //时
- var ii = date.getMinutes(); //分
- var ss = date.getSeconds(); //秒
- var clock = yy + "-";
- if (mm < 10) clock += "0";
- clock += mm + "-";
- if (dd < 10) clock += "0";
- clock += dd + " ";
- if (hh < 10) clock += "0";
- clock += hh + ":";
- if (ii < 10) clock += "0";
- clock += ii + ":";
- if (ss < 10) clock += "0";
- clock += ss;
- return clock;
- },
- navigator() {
- this.$store.dispatch('tagsView/delView', this.$route).then(res => {
- this.$router.push({ path: '/machiningClient/scheduleTask', query: {userId: this.$store.state.account.user.id}}) //带参跳转
- })
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .tabDiv {
- position: relative;
- overflow: hidden;
- width: 100%;
- height: 100%;
- .battonDiv {
- z-index: 9;
- }
- }
- .tabTitle {
- font-size: 24px;
- height: 24px;
- line-height: 24px;
- }
- .card_content {
- padding: 8px;
- width: 100%;
- text-align: left;
- color: #fff;
- }
- .card_header {
- position: relative;
- border-bottom: 1px solid #fff;
- margin: 10px 0;
- }
- .indexNo {
- position: absolute;
- top: 25%;
- left: 9%;
- font-size: 24px;
- line-height: 24px;
- height: 24px;
- color: #fff;
- z-index: 999;
- }
- .indexNo2 {
- position: absolute;
- top: 25%;
- left: 6%;
- font-size: 24px;
- line-height: 24px;
- height: 24px;
- color: #fff;
- z-index: 999;
- }
- .itemNo {
- font-size: 12px;
- line-height: 12px;
- height: 12px;
- text-align: right;
- color: #fff;
- margin-left: 20%;
- margin-bottom: 10px;
- }
- .timeprogress >>> .el-progress-bar__outer {
- background-color: #1890ff;
- }
- .timeprogress .el-progress-bar__inner {
- text-align: center;
- }
- .el-form-item >>> .el-form-item__label {
- color: #fff;
- }
- .el-form-item {
- margin-bottom: 0;
- }
- .tabTitle >>> .el-badge {
- position: relative;
- display: inline-block;
- vertical-align: baseline;
- }
- .badge {
- margin-top: 10px;
- margin-right: 20px;
- }
- .tableTransparent >>> .el-table,
- .el-table__expanded-cell {
- background-color: transparent;
- }
- </style>
|