Compare commits
26 Commits
a5a4f93328
...
fzq
| Author | SHA1 | Date | |
|---|---|---|---|
| e117388027 | |||
| 5511837e90 | |||
| 755ad9df30 | |||
| 101eac890c | |||
|
|
6815ac4cc4 | ||
|
|
4ffbdaef8a | ||
|
|
b1ab1962b1 | ||
|
|
db47bffb18 | ||
|
|
5afadfb1ce | ||
|
|
e0d4e5327f | ||
|
|
3da95fed21 | ||
|
|
683fc9169a | ||
|
|
bc4cfdc990 | ||
|
|
0b5740d41c | ||
|
|
41e680b55d | ||
|
|
28303e4c5f | ||
|
|
bbe5e63075 | ||
|
|
f9d40b3790 | ||
|
|
8ec42773cd | ||
|
|
2f4e9f31cd | ||
|
|
5798e5b6e0 | ||
|
|
3265b4a580 | ||
|
|
a08af6774e | ||
|
|
3c38763cf4 | ||
|
|
23b7b85b39 | ||
| 2f2eaf4e20 |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 24 KiB |
BIN
public/favicon2.ico
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
public/google.exe
Normal file
@@ -1,12 +1,28 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-30 14:26:02
|
||||
*/
|
||||
/**
|
||||
* Created by Jacky.Gao on 2017-10-01.
|
||||
*/
|
||||
import defaultI18nJsonData from './designer.json';
|
||||
import en18nJsonData from './designer_en.json';
|
||||
export default function buildLocal () {
|
||||
let language = getCookie('language') || 'zh-CN';
|
||||
// export default function buildLocal () {
|
||||
// let language = getCookie('language') || 'zh-CN';
|
||||
// window.i18n = defaultI18nJsonData;
|
||||
// if (language !== 'zh-CN') {
|
||||
// window.i18n = en18nJsonData;
|
||||
// }
|
||||
// }
|
||||
|
||||
export default function buildLocal () {
|
||||
let language = getCookie('language') || 'en';
|
||||
window.i18n = defaultI18nJsonData;
|
||||
if (language !== 'zh-CN') {
|
||||
if (language !== 'en') {
|
||||
window.i18n = en18nJsonData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
|
||||
* @LastEditTime: 2023-09-20 11:15:04
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@@ -31,25 +39,30 @@
|
||||
<!-- 开发环境 -->
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
|
||||
<script>
|
||||
window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://192.168.1.8';
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://127.0.0.1:8080/';
|
||||
</script>
|
||||
<% } %>
|
||||
<!-- 集成测试环境 -->
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'prod:sit') { %>
|
||||
<script>
|
||||
window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://127.0.0.1:8080/';
|
||||
</script>
|
||||
<% } %>
|
||||
<!-- 验收测试环境 -->
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'prod:uat') { %>
|
||||
<script>
|
||||
window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://127.0.0.1:8080/';
|
||||
</script>
|
||||
<% } %>
|
||||
<!-- 生产环境 -->
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'prod') { %>
|
||||
<script>
|
||||
window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://india.mes.picaiba.com/';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://127.0.0.1:8080/';
|
||||
</script>
|
||||
<% } %>
|
||||
</head>
|
||||
|
||||
19
src/App.vue
@@ -1,5 +1,13 @@
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-13 15:13:05
|
||||
-->
|
||||
<template>
|
||||
<transition name="el-fade-in-linear">
|
||||
<transition name="el-fade-in-linear" id="app">
|
||||
<router-view />
|
||||
</transition>
|
||||
</template>
|
||||
@@ -8,10 +16,13 @@
|
||||
.el-table th.gutter {
|
||||
display: table-cell !important;
|
||||
}
|
||||
#app {
|
||||
background-color: #f2f4f9;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
import Cookies from 'js-cookie'
|
||||
import { messages } from '@/i18n'
|
||||
// import { messages } from '@/i18n'
|
||||
export default {
|
||||
watch: {
|
||||
'$i18n.locale': 'i18nHandle'
|
||||
@@ -23,7 +34,8 @@ export default {
|
||||
i18nHandle(val, oldVal) {
|
||||
Cookies.set('language', val)
|
||||
document.querySelector('html').setAttribute('lang', val)
|
||||
document.title = messages[val].brand.lg
|
||||
// 不注释掉会报错
|
||||
// document.title = messages[val].brand.lg
|
||||
// 非登录页面,切换语言刷新页面
|
||||
if (this.$route.name !== 'login' && oldVal) {
|
||||
window.location.reload()
|
||||
@@ -32,3 +44,4 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
BIN
src/assets/img/choicepart/choicepart-bg.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
src/assets/img/choicepart/choicepart-hover.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
src/assets/img/choicepart/厂务管理.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
src/assets/img/choicepart/基本资料.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
src/assets/img/choicepart/报表管理.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
src/assets/img/choicepart/数据分析.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
src/assets/img/choicepart/日志管理.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
src/assets/img/choicepart/日志管理2.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
src/assets/img/choicepart/权限管理.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
src/assets/img/choicepart/系统设置.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
src/assets/img/choicepart/设备数采.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
src/assets/img/choicepart/质量管理.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
src/assets/img/logo2.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/img/logo3.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
@@ -254,10 +254,14 @@ img {
|
||||
margin-right: 0;
|
||||
font-size: 18px;
|
||||
}
|
||||
&__close {
|
||||
width: 0px;
|
||||
}
|
||||
}
|
||||
.aui-content {
|
||||
&__wrapper {
|
||||
margin-left: $sidebar--width-fold;
|
||||
background-color: #F2F4F9;
|
||||
}
|
||||
&--tabs > .el-tabs > .el-tabs__header {
|
||||
left: $sidebar--width-fold;
|
||||
@@ -278,7 +282,19 @@ img {
|
||||
align-items: stretch;
|
||||
height: $navbar--height;
|
||||
background-color: $--color-primary;
|
||||
box-shadow: 0 1px 0 0 rgba(0, 0, 0, .05);
|
||||
box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.05);
|
||||
.home {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: 1030;
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
height: $navbar--height;
|
||||
background-color: #0b58ff;
|
||||
box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
&--colorful {
|
||||
.aui-navbar__body {
|
||||
// navbar body颜色
|
||||
@@ -356,7 +372,9 @@ img {
|
||||
font-weight: 500;
|
||||
color: #FFFFFF;
|
||||
line-height: 20px;
|
||||
margin-top: 7px;
|
||||
margin-top: 14px;
|
||||
// 新加的
|
||||
margin-left: 10px;
|
||||
}
|
||||
&-mini {
|
||||
max-width: 100%;
|
||||
@@ -395,10 +413,15 @@ img {
|
||||
}
|
||||
.el-menu-item.is-active,
|
||||
.el-submenu.is-active > .el-submenu__title {
|
||||
// 点击之后背景颜色
|
||||
color: $--color-text-secondary;
|
||||
// background-color: rgb(13,43,104);
|
||||
&:focus,
|
||||
&:hover {
|
||||
// 点击之后图标颜色亮度
|
||||
color: $--color-text-primary;
|
||||
// color: #fff;
|
||||
// background-color: rgb(13,43,104);
|
||||
}
|
||||
}
|
||||
.el-menu-item {
|
||||
@@ -406,6 +429,7 @@ img {
|
||||
&:hover {
|
||||
.aui-navbar__icon-menu {
|
||||
color: $--color-text-primary;
|
||||
// color: #fff;
|
||||
}
|
||||
.el-dropdown {
|
||||
color: $--color-text-primary;
|
||||
@@ -519,7 +543,8 @@ img {
|
||||
.el-menu-item.is-active,
|
||||
.el-submenu.is-active > .el-submenu__title {
|
||||
// color: mix(#fff, $sidebar--text-color-dark, 80%);
|
||||
color: #409EFF;
|
||||
// color: #409EFF;
|
||||
color: #0B58FF;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -533,6 +558,10 @@ img {
|
||||
overflow-y: scroll;
|
||||
transition: width .3s;
|
||||
}
|
||||
.close {
|
||||
width: 0px;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
&__menu {
|
||||
width: $sidebar--width;
|
||||
border-right: 0;
|
||||
@@ -559,14 +588,21 @@ img {
|
||||
/* Content
|
||||
------------------------------ */
|
||||
.aui-content {
|
||||
position: relative;
|
||||
padding: $content--padding;
|
||||
min-height: calc(100vh - #{$navbar--height});
|
||||
top: 16px;
|
||||
margin:0 16px 0;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
padding: 16px 16px 0;
|
||||
//此处修底部高度
|
||||
height: calc(100vh - 85px);
|
||||
overflow: auto;
|
||||
&__wrapper {
|
||||
position: relative;
|
||||
// 注释掉可隐藏侧边栏,但需要在main.vue中加入main-content的限制条件
|
||||
margin-left: $sidebar--width;
|
||||
min-height: calc(100vh - #{$navbar--height});
|
||||
background-color: $content--background-color;
|
||||
//此处修改背景色
|
||||
background-color: #F2F4F9;
|
||||
transition: margin-left .3s;
|
||||
}
|
||||
> .aui-card--fill > .el-card__body {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
.mod-home {
|
||||
table {
|
||||
width: 100%;
|
||||
height: 10px;
|
||||
border: 1px solid $--border-color-lighter;
|
||||
border-collapse: collapse;
|
||||
th,
|
||||
|
||||
@@ -9,13 +9,15 @@ $navbar--height: 50px;
|
||||
$sidebar--width: 248px;
|
||||
$sidebar--width-fold: 64px;
|
||||
// $sidebar--background-color-dark: #263238;
|
||||
$sidebar--background-color-dark: #001529;
|
||||
// $sidebar--background-color-dark: #001529;
|
||||
$sidebar--background-color-dark: #304156;
|
||||
$sidebar--text-color-dark: #8a979e;
|
||||
$sidebar--menu-item-height: 48px;
|
||||
|
||||
// Content
|
||||
$content--padding: 15px;
|
||||
$content--background-color: #f1f4f5;
|
||||
// $content--background-color: #f1f4f5;
|
||||
$content--background-color: #fff;
|
||||
$content--card-header-height: 60px;
|
||||
$content--tabs-header-height: 38px;
|
||||
// Content, 填充整屏高度(非tabs状态) = 整屏高度 - 导航条高度 - aui-content上下内边距高度
|
||||
|
||||
@@ -359,7 +359,7 @@ export default {
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
const dataFormKeys = Object.keys(this.dataForm)
|
||||
console.log('data form keys: ', dataFormKeys, pick(res.data, dataFormKeys))
|
||||
// console.log('data form keys: ', dataFormKeys, pick(res.data, dataFormKeys))
|
||||
this.dataForm = pick(res.data, dataFormKeys)
|
||||
|
||||
// LABEL: FILE_RELATED
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<template>
|
||||
<div class="attr-form">
|
||||
<h3>
|
||||
{{ title }} <el-button style="margin-left: 8px;" type="text" v-if="!isDetail && !showAddAttr" @click="showAddAttr = true">{{ $t('add') }}</el-button>
|
||||
<!-- <el-button style="margin-left: 8px" type="text" v-if="!isDetail && !showAddAttr" @click="showAddAttr = true">{{ $t('add') }}</el-button> 跟在{{ title }} 同行后面 -->
|
||||
{{ title }}
|
||||
</h3>
|
||||
<div v-if="!showAddAttr">
|
||||
<component
|
||||
:top-btn-config="topBtnConfig"
|
||||
key="sub-table"
|
||||
:is="require('../../base-table/index.vue').default"
|
||||
:table-head-configs="filterTableConfigs()"
|
||||
@@ -12,8 +14,8 @@
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
/>
|
||||
@clickTopBtn="clickTopBtn"
|
||||
@operate-event="handleOperations" />
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
@@ -21,15 +23,14 @@
|
||||
:page-sizes="[5, 10, 20, 50]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<div v-else style="background: #eee; border-radius: 8px; padding: 12px;">
|
||||
<div v-else style="background: #eee; border-radius: 8px; padding: 12px">
|
||||
<el-row>
|
||||
<el-col>
|
||||
<el-form ref="AttrForm" :model="AttrForm" :rules="AttrFormRules" :inline="true" label-position="top">
|
||||
<el-row :gutter="20" style="padding: 0 24px;">
|
||||
<el-row :gutter="20" style="padding: 0 24px">
|
||||
<el-col :span="attrFormFields.length > 6 ? 6 : 12" v-for="field in attrFormFields" :key="field.prop + 'col'">
|
||||
<el-form-item :key="field.prop" :prop="field.prop" :label="field.name" style="width: 100%">
|
||||
<el-input v-if="field.formType === 'input' || !field.formType" v-model="AttrForm[field.prop]" :placeholder="$t('hints.input')" clearable />
|
||||
@@ -43,7 +44,7 @@
|
||||
</el-form>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row style="text-align: right;">
|
||||
<el-row style="text-align: right">
|
||||
<el-button size="small" @click="handleCloseAttrForm">{{ $t('cancel') }}</el-button>
|
||||
<el-button type="success" size="small" @click="handleSaveAttrForm">{{ $t('save') }}</el-button>
|
||||
</el-row>
|
||||
@@ -56,6 +57,12 @@ import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import { pick } from 'lodash/object'
|
||||
import { calcMaxHeight } from '@/utils'
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
export default {
|
||||
name: 'AttrForm',
|
||||
components: { BaseTable },
|
||||
@@ -96,6 +103,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
calcMaxHeight,
|
||||
topBtnConfig,
|
||||
showAddAttr: false,
|
||||
dataList: [],
|
||||
pageIndex: 1,
|
||||
@@ -107,9 +115,9 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
attrFormFields() {
|
||||
const _ = this.tableConfigs.filter(item => item.formField)
|
||||
const _ = this.tableConfigs.filter((item) => item.formField)
|
||||
/** 顺带配置 AttrForm */
|
||||
_.forEach(item => {
|
||||
_.forEach((item) => {
|
||||
this.$set(this.AttrForm, [item.prop], '')
|
||||
})
|
||||
|
||||
@@ -126,11 +134,17 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
// 加个created,来实现不能在topBtnConfig组件直接使用的? : 判别
|
||||
created() {
|
||||
// if(!(!this.isDetail && !this.showAddAttr)) {
|
||||
// this.topBtnConfig = []
|
||||
// }
|
||||
},
|
||||
methods: {
|
||||
filterTableConfigs() {
|
||||
if (this.isDetail) {
|
||||
/** 如果是查看详情,就屏蔽操作列 */
|
||||
return this.tableConfigs.filter(opt => opt.prop !== 'operations')
|
||||
return this.tableConfigs.filter((opt) => opt.prop !== 'operations')
|
||||
}
|
||||
return this.tableConfigs
|
||||
},
|
||||
@@ -182,7 +196,7 @@ export default {
|
||||
this.$nextTick(() => {
|
||||
this.$http.get(this.$http.adornUrl(`${this.url}/${id}`)).then(({ data: res }) => {
|
||||
if (res && res.code === 0 && res.data) {
|
||||
const neededFields = [...this.attrFormFields.map(item => item.prop), 'id']
|
||||
const neededFields = [...this.attrFormFields.map((item) => item.prop), 'id']
|
||||
const filtered = pick(res.data, neededFields)
|
||||
for (let field of neededFields) {
|
||||
this.AttrForm[field] = filtered[field]
|
||||
@@ -231,7 +245,7 @@ export default {
|
||||
},
|
||||
|
||||
handleSaveAttrForm() {
|
||||
this.$refs['AttrForm'].validate(valid => {
|
||||
this.$refs['AttrForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
this.$http({
|
||||
// url: this.$http.adornUrl(`${this.url}/${!this.AttrForm.id ? '' : this.AttrForm.id}`),
|
||||
@@ -271,6 +285,9 @@ export default {
|
||||
currentChangeHandle(val) {
|
||||
this.pageIndex = val
|
||||
this.getDataList()
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.showAddAttr = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,8 @@
|
||||
:visible.sync="visible"
|
||||
@close="handleClose"
|
||||
:distory-on-close="true"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<div style="max-height: 60vh; overflow-y: scroll; overflow-x: hidden;">
|
||||
:close-on-click-modal="false">
|
||||
<div style="max-height: 60vh; overflow-y: scroll; overflow-x: hidden">
|
||||
<el-form ref="dataForm" :model="dataForm" :rules="dataFormRules">
|
||||
<!-- 如果需要更精细一点的布局,可以根据配置项实现地再复杂一点,但此处暂时全部采用一行两列布局 -->
|
||||
<el-row v-for="n in rows" :key="n" :gutter="20">
|
||||
@@ -18,26 +17,26 @@
|
||||
v-if="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)]"
|
||||
:prop="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name"
|
||||
:key="`${n}-col-${c}-item`"
|
||||
:label="getLabel(n, c)"
|
||||
>
|
||||
:label="getLabel(n, c)">
|
||||
<!-- 暂时先不实现部分输入方式 -->
|
||||
<el-input
|
||||
v-if="getType(n, c) === 'input'"
|
||||
:placeholder="getPlaceholder(n, c)"
|
||||
v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"
|
||||
clearable
|
||||
:disabled="isDetail"
|
||||
/>
|
||||
:disabled="isDetail" />
|
||||
<el-radio v-if="getType(n, c) === 'radio'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
|
||||
<el-checkbox v-if="getType(n, c) === 'check'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
|
||||
<!-- 全部selcet下拉框可输入搜索 filterable-->
|
||||
<el-select
|
||||
v-if="getType(n, c) === 'select'"
|
||||
:placeholder="getPlaceholder(n, c)"
|
||||
v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"
|
||||
clearable
|
||||
:disabled="isDetail"
|
||||
@change="emitSelectChange(configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name, $event)"
|
||||
>
|
||||
filterable
|
||||
:disabled="isDetail || configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].isDisabled"
|
||||
|
||||
@change="emitSelectChange(configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name, $event)">
|
||||
<el-option v-for="opt in configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options" :key="opt.label + Math.random()" :label="opt.label" :value="opt.value" />
|
||||
</el-select>
|
||||
<el-switch v-if="getType(n, c) === 'switch'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
|
||||
@@ -47,16 +46,15 @@
|
||||
:options="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].options"
|
||||
:props="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props"
|
||||
:disabled="isDetail"
|
||||
clearable
|
||||
/>
|
||||
clearable />
|
||||
<el-time-select v-if="getType(n, c) === 'time'" v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]" :disabled="isDetail" />
|
||||
<el-date-picker
|
||||
v-if="getType(n, c) === 'date'"
|
||||
v-bind="configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].props"
|
||||
:placeholder="getPlaceholder(n, c)"
|
||||
value-format='yyyy-MM-ddTHH:mm:ss'
|
||||
v-model="dataForm[configs.fields[(n - 1) * COLUMN_PER_ROW + (c - 1)].name]"
|
||||
:disabled="isDetail"
|
||||
/>
|
||||
:disabled="isDetail" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -65,14 +63,13 @@
|
||||
<template v-if="configs.extraComponents && configs.extraComponents.length > 0">
|
||||
<el-form-item v-for="(ec, index) in configs.extraComponents" :key="ec.name + index" :label="ec.label" class="extra-components">
|
||||
<component
|
||||
style="margin-top: 40px;"
|
||||
style="margin-top: 40px"
|
||||
v-if="ec.hasModel"
|
||||
:is="ec.component"
|
||||
v-bind="ec.props"
|
||||
v-model="dataForm[ec.name]"
|
||||
@ready="handleEditorReady"
|
||||
:read-only="isDetail"
|
||||
/>
|
||||
:read-only="isDetail" />
|
||||
<!-- <component v-if="ec.hasModel" :is="ec.component" v-bind="ec.props" v-model="dataForm[ec.name]" /> -->
|
||||
<component
|
||||
v-else
|
||||
@@ -80,8 +77,7 @@
|
||||
v-bind="ec.props"
|
||||
@uploader-update-filelist="handleUploadListUpdate($event, ec.props.extraParams.typeCode)"
|
||||
:uploader-inject-file-list="/*用于设备分流的*/ fileList[ec.props.extraParams.typeCode]"
|
||||
:read-only="isDetail"
|
||||
/>
|
||||
:read-only="isDetail" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-form>
|
||||
@@ -100,8 +96,12 @@
|
||||
(((dataForm.id && operate.showOnEdit) || (!dataForm.id && !operate.showOnEdit)) && (operate.permission ? $hasPermission(operate.permission) : true)))
|
||||
"
|
||||
:key="`operate-${index}`"
|
||||
:type="btnType[operate.name]"
|
||||
:style="{
|
||||
backgroundColor: btnType[operate.name],
|
||||
color: btnColor[operate.name]
|
||||
}"
|
||||
@click="handleClick(operate)"
|
||||
:disabled='isDisabled'
|
||||
>{{ btnName[operate.name] }}</el-button
|
||||
>
|
||||
</template>
|
||||
@@ -125,9 +125,17 @@ const title = {
|
||||
|
||||
// 或者也可以改造成自定义颜色:
|
||||
const btnType = {
|
||||
save: 'success',
|
||||
update: 'primary',
|
||||
reset: 'text'
|
||||
add: '#0b58ff',
|
||||
save: '#0b58ff',
|
||||
update: '#0b58ff',
|
||||
reset: ''
|
||||
// cancel: 'text'
|
||||
// add more...
|
||||
}
|
||||
const btnColor = {
|
||||
save: '#fff',
|
||||
update: '#fff',
|
||||
reset: ''
|
||||
// cancel: 'text'
|
||||
// add more...
|
||||
}
|
||||
@@ -154,7 +162,7 @@ export default {
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
nameFilter: function(name) {
|
||||
nameFilter: function (name) {
|
||||
if (!name) return null
|
||||
// for i18n
|
||||
const defaultNames = {
|
||||
@@ -176,11 +184,16 @@ export default {
|
||||
// },
|
||||
data() {
|
||||
return {
|
||||
//按钮盒用
|
||||
idMark: 1,
|
||||
// 按钮防重复点击
|
||||
isDisabled: false,
|
||||
COLUMN_PER_ROW,
|
||||
title,
|
||||
/** 按钮相关属性 */
|
||||
btnName,
|
||||
btnType,
|
||||
btnColor,
|
||||
defaultNames: {
|
||||
name: i18n.t('name'),
|
||||
code: i18n.t('code'),
|
||||
@@ -222,7 +235,7 @@ export default {
|
||||
|
||||
/** 转换 configs.fields 的结构,把纯字符串转为对象 */
|
||||
this.$nextTick(() => {
|
||||
this.configs.fields = this.configs.fields.map(item => {
|
||||
this.configs.fields = this.configs.fields.map((item) => {
|
||||
if (typeof item === 'string') {
|
||||
return { name: item }
|
||||
}
|
||||
@@ -230,13 +243,13 @@ export default {
|
||||
})
|
||||
|
||||
/** 动态设置dataForm字段 */
|
||||
this.configs.fields.forEach(item => {
|
||||
this.configs.fields.forEach((item) => {
|
||||
this.$set(this.dataForm, [item.name], '')
|
||||
|
||||
/** select 的默认值设置 */
|
||||
if (item.type === 'select') {
|
||||
const opts = item.options || []
|
||||
const dft = opts.find(item => item.default || false)
|
||||
const dft = opts.find((item) => item.default || false)
|
||||
if (dft) {
|
||||
this.$set(this.dataForm, [item.name], dft.value)
|
||||
}
|
||||
@@ -259,10 +272,10 @@ export default {
|
||||
// 如果有 relatedField,就需要在当前item的数据加载后,刷新 relatedField 的列表
|
||||
if (item.relatedField) {
|
||||
this.$watch(
|
||||
function() {
|
||||
function () {
|
||||
return this.dataForm[item.name]
|
||||
},
|
||||
function(val, old) {
|
||||
function (val, old) {
|
||||
if (val && val !== old) {
|
||||
this.$emit('select-change', { name: item.name, id: val })
|
||||
}
|
||||
@@ -318,7 +331,7 @@ export default {
|
||||
}
|
||||
/** 检查是否需要额外的组件 */
|
||||
this.configs.extraComponents &&
|
||||
this.configs.extraComponents.forEach(item => {
|
||||
this.configs.extraComponents.forEach((item) => {
|
||||
// if (Object.hasOwn(this.dataForm, [item.name])) {
|
||||
if (this.dataForm.hasOwnProperty(item.name)) {
|
||||
return
|
||||
@@ -400,16 +413,16 @@ export default {
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
const dataFormKeys = Object.keys(this.dataForm)
|
||||
console.log('keys ===> ', dataFormKeys)
|
||||
// console.log('keys ===> ', dataFormKeys)
|
||||
// console.log('data form keys: ', dataFormKeys, pick(res.data, dataFormKeys))
|
||||
this.dataForm = __pick(res.data, dataFormKeys)
|
||||
console.log('pick(res.data, dataFormKeys) ===> ', __pick(res.data, dataFormKeys))
|
||||
// console.log('pick(res.data, dataFormKeys) ===> ', __pick(res.data, dataFormKeys))
|
||||
// LABEL: FILE_RELATED
|
||||
/** 对文件下载进行分流 */
|
||||
this.fileList = {}
|
||||
if (this.dataForm.files) {
|
||||
// console.log('files: ', this.dataForm.files)
|
||||
this.dataForm.files.forEach(file => {
|
||||
this.dataForm.files.forEach((file) => {
|
||||
// const fileName = file.fileUrl.split('/').pop()
|
||||
/** [1] 处理 fileList */
|
||||
// if (Object.hasOwn(this.fileList, file.typeCode)) {
|
||||
@@ -439,7 +452,7 @@ export default {
|
||||
this.shouldWait.then(() => {
|
||||
if (this.tempForm.length) {
|
||||
// console.log('create new, tempform', JSON.stringify(this.tempForm.length))
|
||||
this.tempForm.forEach(item => {
|
||||
this.tempForm.forEach((item) => {
|
||||
// console.log('item data', item.data)
|
||||
this.dataForm[item.name] = item.data
|
||||
})
|
||||
@@ -452,11 +465,15 @@ export default {
|
||||
},
|
||||
|
||||
emitSelectChange(name, id) {
|
||||
const currentField = this.configs.fields.find(item => item.name === name)
|
||||
// console.log(id)
|
||||
const currentField = this.configs.fields.find((item) => item.name === name)
|
||||
if (currentField.relatedField) {
|
||||
this.dataForm[currentField.relatedField] = null
|
||||
}
|
||||
this.$emit('select-change', { name, id })
|
||||
|
||||
//按钮盒页面用
|
||||
this.idMark = id
|
||||
},
|
||||
|
||||
handleEditorReady(val) {},
|
||||
@@ -464,7 +481,7 @@ export default {
|
||||
handleClick(btn) {
|
||||
/** 提取url */
|
||||
const urls = {}
|
||||
this.configs.operations.map(item => {
|
||||
this.configs.operations.map((item) => {
|
||||
urls[item.name] = {}
|
||||
urls[item.name].url = item.url
|
||||
urls[item.name].extraFields = item.extraFields || {}
|
||||
@@ -472,9 +489,18 @@ export default {
|
||||
/** 操作 */
|
||||
switch (btn.name) {
|
||||
case 'save':
|
||||
this.isDisabled = true
|
||||
setTimeout(() => {
|
||||
this.isDisabled = false
|
||||
}, 3000)
|
||||
case 'update':
|
||||
this.isDisabled = true
|
||||
setTimeout(() => {
|
||||
this.isDisabled = false
|
||||
}, 3000)
|
||||
|
||||
/** 需要验证表单的操作 */
|
||||
this.$refs['dataForm'].validate(valid => {
|
||||
this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
/** 对于文件上传的单独处理(合并处理) */
|
||||
if (Object.keys(this.fileForm).length) {
|
||||
@@ -489,9 +515,19 @@ export default {
|
||||
}
|
||||
this.$set(this.dataForm, 'fileIds', fileIds)
|
||||
}
|
||||
|
||||
// console.log('this.$route',this.$route);
|
||||
// console.log('before send: ', this.dataForm)
|
||||
|
||||
//增加质量模块按钮盒多传参数的判断
|
||||
if(this.$route.name == 'monitoring-qualityInspectionBoxBtn'){
|
||||
// console.log('关键',this.configs.fields);
|
||||
for(let i = 0;i<this.configs.fields[4].options.length;i++){
|
||||
if (this.configs.fields[4].options[i].label == this.idMark) {
|
||||
this.dataForm.inspectionDetId = this.configs.fields[4].options[i].inspectionDetId
|
||||
}
|
||||
}
|
||||
}
|
||||
// console.log('before send: ', this.dataForm)
|
||||
this.$http({
|
||||
url: this.$http.adornUrl(urls[btn.name].url),
|
||||
method: btn.name === 'save' ? 'POST' : 'PUT',
|
||||
@@ -513,7 +549,7 @@ export default {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
.catch((err) => {
|
||||
this.$message({
|
||||
message: err,
|
||||
type: 'error',
|
||||
@@ -557,7 +593,7 @@ export default {
|
||||
this.$set(
|
||||
this.fileForm,
|
||||
typeCode,
|
||||
filelist.map(item => item.id)
|
||||
filelist.map((item) => item.id)
|
||||
)
|
||||
// console.log('after handleUploadListUpdate(): ', this.fileForm)
|
||||
},
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2023-01-06 15:49:50
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-16 10:18:25
|
||||
*/
|
||||
import i18n from '@/i18n'
|
||||
|
||||
export default {
|
||||
@@ -19,7 +27,8 @@ export default {
|
||||
colors: {
|
||||
delete: '#FF5454',
|
||||
preview: '#f09843',
|
||||
design: '#99089f',
|
||||
design: '#0b58ff',
|
||||
edit: '#0b58ff'
|
||||
// 'view-trend': 'red'
|
||||
// add more...
|
||||
},
|
||||
@@ -57,7 +66,8 @@ export default {
|
||||
for (const optionStr of this.injectData.head?.options) {
|
||||
const optObj = typeof optionStr === 'object'
|
||||
// btns.push(h('el-button', { props: { type: this.btnTypes[optionStr] } }, optionStr))
|
||||
btns.push(h('el-button', { props: { type: 'text' }, style: { color: optObj ? this.colors[optionStr.name] : this.colors[optionStr] || '#409EFF' }, on: { click: this.emit.bind(null, optionStr) } }, typeof optionStr === 'object' ? this.text[optionStr.name] : this.text[optionStr]))
|
||||
// 原色 #409EFF
|
||||
btns.push(h('el-button', { props: { type: 'text' }, style: { color: optObj ? this.colors[optionStr.name] : this.colors[optionStr] || '#0b58ff' }, on: { click: this.emit.bind(null, optionStr) } }, typeof optionStr === 'object' ? this.text[optionStr.name] : this.text[optionStr]))
|
||||
}
|
||||
return h('span', null, btns)
|
||||
}
|
||||
|
||||
@@ -1,13 +1,25 @@
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-02-09 10:17:22
|
||||
-->
|
||||
<template>
|
||||
<!-- 数字代表多级表头最小列宽 -->
|
||||
<!-- :width="opt.width || null" -->
|
||||
<!-- :width="flexColumnWidth(opt.prop || null)" -->
|
||||
<!-- header-align="center" align="center" -->
|
||||
<!-- :min-width="opt.minWidth || null" -->
|
||||
<el-table-column
|
||||
:label="opt.label ? opt.label : opt.name"
|
||||
:prop="opt.prop || null"
|
||||
:width="opt.width || null"
|
||||
:min-width="opt.minWidth || null"
|
||||
:min-width="[$route.fullPath == '/monitoring-realtimeQualityInspection' ? 170 : (opt.minWidth || null)]"
|
||||
:fixed="opt.fixed || null"
|
||||
:show-overflow-tooltip="opt.showOverflowTooltip || false"
|
||||
filter-placement="top"
|
||||
:align="opt.align || null"
|
||||
:align="opt.align || 'center'"
|
||||
v-bind="opt.more"
|
||||
>
|
||||
<template v-if="opt.prop" slot-scope="scope">
|
||||
@@ -35,6 +47,33 @@ export default {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 自定义表头列宽
|
||||
flexColumnWidth(str) {
|
||||
let flexWidth = 0
|
||||
for (const char of str) {
|
||||
if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z')) {
|
||||
// 如果是英文字符,为字符分配8个单位宽度
|
||||
flexWidth += 8
|
||||
} else if (char >= '\u4e00' && char <= '\u9fa5') {
|
||||
// 如果是中文字符,为字符分配20个单位宽度
|
||||
flexWidth += 20
|
||||
} else {
|
||||
// 其他种类字符,为字符分配5个单位宽度
|
||||
flexWidth += 5
|
||||
}
|
||||
}
|
||||
// if (flexWidth < 50) {
|
||||
// // 设置最小宽度
|
||||
// flexWidth = 50
|
||||
// }
|
||||
if (flexWidth > 250) {
|
||||
// 设置最大宽度
|
||||
flexWidth = 250
|
||||
}
|
||||
return flexWidth + 'px'
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,16 +1,42 @@
|
||||
<template>
|
||||
<div class="base-table">
|
||||
<!-- 花式新增按钮 -->
|
||||
<div class="setting">
|
||||
<template v-if="topBtnConfig.length > 0">
|
||||
<!-- table顶部操作按钮区 -->
|
||||
<div class="action_btn">
|
||||
<template v-for="(btn, index) in topBtnConfig">
|
||||
<span v-if="btn.type === 'add'" :key="index" style="display: inline-block" @click="clickTopButton(btn.type)">
|
||||
<svg-icon style="width: 14px; height: 14px" class="iconPlus" icon-class="addPage" />
|
||||
<span class="add">{{ $t('add') }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 设置小齿轮table列的图标 -->
|
||||
<el-popover placement="bottom-start" width="200" trigger="click">
|
||||
<div class="setting-box">
|
||||
<!-- :label="item.name ? item.name : item.label" 三元判别就可以让厂务的实时数据可以显示 -->
|
||||
<el-checkbox v-for="(item, index) in tableHeadConfigs" :key="'cb' + index" v-model="selectedBox[index]" :label="item.name ? item.name : item.label" />
|
||||
</div>
|
||||
<i slot="reference" class="el-icon-s-tools" style="color: #0b58ff" />
|
||||
</el-popover>
|
||||
</div>
|
||||
<!-- border 属性增加边框:header-cell-style="{background:'#FAFAFA',color:'#606266',height: '40px'}" -->
|
||||
<!-- <el-table :data="data" -->
|
||||
<el-table
|
||||
:data="data"
|
||||
:data="renderData"
|
||||
style="width: 100%"
|
||||
fit
|
||||
border
|
||||
:header-cell-style="{ background: '#FAFAFA', color: '#606266', height: '40px' }"
|
||||
highlight-current-row
|
||||
:header-cell-style="{ background: '#FAFAFA', color: '#000', height: '40px' }"
|
||||
:max-height="maxHeight"
|
||||
:span-method="spanMethod || null"
|
||||
>
|
||||
:row-style="{ height: '40px' }"
|
||||
:cell-style="{ padding: '0px' }">
|
||||
<!-- 表格头定义 -->
|
||||
<template v-for="(head, idx) in tableHeadConfigs">
|
||||
<!-- in tableHeadConfigs -->
|
||||
<template v-for="(head, idx) in renderTableHeadList">
|
||||
<!-- 带type的表头 -->
|
||||
<el-table-column
|
||||
:key="idx"
|
||||
@@ -20,12 +46,17 @@
|
||||
:header-align="head.align || 'center'"
|
||||
:align="head.align || 'center'"
|
||||
:width="head.width || 50"
|
||||
:index="head.type === 'index' ? val => {
|
||||
:index="
|
||||
head.type === 'index'
|
||||
? (val) => {
|
||||
return val + 1 + (page - 1) * size
|
||||
} : null"
|
||||
v-bind="head.more"
|
||||
></el-table-column>
|
||||
}
|
||||
: null
|
||||
"
|
||||
v-bind="head.more"></el-table-column>
|
||||
<!-- 普通的表头 -->
|
||||
<!-- :align="head.align || null" 表头居中 -->
|
||||
<!-- :min-width="head.minWidth || null" -->
|
||||
<el-table-column
|
||||
v-else
|
||||
:key="idx + 'else'"
|
||||
@@ -37,10 +68,9 @@
|
||||
:show-overflow-tooltip="head.showOverflowTooltip || true"
|
||||
:tooltip-effect="head.tooltipEffect || 'light'"
|
||||
filter-placement="top"
|
||||
:align="head.align || null"
|
||||
v-bind="head.more"
|
||||
>
|
||||
<!-- 子组件 -->
|
||||
:align="head.align || 'center'"
|
||||
v-bind="head.more">
|
||||
<!-- 子组件 编辑/删除 -->
|
||||
<template v-if="head.prop" slot-scope="scope">
|
||||
<component v-if="head.subcomponent" :is="head.subcomponent" :key="idx + 'sub'" :inject-data="{ ...scope.row, head }" @emit-data="handleSubEmitData" />
|
||||
<!-- 直接展示数据或应用过滤器 -->
|
||||
@@ -49,7 +79,7 @@
|
||||
|
||||
<!-- 多级表头 -->
|
||||
<template v-if="!head.prop && head.children">
|
||||
<TableHead v-for="(subhead, subindex) in head.children" :key="'subhead-' + idx + '-subindex-' + subindex" :opt="subhead" />
|
||||
<TableHead v-for="(subhead, subindex) in head.children" :key="'subhead-' + idx + '-subindex-' + subindex" :opt="subhead"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
@@ -58,13 +88,21 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { isObject, isString } from 'lodash'
|
||||
import TableHead from './components/table-head.vue'
|
||||
export default {
|
||||
name: 'BaseTable',
|
||||
filters: {
|
||||
commonFilter: (source, filterType = (a) => a) => {
|
||||
return filterType(source)
|
||||
}
|
||||
},
|
||||
props: {
|
||||
tableHeadConfigs: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
// required: true,
|
||||
// validator: val => val.filter(item => !isString(item.prop) || !isString(item.name)).length === 0
|
||||
},
|
||||
data: {
|
||||
type: Array,
|
||||
@@ -72,7 +110,10 @@ export default {
|
||||
},
|
||||
maxHeight: {
|
||||
type: Number,
|
||||
default: 500
|
||||
// default: window.innerHeight - 325
|
||||
// el-table高度
|
||||
default: window.innerHeight - 100
|
||||
// default: 500
|
||||
},
|
||||
spanMethod: {
|
||||
type: Function,
|
||||
@@ -88,21 +129,92 @@ export default {
|
||||
size: {
|
||||
type: Number,
|
||||
default: 10
|
||||
},
|
||||
// 新增的props
|
||||
// tableConfig: {
|
||||
// type: Array,
|
||||
// required: true,
|
||||
// validator: (val) => val.filter((item) => !isString(item.prop) || !isString(item.label)).length === 0
|
||||
// },
|
||||
topBtnConfig: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
commonFilter: (source, filterType = a => a) => {
|
||||
commonFilter: (source, filterType = (a) => a) => {
|
||||
return filterType(source)
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
return {
|
||||
selectedBox: new Array(100).fill(true)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
renderData() {
|
||||
return this.data.map((item, index) => {
|
||||
return {
|
||||
...item,
|
||||
_pageIndex: (this.page - 1) * this.limit + index + 1
|
||||
}
|
||||
})
|
||||
},
|
||||
renderTableHeadList() {
|
||||
return this.tableHeadConfigs.filter((item, index) => {
|
||||
return this.selectedBox[index]
|
||||
})
|
||||
}
|
||||
},
|
||||
beforeMount() {
|
||||
this.selectedBox = new Array(100).fill(true)
|
||||
if (this.highIndex) {
|
||||
this.tableRowIndex = 0
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// console.log(this.selectedBox)
|
||||
// console.log(this.tableHeadConfigs)
|
||||
},
|
||||
methods: {
|
||||
handleSubEmitData(payload) {
|
||||
this.$emit('operate-event', payload)
|
||||
},
|
||||
clickTopButton(val) {
|
||||
this.$emit('clickTopBtn', val)
|
||||
}
|
||||
},
|
||||
components: { TableHead }
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.setting {
|
||||
text-align: right;
|
||||
padding: 0px 15px 7px;
|
||||
.action_btn {
|
||||
display: inline-block;
|
||||
margin-right: 15px;
|
||||
font-size: 14px;
|
||||
.add {
|
||||
color: #0b58ff;
|
||||
}
|
||||
}
|
||||
.setting-box {
|
||||
width: 100px;
|
||||
}
|
||||
i {
|
||||
color: #aaa;
|
||||
}
|
||||
}
|
||||
.el-table .success-row {
|
||||
background: #eaf1fc;
|
||||
}
|
||||
.iconPlus {
|
||||
color: #0b58ff;
|
||||
margin-right: 2px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<!--
|
||||
* @Author: lb
|
||||
* @Date: 2022-05-18 16:00:00
|
||||
* @LastEditors: lb
|
||||
* @LastEditTime: 2022-05-18 16:00:00
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-03 10:00:06
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@@ -53,11 +53,11 @@ $mgr: 6px;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
width: 4px;
|
||||
height: $height + 2px;
|
||||
height: $height;
|
||||
border-radius: 1px;
|
||||
margin-right: $mgr;
|
||||
// background-color: #0b58ff;
|
||||
background-color: #409EFF;
|
||||
// background-color: #0b58ff;#409EFF;
|
||||
background-color: #0b58ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ $--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
|
||||
-------------------------- */
|
||||
/// color|1|Brand Color|0
|
||||
// $--color-primary: #409EFF !default;
|
||||
// 左上标题背景颜色
|
||||
$--color-primary: #001529 !default;
|
||||
/// color|1|Background Color|4
|
||||
$--color-white: #FFFFFF !default;
|
||||
@@ -51,6 +52,7 @@ $--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
|
||||
$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
|
||||
/// color|1|Font Color|2
|
||||
$--color-text-primary: #303133 !default;
|
||||
$--color-text-home: #fff !default;
|
||||
/// color|1|Font Color|2
|
||||
$--color-text-regular: #606266 !default;
|
||||
/// color|1|Font Color|2
|
||||
|
||||
222
src/i18n/en.js
@@ -4,8 +4,9 @@ t.loading = 'Loading...'
|
||||
t.createTime = 'Create Time'
|
||||
|
||||
t.brand = {}
|
||||
t.brand.lg = 'Deep Processing SCADA Platform'
|
||||
t.brand.lg = 'SCADA Platform'
|
||||
t.brand.mini = 'SCADA'
|
||||
t.brand.home = 'Home'
|
||||
|
||||
t.routes = {}
|
||||
t.routes['产品池'] = 'Products Pool'
|
||||
@@ -24,16 +25,19 @@ t.routes['厂务'] = 'Factory Affair'
|
||||
t.routes['设备'] = 'Equipment'
|
||||
t.routes['字典管理'] = 'Dict Management'
|
||||
t.routes['PLC信息'] = 'PLC'
|
||||
t.routes['设备与PLC关联配置'] = 'Relations between plc & equipments'
|
||||
t.routes['设备生产实时数据'] = 'Realtime Equipment Data'
|
||||
t.routes['产线生产实时数据'] = 'Realtime Productline Data'
|
||||
t.routes['质量检查实时数据'] = 'Realtime Quality Inspection Data'
|
||||
// Relations between
|
||||
t.routes['设备与PLC关联配置'] = 'PLC & Equipments'
|
||||
t.routes['下片监测'] = 'Unload Log'
|
||||
t.routes['近24小时设备生产数据'] = 'Equipment Data'
|
||||
t.routes['近24小时产线生产数据'] = 'Productline Data'
|
||||
t.routes['近24小时质量检查数据'] = 'Quality Inspection Data'
|
||||
t.routes['报表总览'] = 'Report Overview'
|
||||
t.routes['报表分类'] = 'Report Types'
|
||||
t.routes['报表详情'] = 'Report Detail'
|
||||
t.routes['报表设计'] = 'Report Design'
|
||||
t.routes['报表预览'] = 'Report Preview'
|
||||
t.routes['质量检测基础数据'] = 'Quality Inspection Basic Data'
|
||||
// Quality
|
||||
t.routes['质量检测基础数据'] = 'Inspection Basic Data'
|
||||
t.routes['当前检测数据'] = 'Current Inspection Data'
|
||||
t.routes['检测统计数据'] = 'Statistics Data'
|
||||
t.routes['质量检查信息记录'] = 'Quality Inspection Records'
|
||||
@@ -45,10 +49,14 @@ t.routes['参数管理'] = 'Params Management'
|
||||
t.routes['定时任务'] = 'Timed Tasks'
|
||||
t.routes['文件上传'] = 'File Upload'
|
||||
t.routes['登录日志'] = 'Login Records'
|
||||
t.routes['操作日志'] = 'Oprations Records'
|
||||
t.routes['设备效率分析'] = 'Equipment Efficiency Analysis'
|
||||
t.routes['设备异常分析'] = 'Equipment Exceptions Analysis'
|
||||
t.routes['设备状态时序图'] = 'Equipment Status Timesequence'
|
||||
t.routes['操作日志'] = 'Operations Records'
|
||||
t.routes['设备效率分析'] = 'EQU Efficiency Analysis'
|
||||
t.routes['设备异常分析'] = 'EQU Exceptions Analysis'
|
||||
t.routes['设备状态时序图'] = 'EQU Status Timeseq'
|
||||
t.routes['产品质量分析'] = 'Product Quality Analysis'
|
||||
t.routes['产量分析'] = 'Product Analysis'
|
||||
t.routes['生产节拍时序图'] = 'Product Beat Timeseq'
|
||||
t.routes['设备产量时序图'] = 'EQU Product Timeseq'
|
||||
|
||||
// 三级
|
||||
t.routes['工厂'] = 'Factory'
|
||||
@@ -60,6 +68,7 @@ t.routes['设备信息'] = 'Equipment Details'
|
||||
t.routes['设备参数状态监控'] = 'Current Equipment State'
|
||||
t.routes['设备分组报警信息'] = 'Equipment Group Alarm'
|
||||
t.routes['设备历史参数'] = 'Equipment Historical Parameters'
|
||||
t.routes['下片详情'] = 'Unload Detail'
|
||||
t.routes['质量检测类型'] = 'Quality Inpection Types'
|
||||
t.routes['质量检测信息'] = 'Quality Inpection Details'
|
||||
t.routes['安灯检测盒'] = 'Andeng inspection box'
|
||||
@@ -71,6 +80,7 @@ t.andeng.btnVal = 'Button Value'
|
||||
t.andeng.btnBoxModel = 'Button Box Model'
|
||||
|
||||
|
||||
t.copyright = 'VISHAKHA glass pvt Ltd'
|
||||
t.dictValueList = 'View Details'
|
||||
t.save = 'Save'
|
||||
t.add = 'Add'
|
||||
@@ -101,12 +111,12 @@ t.updatorName = 'Updator\'s name'
|
||||
t.updateTime = 'Update Time'
|
||||
t.version = 'Version'
|
||||
t.search = 'Search'
|
||||
t.countPerPage = '每页数' // ?
|
||||
t.currentPage = '当前页' // ?
|
||||
t.fetchList = '获取数据列表' // ?
|
||||
t.multi = '多选' // ?
|
||||
t.do = '进行' // ?
|
||||
t.submit = '表单提交' // ?
|
||||
t.countPerPage = 'Per Page' // ?
|
||||
t.currentPage = 'Current Page' // ?
|
||||
t.fetchList = 'Fetch Data List' // ?
|
||||
t.multi = 'Multiple Selection' // ?
|
||||
t.do = 'Proceed' // ?
|
||||
t.submit = 'Submit' // ?
|
||||
t.desc = 'Description'
|
||||
t.disable = 'Disable'
|
||||
t.equipment = 'Equipment'
|
||||
@@ -115,7 +125,7 @@ t.cannotempty = 'can\'t be empty'
|
||||
t.parameter = 'Parameters'
|
||||
t.enable = 'Enable'
|
||||
t.index = 'Index'
|
||||
t.relation = '关联'
|
||||
t.relation = 'Relation'
|
||||
t.fetchInfo = 'Fetch Info'
|
||||
t.name = 'Name'
|
||||
t.code = 'Code'
|
||||
@@ -136,11 +146,30 @@ t.min = 'Min Value'
|
||||
t.max = 'Max Value'
|
||||
t.status = 'Status'
|
||||
t.normal = 'Normal'
|
||||
t.shutdown = 'Shut Down'
|
||||
t.malfunction = 'Malfunction' // ?
|
||||
t.stop = 'Stop'
|
||||
t.run = 'Run'
|
||||
t.unknown = 'Unknown'
|
||||
t.buttonId = 'Button Number'
|
||||
t.boxNo = 'Box Number'
|
||||
t.diagram = 'Device Status Sequence Diagram'
|
||||
t.diagram2 = 'Device Product Sequence Diagram'
|
||||
t.addr = 'Address'
|
||||
t.planStop = 'Plan to stop'
|
||||
t.startTime = 'Start Time'
|
||||
t.endTime = 'End Time'
|
||||
t.today = 'Today'
|
||||
t.time = 'Time'
|
||||
t.eqId = 'Current Equipment ID:'
|
||||
t.ti = 'Time'
|
||||
t.plcCode = 'PLC Code'
|
||||
t.equName = 'Equipment Name'
|
||||
t.equCode = 'Equipment Code'
|
||||
t.yAxisTime = 'Time (h)'
|
||||
t.yAxisRate = 'Percentage (%)'
|
||||
t.hourTime = '(h)'
|
||||
|
||||
|
||||
t.graph = 'Graph'
|
||||
t.category = 'Category'
|
||||
@@ -170,6 +199,12 @@ t.timetype = 'Time Type'
|
||||
t.reftimerange = 'By time range'
|
||||
t.refdate = 'By date'
|
||||
t.hour = 'Hour(s)'
|
||||
t.yes = 'yes'
|
||||
t.no = 'no'
|
||||
t.LoginRecords = ' Login Records'
|
||||
t.operationsRecords = ' Operations Records'
|
||||
t.allIcons= 'All Icons'
|
||||
t.err= 'Error'
|
||||
|
||||
t.errors = {}
|
||||
t.errors.nosection = 'There is no sections on this product line.'
|
||||
@@ -254,15 +289,15 @@ t.inspect.typeCount = 'Data of inspection types'
|
||||
|
||||
|
||||
t.realtime = {}
|
||||
t.realtime.eq = 'Realtime data of equipments'
|
||||
t.realtime.pl = 'Realtime data of product lines'
|
||||
t.realtime.inspect = 'Realtime data of quality inspections'
|
||||
t.realtime.eq = 'Realtime data of equipments(24h)'
|
||||
t.realtime.pl = 'Realtime data of productlines(24h)'
|
||||
t.realtime.inspect = 'Realtime data of quality inspections(24h)'
|
||||
t.realtime.in = 'in'
|
||||
t.realtime.out = 'out'
|
||||
t.realtime.data = 'scrap'
|
||||
t.realtime.num = 'scrap quantity'
|
||||
t.realtime.rate = 'scrap rate'
|
||||
t.realtime.total = 'total production'
|
||||
t.realtime.total = 'Equipment total production'
|
||||
t.realtime.goodrate = 'Passed Rate'
|
||||
t.realtime.runState = 'running state'
|
||||
t.realtime.state = 'status'
|
||||
@@ -361,18 +396,46 @@ t.eq.month = 'month'
|
||||
t.eq.realyield = 'Actual processing speed'
|
||||
t.eq.designyield = 'Theoretical processing speed'
|
||||
t.eq.viewtrend = 'View Trends'
|
||||
t.eq.productQuality = 'Product Quality Analysis'
|
||||
t.eq.productionAnalysis = 'Production Analysis'
|
||||
t.eq.productQuantity = 'Product Quantity'
|
||||
t.eq.line1= 'Line 1'
|
||||
t.eq.line2= 'Line 2'
|
||||
t.eq.line3= 'Line 3'
|
||||
t.eq.line4= 'Line 4'
|
||||
|
||||
|
||||
t.eq.sectionName = 'Section Name'
|
||||
t.eq.equipmentName = 'Equipment Name'
|
||||
t.eq.okNum = 'Qualified Quantity'
|
||||
t.eq.nokNum = 'Unqualified Quantity'
|
||||
t.eq.passRate = 'Qualified Rate'
|
||||
t.eq.passRatePercent = 'Qualified Rate(%)'
|
||||
|
||||
t.pl = {}
|
||||
t.pl.title = 'Product Line'
|
||||
t.pl.id = 'Product Line ID'
|
||||
t.pl.name = 'Product Line Name'
|
||||
t.pl.sum = 'Sum'
|
||||
t.pl.code = 'Product Line Code'
|
||||
t.pl.status = 'Product Line Status'
|
||||
t.pl.belong = 'Product Line'
|
||||
t.pl.tvalue = 'TT Value'
|
||||
t.pl.factoryHints = 'Please select a factory'
|
||||
t.pl.process = 'Working procedure'
|
||||
t.pl.add = 'Add Euipment'
|
||||
t.pl.add2 = 'Add Comparison Euipment'
|
||||
t.pl.queryFirst = 'Please Query First'
|
||||
t.pl.choose = 'Please select equipment'
|
||||
t.pl.confirm = 'Confirm'
|
||||
t.pl.cancel = 'Cancel'
|
||||
t.pl.success = 'The new device data is obtained successfully'
|
||||
t.pl.paperLaying = 'Paper Laying Machine Number'
|
||||
t.pl.robotNo = 'Robot Number'
|
||||
t.pl.glassNumber = 'Pallet Glass Number'
|
||||
t.pl.glassLength = 'Glass Length'
|
||||
t.pl.glassWidth = 'Glass Width'
|
||||
t.pl.thick = 'Glass Thcikness'
|
||||
t.pl.quantity = 'Pallet Quantity'
|
||||
|
||||
|
||||
t.prompt = {}
|
||||
@@ -387,10 +450,12 @@ t.prompt.month = 'Please choose month'
|
||||
t.validate = {}
|
||||
t.validate.required = 'This is required.'
|
||||
t.validate.format = '{attr} has a wrong format.'
|
||||
t.validate.keyValueWarning = 'The value must be an integer between 0 and 100!'
|
||||
t.validate.requiredRole = 'Choose at least one role'
|
||||
|
||||
t.upload = {}
|
||||
t.upload.title = 'Upload Assets'
|
||||
t.upload.text = '将文件拖到此处,或<em>点击上传</em>'
|
||||
t.upload.text = 'Drag the file here, or <em> click Upload </em>'
|
||||
t.upload.tip = 'Only support files with format: {format}'
|
||||
t.upload.button = 'upload'
|
||||
|
||||
@@ -430,7 +495,8 @@ t.login.username = 'Username'
|
||||
t.login.password = 'Password'
|
||||
t.login.captcha = 'Captcha'
|
||||
t.login.demo = 'Demo'
|
||||
t.login.copyright = 'Copyright @Intelligent Automation Research Institute Co., Ltd Version: 1.0'
|
||||
// t.login.copyright = 'Copyright @Intelligent Automation Research Institute Co., Ltd Version: 1.0'
|
||||
t.login.copyright = 'Copyright @VISHAKHA glass pvt Ltd Version: 1.0'
|
||||
t.login.warning = 'Already Login!'
|
||||
|
||||
t.schedule = {}
|
||||
@@ -457,60 +523,60 @@ t.schedule.times = 'Time Cost (ms)'
|
||||
t.schedule.createDate = 'Executed Tune' // ?
|
||||
|
||||
t.oss = {}
|
||||
t.oss.config = '云存储配置'
|
||||
t.oss.upload = '上传文件'
|
||||
t.oss.url = 'URL地址'
|
||||
t.oss.config = 'Cloud storage configuration'
|
||||
t.oss.upload = 'upload'
|
||||
t.oss.url = 'url'
|
||||
t.oss.createDate = 'Create Time'
|
||||
t.oss.type = '类型'
|
||||
t.oss.type1 = '七牛'
|
||||
t.oss.type2 = '阿里云'
|
||||
t.oss.type3 = '腾讯云'
|
||||
t.oss.qiniuDomain = '域名'
|
||||
t.oss.qiniuDomainTips = '七牛绑定的域名'
|
||||
t.oss.qiniuPrefix = '路径前缀'
|
||||
t.oss.qiniuPrefixTips = '不设置默认为空'
|
||||
t.oss.type = 'type'
|
||||
t.oss.type1 = 'Qiniu'
|
||||
t.oss.type2 = 'Aliyun'
|
||||
t.oss.type3 = 'Tencent Cloud'
|
||||
t.oss.qiniuDomain = 'Domain name'
|
||||
t.oss.qiniuDomainTips = 'Bound domain name'
|
||||
t.oss.qiniuPrefix = 'Prefix'
|
||||
t.oss.qiniuPrefixTips = 'If no, the default value is null'
|
||||
t.oss.qiniuAccessKey = 'AccessKey'
|
||||
t.oss.qiniuAccessKeyTips = '七牛AccessKey'
|
||||
t.oss.qiniuAccessKeyTips = 'Qiniu AccessKey'
|
||||
t.oss.qiniuSecretKey = 'SecretKey'
|
||||
t.oss.qiniuSecretKeyTips = '七牛SecretKey'
|
||||
t.oss.qiniuBucketName = '空间名'
|
||||
t.oss.qiniuBucketNameTips = '七牛存储空间名'
|
||||
t.oss.aliyunDomain = '域名'
|
||||
t.oss.aliyunDomainTips = '阿里云绑定的域名,如:http://cdn.renren.io'
|
||||
t.oss.aliyunPrefix = '路径前缀'
|
||||
t.oss.aliyunPrefixTips = '不设置默认为空'
|
||||
t.oss.qiniuSecretKeyTips = 'Qiniu SecretKey'
|
||||
t.oss.qiniuBucketName = 'BucketName'
|
||||
t.oss.qiniuBucketNameTips = 'Qiniu BucketName'
|
||||
t.oss.aliyunDomain = 'Domain'
|
||||
t.oss.aliyunDomainTips = 'Domain name bound to Ali Cloud, such as:http://cdn.renren.io'
|
||||
t.oss.aliyunPrefix = 'Prefix'
|
||||
t.oss.aliyunPrefixTips = 'If no, the default value is null'
|
||||
t.oss.aliyunEndPoint = 'EndPoint'
|
||||
t.oss.aliyunEndPointTips = '阿里云EndPoint'
|
||||
t.oss.aliyunEndPointTips = 'Aliyun EndPoint'
|
||||
t.oss.aliyunAccessKeyId = 'AccessKeyId'
|
||||
t.oss.aliyunAccessKeyIdTips = '阿里云AccessKeyId'
|
||||
t.oss.aliyunAccessKeyIdTips = 'Aliyun AccessKeyId'
|
||||
t.oss.aliyunAccessKeySecret = 'AccessKeySecret'
|
||||
t.oss.aliyunAccessKeySecretTips = '阿里云AccessKeySecret'
|
||||
t.oss.aliyunAccessKeySecretTips = 'Aliyun AccessKeySecret'
|
||||
t.oss.aliyunBucketName = 'BucketName'
|
||||
t.oss.aliyunBucketNameTips = '阿里云BucketName'
|
||||
t.oss.qcloudDomain = '域名'
|
||||
t.oss.qcloudDomainTips = '腾讯云绑定的域名'
|
||||
t.oss.qcloudPrefix = '路径前缀'
|
||||
t.oss.qcloudPrefixTips = '不设置默认为空'
|
||||
t.oss.aliyunBucketNameTips = 'Aliyun BucketName'
|
||||
t.oss.qcloudDomain = 'Domain'
|
||||
t.oss.qcloudDomainTips = 'Tencent Cloud Domains'
|
||||
t.oss.qcloudPrefix = 'Prefix'
|
||||
t.oss.qcloudPrefixTips = 'If no, the default value is null'
|
||||
t.oss.qcloudAppId = 'AppId'
|
||||
t.oss.qcloudAppIdTips = '腾讯云AppId'
|
||||
t.oss.qcloudAppIdTips = 'Tencent Cloud AppId'
|
||||
t.oss.qcloudSecretId = 'SecretId'
|
||||
t.oss.qcloudSecretIdTips = '腾讯云SecretId'
|
||||
t.oss.qcloudSecretIdTips = 'Tencent Cloud SecretId'
|
||||
t.oss.qcloudSecretKey = 'SecretKey'
|
||||
t.oss.qcloudSecretKeyTips = '腾讯云SecretKey'
|
||||
t.oss.qcloudSecretKeyTips = 'Tencent Cloud SecretKey'
|
||||
t.oss.qcloudBucketName = 'BucketName'
|
||||
t.oss.qcloudBucketNameTips = '腾讯云BucketName'
|
||||
t.oss.qcloudRegion = '所属地区'
|
||||
t.oss.qcloudRegionTips = '请选择'
|
||||
t.oss.qcloudRegionBeijing1 = '北京一区(华北)'
|
||||
t.oss.qcloudRegionBeijing = '北京'
|
||||
t.oss.qcloudRegionShanghai = '上海(华东)'
|
||||
t.oss.qcloudRegionGuangzhou = '广州(华南)'
|
||||
t.oss.qcloudRegionChengdu = '成都(西南)'
|
||||
t.oss.qcloudRegionChongqing = '重庆'
|
||||
t.oss.qcloudRegionSingapore = '新加坡'
|
||||
t.oss.qcloudRegionHongkong = '香港'
|
||||
t.oss.qcloudRegionToronto = '多伦多'
|
||||
t.oss.qcloudRegionFrankfurt = '法兰克福'
|
||||
t.oss.qcloudBucketNameTips = 'Tencent Cloud BucketName'
|
||||
t.oss.qcloudRegion = 'Region'
|
||||
t.oss.qcloudRegionTips = 'Select'
|
||||
t.oss.qcloudRegionBeijing1 = 'Beijing District 1 (North China)'
|
||||
t.oss.qcloudRegionBeijing = 'Beijing'
|
||||
t.oss.qcloudRegionShanghai = 'Shanghai (East China)'
|
||||
t.oss.qcloudRegionGuangzhou = 'Guangzhou (South China)'
|
||||
t.oss.qcloudRegionChengdu = 'Chengdu (Southwest)'
|
||||
t.oss.qcloudRegionChongqing = 'Chongqing'
|
||||
t.oss.qcloudRegionSingapore = 'Singapore'
|
||||
t.oss.qcloudRegionHongkong = 'Hong Kong'
|
||||
t.oss.qcloudRegionToronto = 'Toronto'
|
||||
t.oss.qcloudRegionFrankfurt = 'Frankfurt'
|
||||
|
||||
t.dept = {}
|
||||
t.dept.name = 'Department Name'
|
||||
@@ -530,7 +596,7 @@ t.dict.remark = 'Remark'
|
||||
t.dict.createDate = 'Create Time'
|
||||
|
||||
t.logError = {}
|
||||
t.logError.requestUri = 'Request URI'
|
||||
t.logError.requestUri = 'Request URL'
|
||||
t.logError.requestMethod = 'Request Method'
|
||||
t.logError.requestParams = 'Request Parameters'
|
||||
t.logError.ip = 'IP'
|
||||
@@ -557,7 +623,7 @@ t.logOperation.status0 = 'Failed'
|
||||
t.logOperation.status1 = 'Success'
|
||||
t.logOperation.creatorName = 'User Name'
|
||||
t.logOperation.operation = 'User Operations'
|
||||
t.logOperation.requestUri = 'Request URI'
|
||||
t.logOperation.requestUri = 'Request URL'
|
||||
t.logOperation.requestMethod = 'Request Method'
|
||||
t.logOperation.requestParams = 'Request Parameters'
|
||||
t.logOperation.requestTime = 'Request Duration'
|
||||
@@ -566,21 +632,22 @@ t.logOperation.userAgent = 'User-Agent'
|
||||
t.logOperation.createDate = 'Create Time'
|
||||
|
||||
t.menu = {}
|
||||
t.menu.name = 'Name'
|
||||
t.menu.name = 'Chinese Name'
|
||||
t.menu.nameEn = 'Name'
|
||||
t.menu.icon = 'Icons'
|
||||
t.menu.type = 'Type'
|
||||
t.menu.type0 = 'Menu'
|
||||
t.menu.type1 = 'Button'
|
||||
t.menu.sort = 'Sort'
|
||||
t.menu.url = 'Route'
|
||||
t.menu.permissions = '授权标识'
|
||||
t.menu.permissionsTips = '多个用逗号分隔,如:sys:menu:save,sys:menu:update'
|
||||
t.menu.parentName = '上级菜单'
|
||||
t.menu.permissions = 'Authorization Identifier'
|
||||
t.menu.permissionsTips = 'Multiple are separated by commas, such as:sys:menu:save,sys:menu:update'
|
||||
t.menu.parentName = 'Superior menu'
|
||||
t.menu.parentNameDefault = 'First tier menu'
|
||||
t.menu.resource = '授权资源'
|
||||
t.menu.resourceUrl = '资源URL'
|
||||
t.menu.resource = 'Authorized Resource'
|
||||
t.menu.resourceUrl = 'Resource URL'
|
||||
t.menu.resourceMethod = 'Request methods'
|
||||
t.menu.resourceAddItem = '添加一项'
|
||||
t.menu.resourceAddItem = 'Add Item'
|
||||
|
||||
t.params = {}
|
||||
t.params.name = 'Parameter Name'
|
||||
@@ -589,7 +656,7 @@ t.params.paramCode = 'Parameter Code'
|
||||
t.params.paramValue = 'Parameter Value'
|
||||
t.params.paramStdValue = 'Standard Parameter Code'
|
||||
t.params.plctitle = 'PLC Collection Parameters'
|
||||
t.params.plcid = 'PLC连接表ID'
|
||||
t.params.plcid = 'PLC ID'
|
||||
t.params.remark = 'Remark'
|
||||
|
||||
t.role = {}
|
||||
@@ -620,5 +687,6 @@ t.user.validate = {}
|
||||
t.user.validate.confirmPassword = 'The two passwords are different. Please check again.'
|
||||
t.user.select = 'Select an user'
|
||||
t.user.selecterror = 'Pick up a record'
|
||||
t.user.userTable = ' User Table'
|
||||
|
||||
export default t
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-12 11:19:00
|
||||
*/
|
||||
import Vue from 'vue'
|
||||
import VueI18n from 'vue-i18n'
|
||||
import Cookies from 'js-cookie'
|
||||
@@ -41,7 +49,10 @@ export function getLanguage() {
|
||||
}
|
||||
|
||||
export default new VueI18n({
|
||||
// locale: Cookies.get('language') || 'zh-CN',
|
||||
// 默认语言
|
||||
locale: Cookies.get('language') || 'en',
|
||||
locale: getLanguage(), // 先默认中文
|
||||
messages
|
||||
messages,
|
||||
//抑制警告
|
||||
silentFallbackWarn: true,
|
||||
})
|
||||
|
||||
@@ -6,6 +6,7 @@ t.createTime = '添加时间'
|
||||
t.brand = {}
|
||||
t.brand.lg = '深加工SCADA平台'
|
||||
t.brand.mini = 'SCADA'
|
||||
t.brand.home = '首页'
|
||||
|
||||
t.routes = {}
|
||||
// 一级
|
||||
@@ -26,9 +27,10 @@ t.routes['设备'] = '设备'
|
||||
t.routes['字典管理'] = '字典管理'
|
||||
t.routes['PLC信息'] = 'PLC信息'
|
||||
t.routes['设备与PLC关联配置'] = '设备与PLC关联配置' // ?
|
||||
t.routes['设备生产实时数据'] = '设备生产实时数据'
|
||||
t.routes['产线生产实时数据'] = '产线生产实时数据'
|
||||
t.routes['质量检查实时数据'] = '质量检查实时数据'
|
||||
t.routes['下片监测'] = '下片监测'
|
||||
t.routes['近24小时设备生产数据'] = '近24小时设备生产数据'
|
||||
t.routes['近24小时产线生产数据'] = '近24小时产线生产数据'
|
||||
t.routes['近24小时质量检查数据'] = '近24小时质量检查数据'
|
||||
t.routes['报表总览'] = '报表总览'
|
||||
t.routes['报表分类'] = '报表分类'
|
||||
t.routes['报表详情'] = '报表详情'
|
||||
@@ -50,6 +52,11 @@ t.routes['操作日志'] = '操作日志'
|
||||
t.routes['设备效率分析'] = '设备效率分析'
|
||||
t.routes['设备异常分析'] = '设备异常分析'
|
||||
t.routes['设备状态时序图'] = '设备状态时序图'
|
||||
t.routes['产品质量分析'] = '产品质量分析'
|
||||
t.routes['产量分析'] = '产量分析'
|
||||
t.routes['生产节拍时序图'] = '生产节拍时序图'
|
||||
t.routes['设备产量时序图'] = '设备产量时序图'
|
||||
|
||||
|
||||
// 三级
|
||||
t.routes['工厂'] = '工厂'
|
||||
@@ -61,6 +68,7 @@ t.routes['设备信息'] = '设备信息'
|
||||
t.routes['设备参数状态监控'] = '设备参数状态监控'
|
||||
t.routes['设备分组报警信息'] = '设备分组报警信息'
|
||||
t.routes['设备历史参数'] = '设备历史参数'
|
||||
t.routes['下片详情'] = '下片详情'
|
||||
t.routes['质量检测类型'] = '质量检测类型'
|
||||
t.routes['质量检测信息'] = '质量检测信息'
|
||||
t.routes['安灯检测盒'] = '安灯检测盒'
|
||||
@@ -71,6 +79,7 @@ t.andeng.btnVal = '按钮值'
|
||||
t.andeng.btnBoxModel = '按钮盒模式'
|
||||
|
||||
|
||||
t.copyright = 'VISHAKHA glass pvt Ltd'
|
||||
t.dictValueList = '查看值列表'
|
||||
t.save = '保存'
|
||||
t.add = '新增' // 1
|
||||
@@ -136,12 +145,31 @@ t.min = '最小值' // 1
|
||||
t.max = '最大值' // 1
|
||||
t.status = '状态' // 1
|
||||
t.normal = '正常' // ?
|
||||
t.shutdown = '停机' // ?
|
||||
t.malfunction = '故障' // ?
|
||||
t.stop = '停止'
|
||||
t.run = '运行'
|
||||
t.unknown = '未知'
|
||||
t.buttonId = '网关号'
|
||||
t.boxNo = '盒子编号'
|
||||
t.diagram = '设备状态时序图'
|
||||
t.diagram2 = '设备产量时序图'
|
||||
t.addr = '地址' // 1
|
||||
t.planStop = '计划停机' // ?
|
||||
|
||||
t.startTime = '开始时间' // 1
|
||||
t.endTime = '结束时间' // 1
|
||||
t.to = '至' // 1
|
||||
t.today = '今天' // 1
|
||||
t.time = '选择时间'
|
||||
t.eqId = '当前设备ID:'
|
||||
t.ti = '时间'
|
||||
t.plcCode = 'PLC 编码'
|
||||
t.equName = '设备名称'
|
||||
t.equCode = '设备编码'
|
||||
t.yAxisTime = '时间 (h)'
|
||||
t.yAxisRate = '百分比 (%)'
|
||||
t.hourTime = '(时)'
|
||||
|
||||
t.graph = '图形'
|
||||
t.category = '分类'
|
||||
@@ -171,6 +199,13 @@ t.timetype = '时间类型'
|
||||
t.reftimerange = '按时间段'
|
||||
t.refdate = '按日期'
|
||||
t.hour = '小时'
|
||||
t.yes = '是'
|
||||
t.no = '否'
|
||||
t.LoginRecords = ' 登录日志'
|
||||
t.operationsRecords = ' 操作日志'
|
||||
t.allIcons= '所有图标'
|
||||
t.err= '错误'
|
||||
|
||||
|
||||
t.errors = {}
|
||||
t.errors.nosection = '该产线没有工段'
|
||||
@@ -255,15 +290,15 @@ t.inspect.typeCount = '检测类型统计数据'
|
||||
|
||||
|
||||
t.realtime = {}
|
||||
t.realtime.eq = '设备生产实时数据'
|
||||
t.realtime.pl = '产线生产实时数据'
|
||||
t.realtime.inspect = '质量检查实时数据'
|
||||
t.realtime.eq = '近24小时产线生产数据'
|
||||
t.realtime.pl = '近24小时产线生产数据'
|
||||
t.realtime.inspect = '近24小时质量检查数据'
|
||||
t.realtime.in = '进数据'
|
||||
t.realtime.out = '出数据'
|
||||
t.realtime.data = '报废数据'
|
||||
t.realtime.num = '报废数量'
|
||||
t.realtime.rate = '报废比例'
|
||||
t.realtime.total = '总产量'
|
||||
t.realtime.total = '设备总产量'
|
||||
t.realtime.goodrate = '良品率'
|
||||
t.realtime.runState = '是否运行'
|
||||
t.realtime.state = '状态'
|
||||
@@ -362,17 +397,49 @@ t.eq.month='月'
|
||||
t.eq.realyield = '实际加工速度'
|
||||
t.eq.designyield = '理论加工速度'
|
||||
t.eq.viewtrend = '查看趋势'
|
||||
t.eq.productQuality = '产品质量分析'
|
||||
t.eq.productionAnalysis = '产量分析'
|
||||
t.eq.productQuantity = '产品数量'
|
||||
t.eq.line1= '产线1'
|
||||
t.eq.line2= '产线2'
|
||||
t.eq.line3= '产线3'
|
||||
t.eq.line4= '产线4'
|
||||
|
||||
t.eq.sectionName = '工序'
|
||||
t.eq.equipmentName = '设备名称'
|
||||
t.eq.okNum = '合格数量'
|
||||
t.eq.nokNum = '不合格数量'
|
||||
t.eq.passRate = '合格率'
|
||||
t.eq.passRatePercent = '合格率(%)'
|
||||
|
||||
|
||||
t.pl = {}
|
||||
t.pl.title = '产线'
|
||||
t.pl.id = '产线ID'
|
||||
t.pl.name = '产线名称'
|
||||
t.pl.sum = '合计'
|
||||
t.pl.code = '产线编码'
|
||||
t.pl.status = '产线状态'
|
||||
t.pl.belong = '所属产线'
|
||||
t.pl.tvalue = '产线TT值(每小时下片数量)'
|
||||
t.pl.factoryHints = '请选择所属工厂'
|
||||
t.pl.process = '工序'
|
||||
t.pl.add = '添加设备'
|
||||
t.pl.add2 = '添加对比设备'
|
||||
t.pl.queryFirst = '请先查询数据'
|
||||
t.pl.success = '新设备数据获取成功'
|
||||
t.pl.choose = '请选择设备'
|
||||
t.pl.confirm = '确定'
|
||||
t.pl.cancel = '取消'
|
||||
t.pl.paperLaying = '铺纸机名称'
|
||||
t.pl.robotNo = '下片机名称'
|
||||
t.pl.glassNumber = '木托玻璃数'
|
||||
t.pl.glassLength = '玻璃长度'
|
||||
t.pl.glassWidth = '玻璃宽度'
|
||||
t.pl.thick = '玻璃厚度'
|
||||
t.pl.quantity = '木托数量'
|
||||
|
||||
|
||||
|
||||
t.prompt = {}
|
||||
t.prompt.title = '提示'
|
||||
@@ -386,6 +453,9 @@ t.prompt.month = '请选择月份'
|
||||
t.validate = {}
|
||||
t.validate.required = '必填项不能为空'
|
||||
t.validate.format = '{attr}格式错误'
|
||||
t.validate.keyValueWarning = '该数值必须是100以内的正整数!'
|
||||
t.validate.requiredRole = '至少选择一个角色'
|
||||
|
||||
|
||||
t.upload = {}
|
||||
t.upload.title = '上传资料'
|
||||
@@ -429,7 +499,8 @@ t.login.username = '用户名'
|
||||
t.login.password = '密码'
|
||||
t.login.captcha = '验证码'
|
||||
t.login.demo = '在线演示'
|
||||
t.login.copyright = '版权所有:中建材智能自动化研究院有限公司 版本: 1.0'
|
||||
// t.login.copyright = '版权所有:中建材智能自动化研究院有限公司 版本: 1.0'
|
||||
t.login.copyright = '版权所有:VISHAKHA glass pvt Ltd 版本: 1.0'
|
||||
t.login.warning = '已经登录过了'
|
||||
|
||||
t.schedule = {}
|
||||
@@ -529,7 +600,7 @@ t.dict.remark = '备注'
|
||||
t.dict.createDate = '创建时间'
|
||||
|
||||
t.logError = {}
|
||||
t.logError.requestUri = '请求URI'
|
||||
t.logError.requestUri = '请求URL'
|
||||
t.logError.requestMethod = '请求方式'
|
||||
t.logError.requestParams = '请求参数'
|
||||
t.logError.ip = '操作IP'
|
||||
@@ -556,7 +627,7 @@ t.logOperation.status0 = '失败'
|
||||
t.logOperation.status1 = '成功'
|
||||
t.logOperation.creatorName = '用户名'
|
||||
t.logOperation.operation = '用户操作'
|
||||
t.logOperation.requestUri = '请求URI'
|
||||
t.logOperation.requestUri = '请求URL'
|
||||
t.logOperation.requestMethod = '请求方式'
|
||||
t.logOperation.requestParams = '请求参数'
|
||||
t.logOperation.requestTime = '请求时长'
|
||||
@@ -565,7 +636,8 @@ t.logOperation.userAgent = 'User-Agent'
|
||||
t.logOperation.createDate = '创建时间'
|
||||
|
||||
t.menu = {}
|
||||
t.menu.name = '名称'
|
||||
t.menu.name = '中文名'
|
||||
t.menu.nameEn = '英文名'
|
||||
t.menu.icon = '图标'
|
||||
t.menu.type = '类型'
|
||||
t.menu.type0 = '菜单'
|
||||
@@ -619,6 +691,7 @@ t.user.validate = {}
|
||||
t.user.validate.confirmPassword = '确认密码与密码输入不一致'
|
||||
t.user.select = '选择用户'
|
||||
t.user.selecterror = '请选择一条记录'
|
||||
t.user.userTable = ' 用户表'
|
||||
|
||||
|
||||
export default t
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-12-13 21:01:02
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-11 10:47:26
|
||||
*/
|
||||
import './iconfont'
|
||||
import Vue from 'vue'
|
||||
import SvgIcon from '@/components/SvgIcon'// svg component
|
||||
@@ -9,8 +17,9 @@ const req = require.context('./svg', false, /\.svg$/)
|
||||
const requireAll = requireContext => requireContext.keys().map(requireContext)
|
||||
requireAll(req)
|
||||
|
||||
const svgFiles = require.context('./svg', true, /\.svg$/)
|
||||
svgFiles.keys().map(item => svgFiles(item))
|
||||
// 这里注释掉了
|
||||
// const svgFiles = require.context('./svg', true, /\.svg$/)
|
||||
// svgFiles.keys().map(item => svgFiles(item))
|
||||
|
||||
export default {
|
||||
// 获取图标icon-(*).svg名称列表, 例如[shouye, xitong, zhedie, ...]
|
||||
|
||||
2
src/icons/svg/chrome.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660620397071" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="964" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
|
||||
</style></defs><path d="M87.788 227.913c17.049 29.189 34.039 58.291 51.043 87.383 51.784 88.596 103.585 177.181 155.325 265.804 2.62 4.485 5.062 9.143 7 13.955C349.786 715.89 484.618 771.244 604.34 719.47c2.398-1.037 4.887-1.861 9.302-3.526-2.588 4.897-4.038 7.89-5.7 10.755-54.798 94.487-109.707 188.908-164.246 283.545-4.133 7.171-8.493 8.259-15.899 6.935-206.01-36.867-364.332-183.492-412.98-387.026-33.681-140.916-9.465-273.513 67.799-396.221a55.282 55.282 0 0 1 2.993-4.263c0.41-0.532 1.065-0.875 2.179-1.756zM637.574 322.251c4.879-0.232 7.832-0.494 10.785-0.495 109.636-0.021 219.273 0.08 328.908-0.221 8.034-0.021 11.143 2.592 13.896 9.949 77.165 206.263 15.492 437.682-155.167 576.728-99.718 81.243-214.648 119.245-343.254 115.541-4.101-0.116-8.19-0.579-13.782-0.991 2.282-4.327 3.863-7.594 5.678-10.723 73.799-127.297 147.568-254.609 221.459-381.853 61.326-105.603 35.165-231.359-63.311-303.663-1.275-0.936-2.452-2.003-5.212-4.272zM970.66 284.978h-15.17c-145.492 0-290.984-0.444-436.474 0.156-97.432 0.401-169.373 44.268-212.233 132.11-11.095 22.739-15.798 48.603-23.28 72.528-0.437-0.663-2.509-3.517-4.279-6.546-54.593-93.406-109.079-186.878-163.896-280.152-3.852-6.555-3.331-10.476 1.434-16.115C205.093 82.393 316.58 20.463 452.687 3.72c207.799-25.561 413.84 82.445 511.367 267.993 1.915 3.643 3.675 7.368 6.606 13.265zM702.425 512.551c-0.178 106.027-85.601 189.996-193.057 189.771-103.007-0.212-187.656-86.695-187.287-191.343 0.373-106.007 85.766-189.459 193.555-189.154 102.551 0.287 186.962 86.481 186.789 190.726z" p-id="965"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
2
src/icons/svg/chrome2.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1660620397071" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="964" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
|
||||
</style></defs><path d="M87.788 227.913c17.049 29.189 34.039 58.291 51.043 87.383 51.784 88.596 103.585 177.181 155.325 265.804 2.62 4.485 5.062 9.143 7 13.955C349.786 715.89 484.618 771.244 604.34 719.47c2.398-1.037 4.887-1.861 9.302-3.526-2.588 4.897-4.038 7.89-5.7 10.755-54.798 94.487-109.707 188.908-164.246 283.545-4.133 7.171-8.493 8.259-15.899 6.935-206.01-36.867-364.332-183.492-412.98-387.026-33.681-140.916-9.465-273.513 67.799-396.221a55.282 55.282 0 0 1 2.993-4.263c0.41-0.532 1.065-0.875 2.179-1.756zM637.574 322.251c4.879-0.232 7.832-0.494 10.785-0.495 109.636-0.021 219.273 0.08 328.908-0.221 8.034-0.021 11.143 2.592 13.896 9.949 77.165 206.263 15.492 437.682-155.167 576.728-99.718 81.243-214.648 119.245-343.254 115.541-4.101-0.116-8.19-0.579-13.782-0.991 2.282-4.327 3.863-7.594 5.678-10.723 73.799-127.297 147.568-254.609 221.459-381.853 61.326-105.603 35.165-231.359-63.311-303.663-1.275-0.936-2.452-2.003-5.212-4.272zM970.66 284.978h-15.17c-145.492 0-290.984-0.444-436.474 0.156-97.432 0.401-169.373 44.268-212.233 132.11-11.095 22.739-15.798 48.603-23.28 72.528-0.437-0.663-2.509-3.517-4.279-6.546-54.593-93.406-109.079-186.878-163.896-280.152-3.852-6.555-3.331-10.476 1.434-16.115C205.093 82.393 316.58 20.463 452.687 3.72c207.799-25.561 413.84 82.445 511.367 267.993 1.915 3.643 3.675 7.368 6.606 13.265zM702.425 512.551c-0.178 106.027-85.601 189.996-193.057 189.771-103.007-0.212-187.656-86.695-187.287-191.343 0.373-106.007 85.766-189.459 193.555-189.154 102.551 0.287 186.962 86.481 186.789 190.726z" p-id="965" fill="#fff"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
13
src/icons/svg/countdown.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="选择" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="首页选择" transform="translate(-1492.000000, -20.000000)" fill-rule="nonzero">
|
||||
<g id="banner/top" transform="translate(1.000000, -0.000000)">
|
||||
<g id="倒计时" transform="translate(1491.000000, 20.000000)">
|
||||
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M18.6251339,2.5 L18.7173046,2.506884 C19.0181775,2.55223577 19.25,2.81622235 19.25,3.13636364 C19.25,3.48849651 18.9695089,3.77267387 18.6250952,3.77272728 L18.6250952,3.77272728 L17.500134,3.77272728 L17.500134,6.68181819 L17.4950738,6.93194703 C17.4134263,8.92636566 16.3486624,10.7533909 14.6512846,11.7864428 L14.6512846,11.7864428 L14.3002984,12.0000588 L14.6513368,12.2135889 L14.8602283,12.3467668 C16.5045868,13.4445685 17.5015027,15.3107448 17.500134,17.3180114 L17.500134,17.3180114 L17.500134,20.2272727 L18.6251339,20.2272727 L18.7173078,20.2341693 C19.0181892,20.2795564 19.25,20.5435156 19.25,20.8636364 C19.25,21.2157918 18.9694948,21.5 18.6251339,21.5 L18.6251339,21.5 L4.62513396,21.5 L4.53296333,21.493116 C4.23209038,21.4477642 4.00026791,21.1837777 4.00026791,20.8636364 C4.00026791,20.5115035 4.28075902,20.2273261 4.62517273,20.2272727 L4.62517273,20.2272727 L5.75013395,20.2272727 L5.75013395,17.3181818 L5.75519413,17.068053 C5.8368416,15.0736343 6.90160547,13.2466092 8.59898334,12.2135572 L8.59898334,12.2135572 L8.94996946,11.9999412 L8.59893115,11.7864111 L8.39003962,11.6532332 C6.74568111,10.5554315 5.74876521,8.68925518 5.75013389,6.68198865 L5.75013389,6.68198865 L5.75013395,3.77272728 L4.62513396,3.77272728 L4.53097506,3.76549115 C4.34557884,3.73677723 4.18042961,3.62417437 4.08444297,3.45578133 C3.97185234,3.2582593 3.97185234,3.01446799 4.08444297,2.81694595 C4.196414,2.6205109 4.40253386,2.5 4.62513396,2.5 L4.62513396,2.5 L18.6251339,2.5 Z M11.6309675,12.6364317 L11.4133705,12.641183 C8.9566894,12.7532313 7.00013396,14.805007 7.00013396,17.3181818 L7.00013396,17.3181818 L7.00013396,20.2272727 L16.2501339,20.2272727 L16.2501339,17.3181818 L16.2450986,17.0982663 C16.1348575,14.6926999 14.227663,12.7467226 11.8259996,12.6410372 L11.8259996,12.6410372 L11.6309675,12.6364317 Z M16.2501339,3.77272728 L7.00013396,3.77272728 L7.00013396,6.68181819 L7.00489156,6.89606874 C7.1155058,9.38167112 9.1410632,11.3636364 11.625134,11.3636364 L11.625134,11.3636364 L11.8208425,11.3591365 L12.0382189,11.3444826 C14.4134338,11.1283734 16.2499952,9.11397106 16.2501339,6.68183244 L16.2501339,6.68183244 L16.2501339,3.77272728 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
15
src/icons/svg/countdown2.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="1_基础资料" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="1-1工厂信息" transform="translate(-1446.000000, -20.000000)" fill="#000000" fill-rule="nonzero">
|
||||
<g id="banner/top/栏" transform="translate(336.000000, 0.000000)">
|
||||
<g id="编组-5" transform="translate(944.000000, 15.000000)">
|
||||
<g id="倒计时" transform="translate(166.000000, 5.000000)">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M18.6251339,2.5 L18.7173046,2.506884 C19.0181775,2.55223577 19.25,2.81622235 19.25,3.13636364 C19.25,3.48849651 18.9695089,3.77267387 18.6250952,3.77272728 L18.6250952,3.77272728 L17.500134,3.77272728 L17.500134,6.68181819 L17.4950738,6.93194703 C17.4134263,8.92636566 16.3486624,10.7533909 14.6512846,11.7864428 L14.6512846,11.7864428 L14.3002984,12.0000588 L14.6513368,12.2135889 L14.8602283,12.3467668 C16.5045868,13.4445685 17.5015027,15.3107448 17.500134,17.3180114 L17.500134,17.3180114 L17.500134,20.2272727 L18.6251339,20.2272727 L18.7173078,20.2341693 C19.0181892,20.2795564 19.25,20.5435156 19.25,20.8636364 C19.25,21.2157918 18.9694948,21.5 18.6251339,21.5 L18.6251339,21.5 L4.62513396,21.5 L4.53296333,21.493116 C4.23209038,21.4477642 4.00026791,21.1837777 4.00026791,20.8636364 C4.00026791,20.5115035 4.28075902,20.2273261 4.62517273,20.2272727 L4.62517273,20.2272727 L5.75013395,20.2272727 L5.75013395,17.3181818 L5.75519413,17.068053 C5.8368416,15.0736343 6.90160547,13.2466092 8.59898334,12.2135572 L8.59898334,12.2135572 L8.94996946,11.9999412 L8.59893115,11.7864111 L8.39003962,11.6532332 C6.74568111,10.5554315 5.74876521,8.68925518 5.75013389,6.68198865 L5.75013389,6.68198865 L5.75013395,3.77272728 L4.62513396,3.77272728 L4.53097506,3.76549115 C4.34557884,3.73677723 4.18042961,3.62417437 4.08444297,3.45578133 C3.97185234,3.2582593 3.97185234,3.01446799 4.08444297,2.81694595 C4.196414,2.6205109 4.40253386,2.5 4.62513396,2.5 L4.62513396,2.5 L18.6251339,2.5 Z M11.6309675,12.6364317 L11.4133705,12.641183 C8.9566894,12.7532313 7.00013396,14.805007 7.00013396,17.3181818 L7.00013396,17.3181818 L7.00013396,20.2272727 L16.2501339,20.2272727 L16.2501339,17.3181818 L16.2450986,17.0982663 C16.1348575,14.6926999 14.227663,12.7467226 11.8259996,12.6410372 L11.8259996,12.6410372 L11.6309675,12.6364317 Z M16.2501339,3.77272728 L7.00013396,3.77272728 L7.00013396,6.68181819 L7.00489156,6.89606874 C7.1155058,9.38167112 9.1410632,11.3636364 11.625134,11.3636364 L11.625134,11.3636364 L11.8208425,11.3591365 L12.0382189,11.3444826 C14.4134338,11.1283734 16.2499952,9.11397106 16.2501339,6.68183244 L16.2501339,6.68183244 L16.2501339,3.77272728 Z" id="形状结合"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
15
src/icons/svg/download.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="1_基础资料">
|
||||
<g id="1-1工厂信息" transform="translate(-1580.000000, -20.000000)">
|
||||
<g id="banner/top/栏" transform="translate(336.000000, 0.000000)">
|
||||
<g id="编组-5" transform="translate(944.000000, 15.000000)">
|
||||
<g id="下载" transform="translate(300.000000, 5.000000)">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M7.6875,13.5 L11.25,13.5 L11.25,3.75 C11.25,3.33578644 11.5857864,3 12,3 C12.4142136,3 12.75,3.33578644 12.75,3.75 L12.75,13.5 L12.75,13.5 L16.3125,13.5 L12,18 L7.6875,13.5 Z M20.25,12 C19.8357864,12 19.5,12.3357864 19.5,12.75 L19.5,18.5 C19.5,19.0522847 19.0522847,19.5 18.5,19.5 L5.5,19.5 C4.94771525,19.5 4.5,19.0522847 4.5,18.5 L4.5,12.75 C4.5,12.3357864 4.16421356,12 3.75,12 C3.33578644,12 3,12.3357864 3,12.75 L3,19 C3,20.1045695 3.8954305,21 5,21 L19,21 C20.1045695,21 21,20.1045695 21,19 L21,12.75 C21,12.3357864 20.6642136,12 20.25,12 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
15
src/icons/svg/download2.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="1_基础资料">
|
||||
<g id="1-1工厂信息" transform="translate(-1580.000000, -20.000000)">
|
||||
<g id="banner/top/栏" transform="translate(336.000000, 0.000000)">
|
||||
<g id="编组-5" transform="translate(944.000000, 15.000000)">
|
||||
<g id="下载" transform="translate(300.000000, 5.000000)">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M7.6875,13.5 L11.25,13.5 L11.25,3.75 C11.25,3.33578644 11.5857864,3 12,3 C12.4142136,3 12.75,3.33578644 12.75,3.75 L12.75,13.5 L12.75,13.5 L16.3125,13.5 L12,18 L7.6875,13.5 Z M20.25,12 C19.8357864,12 19.5,12.3357864 19.5,12.75 L19.5,18.5 C19.5,19.0522847 19.0522847,19.5 18.5,19.5 L5.5,19.5 C4.94771525,19.5 4.5,19.0522847 4.5,18.5 L4.5,12.75 C4.5,12.3357864 4.16421356,12 3.75,12 C3.33578644,12 3,12.3357864 3,12.75 L3,19 C3,20.1045695 3.8954305,21 5,21 L19,21 C20.1045695,21 21,20.1045695 21,19 L21,12.75 C21,12.3357864 20.6642136,12 20.25,12 Z" id="形状" fill="#fff"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
src/icons/svg/home.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1615188284589" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2221" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M998.428444 381.112889l-469.333333-353.180445c-0.469333-0.355556-0.981333-0.568889-1.479111-0.896a28.017778 28.017778 0 0 0-2.417778-1.464888 29.909333 29.909333 0 0 0-10.453333-3.128889 30.705778 30.705778 0 0 0-5.475556-0.014223 28.771556 28.771556 0 0 0-13.112889 4.707556c-0.412444 0.284444-0.867556 0.469333-1.28 0.782222l-469.333333 353.180445a28.458667 28.458667 0 0 0 34.204445 45.468444l73.656888-55.424V854.186667c0 111.701333 29.141333 147.555556 136.803556 147.555555h483.555556c107.662222 0 147.640889-35.854222 147.640888-147.555555V379.320889l62.805334 47.260444c5.12 3.854222 11.121778 5.717333 17.080889 5.717334a28.444444 28.444444 0 0 0 17.137777-51.185778zM443.747556 674.673778H580.266667c31.288889 0 36.707556 0.554667 36.707555 28.8v241.422222H417.877333V703.473778c0-28.245333-5.418667-28.8 25.870223-28.8z m400.782222-327.111111v506.666666c0 81.365333-14.193778 90.666667-90.752 90.666667h-108.359111V703.473778c0-48.967111-23.850667-57.244444-65.152-57.244445h-136.519111c-41.301333 0-54.314667 8.277333-54.314667 57.244445v241.422222H270.222222c-76.572444 0-79.914667-9.301333-79.914666-90.666667V347.562667c0-5.788444-1.749333-11.150222-4.721778-15.644445L512 86.272l334.336 251.591111a28.231111 28.231111 0 0 0-1.806222 9.699556z" fill="" p-id="2222"></path><path d="M435.370667 230.499556L250.055111 373.617778c-3.512889 2.688-2.858667 6.855111-2.858667 11.278222v161.777778a14.222222 14.222222 0 1 0 28.444445 0V391.907556l178.730667-138.837334c6.243556-4.778667 5.034667-13.710222 0.256-19.939555a13.425778 13.425778 0 0 0-19.256889-2.631111zM261.418667 589.340444a14.222222 14.222222 0 0 0-14.222223 14.222223v14.222222a14.222222 14.222222 0 1 0 28.444445 0v-14.222222a14.222222 14.222222 0 0 0-14.222222-14.222223z" fill="#000" p-id="2223"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 6.6 KiB |
18
src/icons/svg/language2.svg
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
17
src/icons/svg/language3.svg
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
19
src/icons/svg/table_add.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="10px" height="10px" viewBox="0 0 10 10" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 60 (88103) - https://sketch.com -->
|
||||
<desc>Created with Sketch.</desc>
|
||||
<g id="11_系统管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="11-1用户管理" transform="translate(-1764.000000, -160.000000)">
|
||||
<g id="编组-15" transform="translate(1763.000000, 158.000000)">
|
||||
<g id="编组-18">
|
||||
<g id="icon/界面内/新增" transform="translate(0.000000, 1.000000)">
|
||||
<g id="编组">
|
||||
<rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="11" height="11"></rect>
|
||||
<path d="M10.0813953,6.42885117 L6.37790698,6.42885117 L6.37790698,10.0770235 C6.37790698,10.3108355 6.19069767,10.5 5.95930233,10.5 L5.95930233,10.5 C5.72790698,10.5 5.54069767,10.3108355 5.54069767,10.0770235 L5.54069767,6.42885117 L1.91860465,6.42885117 C1.6872093,6.42885117 1.5,6.23968668 1.5,6.00587467 L1.5,6.00587467 C1.5,5.77206266 1.6872093,5.58289817 1.91860465,5.58289817 L5.54069767,5.58289817 L5.54069767,1.9229765 C5.54069767,1.68916449 5.72790698,1.5 5.95930233,1.5 L5.95930233,1.5 C6.19069767,1.5 6.37790698,1.68916449 6.37790698,1.9229765 L6.37790698,5.58289817 L10.0813953,5.58289817 C10.3127907,5.58289817 10.5,5.77206266 10.5,6.00587467 L10.5,6.00587467 C10.5,6.23968668 10.3127907,6.42885117 10.0813953,6.42885117 L10.0813953,6.42885117 Z" id="Shape" fill="#0B58FF" transform="translate(6.000000, 6.000000) scale(1, -1) translate(-6.000000, -6.000000) "></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -112,8 +112,9 @@ export default {
|
||||
var tabName = this.$store.state.contentTabsActiveName
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name !== tabName)
|
||||
if (this.$store.state.contentTabs.length <= 0) {
|
||||
this.$store.state.sidebarMenuActiveName = this.$store.state.contentTabsActiveName = 'home'
|
||||
return false
|
||||
// this.$store.state.sidebarMenuActiveName = this.$store.state.contentTabsActiveName = 'home'
|
||||
// return false
|
||||
this.$router.push({ name: 'home' })
|
||||
}
|
||||
if (tabName === this.$store.state.contentTabsActiveName) {
|
||||
this.$router.push({ name: this.$store.state.contentTabs[this.$store.state.contentTabs.length - 1].name })
|
||||
|
||||
@@ -44,12 +44,12 @@ export const moduleRoutes = {
|
||||
path: '/',
|
||||
component: () => import('@/views/main'),
|
||||
name: 'main',
|
||||
// redirect: { name: 'home' },
|
||||
redirect: { name: 'sys-log-login' },
|
||||
redirect: { name: 'home' },
|
||||
// redirect: { name: 'sys-log-login' },
|
||||
meta: { title: '主入口布局' },
|
||||
children: [
|
||||
{ path: '/sys-log-login', component: () => import('@/views/modules/sys/log-login'), name: 'sys-log-login', meta: { title: '首页', isTab: true } }
|
||||
// { path: '/home', component: () => import('@/views/modules/home'), name: 'home', meta: { title: '首页', isTab: true } }
|
||||
// { path: '/sys-log-login', component: () => import('@/views/modules/sys/log-login'), name: 'sys-log-login', meta: { title: '首页', isTab: true } }
|
||||
{ path: '/home', component: () => import('@/views/modules/home'), name: 'home', meta: { title: '首页', isTab: false, hiddenSiderbar: true } }
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* @Author: fzq
|
||||
* @Date: 2022-12-11 20:33:35
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2022-12-11 20:43:32
|
||||
* @LastEditTime: 2023-01-12 09:50:26
|
||||
*/
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
@@ -31,13 +31,12 @@ export default new Vuex.Store({
|
||||
contentTabs: [
|
||||
{
|
||||
...window.SITE_CONFIG['contentTabDefault'],
|
||||
'name': 'sys-log-login',
|
||||
// 这里显示/隐藏 main-content的home标签
|
||||
// 'name': 'home',
|
||||
'title': 'home'
|
||||
// 'title': 'home'
|
||||
}
|
||||
],
|
||||
// contentTabsActiveName: 'home'
|
||||
contentTabsActiveName: 'sys-log-login'
|
||||
},
|
||||
modules: {
|
||||
user
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-02-01 09:39:37
|
||||
*/
|
||||
/** filters */
|
||||
import moment from 'moment'
|
||||
|
||||
@@ -8,7 +16,7 @@ export const dictFilter = dictTypeId => {
|
||||
}
|
||||
|
||||
export const timeFilter = (val) => {
|
||||
return moment(val).format('YYYY-MM-DD HH:mm:ss')
|
||||
return val ? moment(val).format('YYYY-MM-DD HH:mm:ss') : '-'
|
||||
}
|
||||
|
||||
export const pick = (obj, paths) => {
|
||||
@@ -22,3 +30,11 @@ export const pick = (obj, paths) => {
|
||||
})
|
||||
return result
|
||||
}
|
||||
|
||||
// export function timeFormatter(timeObj) {
|
||||
// if (timeObj) {
|
||||
// return moment(timeObj).format('YYYY-MM-DD HH:mm:ss')
|
||||
// } else {
|
||||
// return '-'
|
||||
// }
|
||||
// }
|
||||
@@ -114,3 +114,8 @@ export function calcMaxHeight(num) {
|
||||
const finalHeight = clientHeight - num - FIXED_HEIGHT
|
||||
return finalHeight > 0 ? finalHeight : -finalHeight
|
||||
}
|
||||
|
||||
// tableHeight
|
||||
export function tableHeight(n) {
|
||||
return window.innerHeight - n
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ import merge from 'lodash/merge'
|
||||
|
||||
const http = axios.create({
|
||||
// baseURL: window.SITE_CONFIG['apiURL'],
|
||||
baseURL: '/api',
|
||||
// baseURL: '/yd-monitor',
|
||||
// baseURL: '/api',
|
||||
baseURL: '/yd-monitor',
|
||||
// baseURL: process.env.NODE_ENV === 'production' ? '/api' : '/yd-monitor',
|
||||
timeout: 1000 * 180,
|
||||
withCredentials: true
|
||||
@@ -19,7 +19,8 @@ const http = axios.create({
|
||||
* 请求拦截
|
||||
*/
|
||||
http.interceptors.request.use(config => {
|
||||
config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN'
|
||||
// config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN'
|
||||
config.headers['Accept-Language'] = Cookies.get('language') || 'en'
|
||||
config.headers['token'] = Cookies.get('token') || ''
|
||||
// 默认参数
|
||||
var defaults = {}
|
||||
@@ -59,6 +60,7 @@ http.interceptors.response.use(response => {
|
||||
router.replace({ name: 'login' })
|
||||
return Promise.reject(response.data.msg)
|
||||
}
|
||||
// 下三行注释掉
|
||||
// else if (response.data.code === 500) {
|
||||
// return Promise.reject(response.data.msg)
|
||||
// }
|
||||
|
||||
56
src/views/Footerbar.vue
Normal file
@@ -0,0 +1,56 @@
|
||||
<!--
|
||||
* @Author: your name
|
||||
* @Date: 2021-01-27 10:07:42
|
||||
* @LastEditTime: 2023-01-13 16:22:01
|
||||
* @LastEditors: fzq
|
||||
* @Description: In User Settings Edit
|
||||
* @FilePath: \mt-bus-fe\src\layout\components\FooterBar.vue
|
||||
-->
|
||||
<template>
|
||||
<div v-if="this.$route.meta.hiddenSiderbar !== true" :class="[$store.state.sidebarFold == true ? 'footerbar' : 'footerbar2']">
|
||||
© {{ $t('copyright') }}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
components: {},
|
||||
computed: {},
|
||||
watch: {},
|
||||
methods: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.footerbar{
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
// line-height: 50px;
|
||||
// text-indent: 2em;
|
||||
// background: #fff;
|
||||
// z-index: 999;
|
||||
// box-shadow: 2px -2px 2px rgba($color: #000000, $alpha: .1);
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: #C7C7C7;
|
||||
margin: 5px 0;
|
||||
}
|
||||
.footerbar2{
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
// line-height: 50px;
|
||||
// text-indent: 2em;
|
||||
// background: #fff;
|
||||
// z-index: 999;
|
||||
// box-shadow: 2px -2px 2px rgba($color: #000000, $alpha: .1);
|
||||
left: 50vw;
|
||||
font-size: 12px;
|
||||
color: #C7C7C7;
|
||||
margin: 5px 0;
|
||||
}
|
||||
</style>
|
||||
@@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<main :class="['aui-content', { 'aui-content--tabs': $route.meta.isTab }]">
|
||||
<!-- <main :class="['aui-content', { 'aui-content--tabs': $route.meta.isTab }]"> -->
|
||||
<main :class="[this.$route.meta.hiddenSiderbar !== true ? ['aui-content', { 'aui-content--tabs': $route.meta.isTab }] : 'aui-sidebar.close']">
|
||||
<!-- tab展示内容 -->
|
||||
<template v-if="$route.meta.isTab">
|
||||
<el-dropdown class="aui-content--tabs-tools">
|
||||
@@ -10,18 +11,17 @@
|
||||
<el-dropdown-item @click.native="tabsCloseAllHandle()">{{ $t('contentTabs.closeAll') }}</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
<el-tabs v-model="$store.state.contentTabsActiveName" @tab-click="tabSelectedHandle" @tab-remove="tabRemoveHandle">
|
||||
<el-tabs v-model="$store.state.contentTabsActiveName" @tab-click="tabSelectedHandle" @tab-remove="tabRemoveHandle" ref="tabs">
|
||||
<el-tab-pane
|
||||
v-for="item in $store.state.contentTabs"
|
||||
:key="item.name"
|
||||
:name="item.name"
|
||||
:label="item.title"
|
||||
:closable="item.name !== 'home'"
|
||||
:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }"
|
||||
>
|
||||
<template v-if="item.name === 'home'">
|
||||
:closable="item.name !== ''"
|
||||
:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }">
|
||||
<!-- <template v-if="item.name === 'home'">
|
||||
<svg slot="label" class="icon-svg aui-content--tabs-icon-nav" aria-hidden="true"><use xlink:href="#icon-home"></use></svg>
|
||||
</template>
|
||||
</template> -->
|
||||
<iframe v-if="tabIsIframe(item.iframeURL)" :src="item.iframeURL" width="100%" height="100%" frameborder="0" scrolling="yes"></iframe>
|
||||
<keep-alive v-else>
|
||||
<router-view v-if="item.name === $store.state.contentTabsActiveName" />
|
||||
@@ -44,6 +44,29 @@ export default {
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
// 通过加上ref,再删除数组第一个元素来把空元素删除,不知为何会出现这个元素
|
||||
this.$store.state.contentTabs.splice(0, 1)
|
||||
// 加个判断防止home页面报$children的错
|
||||
if (this.$route.meta.hiddenSiderbar !== true) {
|
||||
this.$refs.tabs.$children[0].$refs.tabs[0].style.display = 'none'
|
||||
}
|
||||
// console.log(this.$refs.tabs.$children[0].$refs)
|
||||
// console.log('11',this.$refs.tabs.$children[0].$refs.tabs[0])
|
||||
// console.log('22',this.$store.state.contentTabs)
|
||||
})
|
||||
|
||||
// setTimeout(function() {
|
||||
// // 执行代码块
|
||||
// // 不加.bind(this) 因为使用的是function() 这样函数就不会从你的类组件继承this,所以this是undefined
|
||||
// this.$store.state.contentTabs.splice(0, 1)
|
||||
// // 加个判断防止home页面报$children的错
|
||||
// if (this.$route.meta.hiddenSiderbar !== true) {
|
||||
// this.$refs.tabs.$children[0].$refs.tabs[0].style.display = 'none'
|
||||
// }
|
||||
// }.bind(this),0)
|
||||
},
|
||||
methods: {
|
||||
// tabs, 是否通过iframe展示
|
||||
tabIsIframe(url) {
|
||||
@@ -51,7 +74,7 @@ export default {
|
||||
},
|
||||
// tabs, 选中tab
|
||||
tabSelectedHandle(tab) {
|
||||
tab = this.$store.state.contentTabs.filter(item => item.name === tab.name)[0]
|
||||
tab = this.$store.state.contentTabs.filter((item) => item.name === tab.name)[0]
|
||||
if (tab) {
|
||||
this.$router.push({
|
||||
name: tab.name,
|
||||
@@ -65,10 +88,11 @@ export default {
|
||||
if (tabName === 'home') {
|
||||
return false
|
||||
}
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name !== tabName)
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter((item) => item.name !== tabName)
|
||||
if (this.$store.state.contentTabs.length <= 0) {
|
||||
this.$store.state.sidebarMenuActiveName = this.$store.state.contentTabsActiveName = 'home'
|
||||
return false
|
||||
// return false
|
||||
this.$router.push({ name: 'home' })
|
||||
}
|
||||
// 当前选中tab被删除
|
||||
if (tabName === this.$store.state.contentTabsActiveName) {
|
||||
@@ -82,13 +106,14 @@ export default {
|
||||
},
|
||||
// tabs, 关闭其它
|
||||
tabsCloseOtherHandle() {
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => {
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter((item) => {
|
||||
return item.name === 'home' || item.name === this.$store.state.contentTabsActiveName
|
||||
})
|
||||
},
|
||||
// tabs, 关闭全部
|
||||
tabsCloseAllHandle() {
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name === 'home')
|
||||
this.$store.state.contentTabs = this.$store.state.contentTabs.filter((item) => item.name === 'home')
|
||||
// this.$router.push({ name: 'sys-log-login' })
|
||||
this.$router.push({ name: 'home' })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :visible.sync="visible" :title="$t('updatePassword.title')" :close-on-click-modal="false" :close-on-press-escape="false" :append-to-body="true">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="170px">
|
||||
<el-form-item :label="$t('updatePassword.username')">
|
||||
<span>{{ $store.state.user.name }}</span>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,28 +1,54 @@
|
||||
<template>
|
||||
<nav class="aui-navbar" :class="`aui-navbar--${$store.state.navbarLayoutType}`">
|
||||
<nav
|
||||
class="aui-navbar"
|
||||
:class="[this.$route.meta.hiddenSiderbar !== true ? `aui-navbar--${$store.state.navbarLayoutType}` : 'aui-navbar.home']"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#001529' : 'rgb(13,43,104)'
|
||||
}">
|
||||
<!-- <hamburger v-if="showhome" id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> -->
|
||||
<div class="aui-navbar__header">
|
||||
<h1 class="aui-navbar__brand" @click="$router.push({ name: 'sys-log-login' })">
|
||||
<h1 class="aui-navbar__brand" @click="$router.push({ name: 'home' })">
|
||||
<a class="aui-navbar__brand-lg" href="javascript:;">
|
||||
<img src="../assets/img/cnbm.png" style="width: 36px; height: 36px; position: relative; top: 0em; margin-right: 12px" alt="" />
|
||||
<!-- 36px -->
|
||||
<img src="../assets/img/logo2.png" style="width: 30.8px; height: 26px; position: relative; top: -0.075em; margin-right: 12px" alt="" />
|
||||
{{ $t('brand.lg') }}
|
||||
</a>
|
||||
<!-- <a class="aui-navbar__brand-mini" href="javascript:;">{{ $t('brand.mini') }}</a> -->
|
||||
<!-- 缩放时LOGO -->
|
||||
<!-- <a class="aui-navbar__brand-mini" href="javascript:;"> -->
|
||||
<a class="aui-navbar__brand-mini" href="javascript:;">
|
||||
<img src="../assets/img/cnbm.png" style="width: 36px; height: 36px; position: relative; top: 0em" alt="" />
|
||||
<img src="../assets/img/logo2.png" style="width: 30.8px; height: 26px; position: relative; top: 0em" alt="" />
|
||||
</a>
|
||||
</h1>
|
||||
</div>
|
||||
<!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" /> -->
|
||||
<div class="aui-navbar__body">
|
||||
<div
|
||||
class="aui-navbar__body"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<el-menu class="aui-navbar__menu mr-auto" mode="horizontal">
|
||||
<el-menu-item index="1" @click="$store.state.sidebarFold = !$store.state.sidebarFold">
|
||||
<el-menu-item
|
||||
v-if="this.$route.meta.hiddenSiderbar !== true"
|
||||
index="1"
|
||||
@click="$store.state.sidebarFold = !$store.state.sidebarFold"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--switch" aria-hidden="true">
|
||||
<use xlink:href="#icon-outdent"></use>
|
||||
</svg>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="2" @click="refresh()">
|
||||
<el-menu-item
|
||||
v-if="this.$route.meta.hiddenSiderbar !== true"
|
||||
index="2"
|
||||
@click="refresh()"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<svg class="icon-svg aui-navbar__icon-menu aui-navbar__icon-menu--refresh" aria-hidden="true">
|
||||
<use xlink:href="#icon-sync"></use>
|
||||
</svg>
|
||||
@@ -39,7 +65,40 @@
|
||||
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true"><use xlink:href="#gitee"></use></svg>
|
||||
</a>
|
||||
</el-menu-item> -->
|
||||
<el-menu-item index="3">
|
||||
<!-- <el-dropdown :style="showTitle ? 'color: #fff' : '#000'" class="avatar-container right-menu-item hover-effect" trigger="click">
|
||||
<el-badge :hidden="alarmNum > 0 ? false : true" :value="alarmNum" class="item" style="line-height: 0; margin: 0 10px; vertical-align: -3px" @click.native="handleAlarm">
|
||||
<svg-icon style="width: 24px; height: 24px" class="item-icon" icon-class="alarm" />
|
||||
</el-badge>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item>暂无数据</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown> -->
|
||||
<!-- <el-menu-item
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<svg style="width: 24px; height: 24px; vertical-align: -7px">
|
||||
<use v-if="this.$route.meta.hiddenSiderbar" xlink:href="#countdown"></use>
|
||||
<use v-if="!this.$route.meta.hiddenSiderbar" xlink:href="#countdown2"></use>
|
||||
</svg>
|
||||
{{ formatTime }}
|
||||
</el-menu-item> -->
|
||||
<el-menu-item v-if="this.$route.meta.hiddenSiderbar !== true" @click="toHome">
|
||||
<svg
|
||||
style="width: 24px; height: 24px; vertical-align: -7px;backgroundColor: '#fff';color: '#000'">
|
||||
<use xlink:href="#home"></use>
|
||||
</svg>
|
||||
<span style="color: #000">
|
||||
{{ $t('brand.home') }}
|
||||
</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item
|
||||
index="3"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#fff' : '#000'
|
||||
}">
|
||||
<!-- <el-dropdown :style="showTitle ? 'color: #fff' : '#000'" class="hover-effect" trigger="click">
|
||||
<el-badge :hidden="alarmNum > 0 ? false : true" :value="alarmNum" class="item" style="line-height: 0; margin: 0 10px; vertical-align: -3px" @click.native="handleAlarm">
|
||||
<svg-icon style="width: 24px; height: 24px" class="item-icon" icon-class="alarm" />
|
||||
@@ -49,25 +108,88 @@
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown> -->
|
||||
<el-dropdown placement="bottom" :show-timeout="0" @command="handleCommand">
|
||||
<span class="el-dropdown-link">
|
||||
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true">
|
||||
<use xlink:href="#icon-earth"></use>
|
||||
<span>
|
||||
<!-- <svg class="icon-svg aui-navbar__icon-menu hover-effect" aria-hidden="true"> -->
|
||||
<svg
|
||||
class="icon-svg aui-navbar__icon-menu"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<!-- 根据路由2选1隐藏 -->
|
||||
<use v-if="this.$route.meta.hiddenSiderbar" xlink:href="#language2"></use>
|
||||
<use v-if="!this.$route.meta.hiddenSiderbar" xlink:href="#language3"></use>
|
||||
</svg>
|
||||
<!-- <i class="el-icon-arrow-down el-icon--right"></i> -->
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :disabled="getLang() === 'zh-CN'" command="toCN">中文</el-dropdown-item>
|
||||
<el-dropdown-item :disabled="getLang() === 'en'" command="toEN">En</el-dropdown-item>
|
||||
<el-dropdown-item :disabled="getLang() === 'en'" command="toEN">English</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="4" @click="fullscreenHandle()">
|
||||
<svg class="icon-svg aui-navbar__icon-menu" aria-hidden="true">
|
||||
<!-- <el-menu-item
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<a
|
||||
><svg
|
||||
:style="this.$route.meta.hiddenSiderbar !== true ? 'color: #000' : 'color: #fff'"
|
||||
style="width: 24px; height: 24px; vertical-align: -7px"
|
||||
icon-class="download"
|
||||
>
|
||||
<use v-if="this.$route.meta.hiddenSiderbar" xlink:href="#download2"></use>
|
||||
<use v-if="!this.$route.meta.hiddenSiderbar" xlink:href="#download"></use>
|
||||
</svg>
|
||||
</a>
|
||||
</el-menu-item> -->
|
||||
<el-menu-item
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<a href="google.exe" >
|
||||
<!-- <svg-icon style="width: 24px; height: 24px; vertical-align: -7px" icon-class="chrome" /></a> -->
|
||||
<svg v-if="this.$route.meta.hiddenSiderbar" style="color: #fff; width: 24px; height: 24px; vertical-align: -7px">
|
||||
<use xlink:href="#chrome2"></use>
|
||||
</svg>
|
||||
<svg v-if="!this.$route.meta.hiddenSiderbar" style="width: 24px; height: 24px; vertical-align: -7px">
|
||||
<use xlink:href="#chrome"></use>
|
||||
</svg>
|
||||
</a>
|
||||
</el-menu-item>
|
||||
<el-menu-item
|
||||
index="4"
|
||||
@click="fullscreenHandle()"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<svg
|
||||
class="icon-svg aui-navbar__icon-menu"
|
||||
aria-hidden="true"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<use xlink:href="#icon-fullscreen"></use>
|
||||
</svg>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="5" class="aui-navbar__avatar">
|
||||
<el-dropdown placement="bottom" :show-timeout="0">
|
||||
<el-menu-item
|
||||
index="5"
|
||||
class="aui-navbar__avatar"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<el-dropdown
|
||||
placement="bottom"
|
||||
:show-timeout="0"
|
||||
:style="{
|
||||
backgroundColor: this.$route.meta.hiddenSiderbar !== true ? '#fff' : 'rgb(13,43,104)',
|
||||
color: this.$route.meta.hiddenSiderbar !== true ? '#000' : '#fff'
|
||||
}">
|
||||
<span class="el-dropdown-link">
|
||||
<img src="~@/assets/img/avatar.png" />
|
||||
<span>{{ $store.state.user.name }}</span>
|
||||
@@ -91,23 +213,103 @@ import Cookies from 'js-cookie'
|
||||
import screenfull from 'screenfull'
|
||||
import UpdatePassword from './main-navbar-update-password'
|
||||
import { clearLoginInfo } from '@/utils'
|
||||
import moment from 'moment'
|
||||
// let logoutInterval = null
|
||||
// const timeInterval = null
|
||||
export default {
|
||||
inject: ['refresh'],
|
||||
// inject: ['refresh'],
|
||||
data() {
|
||||
return {
|
||||
// logoutTime: 1800000,
|
||||
updatePasswordVisible: false,
|
||||
messageTip: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// formatTime() {
|
||||
// return moment(this.logoutTime - 28800000).format('HH:mm:ss')
|
||||
// }
|
||||
},
|
||||
watch: {
|
||||
// logoutTime: function (val) {
|
||||
// if (val <= 0) {
|
||||
// this.logout()
|
||||
// }
|
||||
// }
|
||||
// $route: function () {
|
||||
// this.getAlarm()
|
||||
// }
|
||||
},
|
||||
// mounted() {
|
||||
// // this.getAlarm()
|
||||
// logoutInterval = setInterval(() => {
|
||||
// this.logoutTime -= 1000
|
||||
// }, 1000)
|
||||
// addEventListener('click', this.logoutTimeReset)
|
||||
// addEventListener('keydown', this.logoutTimeReset)
|
||||
// addEventListener('visibilitychange', this.visibilitychangeListener)
|
||||
// },
|
||||
// destroyed() {
|
||||
// clearInterval(logoutInterval)
|
||||
// clearInterval(timeInterval)
|
||||
// removeEventListener('click', this.logoutTimeReset)
|
||||
// removeEventListener('keydown', this.logoutTimeReset)
|
||||
// removeEventListener('visibilitychange', this.visibilitychangeListener)
|
||||
// },
|
||||
components: {
|
||||
UpdatePassword
|
||||
// Hamburger
|
||||
},
|
||||
methods: {
|
||||
// 获取当前语言环境
|
||||
// winBlur() {
|
||||
// this.blurTime = new Date()
|
||||
// clearInterval(logoutInterval)
|
||||
// },
|
||||
// // 浏览器获取焦点
|
||||
// winFocus() {
|
||||
// if (this.logoutTime - (new Date() - this.blurTime).valueOf() <= 0) {
|
||||
// this.logout()
|
||||
// } else {
|
||||
// this.logoutTime -= (new Date() - this.blurTime).valueOf()
|
||||
// logoutInterval = setInterval(() => {
|
||||
// this.logoutTime -= 1000
|
||||
// }, 1000)
|
||||
// }
|
||||
// },
|
||||
// // 重置退出时间
|
||||
// logoutTimeReset() {
|
||||
// this.logoutTime = this.time * 60000
|
||||
// },
|
||||
// visibilitychangeListener() {
|
||||
// if (document.hidden) {
|
||||
// this.winBlur()
|
||||
// } else {
|
||||
// this.winFocus()
|
||||
// }
|
||||
// },
|
||||
// async logout() {
|
||||
// console.log("sessionStorage.getItem('loginspc')", sessionStorage.getItem('loginspc'))
|
||||
// if (sessionStorage.getItem('loginspc') === 'login') {
|
||||
// const spcUrl = `/spc/upms/userinfo/logoutUser?account=${'ZJCadmin'}`
|
||||
// axios.get(spcUrl).then((res) => {
|
||||
// if (res.data.code !== 'OK') {
|
||||
// this.$message.error(this.$t('module.quality.spc.error'))
|
||||
// }
|
||||
// sessionStorage.setItem('loginspc', 'logout')
|
||||
// })
|
||||
// }
|
||||
// await this.$store.dispatch('user/logout')
|
||||
// console.log('`/login?redirect=${this.$route.fullPath}`', `/login?redirect=${this.$route.fullPath}`)
|
||||
// this.$router.push(`/login?redirect=${this.$route.fullPath}`)
|
||||
// clearInterval(logoutInterval)
|
||||
// },
|
||||
// // 获取当前语言环境
|
||||
getLang() {
|
||||
return Cookies.get('language')
|
||||
},
|
||||
refresh() {
|
||||
this.$router.go(0)
|
||||
},
|
||||
// 切换语言环境
|
||||
handleCommand(command) {
|
||||
// 切换语言选项时,可能需要手动刷新页面
|
||||
@@ -142,6 +344,9 @@ export default {
|
||||
this.$refs.updatePassword.init()
|
||||
})
|
||||
},
|
||||
async toHome() {
|
||||
this.$router.push('/')
|
||||
},
|
||||
// 退出
|
||||
logoutHandle() {
|
||||
this.$confirm(this.$t('prompt.info', { handle: this.$t('logout') }), this.$t('prompt.title'), {
|
||||
@@ -166,3 +371,4 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<aside :class="['aui-sidebar', `aui-sidebar--${$store.state.sidebarLayoutSkin}`]">
|
||||
<div class="aui-sidebar__inner">
|
||||
<!-- <aside :class="['aui-sidebar', `aui-sidebar--${$store.state.sidebarLayoutSkin}`]"> -->
|
||||
<aside v-if="this.$route.meta.hiddenSiderbar !== true" :class="[this.$route.meta.hiddenSiderbar !== true? ['aui-sidebar',`aui-sidebar--${$store.state.sidebarLayoutSkin}`]:'aui-sidebar.close']">
|
||||
<div v-if="this.$route.meta.hiddenSiderbar !== true" :class="[this.$route.meta.hiddenSiderbar !== true? 'aui-sidebar__inner':'aui-sidebar.close']">
|
||||
<el-menu
|
||||
:default-active="$store.state.sidebarMenuActiveName"
|
||||
:collapse="$store.state.sidebarFold"
|
||||
@@ -28,7 +29,7 @@ export default {
|
||||
mounted() {
|
||||
// this.$store.state.sidebarMenuList = window.SITE_CONFIG['menuList']
|
||||
this.$nextTick(() => {
|
||||
console.log(`window.SITE_CONFIG['menuList']`, window.SITE_CONFIG['menuList'])
|
||||
// console.log(`window.SITE_CONFIG['menuList']`, window.SITE_CONFIG['menuList'])
|
||||
this.unhiddenMenuList = this.getUnhiddenRoutesListFrom(window.SITE_CONFIG['menuList'])
|
||||
/** 本地保存一份,store保存一份,感觉 store 都不需要保存... */
|
||||
this.$store.state.sidebarMenuList = this.unhiddenMenuList
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
<template>
|
||||
<div v-loading.fullscreen.lock="loading" :element-loading-text="$t('loading')" :class="['aui-wrapper', { 'aui-sidebar--fold': $store.state.sidebarFold }]">
|
||||
<template v-if="!loading">
|
||||
<main-navbar />
|
||||
<main-sidebar />
|
||||
<div class="aui-content__wrapper">
|
||||
<main-navbar/>
|
||||
<main-sidebar v-if="this.$route.meta.hiddenSiderbar !== true"/>
|
||||
<div :class="[this.$route.meta.hiddenSiderbar !== true? 'aui-content__wrapper':'aui-sidebar.close']">
|
||||
<main-content v-if="!$store.state.contentIsNeedRefresh" />
|
||||
</div>
|
||||
<footerbar />
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Footerbar from './Footerbar'
|
||||
import MainNavbar from './main-navbar'
|
||||
import MainSidebar from './main-sidebar'
|
||||
import MainContent from './main-content'
|
||||
@@ -35,7 +37,8 @@ export default {
|
||||
components: {
|
||||
MainNavbar,
|
||||
MainSidebar,
|
||||
MainContent
|
||||
MainContent,
|
||||
Footerbar
|
||||
},
|
||||
watch: {
|
||||
$route: 'routeHandle'
|
||||
@@ -50,12 +53,13 @@ export default {
|
||||
methods: {
|
||||
// 窗口改变大小
|
||||
windowResizeHandle() {
|
||||
this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false
|
||||
this.$store.state.sidebarFold = ((document.documentElement['clientWidth'] <= 992) && (this.$route.name !== "home")) || false
|
||||
window.addEventListener(
|
||||
'resize',
|
||||
// 防抖
|
||||
debounce(() => {
|
||||
this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false
|
||||
// this.$store.state.sidebarFold = document.documentElement['clientWidth'] <= 992 || false
|
||||
this.$store.state.sidebarFold = ((document.documentElement['clientWidth'] <= 992) && (this.$route.name !== "home")) || false
|
||||
}, 150)
|
||||
)
|
||||
},
|
||||
@@ -64,6 +68,7 @@ export default {
|
||||
if (!route.meta.isTab) {
|
||||
return false
|
||||
}
|
||||
// console.log('tab',this.$store.state.contentTabs);
|
||||
var tab = this.$store.state.contentTabs.filter(item => item.name === route.name)[0]
|
||||
if (!tab) {
|
||||
tab = {
|
||||
|
||||
@@ -1,47 +1,244 @@
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-12-09 15:44:37
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2022-12-11 20:47:56
|
||||
-->
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<!-- <div class="mod-home">
|
||||
<h3>项目介绍</h3>
|
||||
<ul>
|
||||
<li>
|
||||
renren-ui基于vue、element-ui构建开发,实现<a href="https://gitee.com/renrenio/renren-ui" target="_blank">renren-security</a>后台管理前端功能,提供一套更优的前端解决方案
|
||||
</li>
|
||||
<li>前后端分离,通过token进行数据交互,可独立部署</li>
|
||||
<li>动态菜单,通过菜单管理统一管理访问路由</li>
|
||||
<li>演示地址:<a href="http://demo.open.renren.io/renren-security" target="_blank">http://demo.open.renren.io/renren-security</a> (账号密码:admin/admin)</li>
|
||||
</ul>
|
||||
<h3>获取帮助</h3>
|
||||
<ul>
|
||||
<li>官方社区:<a href="https://www.renren.io/community" target="_blank">https://www.renren.io/community</a></li>
|
||||
<li>前端Git地址:<a href="https://gitee.com/renrenio/renren-ui" target="_blank">https://gitee.com/renrenio/renren-ui</a></li>
|
||||
<li>后台Git地址:<a href="https://gitee.com/renrenio/renren-security" target="_blank">https://gitee.com/renrenio/renren-security</a></li>
|
||||
<li>如需关注项目最新动态,请Watch、Star项目,同时也是对项目最好的支持</li>
|
||||
</ul>
|
||||
<h3>官方微信群</h3>
|
||||
<ul>
|
||||
<li>扫码下面的二维码,关注【人人开源】公众号,回复【加群】,即可根据提示加入微信群!</li>
|
||||
</ul>
|
||||
<div class="choicepart-container">
|
||||
<!-- <div class="choicepat-navbar">
|
||||
<navbar :showhome="false" :show-title="true" />
|
||||
</div> -->
|
||||
</el-card>
|
||||
<div class="choicepart-box">
|
||||
<div v-for="(item, index) in routeList" :key="item.path" class="choicepart-item" @click="handelClick(item, index)">
|
||||
<!-- :style="{ background: colorArr.colorList[index % 9] }" -->
|
||||
<div class="choicepart-item-border">
|
||||
<img :src="require(`../../assets/img/choicepart/${item.name}.png`)" alt="" />
|
||||
</div>
|
||||
<div class="choicepart-item-title" :title="item.name">{{ item.name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import db from '@/utils/indexDB'
|
||||
// import { mapGetters } from 'vuex'
|
||||
// import { constantRoutes } from '@/router'
|
||||
// import { Navbar } from '@/layout/components'
|
||||
// import { downLoadBGP } from '@/api/user'
|
||||
import store from '@/store'
|
||||
// import { blobToBase64 } from '@/utils/blobToBase64'
|
||||
const colorList = ['#8080ff', '#ff8080', '#b004fb', '#ff409f', '#00caca', '#8080c0', '#cccc00', '#ff8040', '#0c4d9e']
|
||||
const colorList1 = ['#b4b4ff', '#ffb4b4', '#c648fb', '#ff86c2', '#66f6f6', '#a2a2f3', '#ffff9a', '#ffc3a5', '#367cd4']
|
||||
|
||||
export default {
|
||||
created() {
|
||||
this.$router.replace({ name: 'sys-log-login' })
|
||||
name: 'ChoicePart',
|
||||
// components: { Navbar },
|
||||
data() {
|
||||
return {
|
||||
baseImg: require('../../assets/img/login-back.jpg'),
|
||||
coverImgUrl: localStorage.getItem('backImg') || '',
|
||||
rowNum: 1,
|
||||
colorArr: {
|
||||
colorList,
|
||||
colorList1
|
||||
},
|
||||
windowWidth: 0,
|
||||
dbConnect: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
routeList() {
|
||||
// const cangoList = []
|
||||
// const permission_routes = store.getters.permission_routes
|
||||
// console.log(permission_routes)
|
||||
// permission_routes.map(item => {
|
||||
// if (!item.hidden && item.meta) {
|
||||
// cangoList.push(item)
|
||||
// }
|
||||
// })
|
||||
// const formatList = cangoList.map((item, index) => {
|
||||
// return this.setIndex(item, index)
|
||||
// })
|
||||
// console.log(formatList)
|
||||
return window.SITE_CONFIG['menuList']
|
||||
}
|
||||
// ...mapGetters(['language', 'dictList', 'dictObj'])
|
||||
},
|
||||
created() {
|
||||
// 确保小图标点回来依然带字符
|
||||
this.$store.state.sidebarFold = false
|
||||
this.windowWidth = window.innerWidth
|
||||
console.log(this.$route)
|
||||
// this.dbConnect = db({
|
||||
// DBName: 'back_img',
|
||||
// version: '1.0',
|
||||
// params: [
|
||||
// { name: 'id', unique: true },
|
||||
// { name: 'imgUrl', unique: true }
|
||||
// ]
|
||||
// })
|
||||
// const request = this.dbConnect.openDB()
|
||||
// request.onsuccess = () => {
|
||||
// // const result = this.dbConnect.search('back_img', 'id', 1)
|
||||
// }
|
||||
},
|
||||
mounted() {
|
||||
// console.log(this.dictList, this.dictObj)
|
||||
// this.getPic()
|
||||
},
|
||||
methods: {
|
||||
// getPic() {
|
||||
// // edit here
|
||||
// downLoadBGP().then(response => {
|
||||
// if (response.data.size) {
|
||||
// blobToBase64(response.data).then(res => {
|
||||
// this.coverImgUrl = res
|
||||
// localStorage.setItem('backImg', res)
|
||||
// console.log(res)
|
||||
// // const result = this.dbConnect.search('back_img', 'id', 1)
|
||||
// // if (result.result) {
|
||||
// // this.dbConnect.update({
|
||||
// // id: 1,
|
||||
// // imgUrl: res
|
||||
// // })
|
||||
// // } else {
|
||||
// // this.dbConnect.add({
|
||||
// // id: 1,
|
||||
// // imgUrl: res
|
||||
// // })
|
||||
// // }
|
||||
// })
|
||||
// // this.coverImgUrl = response.data
|
||||
// // const temp = response.data.split('/')
|
||||
// // temp.splice(0, 2)
|
||||
// // this.coverImgUrl = 'http://zzdhg.mes.picaiba.com/' + temp.join('/')
|
||||
// }
|
||||
// })
|
||||
// },
|
||||
resize() {},
|
||||
handelClick(item, index) {
|
||||
// this.$store.dispatch('app/setChoicepart', index)
|
||||
// if (item.meta.unuse) {
|
||||
// this.$message.warning(this.$t('choisePart.module'))
|
||||
// } else {
|
||||
// this.toRouter(item)
|
||||
// }
|
||||
// console.log('item',item)
|
||||
this.toRouter(item)
|
||||
},
|
||||
toRouter(item) {
|
||||
// console.log(item.children[0].url)
|
||||
// 加个判断看是否双层children
|
||||
if (item.children && item.children[0].url == '') {
|
||||
this.$router.push({ name: item.children[0].children[0].url.replace(new RegExp('/', 'g'), '-') })
|
||||
} else {
|
||||
this.$router.push({ name: item.children[0].url.replace(new RegExp('/', 'g'), '-') })
|
||||
}
|
||||
},
|
||||
setIndex(list, index) {
|
||||
list.meta.routeIndex = index
|
||||
if (list.children) {
|
||||
list.children.map((item) => {
|
||||
this.setIndex(item, index)
|
||||
})
|
||||
}
|
||||
return list
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.mod-home {
|
||||
line-height: 1.5;
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.choicepart-container {
|
||||
min-width: 100%;
|
||||
min-height: 100vh;
|
||||
// background: linear-gradient(-45deg, rgb(25, 25, 200), rgb(0, 100, 200));
|
||||
background: url('../../assets/img/choicepart/choicepart-back.png') repeat;
|
||||
background-size: cover;
|
||||
overflow-x: scroll;
|
||||
// flex布局
|
||||
.choicepart-box {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
justify-content: center;
|
||||
width: 1440px;
|
||||
margin: 0 auto;
|
||||
margin: 0 auto;
|
||||
padding-top: 16vh;
|
||||
min-height: 100vh;
|
||||
.choicepart-item {
|
||||
display: inline-block;
|
||||
width: 208px;
|
||||
height: 258px;
|
||||
margin: 40px;
|
||||
background: url('../../assets/img/choicepart/choice-item-back.png') no-repeat;
|
||||
background-size: 100% 100%;
|
||||
// border: 1px dashed #fff;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);
|
||||
top: 0;
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
img {
|
||||
width: 208px;
|
||||
height: 258px;
|
||||
}
|
||||
.choicepart-item-border {
|
||||
height: 100%;
|
||||
border-radius: 5px;
|
||||
padding: 0 5px;
|
||||
line-height: 32px;
|
||||
font-size: 28px;
|
||||
font-weight: lighter;
|
||||
color: #2c6bd8;
|
||||
overflow: hidden;
|
||||
}
|
||||
.choicepart-item-title {
|
||||
overflow: hidden;
|
||||
padding: 0 10px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
line-height: 48px;
|
||||
height: 48px;
|
||||
letter-spacing: 2px;
|
||||
background-color: rgba($color: #0b58ff, $alpha: 0.45);
|
||||
}
|
||||
}
|
||||
.choicepart-item:hover {
|
||||
.choicepart-item-title {
|
||||
background-color: rgba($color: #0b58ff, $alpha: 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.choicepat-navbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 10;
|
||||
}
|
||||
}
|
||||
::-webkit-scrollbar-track-piece {
|
||||
//滚动条凹槽的颜色,还可以设置边框属性
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
//滚动条的宽度
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
//滚动条的设置
|
||||
background-color: #dddddd;
|
||||
background-clip: padding-box;
|
||||
min-height: 28px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #bbb;
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="170px">
|
||||
<el-form-item prop="beanName" :label="$t('schedule.beanName')">
|
||||
<el-input v-model="dataForm.beanName" :placeholder="$t('schedule.beanNameTips')"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,11 +1,22 @@
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: fzq
|
||||
* @Date: 2022-11-25 09:51:46
|
||||
* @LastEditors: fzq
|
||||
* @LastEditTime: 2023-01-13 09:04:39
|
||||
-->
|
||||
<template>
|
||||
<el-dialog :visible.sync="visible" :title="$t('schedule.log')" :close-on-click-modal="false" :close-on-press-escape="false" width="75%">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('schedule.jobId') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.jobId" :placeholder="$t('schedule.jobId')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
@@ -78,3 +89,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
@@ -1,12 +1,15 @@
|
||||
<template>
|
||||
<el-card shadow="never" class="aui-card--fill">
|
||||
<div class="mod-job__schedule">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" ref="form" @keyup.enter.native="currentChangeHandle(dataForm.beanName)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('schedule.beanName') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.beanName" :placeholder="$t('schedule.beanName')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(dataForm.beanName)">{{ $t('query') }}</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button v-if="$hasPermission('sys:schedule:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
@@ -27,13 +30,7 @@
|
||||
<el-button v-if="$hasPermission('sys:schedule:log')" type="success" @click="logHandle()">{{ $t('schedule.log') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
v-loading="dataListLoading"
|
||||
:data="dataList"
|
||||
border
|
||||
@selection-change="dataListSelectionChangeHandle"
|
||||
@sort-change="dataListSortChangeHandle"
|
||||
style="width: 100%;">
|
||||
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" @sort-change="dataListSortChangeHandle" style="width: 100%">
|
||||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="beanName" :label="$t('schedule.beanName')" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="params" :label="$t('schedule.params')" header-align="center" align="center"></el-table-column>
|
||||
@@ -78,7 +75,7 @@ import AddOrUpdate from './schedule-add-or-update'
|
||||
import Log from './schedule-log'
|
||||
export default {
|
||||
mixins: [mixinViewModule],
|
||||
data () {
|
||||
data() {
|
||||
return {
|
||||
mixinViewModuleOptions: {
|
||||
getDataListURL: '/sys/schedule/page',
|
||||
@@ -100,11 +97,11 @@ export default {
|
||||
// destroy dialog
|
||||
handleDestroyDialog() {
|
||||
setTimeout(() => {
|
||||
this.addOrUpdateVisible= false
|
||||
}, /** after dialog animated */ 200);
|
||||
this.addOrUpdateVisible = false
|
||||
}, /** after dialog animated */ 200)
|
||||
},
|
||||
// 暂停
|
||||
pauseHandle (id) {
|
||||
pauseHandle(id) {
|
||||
if (!id && this.dataListSelections.length <= 0) {
|
||||
return this.$message({
|
||||
message: this.$t('prompt.deleteBatch'),
|
||||
@@ -112,12 +109,15 @@ export default {
|
||||
duration: 500
|
||||
})
|
||||
}
|
||||
this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.pause') }), this.$t('prompt.title'), {
|
||||
this.$confirm(this.$t('prompt.info', { handle: this.$t('schedule.pause') }), this.$t('prompt.title'), {
|
||||
confirmButtonText: this.$t('confirm'),
|
||||
cancelButtonText: this.$t('cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$http.put(this.$http.adornUrl('/sys/schedule/pause'), id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => {
|
||||
})
|
||||
.then(() => {
|
||||
this.$http
|
||||
.put(this.$http.adornUrl('/sys/schedule/pause'), id ? [id] : this.dataListSelections.map((item) => item.id))
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg)
|
||||
}
|
||||
@@ -129,11 +129,13 @@ export default {
|
||||
this.getDataList()
|
||||
}
|
||||
})
|
||||
}).catch(() => {})
|
||||
}).catch(() => {})
|
||||
})
|
||||
.catch(() => {})
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
// 恢复
|
||||
resumeHandle (id) {
|
||||
resumeHandle(id) {
|
||||
if (!id && this.dataListSelections.length <= 0) {
|
||||
return this.$message({
|
||||
message: this.$t('prompt.deleteBatch'),
|
||||
@@ -141,12 +143,15 @@ export default {
|
||||
duration: 500
|
||||
})
|
||||
}
|
||||
this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.resume') }), this.$t('prompt.title'), {
|
||||
this.$confirm(this.$t('prompt.info', { handle: this.$t('schedule.resume') }), this.$t('prompt.title'), {
|
||||
confirmButtonText: this.$t('confirm'),
|
||||
cancelButtonText: this.$t('cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$http.put(this.$http.adornUrl('/sys/schedule/resume'), id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => {
|
||||
})
|
||||
.then(() => {
|
||||
this.$http
|
||||
.put(this.$http.adornUrl('/sys/schedule/resume'), id ? [id] : this.dataListSelections.map((item) => item.id))
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg)
|
||||
}
|
||||
@@ -158,11 +163,13 @@ export default {
|
||||
this.getDataList()
|
||||
}
|
||||
})
|
||||
}).catch(() => {})
|
||||
}).catch(() => {})
|
||||
})
|
||||
.catch(() => {})
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
// 执行
|
||||
runHandle (id) {
|
||||
runHandle(id) {
|
||||
if (!id && this.dataListSelections.length <= 0) {
|
||||
return this.$message({
|
||||
message: this.$t('prompt.deleteBatch'),
|
||||
@@ -170,12 +177,15 @@ export default {
|
||||
duration: 500
|
||||
})
|
||||
}
|
||||
this.$confirm(this.$t('prompt.info', { 'handle': this.$t('schedule.run') }), this.$t('prompt.title'), {
|
||||
this.$confirm(this.$t('prompt.info', { handle: this.$t('schedule.run') }), this.$t('prompt.title'), {
|
||||
confirmButtonText: this.$t('confirm'),
|
||||
cancelButtonText: this.$t('cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$http.put(this.$http.adornUrl('/sys/schedule/run'), id ? [id] : this.dataListSelections.map(item => item.id)).then(({ data: res }) => {
|
||||
})
|
||||
.then(() => {
|
||||
this.$http
|
||||
.put(this.$http.adornUrl('/sys/schedule/run'), id ? [id] : this.dataListSelections.map((item) => item.id))
|
||||
.then(({ data: res }) => {
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg)
|
||||
}
|
||||
@@ -187,16 +197,46 @@ export default {
|
||||
this.getDataList()
|
||||
}
|
||||
})
|
||||
}).catch(() => {})
|
||||
}).catch(() => {})
|
||||
})
|
||||
.catch(() => {})
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
// 日志列表
|
||||
logHandle () {
|
||||
logHandle() {
|
||||
this.logVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.log.init()
|
||||
})
|
||||
},
|
||||
// 当前页
|
||||
currentChangeHandle(val) {
|
||||
console.log('val', val)
|
||||
this.$nextTick(() => {
|
||||
this.dataForm.beanName = val
|
||||
})
|
||||
this.getDataList()
|
||||
// this.$refs['form'].resetFields()
|
||||
this.dataForm.beanName = ''
|
||||
console.log('this.dataForm', this.dataForm)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
355
src/views/modules/monitoring/downloadLog.vue
Normal file
@@ -0,0 +1,355 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('pl.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- @input="getLineEqList($event)" -->
|
||||
<el-select v-model="dataForm.lineId" :placeholder="$t('pl.name')" clearable filterable >
|
||||
<el-option v-for="line in lineList" :key="line.code" :value="line.id" :label="line.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item>
|
||||
{{ $t('eq.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.equipmentId" :placeholder="$t('eq.name')" clearable filterable>
|
||||
<el-option v-for="eq in eqList" :key="eq.code" :value="eq.id" :label="eq.name" />
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
<el-form-item>
|
||||
{{ $t('startTime') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-date-picker v-model="startTime" type="datetime" :placeholder="$t('hints.date')" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-ddTHH:mm:ss" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
{{ $t('endTime') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-date-picker v-model="endTime" type="datetime" :placeholder="$t('hints.date')" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-ddTHH:mm:ss" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
{{ $t('pl.thick') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="glassThick" :placeholder="$t('pl.thick')">
|
||||
<el-option
|
||||
v-for="item in glassOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- <el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button> -->
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentgroup:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:data="dataList"
|
||||
:table-head-configs="tableConfigs"
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList" />
|
||||
<!-- layout="total, sizes, prev, pager, next, jumper" -->
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
:current-page="pageIndex"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
</el-pagination>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { calcMaxHeight } from '@/utils'
|
||||
import { timeFilter } from '@/utils/filters'
|
||||
import AddOrUpdate from '@/components/base-dialog/addOrUpdate'
|
||||
// import AddOrUpdate from './equipmentGroup-add-or-update'
|
||||
import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
// import TableOperateComponent from '@/components/base-table/components/operationComponent'
|
||||
import TableTextComponent from '@/components/base-table/components/detailComponent'
|
||||
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'lineName', name: i18n.t('pl.name') },
|
||||
{ prop: 'location', name: i18n.t('pl.paperLaying') },
|
||||
{ prop: 'equipmentName', name: i18n.t('pl.robotNo') },
|
||||
{ prop: 'quantity', name: i18n.t('pl.quantity') },
|
||||
{ prop: 'glassNumber', name: i18n.t('pl.glassNumber') },
|
||||
{ prop: 'startTime', name: i18n.t('startTime') },
|
||||
{ prop: 'endTime', name: i18n.t('endTime') },
|
||||
{ prop: 'glassLength', name: i18n.t('pl.glassLength') },
|
||||
{ prop: 'glassWidth', name: i18n.t('pl.glassWidth') },
|
||||
{ prop: 'glassThickness', name: i18n.t('pl.thick') },
|
||||
{
|
||||
prop: 'detail',
|
||||
name: i18n.t('detail'),
|
||||
buttonContent: i18n.t('detail'),
|
||||
subcomponent: TableTextComponent,
|
||||
emitFullData: true,
|
||||
actionName: 'view-detail'
|
||||
}
|
||||
|
||||
// { prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] }
|
||||
]
|
||||
|
||||
const addOrUpdateConfigs = {
|
||||
type: 'dialog',
|
||||
infoUrl: '/monitoring/downloadLog/getTimeDet',
|
||||
fields: [{ name: 'equipmentName', label: i18n.t('eq.groupname') }, { name: 'equipmentName', label: i18n.t('eq.groupname') }],
|
||||
operations: [
|
||||
{ name: 'cancel', showAlways: true },
|
||||
{ name: 'save', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:save', showOnEdit: false },
|
||||
{ name: 'update', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:update', showOnEdit: true }
|
||||
]
|
||||
}
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
addOrUpdateConfigs,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
dataForm: {
|
||||
equipmentId: '',
|
||||
lineId: ''
|
||||
},
|
||||
dataList: [],
|
||||
eqList: [],
|
||||
lineList: [],
|
||||
pageIndex: 1,
|
||||
pageSize: 20,
|
||||
totalPage: 0,
|
||||
dataListLoading: false,
|
||||
dataListSelections: [],
|
||||
addOrUpdateVisible: false,
|
||||
startTime: '',
|
||||
endTime: '',
|
||||
glassNumber: 95,
|
||||
glassLength: 2261,
|
||||
glassWidth: 1128,
|
||||
glassThick: 3.2,
|
||||
glassOptions: [{
|
||||
value: 3.2,
|
||||
label: '3.2mm'
|
||||
}, {
|
||||
value: 2,
|
||||
label: '2mm'
|
||||
}],
|
||||
value: ''
|
||||
}
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
BaseTable
|
||||
},
|
||||
activated() {
|
||||
// this.getEqList()
|
||||
this.getLineList()
|
||||
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
// destroy dialog
|
||||
handleDestroyDialog() {
|
||||
setTimeout(() => {
|
||||
this.addOrUpdateVisible = false
|
||||
}, /** after dialog animated */ 200)
|
||||
},
|
||||
|
||||
// 产线对应设备
|
||||
getLineEqList(event) {
|
||||
// console.log(event)
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/equipment/page'),
|
||||
method: 'get',
|
||||
params: this.$http.adornParams({
|
||||
limit: 99999,
|
||||
page: 1,
|
||||
lineId: event
|
||||
})
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
let fileterEqList = data.data.list.filter((t) => {
|
||||
return t.lineId == event
|
||||
})
|
||||
this.eqList = fileterEqList
|
||||
} else {
|
||||
this.eqList = []
|
||||
}
|
||||
})
|
||||
},
|
||||
// 产线
|
||||
getLineList() {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/productionLine/list'),
|
||||
method: 'get'
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.lineList = data.data
|
||||
} else {
|
||||
this.lineList = []
|
||||
}
|
||||
})
|
||||
},
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.addOrUpdateVisible = false
|
||||
this.dataListLoading = true
|
||||
// this.$http({
|
||||
// url: this.$http.adornUrl('/monitoring/downloadLog/getTimeCount'),
|
||||
// method: 'POST',
|
||||
// params: this.$http.adornParams({
|
||||
// // page: this.pageIndex,
|
||||
// // limit: this.pageSize,
|
||||
// // lineId: this.dataForm.lineId,
|
||||
// 'startTime': this.startTime,
|
||||
// 'endTime': this.endTime
|
||||
// }
|
||||
// )
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/downloadLog/getTimeCount'),
|
||||
method: 'POST',
|
||||
data: {
|
||||
page: this.pageIndex,
|
||||
limit: this.pageSize,
|
||||
// lineId: this.dataForm.lineId,
|
||||
'startTime': this.startTime,
|
||||
'endTime': this.endTime
|
||||
}
|
||||
}).then(({ data }) => {
|
||||
if ((data && data.code === 0) && (this.dataForm.lineId != '')) {
|
||||
// console.log('this.dataForm.lineId', this.dataForm.lineId);
|
||||
let fileterLineList = data.data.filter((t) => {
|
||||
return t.lineId == this.dataForm.lineId
|
||||
})
|
||||
this.dataList = fileterLineList
|
||||
// this.dataList = data.data
|
||||
this.totalPage = this.dataList.length
|
||||
// console.log('this.totalPage',this.totalPage)
|
||||
} else if (this.dataForm.lineId == '') {
|
||||
this.dataList = data.data
|
||||
this.totalPage = data.data.length
|
||||
}
|
||||
else {
|
||||
this.dataList = []
|
||||
this.totalPage = 0
|
||||
}
|
||||
for(let i =0;i<this.dataList.length;i++){
|
||||
this.dataList[i].glassNumber = ( this.glassThick == 3.2 ) ? 95 :150
|
||||
this.dataList[i].glassThickness = this.glassThick
|
||||
this.dataList[i].glassLength = 2261
|
||||
this.dataList[i].glassWidth = 1128
|
||||
this.dataList[i].endTime = this.dataList[i].endTime == null ? '-' : this.dataList[i].endTime
|
||||
this.dataList[i].startTime = this.dataList[i].startTime == null ? '-' : this.dataList[i].startTime
|
||||
}
|
||||
// console.log(this.dataList);
|
||||
this.dataListLoading = false
|
||||
})
|
||||
},
|
||||
// 每页数
|
||||
sizeChangeHandle(val) {
|
||||
this.pageSize = val
|
||||
this.pageIndex = 1
|
||||
this.getDataList()
|
||||
},
|
||||
// 当前页
|
||||
currentChangeHandle(val) {
|
||||
this.pageIndex = val
|
||||
this.getDataList()
|
||||
},
|
||||
// 多选
|
||||
selectionChangeHandle(val) {
|
||||
this.dataListSelections = val
|
||||
},
|
||||
handleOperations({ type, data }) {
|
||||
switch (type) {
|
||||
case 'view-detail':
|
||||
const { equipmentId: id , equipmentName: name} = data
|
||||
this.$router.push({
|
||||
name: 'monitoring-unloadDetail',
|
||||
params: { id, name }
|
||||
})
|
||||
break
|
||||
// case 'edit':
|
||||
// return this.addOrUpdateHandle(id)
|
||||
// case 'delete':
|
||||
// return this.deleteHandle(id)
|
||||
}
|
||||
},
|
||||
// 新增 / 修改
|
||||
addOrUpdateHandle(id) {
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
? [id]
|
||||
: this.dataListSelections.map((item) => {
|
||||
return item.id
|
||||
})
|
||||
this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), {
|
||||
confirmButtonText: i18n.t('confirm'),
|
||||
cancelButtonText: i18n.t('cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/equipmentGroup'),
|
||||
method: 'delete',
|
||||
data: this.$http.adornData(ids, false, 'raw')
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.$message({
|
||||
message: i18n.t('prompt.success'),
|
||||
type: 'success',
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
this.getDataList()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.$message.error(data.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
788
src/views/modules/monitoring/equProductTimesequence.vue
Normal file
@@ -0,0 +1,788 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" @keyup.enter.native="getDataList()" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('pl.name') }}
|
||||
</el-form-item>
|
||||
<!-- 产线 -->
|
||||
<el-form-item>
|
||||
<el-select v-model="lineIds" :placeholder="$t('pl.name')" @change="handleProductLineChange" clearable filterable multiple>
|
||||
<el-option v-for="line in lineList" :key="line.code" :value="line.id" :label="line.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 工序 -->
|
||||
<el-form-item>
|
||||
{{ $t('pl.process') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- <el-select v-model="dataForm.factoryId" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-select> -->
|
||||
<el-select v-model="sectionIds" :placeholder="$t('pl.process')" clearable filterable multiple>
|
||||
<el-option v-for="ws in wsList" :key="ws.id" :value="ws.id" :label="ws.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 时间 -->
|
||||
<el-form-item>
|
||||
{{ $t('time') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- type="datetimerange" -->
|
||||
<!-- <el-date-picker
|
||||
type="daterange"
|
||||
v-model="datetime"
|
||||
value-format="yyyy-MM-ddTHH:mm:ss"
|
||||
:start-placeholder="$t('startTime')"
|
||||
:end-placeholder="$t('endTime')"
|
||||
:range-separator="$t('to')"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
:picker-options="quickOptions"
|
||||
clearable /> -->
|
||||
<el-date-picker v-model="datetime" type="date" :placeholder="$t('hints.date')" format="yyyy-MM-dd" value-format="yyyy-MM-dd" />
|
||||
</el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-form-item>
|
||||
<el-button class="buttonColor" @click="getDataList()">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:qualityinspectionrecord:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
<!-- 添加对比 -->
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="addEq()">{{ $t('pl.add2') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog :visible.sync="dialogVisible" :title="$t('pl.add')" width="30%">
|
||||
<el-select v-model="eqId" style="width: 100%" :placeholder="$t('pl.choose')" clearable filterable>
|
||||
<el-option v-for="eq in dialogEqList" :key="eq.id" :label="eq.name" :value="eq.id" />
|
||||
</el-select>
|
||||
<div slot="footer">
|
||||
<el-button @click="dialogVisible = false">{{ $t('pl.cancel') }}</el-button>
|
||||
<!-- @click="dialogConfirm" -->
|
||||
<el-button type="primary" @click="dialogConfirm">{{ $t('pl.confirm') }}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<div class="quality-inspection-current base-container">
|
||||
<!-- <el-row>
|
||||
<el-col>
|
||||
<small-title :size="'md'">{{ $t('inspect.ioTotal') }}</small-title>
|
||||
<el-row style="margin-top: 12px;">
|
||||
<base-table :data="dataListStatic" :table-head-configs="tableConfigStatic" :max-height="500" @operate-event="handleOperations" @refreshDataList="getDataList" />
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row> -->
|
||||
|
||||
<!-- style="margin-top: 28px;" -->
|
||||
<el-row>
|
||||
<el-col>
|
||||
<el-row>
|
||||
<small-title :size="'md'">{{ $t('diagram2'), }}</small-title>
|
||||
</el-row>
|
||||
<!-- <el-row style="margin-top: 8px">
|
||||
<el-radio-group v-model="dataType" size="medium" @change="handleDataTypeChange">
|
||||
<el-radio-button :label="$t('table2')"></el-radio-button>
|
||||
<el-radio-button :label="$t('graph')"></el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-row> -->
|
||||
<!-- style="margin-top: 12px" -->
|
||||
<!-- <el-row>
|
||||
<base-table
|
||||
:data="dataList"
|
||||
:table-head-configs="tableConfigDynamic"
|
||||
:max-height="500"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList" />
|
||||
</el-row> -->
|
||||
<!-- :series-data="echartsData" -->
|
||||
<!-- v-else -->
|
||||
<el-row>
|
||||
<fake-chart :categories="echartCategories" :type-list="echartCheckTypes" :series="series" :keys="keys" />
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { calcMaxHeight } from '@/utils'
|
||||
import { timeFilter } from '@/utils/filters'
|
||||
import moment from 'moment'
|
||||
import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import SmallTitle from '@/components/small-title'
|
||||
import * as echarts from 'echarts'
|
||||
import { keys } from 'lodash'
|
||||
|
||||
// const tableConfigStatic = [
|
||||
// { type: 'index', width: 100, name: i18n.t('index') },
|
||||
// { name: i18n.t('pl.title'), prop: 'lineName' },
|
||||
// { name: i18n.t('inspect.inTotal'), prop: 'sumUp' },
|
||||
// { name: i18n.t('inspect.outTotal'), prop: 'sumDown' },
|
||||
// { name: i18n.t('inspect.checkTotal'), prop: 'sumCheck' },
|
||||
// { name: i18n.t('inspect.rate'), prop: 'scrapRatio', filter: (val) => (val || val === 0 ? `${val}%` : '-') }
|
||||
// ]
|
||||
const tableConfigDynamic = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ name: i18n.t('pl.name'), prop: '0' }
|
||||
]
|
||||
|
||||
const FakeChart = {
|
||||
name: 'FakeChart',
|
||||
props: {
|
||||
categories: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
typeList: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
keys: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
series: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
calcMaxHeight,
|
||||
chart: null,
|
||||
lineIds: [],
|
||||
// 新加
|
||||
// keys: [],
|
||||
values: [],
|
||||
// finalVal: [],
|
||||
defaultOpts: {
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '12%',
|
||||
top: '20%',
|
||||
bottom: '10%'
|
||||
},
|
||||
title: {
|
||||
text: i18n.t('eq.productQuantity')
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis', //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
|
||||
axisPointer: {
|
||||
// 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
type: 'scroll',
|
||||
top: 10,
|
||||
right: 0,
|
||||
width: '12%',
|
||||
/** 修复文本太长时显示问题 */
|
||||
// formatter: function (name) {
|
||||
// return echarts.format.truncateText(name, 120, '14px Microsoft Yahei', '...')
|
||||
// },
|
||||
tooltip: {
|
||||
show: true
|
||||
},
|
||||
/** end */
|
||||
data: []
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: [
|
||||
'1:00',
|
||||
'2:00',
|
||||
'3:00',
|
||||
'4:00',
|
||||
'5:00',
|
||||
'6:00',
|
||||
'7:00',
|
||||
'8:00',
|
||||
'9:00',
|
||||
'10:00',
|
||||
'11:00',
|
||||
'12:00',
|
||||
'13:00',
|
||||
'14:00',
|
||||
'15:00',
|
||||
'16:00',
|
||||
'17:00',
|
||||
'18:00',
|
||||
'19:00',
|
||||
'20:00',
|
||||
'21:00',
|
||||
'22:00',
|
||||
'23:00',
|
||||
'24:00'
|
||||
],
|
||||
// axisLine: {
|
||||
// show: true,
|
||||
// lineStyle: {
|
||||
// color: 'rgba(219,225,255,1)',
|
||||
// width: 1,
|
||||
// type: 'solid'
|
||||
// }
|
||||
// },
|
||||
axisLabel: {
|
||||
//设置x轴的字
|
||||
show: true,
|
||||
rotate: 0,
|
||||
interval: 0 //使x轴横坐标全部显示
|
||||
// textStyle: {
|
||||
// //x轴字体样式
|
||||
// color: 'rgba(219,225,255,1)',
|
||||
// margin: 15
|
||||
// }
|
||||
}
|
||||
|
||||
// data: ['下片1', '上片1', '磨边机1', '设备13', '钢化炉2', '磨边机2', '设备15', '清洗机1', '钢化炉3']
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
series: [
|
||||
// dynamic
|
||||
// {
|
||||
// name: '',
|
||||
// type: 'line',
|
||||
// data: [],
|
||||
// label: {
|
||||
// normal: {
|
||||
// show: true,
|
||||
// position: 'top'
|
||||
// },
|
||||
// formatter: '{@value}'
|
||||
// }
|
||||
// }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
categories: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.xAxis.data.push(...val)
|
||||
this.defaultOpts.xAxis.data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
keys: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.legend.data.push(...val)
|
||||
this.defaultOpts.legend.data = val
|
||||
// this.defaultOpts.series.name = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
series: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.legend.data.push(...val)
|
||||
this.defaultOpts.series = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
defaultOpts: {
|
||||
handler: function (val) {
|
||||
// console.log('defaullt options change: ', val)
|
||||
this.setOptions()
|
||||
},
|
||||
immediate: true,
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart()
|
||||
// console.log('this.defaultOpts.xAxis.data', this.defaultOpts.xAxis.data)
|
||||
// console.log('this.keys渲染', this.keys)
|
||||
// console.log('this.series渲染', this.series)
|
||||
this.setOptions()
|
||||
window.addEventListener('resize', () => {
|
||||
//监听浏览器窗口大小
|
||||
this.chart.resize()
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
if (!this.chart) {
|
||||
this.chart = echarts.init(document.getElementById('bar-chart'))
|
||||
this.chart.resize()
|
||||
}
|
||||
},
|
||||
setOptions(opts) {
|
||||
/** prop options */
|
||||
if (opts) {
|
||||
// console.log('this.keys渲染', this.keys)
|
||||
// console.log('this.finalVal渲染', this.finalVal)
|
||||
// // 动态添加series
|
||||
// for (let l = 0; l < this.finalVal.length; l++) {
|
||||
// this.defaultOpts.series.push({
|
||||
// name: this.keys[l],
|
||||
// type: 'line',
|
||||
// // stack: '总量',
|
||||
// data: this.finalVal[l]
|
||||
// })
|
||||
// }
|
||||
// console.log('之后的defaultOpts',this.defaultOpts);
|
||||
}
|
||||
if (this.chart) this.chart.setOption(this.defaultOpts, true)
|
||||
}
|
||||
},
|
||||
render: function (h) {
|
||||
return h('div', { attrs: { id: 'bar-chart' }, style: { background: '#eee', width: '100%', height: '300px', padding: '8px' } }, '')
|
||||
}
|
||||
}
|
||||
|
||||
const dict = [i18n.t('table2'), i18n.t('graph')]
|
||||
export default {
|
||||
name: 'QualityInspectionCurrent',
|
||||
components: { BaseTable, SmallTitle, FakeChart },
|
||||
data() {
|
||||
return {
|
||||
// 新加
|
||||
values: [],
|
||||
values2: [],
|
||||
keys: [], // 设备名动态series
|
||||
finalVal: [],
|
||||
series: [],
|
||||
equipments: {},
|
||||
wsList: [],
|
||||
dialogVisible: false,
|
||||
eqId: null,
|
||||
dialogEqList: [],
|
||||
count: 0,
|
||||
// 产线默认产线1
|
||||
// lineIds: ['1'],
|
||||
lineIds: [],
|
||||
sectionIds: [],
|
||||
lineList: [],
|
||||
// tableConfigStatic,
|
||||
tableConfigDynamic,
|
||||
datetime: new Date(),
|
||||
dataListStatic: [],
|
||||
dataListDynamic: [],
|
||||
dataList: [],
|
||||
dict,
|
||||
dataType: dict[0], // 表格 | 图形
|
||||
showGraph: false,
|
||||
// quickOptions: {
|
||||
// shortcuts: [
|
||||
// {
|
||||
// text: i18n.t('today'),
|
||||
// onClick(picker) {
|
||||
// const baseTime = moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 })
|
||||
// const startTime = baseTime.format('yyyy-MM-DDTHH:mm:ss')
|
||||
// const endTime = baseTime.set({ hour: 23, minute: 59, second: 59, millisecond: 999 }).format('yyyy-MM-DDTHH:mm:ss')
|
||||
// picker.$emit('pick', [startTime, endTime])
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
echartCategories: null,
|
||||
echartCheckTypes: [],
|
||||
interval: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
equipmentCount: function () {
|
||||
return Object.keys(this.equipments).length
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getEqList()
|
||||
this.getLineList()
|
||||
this.getWorksetionList()
|
||||
|
||||
this.interval = setInterval(() => {
|
||||
this.$message.info(i18n.t('refresh'))
|
||||
// this.dataListStatic.splice(0)
|
||||
this.series.splice(0)
|
||||
this.getDataList()
|
||||
}, 1000 * 5 * 60)
|
||||
},
|
||||
// activated() {
|
||||
// this.getLineList()
|
||||
// // this.handleProductLineChange(this.lineIds)
|
||||
// // .then(() => {
|
||||
// this.getWorksetionList()
|
||||
// // })
|
||||
// },
|
||||
deactivated() {
|
||||
if (this.interval) {
|
||||
clearInterval(this.interval)
|
||||
this.interval = null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 产线
|
||||
getLineList() {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/productionLine/list'),
|
||||
method: 'get'
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.lineList = data.data
|
||||
// console.log('产线数组', this.lineList)
|
||||
/** set default 默认*/
|
||||
// if (this.lineList.length) {
|
||||
// this.lineIds = [this.lineList[this.lineList.length - 1].id]
|
||||
// }
|
||||
} else {
|
||||
this.lineList = []
|
||||
}
|
||||
// 这样可以出数据
|
||||
this.getDataList()
|
||||
})
|
||||
},
|
||||
handleOperations() {},
|
||||
handleDataTypeChange(value) {
|
||||
this.showGraph = value === dict[0] ? false : true
|
||||
},
|
||||
// 获取工序列表
|
||||
getWorksetionList() {
|
||||
// 分页列表才有根据产线过滤功能
|
||||
// this.wsList = []
|
||||
for (let i = 0; i < this.lineIds.length; i++) {
|
||||
this.$http({
|
||||
// url: this.$http.adornUrl('/monitoring/workshopSection/list'),
|
||||
url: this.$http.adornUrl('/monitoring/workshopSection/page'),
|
||||
method: 'get',
|
||||
params: this.$http.adornParams({
|
||||
limit: 99999,
|
||||
page: 1,
|
||||
lineId: this.lineIds[i]
|
||||
})
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
// this.wsList = res.data.list
|
||||
// ES6 解构 数组合并
|
||||
this.wsList = this.unique([...this.wsList, ...res.data.list])
|
||||
// console.log('this.wsList',this.wsList);
|
||||
/** select 默认选项set default */
|
||||
// if (this.wsList.length) {
|
||||
// this.sectionIds = this.wsList.map((item) => item.id)
|
||||
// // console.log('this.wsList',this.wsList)
|
||||
// } else {
|
||||
// this.sectionIds = null
|
||||
// }
|
||||
} else {
|
||||
this.wsList.splice(0)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
handleProductLineChange(val) {
|
||||
this.wsList = []
|
||||
this.getWorksetionList()
|
||||
},
|
||||
|
||||
getDataList() {
|
||||
// for (var z = 0; z < this.defaultOpts.series.length; z++) {
|
||||
// this.defaultOpts.series[z].data = []
|
||||
// }
|
||||
// this.echartCategories = []
|
||||
// 下面全部要初始化,清空数据
|
||||
// this.series = []
|
||||
this.dataList = []
|
||||
this.finalVal = []
|
||||
this.keys = []
|
||||
this.values = []
|
||||
this.count = 0
|
||||
this.showGraph = false
|
||||
this.dataType = i18n.t('table2')
|
||||
this.echartCategories = null
|
||||
this.echartCheckTypes.splice(0)
|
||||
/** 设置默认日期 */
|
||||
// const startTime = this.datetime[0] || moment().set({ hour: 0, minute: 0, second: 0 }).format('yyyy-MM-DDTHH:mm:ss')
|
||||
// const endTime = this.datetime[1] || moment().set({ hour: 23, minute: 59, second: 59 }).format('yyyy-MM-DDTHH:mm:ss')
|
||||
// console.log('this.datatime',this.datatime)
|
||||
// const startTime = this.datetime ? this.datetime + '-01T00:00:00' : null
|
||||
const startTime = this.datetime ? moment(this.datetime).format('YYYY-MM-DD') + 'T00:00:00' : null
|
||||
const endTime = this.datetime ? moment(this.datetime).format('YYYY-MM-DD') + 'T23:59:59' : null
|
||||
// const endTime = this.datetime ? this.getMonthSE(moment(this.datetime).format('YYYY-MM')) + 'T23:59:59' : null
|
||||
const condition = {
|
||||
startTime,
|
||||
endTime,
|
||||
// 加个判断防止为空时传参[]报错
|
||||
lineIds: this.lineIds.length == 0 ? null : this.lineIds,
|
||||
sectionIds: this.sectionIds.length == 0 ? null : this.sectionIds
|
||||
}
|
||||
/** 获取设备产量时序图数据 */
|
||||
// this.fetchList(startTime, endTime, lineIds).then(({ data: res }) => {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/eqAnalysis/equProductAnalysis'),
|
||||
method: 'POST',
|
||||
data: condition
|
||||
}).then((res) => {
|
||||
if (res.code === 500) {
|
||||
this.dataList.splice(0)
|
||||
this.equipments = {} // 关闭 echarts 的显示
|
||||
this.$message.error(res.msg)
|
||||
} else {
|
||||
/** handle actual data */
|
||||
this.dataList = res.data.data
|
||||
// console.log('this.dataList', this.dataList)
|
||||
//遍历属性
|
||||
this.keys = Object.keys(this.dataList)
|
||||
// console.log('keys', this.keys)
|
||||
this.values = Object.values(this.dataList)
|
||||
for (let c = 0; c < this.values.length; c++) {
|
||||
this.finalVal.push(
|
||||
this.values[c].map((item) => {
|
||||
return item.outputNum
|
||||
})
|
||||
)
|
||||
}
|
||||
// console.log('values', this.values)
|
||||
// console.log('this.finalVal', this.finalVal)
|
||||
this.buildGraphData()
|
||||
/** test data */
|
||||
// this.dataList = [
|
||||
// {
|
||||
// eqId: 'eq-001',
|
||||
// eqName: 'A1预热机',
|
||||
// startTime: '2022-05-04T00:30:34',
|
||||
// endTime: '2022-05-04T08:30:34',
|
||||
// status: 0
|
||||
// },
|
||||
// {
|
||||
// eqId: 'eq-001',
|
||||
// eqName: 'A1预热机',
|
||||
// startTime: '2022-05-04T08:30:34',
|
||||
// endTime: '2022-05-04T09:30:34',
|
||||
// status: 1
|
||||
// },
|
||||
// {
|
||||
// eqId: 'eq-001',
|
||||
// eqName: 'A1预热机',
|
||||
// startTime: '2022-05-04T09:30:34',
|
||||
// endTime: '2022-05-04T11:30:34',
|
||||
// status: 2
|
||||
// },
|
||||
// {
|
||||
// eqId: 'eq-001',
|
||||
// eqName: 'A1预热机',
|
||||
// startTime: '2022-05-04T11:30:34',
|
||||
// endTime: '2022-05-04T13:30:34',
|
||||
// status: 1
|
||||
// }
|
||||
// ]
|
||||
|
||||
// this.equipments = this.transformDataToEquipments(this.dataList)
|
||||
// this.chartOption.setYAxis(Object.keys(this.equipments).map((eId) => this.equipments[eId].name))
|
||||
// console.log('(((set x axis))): ', this.dataList[0].startTime)
|
||||
// this.chartOption.setXAxis(this.dataList[0].startTime)
|
||||
// this.chartOption.setData(this.transformEquipmentsToSeries(this.equipments))
|
||||
|
||||
// this.$nextTick(() => {
|
||||
// this.renderChart()
|
||||
// })
|
||||
}
|
||||
}).catch((err) => {
|
||||
// console.error(err)
|
||||
})
|
||||
},
|
||||
setOptions(opts) {
|
||||
/** prop options */
|
||||
if (opts) {
|
||||
}
|
||||
|
||||
if (this.chart) this.chart.setOption(this.defaultOpts, true)
|
||||
},
|
||||
// 失效函数
|
||||
// parseTableProps(nameData) {
|
||||
// const subProps = []
|
||||
// const labelNameMap = new Map()
|
||||
|
||||
// // if (nameData.length) {
|
||||
// // /** 处理 nameData */
|
||||
// // nameData.forEach((item) => {
|
||||
// // if (!labelNameMap.get(item.name)) {
|
||||
// // labelNameMap.set(item.name, 1)
|
||||
// // subProps.push({ name: item.name, prop: item.name })
|
||||
// // }
|
||||
// // })
|
||||
// // }
|
||||
|
||||
// this.tableConfigDynamic = [
|
||||
// { type: 'index', width: 100, name: i18n.t('index') },
|
||||
// { name: i18n.t('pl.name'), prop: '0' },
|
||||
// ...Array.from(new Set(res.data.data[0].records.map((item) => moment(item.recordTime).format('MM-DD')))).map((name) => ({ prop: String(++this.count), name }))
|
||||
// ]
|
||||
// /** echarts related */
|
||||
// // this.echartCategories = subProps.map((item) => item.name)
|
||||
// this.echartCategories = this.dataListDynamic.map((item) => item.name)
|
||||
// },
|
||||
|
||||
// parseDynamicData(data) {
|
||||
// this.echartCheckTypes.splice(0)
|
||||
// return data.map((item) => {
|
||||
// /** echarts related */
|
||||
// this.echartCheckTypes.push(item.inspectionContent)
|
||||
// if (item.data.length) {
|
||||
// /** 解析子数组 */
|
||||
// item.data.forEach((subitem) => {
|
||||
// item[subitem.dynamicName] = subitem.dynamicValue
|
||||
// })
|
||||
// }
|
||||
// return item
|
||||
// })
|
||||
// },
|
||||
|
||||
buildGraphData() {
|
||||
/** 构造 echart 需要的数据 */
|
||||
// 动态添加series
|
||||
this.series = []
|
||||
// console.log('this.finalVal', this.finalVal)
|
||||
// console.log('this.keys', this.keys)
|
||||
for (let l = 0; l < this.finalVal.length; l++) {
|
||||
this.series.push({
|
||||
name: this.keys[l],
|
||||
type: 'line',
|
||||
// stack: '总量',
|
||||
data: this.finalVal[l]
|
||||
})
|
||||
}
|
||||
// console.log('第二部分的series', this.series)
|
||||
},
|
||||
|
||||
fetchList(startTime, endTime, lineIds) {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/eqAnalysis/equProductAnalysis'),
|
||||
method: 'POST',
|
||||
data: {
|
||||
startTime,
|
||||
endTime,
|
||||
lineIds: this.lineIds
|
||||
}
|
||||
}).catch((err) => {
|
||||
console.error(err)
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 默认当前月
|
||||
* date 带月份的日期,例:2021-8
|
||||
* 返回月初至月末数组,例:[2021-8-1, 2021-8-31]
|
||||
*/
|
||||
getMonthSE(date) {
|
||||
let nowdays = date ? new Date(date) : new Date()
|
||||
let year = nowdays.getFullYear()
|
||||
let month = nowdays.getMonth() + 1
|
||||
|
||||
if (month < 10) {
|
||||
month = '0' + month
|
||||
}
|
||||
|
||||
let myDate = new Date(year, month, 0)
|
||||
|
||||
let startDate = year + '-' + month + '-01'
|
||||
let endDate = year + '-' + month + '-' + myDate.getDate()
|
||||
|
||||
// return [startDate, endDate]
|
||||
return endDate
|
||||
},
|
||||
// 数组转对象
|
||||
// toObject(pairs) {
|
||||
// return Array.from(pairs).reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }), {})
|
||||
// },
|
||||
// 获取对话框里的设备列表
|
||||
getEqList() {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/equipment/page'),
|
||||
method: 'get',
|
||||
params: this.$http.adornParams({
|
||||
page: 1,
|
||||
limit: 99999
|
||||
})
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.dialogEqList = data.data.list
|
||||
} else {
|
||||
this.dialogEqList.splice(0)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 添加设备
|
||||
addEq() {
|
||||
// console.log('this.equipments',this.equipments);
|
||||
if (this.series) {
|
||||
this.dialogVisible = true
|
||||
} else {
|
||||
this.$message.warning(this.$t('pl.queryFirst'))
|
||||
}
|
||||
},
|
||||
|
||||
// 确认添加设备
|
||||
dialogConfirm() {
|
||||
let startTime = this.datetime ? moment(this.datetime).format('YYYY-MM-DD') + 'T00:00:00' : null
|
||||
let endTime = this.datetime ? moment(this.datetime).format('YYYY-MM-DD') + 'T23:59:59' : null
|
||||
const condition = {
|
||||
startTime,
|
||||
endTime,
|
||||
// productlines: [this.dataForm.productlines],
|
||||
// wsId: this.dataForm.wsId,
|
||||
equId: this.eqId
|
||||
}
|
||||
|
||||
/** fetch data */
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/eqAnalysis/equProductAnalysis'),
|
||||
method: 'post',
|
||||
data: condition
|
||||
}).then(({ data: res }) => {
|
||||
if (res.code === 500) {
|
||||
this.$message.error(res.msg)
|
||||
} else {
|
||||
// console.log('res',res)
|
||||
//遍历属性
|
||||
this.keys = [...Object.keys(res.data),...this.keys]
|
||||
// console.log('this.finalVal', this.finalVal)
|
||||
console.log('keys', this.keys)
|
||||
this.values = Object.values(res.data)
|
||||
// console.log('values', this.values)
|
||||
// 初始化values2
|
||||
this.values2 = []
|
||||
for (let c = 0; c < this.values.length; c++) {
|
||||
this.values2.push(
|
||||
this.values[c].map((item) => {
|
||||
return item.outputNum
|
||||
})
|
||||
)
|
||||
}
|
||||
console.log('values2', this.values2)
|
||||
this.finalVal = [...this.values2,...this.finalVal]
|
||||
console.log('this.finalVal', this.finalVal)
|
||||
this.$message.success(this.$t('pl.success'))
|
||||
this.$nextTick(() => {
|
||||
this.dialogVisible = false
|
||||
this.buildGraphData()
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
// 数组去重
|
||||
unique(arr) {
|
||||
return Array.from(new Set(arr))
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.base-container {
|
||||
min-height: 60vh;
|
||||
background: #fff;
|
||||
padding: 12px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
@@ -1,17 +1,21 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{$t('eq.name')}}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button>
|
||||
<el-button v-if="$hasPermission('monitoring:equipment:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('search') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipment:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
<el-button v-if="$hasPermission('monitoring:equipment:export')" @click="exportHandle()">{{ $t('export') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:top-btn-config="topBtnConfig"
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
@@ -19,6 +23,7 @@
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList"
|
||||
@clickTopBtn="clickTopBtn"
|
||||
/>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -52,10 +57,16 @@ import CKEditor from 'ckeditor4-vue'
|
||||
import { calcMaxHeight } from '@/utils'
|
||||
import { timeFilter } from '@/utils/filters'
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{
|
||||
@@ -278,6 +289,7 @@ const addOrUpdateConfigs = {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
addOrUpdateConfigs,
|
||||
@@ -400,7 +412,7 @@ export default {
|
||||
if (data && data.code === 0) {
|
||||
this.dataList = data.data.list
|
||||
// this.dataList = new Array(20).fill('1')
|
||||
// console.log('data list', this.dataList)
|
||||
console.log('data list', this.dataList)
|
||||
this.totalPage = data.data.total
|
||||
} else {
|
||||
this.dataList = []
|
||||
@@ -495,6 +507,12 @@ export default {
|
||||
// }
|
||||
// })
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
@@ -530,3 +548,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="报警信息ID,关联T_equipment_group_alarm表" prop="alarmId">
|
||||
<el-input v-model="dataForm.alarmId" placeholder="报警信息ID,关联T_equipment_group_alarm表"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="设备ID" prop="equipmentId">
|
||||
<el-input v-model="dataForm.equipmentId" placeholder="设备ID"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,23 +1,36 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.lineId" :placeholder="'产线'" clearable>
|
||||
{{ $t('pl.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.lineId" :placeholder="$t('pl.name')" clearable filterable @input="getLineEqList($event)">
|
||||
<el-option v-for="line in lineList" :key="line.code" :value="line.id" :label="line.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.equipmentId" :placeholder="'设备名称'" clearable>
|
||||
{{ $t('eq.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.equipmentId" :placeholder="$t('eq.name')" clearable filterable>
|
||||
<el-option v-for="eq in eqList" :key="eq.code" :value="eq.id" :label="eq.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentgroup:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" />
|
||||
<base-table
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
:table-head-configs="tableConfigs"
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList" />
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
@@ -25,8 +38,7 @@
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" />
|
||||
@@ -46,31 +58,47 @@ import TableTextComponent from '@/components/base-table/components/detailCompone
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'equipmentName', name: i18n.t('realtime.eqName') },
|
||||
{ prop: 'equipmentCode', name: i18n.t('realtime.eqCode') },
|
||||
{ prop: 'inputNum', name: i18n.t('realtime.input') },
|
||||
{ prop: 'outputNum', name: i18n.t('realtime.output') },
|
||||
{
|
||||
prop: 'inputNum',
|
||||
name: i18n.t('realtime.input'),
|
||||
filter: (val) => {
|
||||
if (val !== null && val !== undefined) return val ? val : '-'
|
||||
else return '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'outputNum',
|
||||
name: i18n.t('realtime.output'),
|
||||
filter: (val) => {
|
||||
if (val !== null && val !== undefined) return val ? val : '-'
|
||||
else return '-'
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'run',
|
||||
name: i18n.t('realtime.runState'),
|
||||
filter: val => {
|
||||
if (val !== null && val !== undefined) return val ? '是' : '否'
|
||||
filter: (val) => {
|
||||
if (val !== null && val !== undefined) return val ? i18n.t('yes') : i18n.t('no')
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'status',
|
||||
name: i18n.t('realtime.state'),
|
||||
filter: val => {
|
||||
if (val !== null && val !== undefined) return ['正常', '计划停机', '故障'][+val]
|
||||
filter: (val) => {
|
||||
if (val == 9) return i18n.t('unknown')
|
||||
if (val !== null && val !== undefined) return [i18n.t('normal'), i18n.t('planStop'), i18n.t('malfunction')][+val]
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'error',
|
||||
name: i18n.t('realtime.hasFault'),
|
||||
filter: val => {
|
||||
if (val !== null && val !== undefined) return val ? '是' : '否'
|
||||
filter: (val) => {
|
||||
if (val !== null && val !== undefined) return val ? i18n.t('yes') : i18n.t('no')
|
||||
}
|
||||
},
|
||||
{ prop: 'quantityTime', name: i18n.t('realtime.productionSnapshotTime'), filter: timeFilter },
|
||||
@@ -123,22 +151,27 @@ export default {
|
||||
BaseTable
|
||||
},
|
||||
activated() {
|
||||
this.getEqList()
|
||||
// this.getEqList()
|
||||
this.getLineList()
|
||||
this.getEqList()
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
// destroy dialog
|
||||
handleDestroyDialog() {
|
||||
setTimeout(() => {
|
||||
this.addOrUpdateVisible= false
|
||||
}, /** after dialog animated */ 200);
|
||||
this.addOrUpdateVisible = false
|
||||
}, /** after dialog animated */ 200)
|
||||
},
|
||||
// 设备
|
||||
getEqList() {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/equipment/page'),
|
||||
method: 'get'
|
||||
method: 'get',
|
||||
params: this.$http.adornParams({
|
||||
limit: 99999,
|
||||
page: 1
|
||||
})
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.eqList = data.data.list
|
||||
@@ -147,6 +180,28 @@ export default {
|
||||
}
|
||||
})
|
||||
},
|
||||
// 产线对应设备
|
||||
getLineEqList(event) {
|
||||
console.log(event)
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/equipment/page'),
|
||||
method: 'get',
|
||||
params: this.$http.adornParams({
|
||||
limit: 99999,
|
||||
page: 1,
|
||||
lineId: event
|
||||
})
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
let fileterEqList = data.data.list.filter((t) => {
|
||||
return t.lineId == event
|
||||
})
|
||||
this.eqList = fileterEqList
|
||||
} else {
|
||||
this.eqList = []
|
||||
}
|
||||
})
|
||||
},
|
||||
// 产线
|
||||
getLineList() {
|
||||
this.$http({
|
||||
@@ -225,7 +280,7 @@ export default {
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
? [id]
|
||||
: this.dataListSelections.map(item => {
|
||||
: this.dataListSelections.map((item) => {
|
||||
return item.id
|
||||
})
|
||||
this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), {
|
||||
@@ -256,3 +311,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,22 +1,31 @@
|
||||
<template>
|
||||
<!-- 设备效率分析 -->
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<!-- 工厂 -->
|
||||
<el-form-item>
|
||||
{{ $t('factory.title') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- <el-select v-model="dataForm.factoryId" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-select> -->
|
||||
<el-select v-model="dataForm.ftId" :placeholder="$t('factory.title')" clearable>
|
||||
<el-select v-model="dataForm.ftId" :placeholder="$t('factory.title')" @change="handleftIdChange" clearable filterable>
|
||||
<el-option v-for="factory in factoryList" :key="factory.id" :value="factory.id" :label="factory.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 产线 -->
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" multiple clearable>
|
||||
{{ $t('pl.title') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" multiple clearable filterable>
|
||||
<el-option v-for="productLine in productLineList" :key="productLine.id" :value="productLine.id" :label="productLine.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 时间类型 -->
|
||||
<!-- 按时间段 -->
|
||||
<el-form-item>
|
||||
{{ $t('timetype') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="timeType" :placeholder="$t('timetype')" clearable>
|
||||
<el-option value="range" :label="$t('reftimerange')" />
|
||||
@@ -24,6 +33,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 日期选择 -->
|
||||
<el-form-item>
|
||||
{{ $t('time') }}
|
||||
</el-form-item>
|
||||
<el-form-item v-if="timeType === 'date'">
|
||||
<el-date-picker key="range-picker" v-model="rawTime" type="date" :placeholder="$t('hints.date')" format="yyyy-MM-dd" />
|
||||
</el-form-item>
|
||||
@@ -41,7 +53,7 @@
|
||||
</el-form-item>
|
||||
<!-- 按钮 -->
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('search') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentEffiency:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -77,6 +89,7 @@ import moment from 'moment'
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{
|
||||
@@ -112,8 +125,8 @@ const tableConfigs = [
|
||||
{
|
||||
name: i18n.t('eq.speedlost'),
|
||||
children: [
|
||||
{ prop: 'realYield', name: i18n.t('eq.realyield'), width: 120, filter: val => `${val} `+i18n.t('hour') },
|
||||
{ prop: 'designYield', name: i18n.t('eq.designyield'), width: 120, filter: val => `${val} `+i18n.t('hour') },
|
||||
{ prop: 'realYield', name: i18n.t('eq.realyield'), width: 120, filter: val => `${val} `+'/'+i18n.t('hour') },
|
||||
{ prop: 'designYield', name: i18n.t('eq.designyield'), width: 120, filter: val => `${val} `+'/'+i18n.t('hour') },
|
||||
{ prop: 'peEfficiency', name: i18n.t('eq.speedefficiency'), width: 120, filter: val => (val * 100).toFixed(2) + '%' }
|
||||
]
|
||||
},
|
||||
@@ -194,7 +207,7 @@ export default {
|
||||
this.factoryList = res.data
|
||||
/** set default */
|
||||
if (this.factoryList.length) {
|
||||
this.dataForm.ftId = this.factoryList[0].id
|
||||
// this.dataForm.ftId = this.factoryList[0].id
|
||||
}
|
||||
} else {
|
||||
this.factoryList = []
|
||||
@@ -223,14 +236,16 @@ export default {
|
||||
if (res && res.code === 0 && res.data.length) {
|
||||
this.productLineList = res.data
|
||||
/** set default */
|
||||
this.dataForm.productlines = [this.productLineList[0].id]
|
||||
// this.dataForm.productlines = [this.productLineList[0].id]
|
||||
} else {
|
||||
this.productLineList = []
|
||||
this.dataForm.productlines = []
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
handleftIdChange() {
|
||||
this.getProductLineList()
|
||||
},
|
||||
// 时间类型预处理
|
||||
getTimeRange() {
|
||||
let startTime
|
||||
@@ -372,4 +387,18 @@ export default {
|
||||
.slide-to-left-enter-to {
|
||||
transform: translateX(0);
|
||||
}
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
/*
|
||||
* @Author: lb
|
||||
* @Date: 2022-07-24 13:30:00
|
||||
* @LastEditTime: 2022-07-28 09:30:00
|
||||
* @LastEditors: lb
|
||||
* @LastEditTime: 2023-02-09 15:25:13
|
||||
* @LastEditors: fzq
|
||||
* @Description: 设备效率分析-echarts图
|
||||
*/
|
||||
-->
|
||||
<template>
|
||||
<div class="graph-area">
|
||||
<span class="close-btn" @click="close">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="height: 100%; width: 100%;" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="height: 100%; width: 100%" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
||||
</svg>
|
||||
</span>
|
||||
@@ -21,12 +21,12 @@
|
||||
<el-radio-button :label="$t('eq.time')" />
|
||||
</el-radio-group>
|
||||
|
||||
<el-radio-group v-if="1" v-model="searchType" class="head-radio-group" style="margin-left: 8px;" size="small" @change="handleRadioGroupChanged">
|
||||
<el-radio-group v-if="1" v-model="searchType" class="head-radio-group" style="margin-left: 8px" size="small" @change="handleRadioGroupChanged">
|
||||
<el-radio-button v-for="(opt, index) in searchRadioOptions" :key="index" :label="opt" />
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div id="trend-graph" class="real-graph" style="width: 100%; height: 500px;" />
|
||||
<div id="trend-graph" class="real-graph" style="width: 100%; height: 500px" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -131,6 +131,7 @@ export default {
|
||||
this.config.setTitle(this.injectData.equipmentName + i18n.t('eq.timetrend'))
|
||||
await this.getList()
|
||||
this.setLegend()
|
||||
// console.log('this.dataType',this.dataType);
|
||||
},
|
||||
|
||||
init(data) {
|
||||
@@ -181,14 +182,14 @@ export default {
|
||||
getList() {
|
||||
const params = this.makeQuerys()
|
||||
// 发起请求
|
||||
return this.getOEE(params).then(datalist => {
|
||||
return this.getOEE(params).then((datalist) => {
|
||||
console.log('getOEE res:', datalist)
|
||||
this.timeList.splice(0)
|
||||
this.rateList.splice(0)
|
||||
this.xAxis.splice(0)
|
||||
if (datalist.length) {
|
||||
// 分流
|
||||
datalist.map(item => {
|
||||
datalist.map((item) => {
|
||||
const time = moment(item.time)
|
||||
if (this.searchType === i18n.t('eq.monthgap')) {
|
||||
this.xAxis.push(`${time.year()}${i18n.t('eq.year')}${time.month() + 1}${i18n.t('eq.month')}`)
|
||||
@@ -241,7 +242,7 @@ export default {
|
||||
const workTimeList = []
|
||||
const stopTimeList = []
|
||||
const downTimeList = []
|
||||
this.timeList.map(item => {
|
||||
this.timeList.map((item) => {
|
||||
workTimeList.push(item.workTime)
|
||||
stopTimeList.push(item.stopTime)
|
||||
downTimeList.push(item.downTime)
|
||||
@@ -260,7 +261,7 @@ export default {
|
||||
const timeEfficiencyList = []
|
||||
const oeeList = []
|
||||
const teepList = []
|
||||
this.rateList.map(item => {
|
||||
this.rateList.map((item) => {
|
||||
workRateList.push(item.workRate)
|
||||
stopRateList.push(item.stopRate)
|
||||
downRateList.push(item.downRate)
|
||||
@@ -283,6 +284,18 @@ export default {
|
||||
|
||||
// 重新绘制图形
|
||||
renderGraph() {
|
||||
if (this.dataType === i18n.t('eq.time')) {
|
||||
this.config.yAxis = {
|
||||
type: 'value',
|
||||
name: i18n.t('yAxisTime')
|
||||
}
|
||||
} else {
|
||||
this.config.yAxis = {
|
||||
type: 'value',
|
||||
name: i18n.t('yAxisRate')
|
||||
}
|
||||
}
|
||||
console.log('this.dataType', this.dataType)
|
||||
console.log('latest config: ', JSON.stringify(this.config))
|
||||
this.$nextTick(() => {
|
||||
// this.chart.setOption(this.config)
|
||||
@@ -320,11 +333,14 @@ export default {
|
||||
}
|
||||
|
||||
.close-btn:hover {
|
||||
color: #409eff;
|
||||
/* color: #409eff; */
|
||||
color: #0B58FF;
|
||||
}
|
||||
|
||||
.head-radio-group >>> .el-radio-button__orig-radio:checked + .el-radio-button__inner {
|
||||
background-color: #409eff;
|
||||
border-color: #409eff;
|
||||
/* background-color: #409eff;
|
||||
border-color: #409eff; */
|
||||
background-color: #0B58FF;
|
||||
border-color: #0B58FF;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,21 +1,27 @@
|
||||
<template>
|
||||
<!-- 设备效率分析 -->
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('prompt.month') }}
|
||||
</el-form-item>
|
||||
<!-- 月份 -->
|
||||
<el-form-item>
|
||||
<el-date-picker key="month-picker" v-model="rawTime" type="month" :placeholder="$t('prompt.month')" format="yyyy-MM" />
|
||||
</el-form-item>
|
||||
<!-- 产线 -->
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" multiple clearable>
|
||||
{{ $t('pl.title') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" multiple clearable filterable>
|
||||
<el-option v-for="productLine in productLineList" :key="productLine.id" :value="productLine.id" :label="productLine.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 按钮 -->
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('search') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('search') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentEffiency:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -46,10 +52,11 @@ import moment from 'moment'
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
// { prop: 'time', name: '时间', filter: timeFilter },
|
||||
{ prop: 'pdName', name: i18n.t('pl.name') },
|
||||
{ prop: 'pdlName', name: i18n.t('pl.name') },
|
||||
{ prop: 'wsName', name: i18n.t('ws.title') },
|
||||
{ prop: 'eqName', name: i18n.t('eq.title') },
|
||||
{ prop: 'mtbf', name: i18n.t('eq.mtbf'), width: 220 },
|
||||
@@ -128,10 +135,10 @@ export default {
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
this.productLineList = res.data
|
||||
/** set default */
|
||||
if (this.productLineList.length) {
|
||||
this.dataForm.productlines = [this.productLineList[0].id]
|
||||
}
|
||||
/** set default 默认*/
|
||||
// if (this.productLineList.length) {
|
||||
// this.dataForm.productlines = [this.productLineList[0].id]
|
||||
// }
|
||||
} else {
|
||||
this.productLineList = []
|
||||
this.dataForm.productlines = []
|
||||
@@ -202,3 +209,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="设备ID" prop="equipmentId">
|
||||
<el-input v-model="dataForm.equipmentId" placeholder="设备ID"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('eq.groupname') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('eq.groupname') + ' / ' + $t('eq.groupcode')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button v-if="$hasPermission('monitoring:equipmentgroup:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentgroup:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:top-btn-config="topBtnConfig"
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
@@ -18,6 +22,7 @@
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList"
|
||||
@clickTopBtn="clickTopBtn"
|
||||
/>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -43,10 +48,16 @@ import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import TableOperateComponent from '@/components/base-table/components/operationComponent'
|
||||
import TableTextComponent from '@/components/base-table/components/detailComponent'
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
@@ -60,7 +71,7 @@ const tableConfigs = [
|
||||
const addOrUpdateConfigs = {
|
||||
type: 'dialog',
|
||||
infoUrl: '/monitoring/equipmentGroup',
|
||||
fields: [{ name: 'name', required: true, label: i18n.t('eq.groupname') }, { name: 'code', required: true, label: i18n.t('eq.groupcode') }, 'remark'],
|
||||
fields: [{ name: 'name', required: true, label: i18n.t('eq.groupname') }, { name: 'code', required: true, label: i18n.t('eq.groupcode'),api: '/monitoring/equipmentGroupAlarm/getCode' }, 'remark'],
|
||||
operations: [
|
||||
{ name: 'cancel', showAlways: true },
|
||||
{ name: 'save', url: '/monitoring/equipmentGroup', permission: 'monitoring:equipmentgroup:save', showOnEdit: false },
|
||||
@@ -71,6 +82,7 @@ const addOrUpdateConfigs = {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
addOrUpdateConfigs,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
@@ -164,6 +176,12 @@ export default {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
@@ -199,3 +217,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm">
|
||||
<el-form :inline="true" :model="dataForm" class="blueTip" size="small">
|
||||
<el-form-item :label="$t('eq.groupname')">
|
||||
<strong>{{ $route.params.groupName || '--' }}</strong></el-form-item
|
||||
>
|
||||
@@ -17,8 +17,8 @@
|
||||
<el-input :placeholder="$t('alarm.code') + '/' + $t('alarm.content')" v-model="dataForm.key" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button v-if="$route.params.id && $hasPermission('monitoring:equipmentgroupalarm:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$route.params.id && $hasPermission('monitoring:equipmentgroupalarm:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentgroupalarm:delete')" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0">
|
||||
批量删除
|
||||
</el-button> -->
|
||||
@@ -26,6 +26,7 @@
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:top-btn-config="topBtnConfig"
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
@@ -33,6 +34,7 @@
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList"
|
||||
@clickTopBtn="clickTopBtn"
|
||||
/>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -65,10 +67,16 @@ const dictEntries = {
|
||||
alarmType: { value: '1557925215454814210', field: 'typeDictValue' }, // field 和下面 addOrUpdateConfigs 里对应
|
||||
alarmLevel: { value: '1557925289517834242', field: 'gradeDictValue' }
|
||||
}
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
@@ -76,7 +84,7 @@ const tableConfigs = [
|
||||
{ prop: 'typeDictValue', name: i18n.t('alarm.type'), filter: dictFilter(dictEntries.alarmType.value) },
|
||||
{ prop: 'gradeDictValue', name: i18n.t('alarm.level'), filter: dictFilter(dictEntries.alarmLevel.value) },
|
||||
{ prop: 'alarmContent', name: i18n.t('alarm.content') },
|
||||
// { prop: 'externalCode', name: i18n.t('alarm.externalCode') },
|
||||
{ prop: 'externalCode', name: i18n.t('alarm.externalCode') },
|
||||
{ prop: 'description', name: i18n.t('alarm.description') },
|
||||
{ prop: 'remark', name: i18n.t('alarm.remark') },
|
||||
{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] }
|
||||
@@ -90,6 +98,7 @@ const addOrUpdateConfigs = {
|
||||
{ name: 'typeDictValue', label: i18n.t('alarm.type'), type: 'select', options: [] },
|
||||
{ name: 'gradeDictValue', label: i18n.t('alarm.level'), type: 'select', options: [] },
|
||||
{ name: 'alarmContent', label: i18n.t('alarm.content'), required: true },
|
||||
{ name: 'externalCode', label: i18n.t('alarm.externalCode') },
|
||||
{ name: 'description', label: i18n.t('alarm.description') },
|
||||
{ name: 'remark', label: i18n.t('alarm.remark') }
|
||||
// { name: 'externalCode', label: i18n.t('alarm.externalCode') }
|
||||
@@ -105,6 +114,7 @@ export default {
|
||||
mixins: [dictListMixin],
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
addOrUpdateConfigs,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
@@ -212,6 +222,17 @@ export default {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.addOrUpdateConfigs.operations.forEach(item => {
|
||||
if (item.extraFields) {
|
||||
item.extraFields.equipmentGroupId = this.$route.params.id || null
|
||||
}
|
||||
})
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
@@ -247,3 +268,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
@@ -1,13 +1,37 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true">
|
||||
<el-form-item :label="'当前设备id'">
|
||||
<strong>{{ $route.params.id }}</strong></el-form-item
|
||||
>
|
||||
<el-form :inline="true" class="blueTip" size="small">
|
||||
<!-- <el-form-item>
|
||||
{{ $t('eq.plcname') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.lineId" :placeholder="$t('eq.plcname')" clearable>
|
||||
<el-option v-for="line in lineList" :key="line.code" :value="line.id" :label="line.name" />
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item :label="$t('eqId')">
|
||||
<strong>{{ $route.params.id }}</strong>
|
||||
</el-form-item> -->
|
||||
<el-form-item :label="$t('equName')">
|
||||
<strong>{{ equipmentName }}</strong>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('equCode')">
|
||||
<strong>{{ equipmentCode }}</strong>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- <base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" /> -->
|
||||
<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs.length > 3" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs2.length > 3" :data="dataList2" :table-head-configs="tableConfigs2" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs3.length > 3" :data="dataList3" :table-head-configs="tableConfigs3" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs4.length > 3" :data="dataList4" :table-head-configs="tableConfigs4" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs5.length > 3" :data="dataList5" :table-head-configs="tableConfigs5" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs6.length > 3" :data="dataList6" :table-head-configs="tableConfigs6" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs7.length > 3" :data="dataList7" :table-head-configs="tableConfigs7" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs8.length > 3" :data="dataList8" :table-head-configs="tableConfigs8" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs9.length > 3" :data="dataList9" :table-head-configs="tableConfigs9" :max-height="calcMaxHeight(8)" />
|
||||
<base-table v-if="tableConfigs10.length > 3" :data="dataList10" :table-head-configs="tableConfigs10" :max-height="calcMaxHeight(8)" />
|
||||
<!-- <base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" /> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -18,13 +42,35 @@ import AddOrUpdate from '@/components/base-dialog/addOrUpdate'
|
||||
import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import { pick } from 'lodash/object'
|
||||
import equipmentVue from './equipment.vue'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
calcMaxHeight,
|
||||
equipmentName: null,
|
||||
equipmentCode: null,
|
||||
tableConfigs: [],
|
||||
tableConfigs2: [],
|
||||
tableConfigs3: [],
|
||||
tableConfigs4: [],
|
||||
tableConfigs5: [],
|
||||
tableConfigs6: [],
|
||||
tableConfigs7: [],
|
||||
tableConfigs8: [],
|
||||
tableConfigs9: [],
|
||||
tableConfigs10: [],
|
||||
dataLength: null,
|
||||
dataList: [],
|
||||
dataList2: [],
|
||||
dataList3: [],
|
||||
dataList4: [],
|
||||
dataList5: [],
|
||||
dataList6: [],
|
||||
dataList7: [],
|
||||
dataList8: [],
|
||||
dataList9: [],
|
||||
dataList10: [],
|
||||
dataListLoading: false,
|
||||
dataListSelections: []
|
||||
}
|
||||
@@ -39,12 +85,15 @@ export default {
|
||||
mouted() {
|
||||
this.getDataList()
|
||||
},
|
||||
created() {
|
||||
// console.log('params',this.$route.params)
|
||||
},
|
||||
methods: {
|
||||
// destroy dialog
|
||||
handleDestroyDialog() {
|
||||
setTimeout(() => {
|
||||
this.addOrUpdateVisible= false
|
||||
}, /** after dialog animated */ 200);
|
||||
this.addOrUpdateVisible = false
|
||||
}, /** after dialog animated */ 200)
|
||||
},
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
@@ -53,6 +102,10 @@ export default {
|
||||
url: this.$http.adornUrl(`/monitoring/equipmentValueMonitor/runLog/${this.$route.params.id}`),
|
||||
method: 'get'
|
||||
}).then(({ data: res }) => {
|
||||
console.log('/monitoring/equipmentValueMonitor/runLog/', res)
|
||||
this.equipmentName = res.data[0].data[0].equName
|
||||
this.equipmentCode = res.data[0].data[0].equCode
|
||||
this.dataLength = res.data.length
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
@@ -63,13 +116,138 @@ export default {
|
||||
res.data[0].data &&
|
||||
res.data[0].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps(res.data[0].nameData)
|
||||
this.setTableData(res.data[0].data)
|
||||
} else {
|
||||
this.dataList = []
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[1].nameData &&
|
||||
res.data[1].nameData.length > 0 &&
|
||||
res.data[1].data &&
|
||||
res.data[1].data.length > 0
|
||||
) {
|
||||
console.log('res.data[1]',res.data[1])
|
||||
this.setTableProps2(res.data[1].nameData)
|
||||
this.setTableData2(res.data[1].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[2].nameData &&
|
||||
res.data[2].nameData.length > 0 &&
|
||||
res.data[2].data &&
|
||||
res.data[2].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps3(res.data[2].nameData)
|
||||
this.setTableData3(res.data[2].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[3].nameData &&
|
||||
res.data[3].nameData.length > 0 &&
|
||||
res.data[3].data &&
|
||||
res.data[3].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps4(res.data[3].nameData)
|
||||
this.setTableData4(res.data[3].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[4].nameData &&
|
||||
res.data[4].nameData.length > 0 &&
|
||||
res.data[4].data &&
|
||||
res.data[4].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps5(res.data[4].nameData)
|
||||
this.setTableData5(res.data[4].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[5].nameData &&
|
||||
res.data[5].nameData.length > 0 &&
|
||||
res.data[5].data &&
|
||||
res.data[5].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps6(res.data[5].nameData)
|
||||
this.setTableData6(res.data[5].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[6].nameData &&
|
||||
res.data[6].nameData.length > 0 &&
|
||||
res.data[6].data &&
|
||||
res.data[6].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps7(res.data[6].nameData)
|
||||
this.setTableData7(res.data[6].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[7].nameData &&
|
||||
res.data[7].nameData.length > 0 &&
|
||||
res.data[7].data &&
|
||||
res.data[7].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps8(res.data[7].nameData)
|
||||
this.setTableData8(res.data[7].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[8].nameData &&
|
||||
res.data[8].nameData.length > 0 &&
|
||||
res.data[8].data &&
|
||||
res.data[8].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps9(res.data[8].nameData)
|
||||
this.setTableData9(res.data[8].data)
|
||||
}
|
||||
if (
|
||||
res &&
|
||||
res.code === 0 &&
|
||||
res.data &&
|
||||
res.data.length > 0 &&
|
||||
res.data[9].nameData &&
|
||||
res.data[9].nameData.length > 0 &&
|
||||
res.data[9].data &&
|
||||
res.data[9].data.length > 0
|
||||
) {
|
||||
// console.log(this.equipmentName)
|
||||
this.setTableProps10(res.data[9].nameData)
|
||||
this.setTableData10(res.data[9].data)
|
||||
}
|
||||
this.dataListLoading = false
|
||||
})
|
||||
}).catch(()=>{}) //---去除无效报错---
|
||||
},
|
||||
setTableProps(nameData) {
|
||||
this.tableConfigs = [
|
||||
@@ -77,21 +255,291 @@ export default {
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: '时间', filter: timeFilter },
|
||||
{ prop: 'plcCode', name: 'PLC 编码' },
|
||||
{ prop: 'equName', name: '设备名称' },
|
||||
{ prop: 'equCode', name: '设备编码' },
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map(item => item.name))).map(name => ({ prop: name, name }))
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps2(nameData) {
|
||||
this.tableConfigs2 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps3(nameData) {
|
||||
this.tableConfigs3 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps3(nameData) {
|
||||
this.tableConfigs3 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps4(nameData) {
|
||||
this.tableConfigs4 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps5(nameData) {
|
||||
this.tableConfigs5 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps6(nameData) {
|
||||
this.tableConfigs6 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps7(nameData) {
|
||||
this.tableConfigs7 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps8(nameData) {
|
||||
this.tableConfigs8 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps9(nameData) {
|
||||
this.tableConfigs9 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableProps10(nameData) {
|
||||
this.tableConfigs10 = [
|
||||
{
|
||||
type: 'index',
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'time', name: this.$t('ti'), filter: timeFilter },
|
||||
{ prop: 'plcCode', name: this.$t('plcCode') },
|
||||
// { prop: 'equName', name: this.$t('equName') },
|
||||
// { prop: 'equCode', name: this.$t('equCode') },
|
||||
// ...['数值1', '数值2', '数值3'].map(name => {
|
||||
// return { prop: name, name }
|
||||
// })
|
||||
...Array.from(new Set(nameData.map((item) => item.name))).map((name) => ({ prop: name, name }))
|
||||
]
|
||||
// console.log(this.tableConfigs[i]);
|
||||
},
|
||||
setTableData(data) {
|
||||
this.dataList = data.map(item => {
|
||||
this.dataList = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach(param => {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData2(data) {
|
||||
this.dataList2 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData3(data) {
|
||||
this.dataList3 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData4(data) {
|
||||
this.dataList4 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData5(data) {
|
||||
this.dataList5 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData6(data) {
|
||||
this.dataList6 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData7(data) {
|
||||
this.dataList7 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData8(data) {
|
||||
this.dataList8 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData9(data) {
|
||||
this.dataList9 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
return rowItem
|
||||
})
|
||||
},
|
||||
setTableData10(data) {
|
||||
this.dataList10 = data.map((item) => {
|
||||
const rowItem = pick(item, ['time', 'plcCode', 'equName', 'equCode'])
|
||||
if (item.data && item.data.length > 0) {
|
||||
item.data.forEach((param) => {
|
||||
rowItem[param.dynamicName] = param.dynamicValue
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{$t('name')}}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('name') + ' / ' + $t('code')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button v-if="$hasPermission('monitoring:equipmentplc:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentplc:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" />
|
||||
<base-table :top-btn-config="topBtnConfig" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" @clickTopBtn="clickTopBtn"/>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
@@ -35,7 +38,12 @@ import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import TableOperateComponent from '@/components/base-table/components/operationComponent'
|
||||
// import TableTextComponent from '@/components/base-table/components/detailComponent'
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ prop: 'code', name: i18n.t('code') },
|
||||
@@ -83,6 +91,7 @@ const addOrUpdateConfigs = {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
tableConfigs,
|
||||
calcMaxHeight,
|
||||
addOrUpdateConfigs,
|
||||
@@ -165,6 +174,12 @@ export default {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
@@ -200,3 +215,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
@@ -1,16 +1,19 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{$t('eq.name')}}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button v-if="$hasPermission('monitoring:equipmentplcconnect:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentplcconnect:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" />
|
||||
<base-table :top-btn-config="topBtnConfig" :page="pageIndex" :size="pageSize" :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" @clickTopBtn="clickTopBtn"/>
|
||||
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -38,7 +41,12 @@ import TableOperateComponent from '@/components/base-table/components/operationC
|
||||
// import TableTextComponent from '@/components/base-table/components/detailComponent'
|
||||
import { dictFilter } from '@/utils/filters'
|
||||
// import axios from '@/utils/request.js'
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ prop: 'lineName', name: i18n.t('pl.title') },
|
||||
@@ -116,6 +124,7 @@ const addOrUpdateConfigs = {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
addOrUpdateConfigs,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
@@ -156,6 +165,8 @@ export default {
|
||||
// page: this.pageIndex,
|
||||
// limit: this.pageSize,
|
||||
// key: this.dataForm.key
|
||||
limit: 99999,
|
||||
page: 1
|
||||
})
|
||||
}).then(({ data }) => {
|
||||
const eqConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'equipmentId')
|
||||
@@ -171,6 +182,8 @@ export default {
|
||||
// page: this.pageIndex,
|
||||
// limit: this.pageSize,
|
||||
// key: this.dataForm.key
|
||||
limit: 99999,
|
||||
page: 1
|
||||
})
|
||||
}).then(({ data }) => {
|
||||
const plcConfig = this.addOrUpdateConfigs.fields.find(item => item.name === 'plcId')
|
||||
@@ -229,6 +242,12 @@ export default {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
@@ -264,3 +283,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="plc连接表ID" prop="plcConId">
|
||||
<el-input v-model="dataForm.plcConId" placeholder="plc连接表ID"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="设备外部编码" prop="externalCode">
|
||||
<el-input v-model="dataForm.externalCode" placeholder="设备外部编码"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="设备外部代码" prop="externalCode">
|
||||
<el-input v-model="dataForm.externalCode" placeholder="设备外部代码"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,49 +1,58 @@
|
||||
<template>
|
||||
<!-- 设备效率分析 -->
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()" class="blueTip" size="small">
|
||||
<!-- 产线 -->
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.productlines" :placeholder="'产线'" @change="handleProductLineChange" clearable>
|
||||
{{ $t('pl.title') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="dataForm.productlines" :placeholder="$t('pl.title')" @change="handleProductLineChange" clearable filterable>
|
||||
<el-option v-for="productLine in productLineList" :key="productLine.id" :value="productLine.id"
|
||||
:label="productLine.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 工序 -->
|
||||
<el-form-item>
|
||||
{{ $t('pl.process') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- <el-select v-model="dataForm.factoryId" :placeholder="$t('eq.name') + ' / ' + $t('eq.code')" clearable></el-select> -->
|
||||
<el-select v-model="dataForm.wsId" :placeholder="'工序'" clearable>
|
||||
<el-select v-model="dataForm.wsId" :placeholder="$t('pl.process')" clearable filterable>
|
||||
<el-option v-for="ws in wsList" :key="ws.id" :value="ws.id" :label="ws.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 日期选择 -->
|
||||
<el-form-item>
|
||||
<el-date-picker key="date-picker" v-model="rawTime" type="date" :placeholder="'请选择日期'" format="yyyy-MM-dd" />
|
||||
{{ $t('time') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-date-picker key="date-picker" v-model="rawTime" type="date" :placeholder="$t('time')" format="yyyy-MM-dd" />
|
||||
</el-form-item>
|
||||
<!-- 按钮 -->
|
||||
<el-form-item>
|
||||
<el-button @click="getDataList()">{{ $t('search') }}</el-button>
|
||||
<el-button class="buttonColor" @click="getDataList()">{{ $t('search') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmentEffiency:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="success" @click="addEq()">{{ '添加设备' }}</el-button>
|
||||
<el-button type="success" @click="addEq()">{{ $t('pl.add2') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div class="time-chart" style="margin-top: 10px;">
|
||||
<div v-show="equipmentCount > 0" id="time-chart__inner" ref="time-chart__inner" class="time-chart__inner"
|
||||
style="min-height: 50vh;" :style="{ height: autoHeight + 'px', width: '100%' }" />
|
||||
<div v-show="equipmentCount === 0">请先查询数据</div>
|
||||
<div v-show="equipmentCount === 0">{{ $t('pl.queryFirst') }}</div>
|
||||
<!-- <div v-show="equipmentCount === 0">{{ $t('module.basicData.visual.hints.searchFirst') }}</div> -->
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="dialogVisible" :title="'添加设备'" width="30%">
|
||||
<el-select v-model="eqId" style="width: 100%" placeholder="请选择设备" clearable>
|
||||
<el-dialog :visible.sync="dialogVisible" :title="$t('pl.add')" width="30%">
|
||||
<el-select v-model="eqId" style="width: 100%" :placeholder="$t('pl.choose')" clearable filterable>
|
||||
<el-option v-for="eq in dialogEqList" :key="eq.id" :label="eq.name" :value="eq.id" />
|
||||
</el-select>
|
||||
<div slot="footer">
|
||||
<el-button @click="dialogVisible = false">{{ '取消' }}</el-button>
|
||||
<el-button type="primary" @click="dialogConfirm">{{ '确定' }}</el-button>
|
||||
<el-button @click="dialogVisible = false">{{ $t('pl.cancel') }}</el-button>
|
||||
<el-button type="primary" @click="dialogConfirm">{{ $t('pl.confirm') }}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@@ -51,7 +60,7 @@
|
||||
|
||||
<script>
|
||||
import * as echarts from 'echarts'
|
||||
// import i18n from '@/i18n'
|
||||
import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import { calcMaxHeight } from '@/utils'
|
||||
import moment from 'moment'
|
||||
@@ -91,9 +100,9 @@ class ChartOption {
|
||||
this.legend = {
|
||||
data: [
|
||||
// i18n.t('module.basicData.visual.echartLegends.working'),
|
||||
'正常',
|
||||
'停机',
|
||||
'故障'
|
||||
i18n.t('normal'),
|
||||
i18n.t('shutdown'),
|
||||
i18n.t('malfunction')
|
||||
],
|
||||
bottom: '0%',
|
||||
selectedMode: false,
|
||||
@@ -108,7 +117,7 @@ class ChartOption {
|
||||
}
|
||||
this.title = {
|
||||
// text: i18n.t('module.basicData.visual.echartTitles.eqStatus'),
|
||||
text: '设备状态时序图',
|
||||
text: i18n.t('diagram'),
|
||||
left: 'center'
|
||||
}
|
||||
this.xAxis = {
|
||||
@@ -142,9 +151,9 @@ class ChartOption {
|
||||
data: []
|
||||
}
|
||||
this.series = [
|
||||
{ name: /** i18n.t('module.basicData.visual.echartLegends.working') */ '正常', type: 'bar', data: [] },
|
||||
{ name: '停机', type: 'bar', data: [] },
|
||||
{ name: '故障', type: 'bar', data: [] },
|
||||
{ name: /** i18n.t('module.basicData.visual.echartLegends.working') */ i18n.t('normal'), type: 'bar', data: [] },
|
||||
{ name: i18n.t('shutdown'), type: 'bar', data: [] },
|
||||
{ name: i18n.t('malfunction'), type: 'bar', data: [] },
|
||||
{
|
||||
type: 'custom',
|
||||
renderItem: renderItem,
|
||||
@@ -189,7 +198,7 @@ export default {
|
||||
chart: null,
|
||||
chartOption: new ChartOption(),
|
||||
equipments: {},
|
||||
state: ['正常', '停机', '故障'],
|
||||
state: [this.$t('normal'),this.$t('shutdown'),this.$t('malfunction')],
|
||||
colors: ['#4caf50', '#ffb300', '#e53935'],
|
||||
// queryBuffer: {},
|
||||
// tableConfigs,
|
||||
@@ -261,10 +270,10 @@ export default {
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
this.productLineList = res.data
|
||||
/** set default */
|
||||
if (this.productLineList.length) {
|
||||
this.dataForm.productlines = this.productLineList[0].id
|
||||
}
|
||||
/** set default 默认*/
|
||||
// if (this.productLineList.length) {
|
||||
// this.dataForm.productlines = this.productLineList[0].id
|
||||
// }
|
||||
} else {
|
||||
this.productLineList = []
|
||||
}
|
||||
@@ -286,12 +295,12 @@ export default {
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
this.wsList = res.data.list
|
||||
/** set default */
|
||||
if (this.wsList.length) {
|
||||
this.dataForm.wsId = this.wsList[0].id
|
||||
} else {
|
||||
this.dataForm.wsId = null
|
||||
}
|
||||
/** select 默认选项set default */
|
||||
// if (this.wsList.length) {
|
||||
// this.dataForm.wsId = this.wsList[0].id
|
||||
// } else {
|
||||
// this.dataForm.wsId = null
|
||||
// }
|
||||
} else {
|
||||
this.wsList.splice(0)
|
||||
}
|
||||
@@ -338,7 +347,7 @@ export default {
|
||||
value: [index, status.startTime, status.endTime],
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: status.status === '正常' ? '#4caf50' : status.status === '停机' ? '#ffb300' : status.status === '故障' ? '#e53935' : null
|
||||
color: status.status === this.$t('normal') ? '#4caf50' : status.status === this.$t('shutdown') ? '#ffb300' : status.status === this.$t('malfunction') ? '#e53935' : null
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -460,7 +469,7 @@ export default {
|
||||
if (this.equipmentCount) {
|
||||
this.dialogVisible = true
|
||||
} else {
|
||||
this.$message.warning('请先查询数据')
|
||||
this.$message.warning(this.$t('pl.queryFirst'))
|
||||
}
|
||||
},
|
||||
|
||||
@@ -480,8 +489,8 @@ export default {
|
||||
const condition = {
|
||||
startTime,
|
||||
endTime,
|
||||
productlines: [this.dataForm.productlines],
|
||||
wsId: this.dataForm.wsId,
|
||||
// productlines: [this.dataForm.productlines],
|
||||
// wsId: this.dataForm.wsId,
|
||||
eqId: this.eqId
|
||||
}
|
||||
|
||||
@@ -496,13 +505,13 @@ export default {
|
||||
} else {
|
||||
/** handle new equipment */
|
||||
const newEqStatusList = res.data
|
||||
console.log('添加设备', res)
|
||||
// console.log('添加设备', res)
|
||||
const newEq = this.transformDataToEquipments(newEqStatusList)
|
||||
this.$set(this.equipments, Object.keys(newEq)[0], newEq[Object.keys(newEq)[0]])
|
||||
this.chartOption.setYAxis(Object.keys(this.equipments).map(item => this.equipments[item].name))
|
||||
this.chartOption.setData(this.transformEquipmentsToSeries(this.equipments))
|
||||
|
||||
this.$message.success('新设备数据获取成功')
|
||||
this.$message.success(this.$t('pl.success'))
|
||||
this.$nextTick(() => {
|
||||
this.dialogVisible = false
|
||||
this.renderChart()
|
||||
@@ -544,4 +553,18 @@ export default {
|
||||
/* .time-chart__inner {
|
||||
transition: all 300ms ease-out;
|
||||
} */
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('eq.type') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('eq.type')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button v-if="$hasPermission('monitoring:equipmenttype:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:equipmenttype:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:top-btn-config="topBtnConfig"
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
@@ -18,6 +22,7 @@
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList"
|
||||
@clickTopBtn="clickTopBtn"
|
||||
/>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -43,10 +48,16 @@ import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import TableOperateComponent from '@/components/base-table/components/operationComponent'
|
||||
// import TableTextComponent from '@/components/base-table/components/detailComponent'
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
@@ -62,7 +73,7 @@ const addOrUpdateConfigs = {
|
||||
fields: [
|
||||
{ name: 'name', required: true, label: i18n.t('eq.type') },
|
||||
{ name: 'code', required: true, label: i18n.t('eq.typecode'), api: '/monitoring/equipmentType/getCode' },
|
||||
{ name: 'parentId', label: i18n.t('eq.parent'), type: 'cascader', props: { label: 'name', value: 'id', checkStrictly: true, emitPath: false }, options: [] },
|
||||
// { name: 'parentId', label: i18n.t('eq.parent'), type: 'cascader', props: { label: 'name', value: 'id', checkStrictly: true, emitPath: false }, options: [] },
|
||||
'remark'
|
||||
],
|
||||
operations: [
|
||||
@@ -90,6 +101,7 @@ const addOrUpdateConfigs = {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
addOrUpdateConfigs,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
@@ -122,16 +134,16 @@ export default {
|
||||
},
|
||||
// 获取设备类型树形数据
|
||||
getTreeEquipmentType() {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/equipmentType/getTree'),
|
||||
method: 'post'
|
||||
}).then(({ data: res }) => {
|
||||
if (res && res.code === 0 && res.data.length) {
|
||||
this.addOrUpdateConfigs.fields.find(item => item.name === 'parentId').options = res.data
|
||||
} else {
|
||||
this.addOrUpdateConfigs.fields.find(item => item.name === 'parentId').options.splice(0)
|
||||
}
|
||||
})
|
||||
// this.$http({
|
||||
// url: this.$http.adornUrl('/monitoring/equipmentType/getTree'),
|
||||
// method: 'post'
|
||||
// }).then(({ data: res }) => {
|
||||
// if (res && res.code === 0 && res.data.length) {
|
||||
// this.addOrUpdateConfigs.fields.find(item => item.name === 'parentId').options = res.data
|
||||
// } else {
|
||||
// this.addOrUpdateConfigs.fields.find(item => item.name === 'parentId').options.splice(0)
|
||||
// }
|
||||
// })
|
||||
},
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
@@ -188,6 +200,14 @@ export default {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
// 更新树形结构
|
||||
this.getTreeEquipmentType()
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
@@ -223,3 +243,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-dialog :title="!dataForm.id ? i18n.t('add') : i18n.t('update')" :close-on-click-modal="false" :visible.sync="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="170px">
|
||||
<el-form-item label="设备类型ID" prop="equipmentTypeId">
|
||||
<el-input v-model="dataForm.equipmentTypeId" placeholder="设备类型ID"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
@@ -38,6 +38,7 @@ import TableOperateComponent from '@/components/base-table/components/operationC
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('factory.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('factory.name') + ' / ' + $t('factory.code')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button v-if="$hasPermission('monitoring:factory:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:factory:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:top-btn-config="topBtnConfig"
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
@@ -18,6 +22,7 @@
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList"
|
||||
@clickTopBtn="clickTopBtn"
|
||||
/>
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -26,8 +31,7 @@
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
>
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" />
|
||||
@@ -43,10 +47,16 @@ import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import TableOperateComponent from '@/components/base-table/components/operationComponent'
|
||||
// import TableTextComponent from '@/components/base-table/components/detailComponent'
|
||||
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{
|
||||
type: 'index',
|
||||
width: 100,
|
||||
name: i18n.t('index')
|
||||
},
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
@@ -85,6 +95,7 @@ const addOrUpdateConfigs = {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
calcMaxHeight,
|
||||
addOrUpdateConfigs,
|
||||
tableConfigs,
|
||||
@@ -168,11 +179,17 @@ export default {
|
||||
this.$refs.addOrUpdate.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.addOrUpdateVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init()
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id) {
|
||||
var ids = id
|
||||
? [id]
|
||||
: this.dataListSelections.map(item => {
|
||||
: this.dataListSelections.map((item) => {
|
||||
return item.id
|
||||
})
|
||||
this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), {
|
||||
@@ -203,3 +220,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="currentChangeHandle(1)" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('prod.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- {{$t('prod.name')}} -->
|
||||
<el-input v-model="dataForm.key" :placeholder="$t('prod.name') + ' / ' + $t('prod.code')" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<el-button class="buttonColor" @click="currentChangeHandle(1)">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button @click="addOrEdit()">测试</el-button> -->
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
<el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrEdit()">{{ $t('add') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrEdit()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<base-table
|
||||
:top-btn-config="topBtnConfig"
|
||||
:page="pageIndex"
|
||||
:size="pageSize"
|
||||
:data="dataList"
|
||||
@@ -20,7 +25,7 @@
|
||||
:max-height="calcMaxHeight(8)"
|
||||
@operate-event="handleOperations"
|
||||
@refreshDataList="getDataList"
|
||||
/>
|
||||
@clickTopBtn="clickTopBtn" />
|
||||
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@@ -29,8 +34,8 @@
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
></el-pagination>
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<!-- <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> -->
|
||||
<base-dialog v-if="showbasedialog" ref="basedialog" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="handleDestroyDialog" />
|
||||
@@ -52,6 +57,12 @@ import { dictFilter } from '@/utils/filters'
|
||||
|
||||
const UnitDictTypeId = '1557173812109242370'
|
||||
const ProductTypeDictTypeId = '1557179530308616193'
|
||||
const topBtnConfig = [
|
||||
{
|
||||
type: 'add',
|
||||
btnName: i18n.t('add')
|
||||
}
|
||||
]
|
||||
const tableConfigs = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
@@ -89,7 +100,7 @@ const addOrUpdateConfigs = {
|
||||
{
|
||||
type: 'number',
|
||||
trigger: 'blur',
|
||||
transform: val => Number(val),
|
||||
transform: (val) => Number(val),
|
||||
message: i18n.t('hints.number')
|
||||
}
|
||||
]
|
||||
@@ -115,7 +126,7 @@ const addOrUpdateConfigs = {
|
||||
name: 'area',
|
||||
label: i18n.t('prod.area'),
|
||||
type: 'number',
|
||||
rules: [{ type: 'number', transform: val => Number(val), message: i18n.t('hints.number'), trigger: 'blur' }]
|
||||
rules: [{ type: 'number', transform: (val) => Number(val), message: i18n.t('hints.number'), trigger: 'blur' }]
|
||||
},
|
||||
'specifications',
|
||||
'remark'
|
||||
@@ -132,7 +143,9 @@ const addOrUpdateConfigs = {
|
||||
relatedField: 'productId',
|
||||
tableConfigs: [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: val => (val ? moment(val).format('YYYY-MM-DD hh:mm:ss') : '-') },
|
||||
// 12小时制的时间
|
||||
// { prop: 'createTime', name: i18n.t('createTime'), filter: (val) => (val ? moment(val).format('YYYY-MM-DD hh:mm:ss') : '-') },
|
||||
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
|
||||
{ prop: 'name', name: i18n.t('attrName'), formField: true, rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }] },
|
||||
{ prop: 'code', name: i18n.t('attrValue'), formField: true },
|
||||
{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] }
|
||||
@@ -144,6 +157,7 @@ export default {
|
||||
mixins: [dictListMixin],
|
||||
data() {
|
||||
return {
|
||||
topBtnConfig,
|
||||
calcMaxHeight,
|
||||
tableConfigs,
|
||||
dataForm: {
|
||||
@@ -167,7 +181,7 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.initDictList([UnitDictTypeId, ProductTypeDictTypeId])
|
||||
this.addOrUpdateConfigs.fields.forEach(item => {
|
||||
this.addOrUpdateConfigs.fields.forEach((item) => {
|
||||
if (item.name) {
|
||||
if (item.name === 'typeDictValue') {
|
||||
item.options = this.dictList[ProductTypeDictTypeId]
|
||||
@@ -176,6 +190,7 @@ export default {
|
||||
}
|
||||
}
|
||||
})
|
||||
console.log(this.$route)
|
||||
},
|
||||
activated() {
|
||||
this.getDataList()
|
||||
@@ -193,6 +208,12 @@ export default {
|
||||
this.$refs.basedialog.init(id)
|
||||
})
|
||||
},
|
||||
clickTopBtn() {
|
||||
this.showbasedialog = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.basedialog.init()
|
||||
})
|
||||
},
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
// console.log("after dialog close: ", this.showbasedialog)
|
||||
@@ -256,7 +277,7 @@ export default {
|
||||
var ids = id
|
||||
? [id]
|
||||
: // ? [1556817256347828335]
|
||||
this.dataListSelections.map(item => {
|
||||
this.dataListSelections.map((item) => {
|
||||
return item.id
|
||||
})
|
||||
this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), {
|
||||
@@ -290,3 +311,20 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.blueTip::before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
</style>
|
||||
|
||||
729
src/views/modules/monitoring/productAnalysis.vue
Normal file
@@ -0,0 +1,729 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<el-form :inline="true" @keyup.enter.native="getDataList()" class="blueTip" size="small">
|
||||
<el-form-item>
|
||||
{{ $t('pl.name') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-select v-model="lineIds" :placeholder="$t('pl.name')" clearable filterable multiple>
|
||||
<el-option v-for="line in lineList" :key="line.code" :value="line.id" :label="line.name" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
{{ $t('time') }}
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- type="datetimerange" -->
|
||||
<!-- <el-date-picker
|
||||
type="daterange"
|
||||
v-model="datetime"
|
||||
value-format="yyyy-MM-ddTHH:mm:ss"
|
||||
:start-placeholder="$t('startTime')"
|
||||
:end-placeholder="$t('endTime')"
|
||||
:range-separator="$t('to')"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
:picker-options="quickOptions"
|
||||
clearable /> -->
|
||||
<el-date-picker v-model="datetime" type="month" :placeholder="$t('hints.date')" format="yyyy-MM" value-format="yyyy-MM" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button class="buttonColor" @click="getDataList()">{{ $t('query') }}</el-button>
|
||||
<!-- <el-button v-if="$hasPermission('monitoring:qualityinspectionrecord:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div class="quality-inspection-current base-container">
|
||||
<!-- <el-row>
|
||||
<el-col>
|
||||
<small-title :size="'md'">{{ $t('inspect.ioTotal') }}</small-title>
|
||||
<el-row style="margin-top: 12px;">
|
||||
<base-table :data="dataListStatic" :table-head-configs="tableConfigStatic" :max-height="500" @operate-event="handleOperations" @refreshDataList="getDataList" />
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row> -->
|
||||
|
||||
<!-- style="margin-top: 28px;" -->
|
||||
<el-row>
|
||||
<el-col>
|
||||
<el-row>
|
||||
<small-title :size="'md'">{{ $t('eq.productionAnalysis') }}</small-title>
|
||||
</el-row>
|
||||
<!-- <el-row style="margin-top: 8px">
|
||||
<el-radio-group v-model="dataType" size="medium" @change="handleDataTypeChange">
|
||||
<el-radio-button :label="$t('table2')"></el-radio-button>
|
||||
<el-radio-button :label="$t('graph')"></el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-row> -->
|
||||
<!-- style="margin-top: 12px" -->
|
||||
<el-row>
|
||||
<!-- v-if="!showGraph" -->
|
||||
<base-table :data="dataList" :table-head-configs="tableConfigDynamic" :max-height="500" @operate-event="handleOperations" @refreshDataList="getDataList" />
|
||||
</el-row>
|
||||
<!-- :series-data="echartsData" -->
|
||||
<!-- v-else -->
|
||||
<el-row style="margin-top: 8px">
|
||||
<fake-chart
|
||||
:categories="echartCategories"
|
||||
:type-list="echartCheckTypes"
|
||||
:series-data1="echartsData1"
|
||||
:series-data2="echartsData2"
|
||||
:series-data3="echartsData3"
|
||||
:series-data4="echartsData4" />
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { calcMaxHeight } from '@/utils'
|
||||
import { timeFilter } from '@/utils/filters'
|
||||
import moment from 'moment'
|
||||
import i18n from '@/i18n'
|
||||
import BaseTable from '@/components/base-table'
|
||||
import SmallTitle from '@/components/small-title'
|
||||
import * as echarts from 'echarts'
|
||||
|
||||
// const tableConfigStatic = [
|
||||
// { type: 'index', width: 100, name: i18n.t('index') },
|
||||
// { name: i18n.t('pl.title'), prop: 'lineName' },
|
||||
// { name: i18n.t('inspect.inTotal'), prop: 'sumUp' },
|
||||
// { name: i18n.t('inspect.outTotal'), prop: 'sumDown' },
|
||||
// { name: i18n.t('inspect.checkTotal'), prop: 'sumCheck' },
|
||||
// { name: i18n.t('inspect.rate'), prop: 'scrapRatio', filter: (val) => (val || val === 0 ? `${val}%` : '-') }
|
||||
// ]
|
||||
const tableConfigDynamic = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ name: i18n.t('pl.name'), prop: '0' }
|
||||
]
|
||||
|
||||
const FakeChart = {
|
||||
name: 'FakeChart',
|
||||
props: {
|
||||
categories: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
typeList: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
seriesData1: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
seriesData2: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
seriesData3: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
seriesData4: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
calcMaxHeight,
|
||||
chart: null,
|
||||
// 新加
|
||||
echartsData1: [],
|
||||
echartsData2: [],
|
||||
echartsData3: [],
|
||||
echartsData4: [],
|
||||
pass: [],
|
||||
defaultOpts: {
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '12%',
|
||||
top: '20%',
|
||||
bottom: '10%'
|
||||
},
|
||||
title: {
|
||||
text: i18n.t('eq.productQuantity')
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis', //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
|
||||
axisPointer: {
|
||||
// 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
type: 'scroll',
|
||||
top: 10,
|
||||
right: 0,
|
||||
width: '12%',
|
||||
/** 修复文本太长时显示问题 */
|
||||
// formatter: function (name) {
|
||||
// return echarts.format.truncateText(name, 120, '14px Microsoft Yahei', '...')
|
||||
// },
|
||||
tooltip: {
|
||||
show: true
|
||||
},
|
||||
/** end */
|
||||
data: []
|
||||
// selected:{'产线1':(this.echartsData1 === [] ? false : true) , 'Line 1':(this.echartsData1 === [] ? false : true) ,
|
||||
// '产线2':(this.echartsData2 === [] ? false : true) , 'Line 2':(this.echartsData2 === [] ? false : true) }
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: [],
|
||||
// axisLine: {
|
||||
// show: true,
|
||||
// lineStyle: {
|
||||
// color: 'rgba(219,225,255,1)',
|
||||
// width: 1,
|
||||
// type: 'solid'
|
||||
// }
|
||||
// },
|
||||
axisLabel: {
|
||||
//设置x轴的字
|
||||
show: true,
|
||||
rotate: 0,
|
||||
interval: 0 //使x轴横坐标全部显示
|
||||
// textStyle: {
|
||||
// //x轴字体样式
|
||||
// color: 'rgba(219,225,255,1)',
|
||||
// margin: 15
|
||||
// }
|
||||
}
|
||||
|
||||
// data: ['下片1', '上片1', '磨边机1', '设备13', '钢化炉2', '磨边机2', '设备15', '清洗机1', '钢化炉3']
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
series: [
|
||||
// dynamic
|
||||
{
|
||||
name: this.$t('eq.line1'),
|
||||
type: 'line',
|
||||
data: [],
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'top'
|
||||
},
|
||||
formatter: '{@value}'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: this.$t('eq.line2'),
|
||||
type: 'line',
|
||||
data: [],
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'top'
|
||||
},
|
||||
formatter: '{@value}'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: this.$t('eq.line3'),
|
||||
type: 'line',
|
||||
data: [],
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'top'
|
||||
},
|
||||
formatter: '{@value}'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: this.$t('eq.line4'),
|
||||
type: 'line',
|
||||
data: [],
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'top'
|
||||
},
|
||||
formatter: '{@value}'
|
||||
}
|
||||
}
|
||||
// {
|
||||
// data: [120, 200, 150, 80, 70, 110, 130],
|
||||
// type: 'bar'
|
||||
// }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
categories: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.xAxis.data.push(...val)
|
||||
this.defaultOpts.xAxis.data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
typeList: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.legend.data.push(...val)
|
||||
this.defaultOpts.legend.data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
seriesData1: {
|
||||
// this.defaultOpts.series[0].data.push 会循环增加横坐标和数据,改成 =
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.series[0].data.push(...val)
|
||||
this.defaultOpts.series[0].data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
seriesData2: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.series[1].data.push(...val)
|
||||
this.defaultOpts.series[1].data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
seriesData3: {
|
||||
// this.defaultOpts.series[0].data.push 注意
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.series[2].data.push(...val)
|
||||
this.defaultOpts.series[2].data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
seriesData4: {
|
||||
handler: function (val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// this.defaultOpts.series[3].data.push(...val)
|
||||
this.defaultOpts.series[3].data = val
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
defaultOpts: {
|
||||
handler: function (val) {
|
||||
// console.log('defaullt opts change: ', val)
|
||||
this.setOptions()
|
||||
},
|
||||
immediate: true,
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
// console.log('echarts data1: ', this.echartsData1)
|
||||
// console.log('echarts data2: ', this.echartsData2)
|
||||
// console.log('echarts data3: ', this.echartsData3)
|
||||
// console.log('echarts data4: ', this.echartsData4)
|
||||
this.initChart()
|
||||
// console.log('this.defaultOpts.xAxis.data', this.defaultOpts.xAxis.data)
|
||||
this.setOptions()
|
||||
window.addEventListener('resize', () => {
|
||||
//监听浏览器窗口大小
|
||||
this.chart.resize()
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
if (!this.chart) {
|
||||
this.chart = echarts.init(document.getElementById('bar-chart'))
|
||||
this.chart.resize()
|
||||
}
|
||||
},
|
||||
setOptions(opts) {
|
||||
/** prop options */
|
||||
if (opts) {
|
||||
}
|
||||
|
||||
if (this.chart) this.chart.setOption(this.defaultOpts, true)
|
||||
}
|
||||
},
|
||||
render: function (h) {
|
||||
return h('div', { attrs: { id: 'bar-chart' }, style: { background: '#eee', width: '100%', height: '300px', padding: '8px' } }, '')
|
||||
}
|
||||
}
|
||||
|
||||
const dict = [i18n.t('table2'), i18n.t('graph')]
|
||||
export default {
|
||||
name: 'QualityInspectionCurrent',
|
||||
components: { BaseTable, SmallTitle, FakeChart },
|
||||
data() {
|
||||
return {
|
||||
echartsData1: [],
|
||||
echartsData2: [],
|
||||
echartsData3: [],
|
||||
echartsData4: [],
|
||||
count: 0,
|
||||
lineIds: [],
|
||||
lineList: [],
|
||||
// tableConfigStatic,
|
||||
tableConfigDynamic,
|
||||
datetime: new Date(),
|
||||
dataListStatic: [],
|
||||
dataListDynamic: [],
|
||||
dataList: [],
|
||||
dict,
|
||||
dataType: dict[0], // 表格 | 图形
|
||||
showGraph: false,
|
||||
// quickOptions: {
|
||||
// shortcuts: [
|
||||
// {
|
||||
// text: i18n.t('today'),
|
||||
// onClick(picker) {
|
||||
// const baseTime = moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 })
|
||||
// const startTime = baseTime.format('yyyy-MM-DDTHH:mm:ss')
|
||||
// const endTime = baseTime.set({ hour: 23, minute: 59, second: 59, millisecond: 999 }).format('yyyy-MM-DDTHH:mm:ss')
|
||||
// picker.$emit('pick', [startTime, endTime])
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
echartCategories: null,
|
||||
echartCheckTypes: [],
|
||||
interval: null
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getLineList()
|
||||
// this.getDataList()
|
||||
|
||||
this.interval = setInterval(() => {
|
||||
this.$message.info(i18n.t('refresh'))
|
||||
// this.dataListStatic.splice(0)
|
||||
this.dataListDynamic.splice(0)
|
||||
this.getDataList()
|
||||
}, 1000 * 5 * 60)
|
||||
},
|
||||
deactivated() {
|
||||
if (this.interval) {
|
||||
clearInterval(this.interval)
|
||||
this.interval = null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 产线
|
||||
getLineList() {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/productionLine/list'),
|
||||
method: 'get'
|
||||
}).then(({ data }) => {
|
||||
if (data && data.code === 0) {
|
||||
this.lineList = data.data
|
||||
// console.log('产线数组', this.lineList)
|
||||
/** set default 默认 */
|
||||
// if (this.lineList.length) {
|
||||
// this.lineIds = [this.lineList[this.lineList.length - 1].id]
|
||||
// }
|
||||
} else {
|
||||
this.lineList = []
|
||||
}
|
||||
// 这样可以出数据
|
||||
this.getDataList()
|
||||
})
|
||||
},
|
||||
handleOperations() {},
|
||||
handleDataTypeChange(value) {
|
||||
this.showGraph = value === dict[0] ? false : true
|
||||
},
|
||||
getDataList() {
|
||||
// for (var z = 0; z < this.defaultOpts.series.length; z++) {
|
||||
// this.defaultOpts.series[z].data = []
|
||||
// }
|
||||
// this.echartCategories = []
|
||||
// 下面全部要初始化,清空数据
|
||||
this.echartsData1 = []
|
||||
this.echartsData2 = []
|
||||
this.echartsData3 = []
|
||||
this.echartsData4 = []
|
||||
this.dataListDynamic = []
|
||||
this.dataList = []
|
||||
this.count = 0
|
||||
this.showGraph = false
|
||||
this.dataType = i18n.t('table2')
|
||||
this.echartCategories = null
|
||||
this.echartCheckTypes.splice(0)
|
||||
/** 设置默认日期 */
|
||||
// const startTime = this.datetime[0] || moment().set({ hour: 0, minute: 0, second: 0 }).format('yyyy-MM-DDTHH:mm:ss')
|
||||
// const endTime = this.datetime[1] || moment().set({ hour: 23, minute: 59, second: 59 }).format('yyyy-MM-DDTHH:mm:ss')
|
||||
// console.log('this.datatime',this.datatime)
|
||||
// const startTime = this.datetime ? this.datetime + '-01T00:00:00' : null
|
||||
const startTime = this.datetime ? moment(this.datetime).format('YYYY-MM') + '-01T00:00:00' : null
|
||||
// const endTime = this.datetime ? moment(this.datetime).format('YYYY-MM-DD') + 'T23:59:59' : null
|
||||
const endTime = this.datetime ? this.getMonthSE(moment(this.datetime).format('YYYY-MM')) + 'T23:59:59' : null
|
||||
|
||||
/** 获取产品质量分析数据 */
|
||||
// this.fetchList(startTime, endTime, lineIds).then(({ data: res }) => {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/eqAnalysis/productAnalysis'),
|
||||
method: 'POST',
|
||||
data: {
|
||||
startTime,
|
||||
endTime,
|
||||
// 加个判断防止为空时传参[]报错
|
||||
lineIds: this.lineIds.length == 0 ? null : this.lineIds
|
||||
// lineIds: this.lineIds.length == 0 ? ["1"] : this.lineIds
|
||||
}
|
||||
})
|
||||
.then((res) => {
|
||||
// console.log('res: ', res)
|
||||
/** TODO: 解析 nameData */
|
||||
// 新加
|
||||
this.tableConfigDynamic = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ name: i18n.t('pl.name'), prop: '0' },
|
||||
{ name: i18n.t('pl.sum'), prop: '1' },
|
||||
...Array.from(new Set(res.data.data[0].records.map((item) => moment(item.recordTime).format('MM-DD')))).map((name) => ({ prop: String(++this.count + 1), name }))
|
||||
/**
|
||||
这一行无敌的,记一下:
|
||||
1. '...'是扩展运算符,是ES6的语法,用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中。例如
|
||||
let foo = { ...['a', 'b', 'c'] };
|
||||
foo
|
||||
// {0: "a", 1: "b", 2: "c"}
|
||||
2.Array.from(new Set())是JS的数组去重
|
||||
3.map() 方法定义在JavaScript的Array中,它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。
|
||||
4.moment(time).format()时间格式化
|
||||
5.String(),因为prop只能接收String,需要把数字转化
|
||||
6.++this.count是定义了个从0开始自增的常量count,用来标注一个月每天的下标,this.count++会从每个月2号开始,因此是 ++this.count
|
||||
7.要在getDataList() 中
|
||||
this.dataList = []
|
||||
this.count = 0
|
||||
初始化一下,否则连续按按钮会空一个
|
||||
8.因为后期加了个"合计"字段,所以++this.count + 1,右移一位
|
||||
*/
|
||||
]
|
||||
// console.log('this.tableConfigDynamic', this.tableConfigDynamic)
|
||||
|
||||
// this.dataListDynamic = this.parseDynamicData(res.data.data) || []
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
this.dataListDynamic[i] = res.data.data[i].records.map((item) => item.outputNum) || []
|
||||
this.dataListDynamic[i].unshift(res.data.data[i].sum)
|
||||
this.dataListDynamic[i].unshift(res.data.data[i].records[i].lineName)
|
||||
var json = {}
|
||||
for (var j = 0; j < this.dataListDynamic[i].length; j++) {
|
||||
json[j] = this.dataListDynamic[i][j]
|
||||
}
|
||||
this.dataList.push(json)
|
||||
// console.log('this.dataList', this.dataList)
|
||||
// this.dataListDynamic[i] =JSON.stringify(this.dataListDynamic[i])
|
||||
}
|
||||
/** echarts related */
|
||||
// this.echartCategories = subProps.map((item) => item.name)
|
||||
// console.log('res.data.data[0].records.map((item) => moment(item.recordTime)',res.data.data[0].records.map((item) => moment(item.recordTime).format('MM-DD')));
|
||||
// 创建横坐标
|
||||
this.echartCategories = res.data.data[0].records.map((item) => moment(item.recordTime).format('MM-DD'))
|
||||
// this.parseTableProps(res.data.nameData)
|
||||
|
||||
// console.log('this.echartCategories', this.echartCategories)
|
||||
// console.log('this.dataListDynamic', this.dataListDynamic)
|
||||
// console.log('this.dataList', this.dataList)
|
||||
|
||||
this.buildGraphData()
|
||||
})
|
||||
.catch((err) => {
|
||||
// 忽略掉0报错
|
||||
// console.error(err)
|
||||
})
|
||||
},
|
||||
setOptions(opts) {
|
||||
/** prop options */
|
||||
if (opts) {
|
||||
}
|
||||
|
||||
if (this.chart) this.chart.setOption(this.defaultOpts, true)
|
||||
},
|
||||
// 失效函数
|
||||
parseTableProps(nameData) {
|
||||
const subProps = []
|
||||
const labelNameMap = new Map()
|
||||
|
||||
// if (nameData.length) {
|
||||
// /** 处理 nameData */
|
||||
// nameData.forEach((item) => {
|
||||
// if (!labelNameMap.get(item.name)) {
|
||||
// labelNameMap.set(item.name, 1)
|
||||
// subProps.push({ name: item.name, prop: item.name })
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
|
||||
this.tableConfigDynamic = [
|
||||
{ type: 'index', width: 100, name: i18n.t('index') },
|
||||
{ name: i18n.t('pl.name'), prop: '0' },
|
||||
...Array.from(new Set(res.data.data[0].records.map((item) => moment(item.recordTime).format('MM-DD')))).map((name) => ({ prop: String(++this.count), name }))
|
||||
]
|
||||
/** echarts related */
|
||||
// this.echartCategories = subProps.map((item) => item.name)
|
||||
this.echartCategories = this.dataListDynamic.map((item) => item.name)
|
||||
},
|
||||
|
||||
// parseDynamicData(data) {
|
||||
// this.echartCheckTypes.splice(0)
|
||||
// return data.map((item) => {
|
||||
// /** echarts related */
|
||||
// this.echartCheckTypes.push(item.inspectionContent)
|
||||
// if (item.data.length) {
|
||||
// /** 解析子数组 */
|
||||
// item.data.forEach((subitem) => {
|
||||
// item[subitem.dynamicName] = subitem.dynamicValue
|
||||
// })
|
||||
// }
|
||||
// return item
|
||||
// })
|
||||
// },
|
||||
|
||||
buildGraphData() {
|
||||
/** 构造 echart 需要的数据 */
|
||||
const result = []
|
||||
|
||||
// this.echartCheckTypes.forEach((ect) => {
|
||||
// result.push({ name: ect, type: 'bar', data: [] })
|
||||
// })
|
||||
// console.log('echartCheckTypes', this.echartCheckTypes)
|
||||
// console.log('this.echartCategories', this.echartCategories)
|
||||
// console.log('this.dataListDynamic', this.dataListDynamic)
|
||||
// this.dataListDynamic.forEach((inspection, index) => {
|
||||
// // console.log('inspection: ', inspection)
|
||||
// this.echartCategories.forEach((cate) => {
|
||||
// if (cate in inspection) {
|
||||
// result[index].data.push(inspection[cate])
|
||||
// } else {
|
||||
// result[index].data.push('0')
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
// this.dataListDynamic[0].shift()
|
||||
// this.dataListDynamic[1].shift()
|
||||
// this.dataListDynamic[2].shift()
|
||||
// this.dataListDynamic[3].shift()
|
||||
for (var key = 0; key < this.dataListDynamic.length; key++) {
|
||||
if (this.dataListDynamic[key][0].indexOf('1') != -1) {
|
||||
this.echartsData1 = this.dataListDynamic[key]
|
||||
} else if (this.dataListDynamic[key][0].indexOf('2') != -1) {
|
||||
this.echartsData2 = this.dataListDynamic[key]
|
||||
} else if (this.dataListDynamic[key][0].indexOf('3') != -1) {
|
||||
this.echartsData3 = this.dataListDynamic[key]
|
||||
} else if (this.dataListDynamic[key][0].indexOf('4') != -1) {
|
||||
this.echartsData4 = this.dataListDynamic[key]
|
||||
}
|
||||
}
|
||||
// this.echartsData1 = this.dataListDynamic[0]
|
||||
// this.echartsData2 = this.dataListDynamic[1]
|
||||
// this.echartsData3 = this.dataListDynamic[2]
|
||||
// this.echartsData4 = this.dataListDynamic[3]
|
||||
// 不抛出老是报shift错误
|
||||
try {
|
||||
// 因为又加了“合计”字段,所以再多删除一次
|
||||
this.echartsData1.shift()
|
||||
this.echartsData2.shift()
|
||||
this.echartsData3.shift()
|
||||
this.echartsData4.shift()
|
||||
this.echartsData1.shift()
|
||||
this.echartsData2.shift()
|
||||
this.echartsData3.shift()
|
||||
this.echartsData4.shift()
|
||||
} catch (error) {}
|
||||
// this.echartsData = result
|
||||
// console.log('this.echartsData1', this.echartsData1)
|
||||
// [
|
||||
// { name: '11', type: 'bar', data: [/**产线1*/ 2, /**产线2*/ 3] },
|
||||
// { name: '222', type: 'bar', data: [1, 2, 3] }
|
||||
// ]
|
||||
// 没有数据的产线legend隐藏
|
||||
if (this.echartsData1.length !== 0) {
|
||||
this.echartCheckTypes.push(this.$t('eq.line1'))
|
||||
}
|
||||
if (this.echartsData2.length !== 0) {
|
||||
this.echartCheckTypes.push(this.$t('eq.line2'))
|
||||
}
|
||||
if (this.echartsData3.length !== 0) {
|
||||
this.echartCheckTypes.push(this.$t('eq.line3'))
|
||||
}
|
||||
if (this.echartsData4.length !== 0) {
|
||||
this.echartCheckTypes.push(this.$t('eq.line4'))
|
||||
}
|
||||
// console.log('this.echartCheckTypes', this.echartCheckTypes)
|
||||
// console.log(this.echartsData1.length)
|
||||
// console.log(this.echartsData2.length)
|
||||
// console.log(this.echartsData3)
|
||||
// console.log(this.echartsData4)
|
||||
},
|
||||
|
||||
fetchList(startTime, endTime, lineIds) {
|
||||
this.$http({
|
||||
url: this.$http.adornUrl('/monitoring/eqAnalysis/productQualityAnalysis'),
|
||||
method: 'POST',
|
||||
data: {
|
||||
startTime,
|
||||
endTime,
|
||||
lineIds: this.lineIds
|
||||
}
|
||||
}).catch((err) => {
|
||||
console.error(err)
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 默认当前月
|
||||
* date 带月份的日期,例:2021-8
|
||||
* 返回月初至月末数组,例:[2021-8-1, 2021-8-31]
|
||||
*/
|
||||
getMonthSE(date) {
|
||||
let nowdays = date ? new Date(date) : new Date()
|
||||
let year = nowdays.getFullYear()
|
||||
let month = nowdays.getMonth() + 1
|
||||
|
||||
if (month < 10) {
|
||||
month = '0' + month
|
||||
}
|
||||
|
||||
let myDate = new Date(year, month, 0)
|
||||
|
||||
let startDate = year + '-' + month + '-01'
|
||||
let endDate = year + '-' + month + '-' + myDate.getDate()
|
||||
|
||||
// return [startDate, endDate]
|
||||
return endDate
|
||||
}
|
||||
// 数组转对象
|
||||
// toObject(pairs) {
|
||||
// return Array.from(pairs).reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }), {})
|
||||
// }
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.base-container {
|
||||
min-height: 60vh;
|
||||
background: #fff;
|
||||
padding: 12px;
|
||||
}
|
||||
.buttonColor {
|
||||
color: #fff;
|
||||
background: #0b58ff;
|
||||
}
|
||||
.el-month-table td.today .cell {
|
||||
font-weight: normal;
|
||||
color: #000 !important;
|
||||
}
|
||||
.el-month-table td.current:not(.disabled) .cell{
|
||||
color: #ffffff;
|
||||
font-weight: bold !important;
|
||||
background-color: var(--el-datepicker-active-color);
|
||||
border-radius: 100px;
|
||||
}
|
||||
</style>
|
||||