Compare commits
2 Commits
c28247f2dd
...
6c5de74adf
Author | SHA1 | Date | |
---|---|---|---|
6c5de74adf | |||
c1a79aa727 |
@ -40,7 +40,7 @@
|
||||
"@riophae/vue-treeselect": "0.4.0",
|
||||
"axios": "0.21.0",
|
||||
"clipboard": "2.0.6",
|
||||
"core-js": "3.8.1",
|
||||
"core-js": "^3.22.5",
|
||||
"echarts": "4.9.0",
|
||||
"echarts-liquidfill": "^2.0.2",
|
||||
"echarts5": "npm:echarts@^5.2.2",
|
||||
|
@ -1,106 +1,118 @@
|
||||
import axios from 'axios'
|
||||
import { Notification, MessageBox, Message } from 'element-ui'
|
||||
import store from '@/store'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import errorCode from '@/utils/errorCode'
|
||||
import axios from "axios";
|
||||
import { Notification, MessageBox, Message } from "element-ui";
|
||||
import store from "@/store";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import errorCode from "@/utils/errorCode";
|
||||
|
||||
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
|
||||
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
|
||||
// 创建axios实例
|
||||
const service = axios.create({
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: process.env.VUE_APP_BASE_API,
|
||||
// 超时
|
||||
timeout: 10000
|
||||
})
|
||||
timeout: 10000,
|
||||
});
|
||||
// request拦截器
|
||||
service.interceptors.request.use(config => {
|
||||
// 是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false
|
||||
if (getToken() && !isToken) {
|
||||
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
// get请求映射params参数
|
||||
if (config.method === 'get' && config.params) {
|
||||
let url = config.url + '?';
|
||||
for (const propName of Object.keys(config.params)) {
|
||||
const value = config.params[propName];
|
||||
var part = encodeURIComponent(propName) + "=";
|
||||
if (value !== null && typeof(value) !== "undefined") {
|
||||
if (typeof value === 'object') {
|
||||
for (const key of Object.keys(value)) {
|
||||
if (value[key] !== null && typeof (value[key]) !== 'undefined') {
|
||||
let params = propName + '[' + key + ']';
|
||||
let subPart = encodeURIComponent(params) + '=';
|
||||
url += subPart + encodeURIComponent(value[key]) + '&';
|
||||
service.interceptors.request.use(
|
||||
(config) => {
|
||||
// 是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false;
|
||||
if (getToken() && !isToken) {
|
||||
config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
// get请求映射params参数
|
||||
if (config.method === "get" && config.params) {
|
||||
let url = config.url + "?";
|
||||
for (const propName of Object.keys(config.params)) {
|
||||
const value = config.params[propName];
|
||||
var part = encodeURIComponent(propName) + "=";
|
||||
if (value !== null && typeof value !== "undefined") {
|
||||
if (typeof value === "object") {
|
||||
for (const key of Object.keys(value)) {
|
||||
if (value[key] !== null && typeof value[key] !== "undefined") {
|
||||
let params = propName + "[" + key + "]";
|
||||
let subPart = encodeURIComponent(params) + "=";
|
||||
url += subPart + encodeURIComponent(value[key]) + "&";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
url += part + encodeURIComponent(value) + "&";
|
||||
}
|
||||
} else {
|
||||
url += part + encodeURIComponent(value) + "&";
|
||||
}
|
||||
}
|
||||
url = url.slice(0, -1);
|
||||
config.params = {};
|
||||
config.url = url;
|
||||
}
|
||||
url = url.slice(0, -1);
|
||||
config.params = {};
|
||||
config.url = url;
|
||||
return config;
|
||||
},
|
||||
(error) => {
|
||||
console.log(error);
|
||||
Promise.reject(error);
|
||||
}
|
||||
return config
|
||||
}, error => {
|
||||
console.log(error)
|
||||
Promise.reject(error)
|
||||
})
|
||||
);
|
||||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(res => {
|
||||
service.interceptors.response.use(
|
||||
(res) => {
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200;
|
||||
// 获取错误信息
|
||||
const msg = errorCode[code] || res.data.msg || errorCode['default']
|
||||
const msg = errorCode[code] || res.data.msg || errorCode["default"];
|
||||
if (code === 401) {
|
||||
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
|
||||
confirmButtonText: '重新登录',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
MessageBox.confirm(
|
||||
"登录状态已过期,您可以继续留在该页面,或者重新登录",
|
||||
"系统提示",
|
||||
{
|
||||
confirmButtonText: "重新登录",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}
|
||||
).then(() => {
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = '/index';
|
||||
)
|
||||
.then(() => {
|
||||
store.dispatch("LogOut").then(() => {
|
||||
location.href = "/index";
|
||||
});
|
||||
})
|
||||
}).catch(() => {});
|
||||
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
|
||||
.catch(() => {});
|
||||
return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
|
||||
} else if (code === 500) {
|
||||
Message({
|
||||
message: msg,
|
||||
type: 'error'
|
||||
})
|
||||
return Promise.reject(new Error(msg))
|
||||
type: "error",
|
||||
});
|
||||
return Promise.reject(new Error(msg));
|
||||
} else if (code !== 200) {
|
||||
Notification.error({
|
||||
title: msg
|
||||
})
|
||||
return Promise.reject('error')
|
||||
title: msg,
|
||||
});
|
||||
return Promise.reject("error");
|
||||
} else {
|
||||
return res.data
|
||||
return res.data;
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.log('err' + error)
|
||||
(error) => {
|
||||
console.log("err" + error);
|
||||
let { message } = error;
|
||||
if (message == "Network Error") {
|
||||
message = "后端接口连接异常";
|
||||
}
|
||||
else if (message.includes("timeout")) {
|
||||
} else if (message.includes("timeout")) {
|
||||
message = "系统接口请求超时";
|
||||
}
|
||||
else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
} else if (message.includes("Request failed with status code")) {
|
||||
console.dir(error);
|
||||
message =
|
||||
error.config.url +
|
||||
"系统接口" +
|
||||
message.substr(message.length - 3) +
|
||||
"异常";
|
||||
}
|
||||
Message({
|
||||
message: message,
|
||||
type: 'error',
|
||||
duration: 5 * 1000
|
||||
})
|
||||
return Promise.reject(error)
|
||||
type: "error",
|
||||
duration: 5 * 1000,
|
||||
});
|
||||
return Promise.reject(error);
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
export default service
|
||||
export default service;
|
||||
|
@ -61,7 +61,7 @@ export default {
|
||||
} else {
|
||||
// 实例化socket
|
||||
this.socket = new WebSocket(this.path)
|
||||
console.log(this.socket)
|
||||
// console.log(this.socket)
|
||||
// 监听socket连接
|
||||
this.socket.onopen = this.open
|
||||
// 监听socket错误信息
|
||||
@ -77,9 +77,9 @@ export default {
|
||||
console.log('连接错误')
|
||||
},
|
||||
getMessage (msg) {
|
||||
console.log('getMessage')
|
||||
// console.log('getMessage')
|
||||
const data = JSON.parse(msg.data)
|
||||
console.log(data)
|
||||
// console.log(data)
|
||||
if (data.isRefresh) {
|
||||
console.log('服务端数据更新');
|
||||
this.isRefresh = true;
|
||||
|
@ -33,7 +33,7 @@ export default {
|
||||
const { width, height } = this;
|
||||
const wh = window.innerHeight / height;
|
||||
const ww = window.innerWidth / width;
|
||||
console.log(ww < wh ? ww : wh);
|
||||
// console.log(ww < wh ? ww : wh);
|
||||
return ww < wh ? ww : wh;
|
||||
},
|
||||
setScale() {
|
||||
|
@ -33,7 +33,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -18,7 +18,7 @@ import resize from '../../dashboard/mixins/resize'
|
||||
import 'echarts-liquidfill'
|
||||
export default {
|
||||
mixins: [resize],
|
||||
name: 'bottom1',
|
||||
name: 'bottom2',
|
||||
components: {
|
||||
container4,
|
||||
},
|
||||
@ -32,7 +32,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -58,7 +58,7 @@
|
||||
<div class="box">
|
||||
<i>{{ handleMillion(val.completedChargeQuantity) }}/</i
|
||||
><i class="num">{{ handleMillion(val.targetChargeQuantity) }}</i
|
||||
><span class="num2">亿件</span>
|
||||
><span class="num2">千吨</span>
|
||||
</div>
|
||||
<!-- <div style="width: 100%">
|
||||
<progressBar
|
||||
@ -103,8 +103,8 @@ require("echarts/theme/macarons"); // echarts theme
|
||||
import resize from "../../dashboard/mixins/resize";
|
||||
|
||||
export default {
|
||||
name: "Center1",
|
||||
mixins: [resize],
|
||||
name: "left1",
|
||||
components: {
|
||||
container3,
|
||||
rocketTit,
|
||||
|
@ -100,7 +100,7 @@ import resize from "../../dashboard/mixins/resize";
|
||||
import request from "@/utils/request";
|
||||
export default {
|
||||
mixins: [resize],
|
||||
name: "left1",
|
||||
name: "center2",
|
||||
components: {
|
||||
container4,
|
||||
rocketTit,
|
||||
@ -138,7 +138,7 @@ export default {
|
||||
url: "/hx/cockpitOverview/todayDynamics",
|
||||
method: "get",
|
||||
}).then((res) => {
|
||||
console.log(res);
|
||||
// console.log(res);
|
||||
if (200 == res.code) {
|
||||
this.month = res.data.month;
|
||||
this.today = res.data.today;
|
||||
|
@ -11,7 +11,7 @@
|
||||
layout="prev, pager, next"
|
||||
background
|
||||
:total="total"
|
||||
:page-size="7"
|
||||
:page-size="pageSize"
|
||||
:current-page.sync="currentPage1"
|
||||
@current-change="handleCurrentChange"
|
||||
>
|
||||
@ -67,7 +67,8 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
currentPage1: 1,
|
||||
total: 30,
|
||||
total: 0,
|
||||
pageSize: 4,
|
||||
titData: [],
|
||||
valData: [],
|
||||
time: null,
|
||||
@ -103,10 +104,13 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
start() {
|
||||
// 每隔一段时间,页码+1,判断是否到最后一页,是则将页码重设为1
|
||||
this.time = setInterval(() => {
|
||||
let size = this.currentPage1 + 1;
|
||||
if (size * 6 > this.total) size = 1;
|
||||
this.handleCurrentChange(size);
|
||||
this.currentPage1 = this.currentPage1 + 1;
|
||||
this.handleCurrentChange(this.currentPage1);
|
||||
if (this.currentPage1 >= this.total / this.pageSize) {
|
||||
this.currentPage1 = 0;
|
||||
}
|
||||
}, 5000);
|
||||
},
|
||||
end() {
|
||||
@ -127,10 +131,22 @@ export default {
|
||||
method: "get",
|
||||
}).then((res) => {
|
||||
this.res = res.data;
|
||||
// console.log(res.data);
|
||||
// TODO: 分页
|
||||
this.total = this.res.list.length;
|
||||
for (let i = 0; i < this.res.list.length; i++) {
|
||||
const item = this.res.list[i];
|
||||
this.titData.push(item.indicator_name);
|
||||
this.valData.push({ value: item.cate, name: item.indicator_name });
|
||||
this.valData.push({
|
||||
value: item.cate,
|
||||
name: item.indicator_name,
|
||||
tooltip: {
|
||||
trigger: "item",
|
||||
formatter: `{b}</br>目标数:${item.targetTasks}</br>完成数:${
|
||||
item.completedTasks
|
||||
}<br>完成率:${item.cate.toFixed(2)}%`,
|
||||
},
|
||||
});
|
||||
}
|
||||
this.setPageData(val);
|
||||
});
|
||||
@ -139,16 +155,23 @@ export default {
|
||||
setPageData(val) {
|
||||
let titData = [];
|
||||
let valData = [];
|
||||
|
||||
if (!val) {
|
||||
titData = this.titData.slice(0, 7);
|
||||
// 如果没有传入页码
|
||||
// titData = this.titData.slice(0, 7);
|
||||
titData = this.titData.slice(0, this.pageSize);
|
||||
// valData = this.valData.slice(0, 7);
|
||||
valData = this.valData;
|
||||
} else {
|
||||
titData = this.titData.slice((val - 1) * 7, 7 * val);
|
||||
// titData = this.titData.slice((val - 1) * 7, 7 * val);
|
||||
titData = this.titData.slice(
|
||||
(val - 1) * this.pageSize,
|
||||
this.pageSize * val
|
||||
);
|
||||
// valData = this.valData.slice((val - 1) * 7, 7 * val);
|
||||
valData = this.valData;
|
||||
}
|
||||
|
||||
// console.log(titData, valData, val);
|
||||
const calcAverageValue = (data, name) => {
|
||||
const items = data.filter((d) => d.name === name);
|
||||
return items.length
|
||||
@ -293,7 +316,7 @@ export default {
|
||||
color: ["#ccc", "red"],
|
||||
yAxis: [
|
||||
{
|
||||
name: "件",
|
||||
name: "万元",
|
||||
splitLine: {
|
||||
show: true,
|
||||
// 改变轴线颜色
|
||||
|
@ -86,7 +86,7 @@ export default {
|
||||
type: "value",
|
||||
name: "万元",
|
||||
min: 0,
|
||||
max: 250,
|
||||
// max: 250,
|
||||
interval: 50,
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
@ -106,7 +106,7 @@ export default {
|
||||
{
|
||||
type: "value",
|
||||
min: 0,
|
||||
max: 50,
|
||||
// max: 50,
|
||||
interval: 5,
|
||||
axisLabel: {
|
||||
formatter: "{value} %",
|
||||
@ -222,6 +222,8 @@ export default {
|
||||
FORECASTPROFIT.push(item.FORECASTPROFIT);
|
||||
TARGETPROFIT.push((item.COMPLETEDPROFIT / item.TARGETPROFIT) * 100);
|
||||
}
|
||||
// console.log(COMPLETEDPROFIT);
|
||||
// console.log(Math.max(...COMPLETEDPROFIT, ...FORECASTPROFIT));
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
@ -265,8 +267,12 @@ export default {
|
||||
type: "value",
|
||||
name: "万元",
|
||||
min: 0,
|
||||
max: 250,
|
||||
interval: 50,
|
||||
// max: 250,
|
||||
interval:
|
||||
Math.ceil(
|
||||
Math.max(...COMPLETEDPROFIT, ...FORECASTPROFIT) / 8 / 50
|
||||
) * 50,
|
||||
// splitNumber: 5,
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
},
|
||||
@ -402,4 +408,4 @@ export default {
|
||||
color: rgba(16, 152, 255, 1);
|
||||
line-height: 35px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
@ -10,7 +10,9 @@
|
||||
<div class="box">
|
||||
<span style="font-size: 25px; margin-right: 3px">·</span>
|
||||
<span>已完成任务/完成率</span>
|
||||
<i class="num">{{ rate.completedTotal }}/{{ rate.rate }}%</i>
|
||||
<i class="num"
|
||||
>{{ rate.completedTotal }}/{{ rate.rate.toFixed(2) }}%</i
|
||||
>
|
||||
<progressBar :percentage="rate.rate" />
|
||||
</div>
|
||||
</div>
|
||||
@ -40,7 +42,7 @@ import echarts from "echarts";
|
||||
require("echarts/theme/macarons"); // echarts theme
|
||||
export default {
|
||||
// mixins: [resize],
|
||||
name: "left1",
|
||||
name: "right1",
|
||||
components: {
|
||||
rocketTit,
|
||||
container2,
|
||||
@ -76,7 +78,7 @@ export default {
|
||||
method: "get",
|
||||
}).then((res) => {
|
||||
if (200 == res.code) {
|
||||
this.rate = res.data.rate;
|
||||
if (res.data.rate) this.rate = res.data.rate;
|
||||
let valData = [];
|
||||
let titData = [];
|
||||
for (let i = 0; i < res.data.list.length; i++) {
|
||||
@ -173,7 +175,7 @@ export default {
|
||||
this.chart1.setOption({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: "{a1}<br/>{b1}:{c1}",
|
||||
formatter: "{b}:</br>{a0}:{c0}</br>{a1}:{c1}</br>{a2}:{c2}",
|
||||
},
|
||||
legend: {
|
||||
data: ["预测", "实际", "目标完成率"],
|
||||
|
@ -61,7 +61,7 @@ export default {
|
||||
url: "/hx/cockpitOverview/chargeQuantityList",
|
||||
method: "get",
|
||||
}).then((res) => {
|
||||
console.log(res);
|
||||
// console.log(res);
|
||||
|
||||
let titData = [];
|
||||
let actualQuantity = [];
|
||||
@ -121,7 +121,7 @@ export default {
|
||||
yAxis: [
|
||||
{
|
||||
type: "value",
|
||||
name: "万元",
|
||||
name: "吨",
|
||||
min: 0,
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
|
@ -33,7 +33,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -32,7 +32,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -26,7 +26,7 @@ import rocketTit from '../components/rocketTit/index.vue'
|
||||
import container1 from '../components/container1/index.vue'
|
||||
|
||||
import left1 from './left1.vue'
|
||||
import left2 from './left2.vue'
|
||||
import left2 from './left2New.vue'
|
||||
import center1 from './center.vue'
|
||||
import right1 from './right1.vue'
|
||||
import bottom1 from './bottom1.vue'
|
||||
|
@ -125,8 +125,9 @@
|
||||
"
|
||||
>
|
||||
<el-col style="text-align: center" :span="3">序号</el-col>
|
||||
<el-col style="text-align: center" :span="7">责任令</el-col>
|
||||
<el-col style="text-align: center" :span="7">部门</el-col>
|
||||
<el-col style="text-align: center" :span="7">项目名称</el-col>
|
||||
<el-col style="text-align: center" :span="7">计划名称</el-col>
|
||||
<!-- <el-col style="text-align: center" :span="7">部门</el-col> -->
|
||||
<el-col style="text-align: center" :span="7">完成情况</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
@ -145,18 +146,24 @@
|
||||
<el-col style="text-align: center" :span="3">{{
|
||||
item.id
|
||||
}}</el-col>
|
||||
<el-col
|
||||
style="text-align: center"
|
||||
:title="item.projectName"
|
||||
:span="7"
|
||||
>{{ item.projectName }}</el-col
|
||||
>
|
||||
<el-col
|
||||
style="text-align: center"
|
||||
:title="item.workPlanName"
|
||||
:span="7"
|
||||
>{{ item.workPlanName }}</el-col
|
||||
>
|
||||
<el-col
|
||||
<!-- <el-col
|
||||
style="text-align: center"
|
||||
:title="item.deptName"
|
||||
:span="7"
|
||||
>{{ item.deptName }}</el-col
|
||||
>
|
||||
> -->
|
||||
<el-col style="text-align: center" :span="7">
|
||||
<section class="box">
|
||||
<span
|
||||
|
@ -1,341 +1,374 @@
|
||||
<template>
|
||||
<div>
|
||||
<container3 title="应用系统">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</container3>
|
||||
</div>
|
||||
<div>
|
||||
<container3 title="应用系统">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</container3>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import scalseBox from '../components/scaleBox.vue'
|
||||
import bigScreenHead from '../components/bigScreenHead/index.vue'
|
||||
import rocketTit from '../components/rocketTit/index.vue'
|
||||
import container3 from './components/container3/index.vue'
|
||||
import bigScreenTabs from '../components/bigScreenTabs/index.vue'
|
||||
import colorList from '@/utils/colorPalette'
|
||||
import vueSeamlessScroll from 'vue-seamless-scroll'
|
||||
import scalseBox from "../components/scaleBox.vue";
|
||||
import bigScreenHead from "../components/bigScreenHead/index.vue";
|
||||
import rocketTit from "../components/rocketTit/index.vue";
|
||||
import container3 from "./components/container3/index.vue";
|
||||
import bigScreenTabs from "../components/bigScreenTabs/index.vue";
|
||||
import colorList from "@/utils/colorPalette";
|
||||
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||
|
||||
import echarts from 'echarts'
|
||||
require('echarts/theme/macarons') // echarts theme
|
||||
import resize from '../../dashboard/mixins/resize'
|
||||
import echarts from "echarts";
|
||||
require("echarts/theme/macarons"); // echarts theme
|
||||
import resize from "../../dashboard/mixins/resize";
|
||||
export default {
|
||||
mixins: [resize],
|
||||
name: 'left2',
|
||||
components: {
|
||||
scalseBox,
|
||||
bigScreenHead,
|
||||
bigScreenTabs,
|
||||
rocketTit,
|
||||
container3,
|
||||
vueSeamlessScroll,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
colorList,
|
||||
mixins: [resize],
|
||||
name: "left2",
|
||||
components: {
|
||||
scalseBox,
|
||||
bigScreenHead,
|
||||
bigScreenTabs,
|
||||
rocketTit,
|
||||
container3,
|
||||
vueSeamlessScroll,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
colorList,
|
||||
|
||||
dateRange: [],
|
||||
chart: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart()
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: '/hx/informationManagement/getHxSystemRadarPic',
|
||||
method: 'get',
|
||||
}).then(({ data }) => {
|
||||
this.chart = echarts.init(this.$refs.chart)
|
||||
this.setOptions(data)
|
||||
})
|
||||
},
|
||||
setOptions(resData) {
|
||||
let newList = [] // 新的累计数组
|
||||
let newTotal = []
|
||||
let titList = [] // 标题title
|
||||
let titData = [] // 雷达指标名称
|
||||
let month = [] // 当月
|
||||
let monthTotal = [] // 当月累计
|
||||
for (let i = 0; i < resData.length; i++) {
|
||||
const item = resData[i]
|
||||
titList.push(item.systemName + '系统')
|
||||
newTotal.push([])
|
||||
newList.push([])
|
||||
titData.push([])
|
||||
month.push([])
|
||||
monthTotal.push([])
|
||||
for (let j = 0; j < item.month.length; j++) {
|
||||
const item2 = item.month[j]
|
||||
// newList[i] = newList[i].concat(item2.indexName)
|
||||
newList[i].push(item2.indexName)
|
||||
titData[i].push({
|
||||
name: item2.indexName,
|
||||
axisLabel: {
|
||||
show: j == 0 ? true : false,
|
||||
},
|
||||
})
|
||||
month[i].push(item2.allount)
|
||||
}
|
||||
// 对累计数组排序并去除无关指标
|
||||
for (let m = 0; m < newList[i].length; m++) {
|
||||
const item4 = newList[i][m]
|
||||
for (let k = 0; k < item.total.length; k++) {
|
||||
const item3 = item.total[k]
|
||||
if (item4 == item3.indexName) {
|
||||
newTotal[i].push(item3)
|
||||
}
|
||||
}
|
||||
}
|
||||
item.total = newTotal[i]
|
||||
for (let j = 0; j < item.total.length; j++) {
|
||||
const item2 = item.total[j]
|
||||
if (titData[i][j]) {
|
||||
// Object.assign(titData[i][j], { max: item2.allount })
|
||||
}
|
||||
if (newList[i].indexOf(item2.indexName) !== -1) {
|
||||
monthTotal[i].push(item2.allount)
|
||||
}
|
||||
// monthTotal[i].push(item2.allount)
|
||||
}
|
||||
}
|
||||
this.chart.setOption({
|
||||
title: [
|
||||
{
|
||||
text: titList[0],
|
||||
left: '9%',
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontStyle: 'normal',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'sans-serif',
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
{
|
||||
text: titList[1],
|
||||
left: '34%',
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontStyle: 'normal',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'sans-serif',
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
{
|
||||
text: titList[2],
|
||||
left: '58%',
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontStyle: 'normal',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'sans-serif',
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
{
|
||||
text: titList[3],
|
||||
left: '85%',
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontStyle: 'normal',
|
||||
fontWeight: '600',
|
||||
fontFamily: 'sans-serif',
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
},
|
||||
legend: {
|
||||
left: 'center',
|
||||
data: ['当月', '累积'],
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
},
|
||||
color: ['#5B8FF9', '#5AD8A6'],
|
||||
radar: [
|
||||
{
|
||||
indicator: titData[0],
|
||||
// indicator: [
|
||||
// { name: '登陆频次', max: 6500, axisLabel: { show: true }, color: '#fff' },
|
||||
// { name: '指标二', max: 16000, color: '#fff' },
|
||||
// { name: '指标三', max: 30000, color: '#fff' },
|
||||
// { name: '指标四', max: 38000, color: '#fff' },
|
||||
// { name: '指标五', max: 52000, color: '#fff' },
|
||||
// { name: '指标六', max: 25000, color: '#fff' },
|
||||
// ],
|
||||
center: ['12.5%', '50%'],
|
||||
radius: 70,
|
||||
// name: {
|
||||
// // (圆外的标签)雷达图每个指示器名称的配置项。
|
||||
// textStyle: {
|
||||
// color: '#fff',
|
||||
// },
|
||||
// },
|
||||
// 最大值
|
||||
// axisLabel: {
|
||||
// color: '#fff',
|
||||
// },
|
||||
},
|
||||
{
|
||||
indicator: titData[1],
|
||||
radius: 70,
|
||||
center: ['37.5%', '50%'],
|
||||
},
|
||||
{
|
||||
indicator: titData[2],
|
||||
center: ['62.5%', '50%'],
|
||||
radius: 70,
|
||||
},
|
||||
{
|
||||
indicator: titData[3],
|
||||
center: ['87.5%', '50%'],
|
||||
radius: 70,
|
||||
},
|
||||
],
|
||||
series: [
|
||||
...titData.map((e, index) => {
|
||||
return {
|
||||
type: 'radar',
|
||||
radarIndex: index,
|
||||
data: [
|
||||
{
|
||||
value: month[index],
|
||||
name: '当月',
|
||||
},
|
||||
{
|
||||
value: monthTotal[index],
|
||||
name: '累积',
|
||||
},
|
||||
],
|
||||
}
|
||||
}),
|
||||
// {
|
||||
// type: 'radar',
|
||||
// data: [
|
||||
// {
|
||||
// value: month[0],
|
||||
// name: '当月',
|
||||
// label: {
|
||||
// normal: {
|
||||
// // show: true,
|
||||
// color: '#fff',
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// value: monthTotal[0],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// type: 'radar',
|
||||
// radarIndex: 1,
|
||||
// data: [
|
||||
// {
|
||||
// value: [4200, 3000, 20000, 35000, 50000, 18000],
|
||||
// name: '当月',
|
||||
// },
|
||||
// {
|
||||
// value: [5000, 14000, 28000, 26000, 42000, 21000],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// type: 'radar',
|
||||
// radarIndex: 2,
|
||||
// data: [
|
||||
// {
|
||||
// value: [4200, 3000, 20000, 35000, 50000, 18000],
|
||||
// name: '当月',
|
||||
// },
|
||||
// {
|
||||
// value: [5000, 14000, 28000, 26000, 42000, 21000],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// type: 'radar',
|
||||
// radarIndex: 3,
|
||||
// data: [
|
||||
// {
|
||||
// value: [4200, 3000, 20000, 35000, 50000, 18000],
|
||||
// name: '当月',
|
||||
// },
|
||||
// {
|
||||
// value: [5000, 14000, 28000, 26000, 42000, 21000],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
],
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
dateRange: [],
|
||||
chart: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart();
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return;
|
||||
}
|
||||
this.chart.dispose();
|
||||
this.chart = null;
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: "/hx/informationManagement/getHxSystemRadarPic",
|
||||
method: "get",
|
||||
}).then(({ data }) => {
|
||||
this.chart = echarts.init(this.$refs.chart);
|
||||
this.setOptions(data);
|
||||
});
|
||||
},
|
||||
setOptions(resData) {
|
||||
let newList = []; // 新的累计数组
|
||||
let newTotal = [];
|
||||
let titList = []; // 标题title
|
||||
let titData = []; // 雷达指标名称
|
||||
let month = []; // 当月
|
||||
let monthTotal = []; // 当月累计
|
||||
for (let i = 0; i < resData.length; i++) {
|
||||
const item = resData[i];
|
||||
titList.push(item.systemName + "系统");
|
||||
newTotal.push([]);
|
||||
newList.push([]);
|
||||
titData.push([]);
|
||||
month.push([]);
|
||||
monthTotal.push([]);
|
||||
for (let j = 0; j < item.month.length; j++) {
|
||||
const item2 = item.month[j];
|
||||
// newList[i] = newList[i].concat(item2.indexName)
|
||||
newList[i].push(item2.indexName);
|
||||
titData[i].push({
|
||||
name: item2.indexName,
|
||||
axisLabel: {
|
||||
show: j == 0 ? true : false,
|
||||
},
|
||||
});
|
||||
month[i].push(item2.allount);
|
||||
}
|
||||
// 对累计数组排序并去除无关指标
|
||||
for (let m = 0; m < newList[i].length; m++) {
|
||||
const item4 = newList[i][m];
|
||||
for (let k = 0; k < item.total.length; k++) {
|
||||
const item3 = item.total[k];
|
||||
if (item4 == item3.indexName) {
|
||||
newTotal[i].push(item3);
|
||||
}
|
||||
}
|
||||
}
|
||||
item.total = newTotal[i];
|
||||
for (let j = 0; j < item.total.length; j++) {
|
||||
const item2 = item.total[j];
|
||||
if (titData[i][j]) {
|
||||
// Object.assign(titData[i][j], { max: item2.allount })
|
||||
}
|
||||
if (newList[i].indexOf(item2.indexName) !== -1) {
|
||||
monthTotal[i].push(item2.allount);
|
||||
}
|
||||
// monthTotal[i].push(item2.allount)
|
||||
}
|
||||
}
|
||||
// console.log(titData);
|
||||
// console.log(titList);
|
||||
// console.log(month);
|
||||
// console.log(monthTotal);
|
||||
this.chart.setOption({
|
||||
title: [
|
||||
{
|
||||
text: titList[0],
|
||||
left: "9%",
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
fontStyle: "normal",
|
||||
fontWeight: "600",
|
||||
fontFamily: "sans-serif",
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
{
|
||||
text: titList[1],
|
||||
left: "34%",
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
fontStyle: "normal",
|
||||
fontWeight: "600",
|
||||
fontFamily: "sans-serif",
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
{
|
||||
text: titList[2],
|
||||
left: "58%",
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
fontStyle: "normal",
|
||||
fontWeight: "600",
|
||||
fontFamily: "sans-serif",
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
{
|
||||
text: titList[3],
|
||||
left: "85%",
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
fontStyle: "normal",
|
||||
fontWeight: "600",
|
||||
fontFamily: "sans-serif",
|
||||
fontSize: 18,
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
},
|
||||
legend: {
|
||||
left: "center",
|
||||
data: ["当月", "累积"],
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
},
|
||||
},
|
||||
color: ["#5B8FF9", "#5AD8A6"],
|
||||
radar: titData.map((el, index) => {
|
||||
console.log(el);
|
||||
|
||||
return el.length > 0
|
||||
? {
|
||||
indicator: el,
|
||||
// indicator: [
|
||||
// { name: '登陆频次', max: 6500, axisLabel: { show: true }, color: '#fff' },
|
||||
// { name: '指标二', max: 16000, color: '#fff' },
|
||||
// { name: '指标三', max: 30000, color: '#fff' },
|
||||
// { name: '指标四', max: 38000, color: '#fff' },
|
||||
// { name: '指标五', max: 52000, color: '#fff' },
|
||||
// { name: '指标六', max: 25000, color: '#fff' },
|
||||
// ],
|
||||
center: [`${12.5 + index * 25}%`, "50%"],
|
||||
radius: 70,
|
||||
// name: {
|
||||
// // (圆外的标签)雷达图每个指示器名称的配置项。
|
||||
// textStyle: {
|
||||
// color: '#fff',
|
||||
// },
|
||||
// },
|
||||
// 最大值
|
||||
// axisLabel: {
|
||||
// color: '#fff',
|
||||
// },
|
||||
}
|
||||
: false;
|
||||
}),
|
||||
// radar: [
|
||||
// {
|
||||
// indicator: titData[0],
|
||||
// // indicator: [
|
||||
// // { name: '登陆频次', max: 6500, axisLabel: { show: true }, color: '#fff' },
|
||||
// // { name: '指标二', max: 16000, color: '#fff' },
|
||||
// // { name: '指标三', max: 30000, color: '#fff' },
|
||||
// // { name: '指标四', max: 38000, color: '#fff' },
|
||||
// // { name: '指标五', max: 52000, color: '#fff' },
|
||||
// // { name: '指标六', max: 25000, color: '#fff' },
|
||||
// // ],
|
||||
// center: ["12.5%", "50%"],
|
||||
// radius: 70,
|
||||
// // name: {
|
||||
// // // (圆外的标签)雷达图每个指示器名称的配置项。
|
||||
// // textStyle: {
|
||||
// // color: '#fff',
|
||||
// // },
|
||||
// // },
|
||||
// // 最大值
|
||||
// // axisLabel: {
|
||||
// // color: '#fff',
|
||||
// // },
|
||||
// },
|
||||
// {
|
||||
// indicator: titData[1],
|
||||
// radius: 70,
|
||||
// center: ["37.5%", "50%"],
|
||||
// },
|
||||
// {
|
||||
// indicator: titData[2],
|
||||
// center: ["62.5%", "50%"],
|
||||
// radius: 70,
|
||||
// },
|
||||
// {
|
||||
// indicator: titData[3],
|
||||
// center: ["87.5%", "50%"],
|
||||
// radius: 70,
|
||||
// },
|
||||
// ],
|
||||
series: [
|
||||
...titData.map((e, index) => {
|
||||
return {
|
||||
type: "radar",
|
||||
radarIndex: index,
|
||||
data: [
|
||||
{
|
||||
value: month[index],
|
||||
name: "当月",
|
||||
},
|
||||
{
|
||||
value: monthTotal[index],
|
||||
name: "累积",
|
||||
},
|
||||
],
|
||||
};
|
||||
}),
|
||||
// {
|
||||
// type: 'radar',
|
||||
// data: [
|
||||
// {
|
||||
// value: month[0],
|
||||
// name: '当月',
|
||||
// label: {
|
||||
// normal: {
|
||||
// // show: true,
|
||||
// color: '#fff',
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// value: monthTotal[0],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// type: 'radar',
|
||||
// radarIndex: 1,
|
||||
// data: [
|
||||
// {
|
||||
// value: [4200, 3000, 20000, 35000, 50000, 18000],
|
||||
// name: '当月',
|
||||
// },
|
||||
// {
|
||||
// value: [5000, 14000, 28000, 26000, 42000, 21000],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// type: 'radar',
|
||||
// radarIndex: 2,
|
||||
// data: [
|
||||
// {
|
||||
// value: [4200, 3000, 20000, 35000, 50000, 18000],
|
||||
// name: '当月',
|
||||
// },
|
||||
// {
|
||||
// value: [5000, 14000, 28000, 26000, 42000, 21000],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// type: 'radar',
|
||||
// radarIndex: 3,
|
||||
// data: [
|
||||
// {
|
||||
// value: [4200, 3000, 20000, 35000, 50000, 18000],
|
||||
// name: '当月',
|
||||
// },
|
||||
// {
|
||||
// value: [5000, 14000, 28000, 26000, 42000, 21000],
|
||||
// name: '累积',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
],
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.warp-scroll {
|
||||
height: 215px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
li,
|
||||
a {
|
||||
display: block;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 15px;
|
||||
}
|
||||
li {
|
||||
display: block;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
background: #2a437d;
|
||||
opacity: 0.6;
|
||||
// box-shadow: 0px 1px 0px 0px rgba(139, 177, 237, 0.5);
|
||||
margin-bottom: 1px;
|
||||
img {
|
||||
vertical-align: sub;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
height: 215px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
li,
|
||||
a {
|
||||
display: block;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 15px;
|
||||
}
|
||||
li {
|
||||
display: block;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
background: #2a437d;
|
||||
opacity: 0.6;
|
||||
// box-shadow: 0px 1px 0px 0px rgba(139, 177, 237, 0.5);
|
||||
margin-bottom: 1px;
|
||||
img {
|
||||
vertical-align: sub;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.wrap {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
202
src/views/bigScreen/information/left2New.vue
Normal file
202
src/views/bigScreen/information/left2New.vue
Normal file
@ -0,0 +1,202 @@
|
||||
<template>
|
||||
<div>
|
||||
<container3 title="应用系统">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</container3>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import scalseBox from "../components/scaleBox.vue";
|
||||
import bigScreenHead from "../components/bigScreenHead/index.vue";
|
||||
import rocketTit from "../components/rocketTit/index.vue";
|
||||
import container3 from "./components/container3/index.vue";
|
||||
import bigScreenTabs from "../components/bigScreenTabs/index.vue";
|
||||
import colorList from "@/utils/colorPalette";
|
||||
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||
|
||||
import echarts from "echarts";
|
||||
require("echarts/theme/macarons"); // echarts theme
|
||||
import resize from "../../dashboard/mixins/resize";
|
||||
export default {
|
||||
mixins: [resize],
|
||||
name: "left2",
|
||||
components: {
|
||||
scalseBox,
|
||||
bigScreenHead,
|
||||
bigScreenTabs,
|
||||
rocketTit,
|
||||
container3,
|
||||
vueSeamlessScroll,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
colorList,
|
||||
|
||||
dateRange: [],
|
||||
chart: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart();
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return;
|
||||
}
|
||||
this.chart.dispose();
|
||||
this.chart = null;
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: "/hx/informationManagement/getHxSystemRadarPic",
|
||||
method: "get",
|
||||
}).then(({ data }) => {
|
||||
this.chart = echarts.init(this.$refs.chart);
|
||||
this.setOptions(data);
|
||||
});
|
||||
},
|
||||
setOptions(resData) {
|
||||
const radarTitleList = []; //雷达标题列表
|
||||
let radarIndexNameList = []; // 雷达指标列表
|
||||
const radarMonthDataList = []; // 雷达当月数据列表
|
||||
const radarTotalDataList = []; // 雷达当月数据列表
|
||||
for (const radarDataItem of resData) {
|
||||
radarTitleList.push(`${radarDataItem.systemName}系统`);
|
||||
const radarMonthIndexNameList = []; // 当月指标列表
|
||||
const radarMonthTotalIndexNameList = []; // 累计指标列表
|
||||
radarIndexNameList.push(
|
||||
radarDataItem.total.map((el, idx) => {
|
||||
return {
|
||||
name: el.indexName,
|
||||
axisLabel: {
|
||||
show: idx === 0 ? true : false,
|
||||
},
|
||||
};
|
||||
})
|
||||
);
|
||||
radarMonthDataList.push(
|
||||
radarDataItem.month.map((el) => {
|
||||
return el.allount;
|
||||
})
|
||||
);
|
||||
radarTotalDataList.push(
|
||||
radarDataItem.total.map((el) => {
|
||||
return el.allount;
|
||||
})
|
||||
);
|
||||
}
|
||||
this.chart.setOption({
|
||||
title: radarTitleList.map((el, index) => {
|
||||
return {
|
||||
text: el,
|
||||
left: `${9 + 25 * index}%`,
|
||||
bottom: 5,
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
fontStyle: "normal",
|
||||
fontWeight: "600",
|
||||
fontFamily: "sans-serif",
|
||||
fontSize: 18,
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
},
|
||||
legend: {
|
||||
left: "center",
|
||||
data: ["当月", "累积"],
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
},
|
||||
},
|
||||
color: ["#5B8FF9", "#5AD8A6"],
|
||||
radar: radarIndexNameList.map((el, index) => {
|
||||
// // console.log(el);
|
||||
|
||||
return el.length > 0
|
||||
? {
|
||||
indicator: el,
|
||||
|
||||
center: [`${12.5 + index * 25}%`, "50%"],
|
||||
radius: 70,
|
||||
}
|
||||
: false;
|
||||
}),
|
||||
|
||||
series: [
|
||||
...radarIndexNameList.map((e, index) => {
|
||||
// console.log(e);
|
||||
// console.log("----" + index);
|
||||
// console.log(radarMonthDataList[index]);
|
||||
return {
|
||||
type: "radar",
|
||||
radarIndex: index,
|
||||
data: [
|
||||
{
|
||||
value: radarMonthDataList[index],
|
||||
name: "当月",
|
||||
},
|
||||
{
|
||||
value: radarTotalDataList[index],
|
||||
name: "累积",
|
||||
},
|
||||
],
|
||||
};
|
||||
}),
|
||||
],
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.warp-scroll {
|
||||
height: 215px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
li,
|
||||
a {
|
||||
display: block;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 15px;
|
||||
}
|
||||
li {
|
||||
display: block;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
background: #2a437d;
|
||||
opacity: 0.6;
|
||||
// box-shadow: 0px 1px 0px 0px rgba(139, 177, 237, 0.5);
|
||||
margin-bottom: 1px;
|
||||
img {
|
||||
vertical-align: sub;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.wrap {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
@ -73,7 +73,7 @@
|
||||
<el-col style="text-align: center" :span="4">
|
||||
<section class="box">
|
||||
<span
|
||||
v-if="item.status == '已完成'"
|
||||
v-if="item.completed == '已完成'"
|
||||
style="
|
||||
color: #6fd1b4;
|
||||
font-size: 25px;
|
||||
@ -90,7 +90,7 @@
|
||||
"
|
||||
>·</span
|
||||
>
|
||||
<span v-if="item.status == '已完成'">已完成</span>
|
||||
<span v-if="item.completed == '已完成'">已完成</span>
|
||||
<span v-else>未完成</span>
|
||||
</section>
|
||||
</el-col>
|
||||
@ -111,6 +111,7 @@ import bigScreenTabs from "../components/bigScreenTabs/index.vue";
|
||||
import progressBar from "@/views/bigScreen/components/progress/index.vue";
|
||||
import colorList from "@/utils/colorPalette";
|
||||
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||
|
||||
// import {Liquid} from '@antv/g2plot';
|
||||
// import resize from '../../dashboard/mixins/resize'
|
||||
import echarts from "echarts";
|
||||
@ -128,7 +129,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
value: new Date().getFullYear() + "-" + (new Date().getMonth() + 1),
|
||||
value: new Date().getFullYear() + "-" + new Date().getMonth() + 1,
|
||||
chart2: null,
|
||||
data: [
|
||||
{ value: 154, name: "类别一" },
|
||||
@ -176,6 +177,11 @@ export default {
|
||||
],
|
||||
};
|
||||
},
|
||||
// computed:{
|
||||
// value(){
|
||||
// return new Date().getFullYear() + "-" + new Date().getMonth() + 1,
|
||||
// }
|
||||
// },
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart();
|
||||
@ -301,14 +307,24 @@ export default {
|
||||
},
|
||||
],
|
||||
series: [
|
||||
// {
|
||||
// name: "完成率",
|
||||
// type: "bar",
|
||||
// z: "-1",
|
||||
// barGap: "-75%",
|
||||
// barWidth: 30,
|
||||
// itemStyle: {
|
||||
// color: "rgba(85, 197, 162, .3)",
|
||||
// },
|
||||
// yAxisIndex: 1,
|
||||
// data: rate,
|
||||
// },
|
||||
{
|
||||
name: "完成率",
|
||||
type: "bar",
|
||||
type: "line",
|
||||
z: "-1",
|
||||
barGap: "-75%",
|
||||
barWidth: 30,
|
||||
itemStyle: {
|
||||
color: "rgba(85, 197, 162, .3)",
|
||||
color: "#ffee8a",
|
||||
},
|
||||
yAxisIndex: 1,
|
||||
data: rate,
|
||||
@ -508,6 +524,16 @@ export default {
|
||||
},
|
||||
},
|
||||
created() {
|
||||
const month = new Date().getMonth() + 1;
|
||||
let prevMonth = "";
|
||||
if (month === 1) {
|
||||
prevMonth = "12";
|
||||
} else if (month <= 10) {
|
||||
prevMonth = `0${month - 1}`;
|
||||
} else {
|
||||
prevMonth = `${month - 1}`;
|
||||
}
|
||||
this.value = `${new Date().getFullYear()}-${prevMonth}`;
|
||||
this.getData();
|
||||
},
|
||||
};
|
||||
|
@ -125,7 +125,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="center_box">
|
||||
<rocketTit>经营指标完成率</rocketTit>
|
||||
<rocketTit v-if="index2 === 0">部门收入完成率</rocketTit>
|
||||
<rocketTit v-else>经营指标完成率</rocketTit>
|
||||
<el-date-picker
|
||||
v-model="month"
|
||||
value-format="yyyy-MM"
|
||||
@ -138,7 +139,7 @@
|
||||
<bigScreenTabs
|
||||
slot="datePicker"
|
||||
v-model="index2"
|
||||
:titleArr="['全年', '本月']"
|
||||
:titleArr="['全年', '月度']"
|
||||
></bigScreenTabs>
|
||||
<div
|
||||
style="height: 182px; width: 100%"
|
||||
|
@ -276,7 +276,7 @@ export default {
|
||||
params: { type: type },
|
||||
}).then((res) => {
|
||||
if (200 == res.code) {
|
||||
console.log(res);
|
||||
// console.log(res);
|
||||
if (type == 1) {
|
||||
this.scrollList1 = res.data.list;
|
||||
this.listData = Array(this.scrollList1.length).fill(0);
|
||||
|
@ -501,7 +501,7 @@ export default {
|
||||
// }
|
||||
}
|
||||
}
|
||||
console.log(newRate);
|
||||
// console.log(newRate);
|
||||
this.chart2 = echarts5.init(this.$refs.chart2);
|
||||
this.chart2.setOption({
|
||||
color: colorList,
|
||||
|
@ -33,7 +33,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -32,7 +32,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -5,7 +5,7 @@
|
||||
<div class="data-item">
|
||||
<div><span style="font-weight: bold">质量体系整改率</span></div>
|
||||
<div class="box">
|
||||
<span>{{ percentage }}%</span>
|
||||
<span>{{ (percentage * 100).toFixed(2) }}%</span>
|
||||
</div>
|
||||
<!-- <div style="width: 100%">
|
||||
<progressBar :percentage="percentage" />
|
||||
@ -59,7 +59,7 @@
|
||||
<div class="data-item">
|
||||
<div><span style="font-weight: bold">质量计划完成率</span></div>
|
||||
<div class="box">
|
||||
<span>{{ dataInfo.planCompleteRate.toFixed(2) }}</span
|
||||
<span>{{ (dataInfo.planCompleteRate * 100).toFixed(2) }}</span
|
||||
>%<span style="color: #55c5a2; margin: 0 5px; font-size: 16px">{{
|
||||
dataInfo.qualityPlanCompleteTotal
|
||||
}}</span>
|
||||
@ -71,7 +71,7 @@
|
||||
<div class="data-item">
|
||||
<div><span style="font-weight: bold">质量检查完成率</span></div>
|
||||
<div class="box">
|
||||
<span>{{ dataInfo.checkCompleteRate.toFixed(2) }}</span
|
||||
<span>{{ (dataInfo.checkCompleteRate * 100).toFixed(2) }}</span
|
||||
>%<span style="color: #55c5a2; margin: 0 5px; font-size: 16px">{{
|
||||
dataInfo.qualityNotificationCompleteTotal
|
||||
}}</span>
|
||||
|
@ -1,310 +1,312 @@
|
||||
<template>
|
||||
<div>
|
||||
<container3 title="质量体系">
|
||||
<div class="wrap">
|
||||
<el-row class="content1" style="height: 100%">
|
||||
<el-col :span="8" style="height: 100%">
|
||||
<div style="height: 100%; width: 100%" ref="chart2"></div>
|
||||
</el-col>
|
||||
<el-col :span="16" style="height: 100%">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</container3>
|
||||
</div>
|
||||
<div>
|
||||
<container3 title="质量体系">
|
||||
<div class="wrap">
|
||||
<el-row class="content1" style="height: 100%">
|
||||
<el-col :span="8" style="height: 100%">
|
||||
<div style="height: 100%; width: 100%" ref="chart2"></div>
|
||||
</el-col>
|
||||
<el-col :span="16" style="height: 100%">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</container3>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import scalseBox from '../components/scaleBox.vue'
|
||||
import bigScreenHead from '../components/bigScreenHead/index.vue'
|
||||
import rocketTit from '../components/rocketTit/index.vue'
|
||||
import container3 from './components/container3/index.vue'
|
||||
import bigScreenTabs from '../components/bigScreenTabs/index.vue'
|
||||
import colorList from '@/utils/colorPalette'
|
||||
import { blueColorList, greenColorList, yelloColorList } from '@/utils/gradualColor'
|
||||
import vueSeamlessScroll from 'vue-seamless-scroll'
|
||||
import scalseBox from "../components/scaleBox.vue";
|
||||
import bigScreenHead from "../components/bigScreenHead/index.vue";
|
||||
import rocketTit from "../components/rocketTit/index.vue";
|
||||
import container3 from "./components/container3/index.vue";
|
||||
import bigScreenTabs from "../components/bigScreenTabs/index.vue";
|
||||
import colorList from "@/utils/colorPalette";
|
||||
import {
|
||||
blueColorList,
|
||||
greenColorList,
|
||||
yelloColorList,
|
||||
} from "@/utils/gradualColor";
|
||||
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||
|
||||
import echarts from 'echarts'
|
||||
require('echarts/theme/macarons') // echarts theme
|
||||
import resize from '../../dashboard/mixins/resize'
|
||||
import echarts from "echarts";
|
||||
require("echarts/theme/macarons"); // echarts theme
|
||||
import resize from "../../dashboard/mixins/resize";
|
||||
export default {
|
||||
mixins: [resize],
|
||||
name: 'left2',
|
||||
components: {
|
||||
scalseBox,
|
||||
bigScreenHead,
|
||||
bigScreenTabs,
|
||||
rocketTit,
|
||||
container3,
|
||||
vueSeamlessScroll,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
index: 0,
|
||||
colorList,
|
||||
mixins: [resize],
|
||||
name: "left2",
|
||||
components: {
|
||||
scalseBox,
|
||||
bigScreenHead,
|
||||
bigScreenTabs,
|
||||
rocketTit,
|
||||
container3,
|
||||
vueSeamlessScroll,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
index: 0,
|
||||
colorList,
|
||||
|
||||
chart: null,
|
||||
chart2: null,
|
||||
series: [],
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart()
|
||||
this.initLine()
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: '/hx/qualityAssurance/getQualitySystem/2',
|
||||
method: 'get',
|
||||
}).then(({ data: resData }) => {
|
||||
let newData = []
|
||||
let source = []
|
||||
let product = ['product']
|
||||
for (let i = 0; i < resData.allSystem.length; i++) {
|
||||
const element = resData.allSystem[i]
|
||||
product.push(element)
|
||||
this.series.push({ type: 'scatter' })
|
||||
}
|
||||
// console.log(product)
|
||||
chart: null,
|
||||
chart2: null,
|
||||
series: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart();
|
||||
this.initLine();
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return;
|
||||
}
|
||||
this.chart.dispose();
|
||||
this.chart = null;
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: "/hx/qualityAssurance/getQualitySystem/2",
|
||||
method: "get",
|
||||
}).then(({ data: resData }) => {
|
||||
let newData = [];
|
||||
let source = [];
|
||||
let product = ["product"];
|
||||
for (let i = 0; i < resData.allSystem.length; i++) {
|
||||
const element = resData.allSystem[i];
|
||||
product.push(element);
|
||||
this.series.push({ type: "scatter" });
|
||||
}
|
||||
const tempList = resData.allList.map((el) => {
|
||||
return resData.allSystem.map((sys) => {
|
||||
return {
|
||||
systemName: sys,
|
||||
total: el.list.find((item) => {
|
||||
return item.systemName === sys;
|
||||
})
|
||||
? el.list.find((item) => {
|
||||
return item.systemName === sys;
|
||||
}).total
|
||||
: undefined,
|
||||
};
|
||||
});
|
||||
});
|
||||
// console.log(source);
|
||||
// console.log(product);
|
||||
tempList.forEach((el) => {
|
||||
source.push(
|
||||
el.map((item) => {
|
||||
return item.total;
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
for (let i = 0; i < resData.allList.length; i++) {
|
||||
const item = resData.allList[i]
|
||||
|
||||
for (let k = 0; k < resData.allSystem.length; k++) {
|
||||
const item3 = resData.allSystem[k]
|
||||
if (!item['list'][k]) {
|
||||
item['list'][k] = {
|
||||
total: 0,
|
||||
systemName: item3,
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let j = 0; j < item['list'].length; j++) {
|
||||
const item2 = item['list'][j]
|
||||
// console.log(j)
|
||||
// console.log(item2)
|
||||
|
||||
// console.log(source[j])
|
||||
if (source[j]) {
|
||||
source[j].push(item2.total)
|
||||
} else {
|
||||
source[j] = []
|
||||
source[j].push(item2.total)
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < resData.allDept.length; i++) {
|
||||
const item = resData.allDept[i]
|
||||
source[i].unshift(item)
|
||||
}
|
||||
source.unshift(product)
|
||||
// console.log(source)
|
||||
// console.log(newData)
|
||||
this.chart = echarts.init(this.$refs.chart)
|
||||
this.chart.setOption({
|
||||
legend: {
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
right: '10%',
|
||||
top: '3%',
|
||||
data: resData.allSystem,
|
||||
},
|
||||
tooltip: {},
|
||||
color: this.colorList,
|
||||
grid: {
|
||||
left: '8%',
|
||||
top: '10%',
|
||||
},
|
||||
dataset: {
|
||||
source,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
// splitLine: {
|
||||
// lineStyle: {
|
||||
// type: 'dashed',
|
||||
// },
|
||||
// },
|
||||
splitLine: {
|
||||
show: false, //不显示网格线
|
||||
},
|
||||
splitArea: {
|
||||
show: false, //不显示网格区域
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: 'rgb(255, 255, 255)',
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
scale: true,
|
||||
splitLine: {
|
||||
show: false, //不显示网格线
|
||||
},
|
||||
splitArea: {
|
||||
show: false, //不显示网格区域
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: 'rgb(255, 255, 255)',
|
||||
},
|
||||
},
|
||||
},
|
||||
series: this.series,
|
||||
})
|
||||
})
|
||||
},
|
||||
initLine() {
|
||||
this.request({
|
||||
url: '/hx/qualityAssurance/getQualitySystem/1',
|
||||
method: 'get',
|
||||
}).then(({ data }) => {
|
||||
this.chart2 = echarts.init(this.$refs.chart2)
|
||||
this.setOptions2(data)
|
||||
})
|
||||
},
|
||||
setOptions2(resData) {
|
||||
resData.elementsList.map(item => {
|
||||
item['value'] = item.total
|
||||
})
|
||||
let newList = []
|
||||
for (const k in resData.reviewList[0]) {
|
||||
let str = ''
|
||||
if (k == 'externalTotal') {
|
||||
str = '外审'
|
||||
} else if (k == 'internalTotal') {
|
||||
str = '内审'
|
||||
} else {
|
||||
str = '第三方审核'
|
||||
}
|
||||
newList.push({
|
||||
value: resData.reviewList[0][k],
|
||||
name: str,
|
||||
})
|
||||
}
|
||||
// console.log(newList)
|
||||
this.chart2.setOption({
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
},
|
||||
legend: {
|
||||
top: '5%',
|
||||
right: '5%',
|
||||
orient: 'vertical',
|
||||
// left: 'right',
|
||||
textStyle: {
|
||||
color: '#fff', //legend字体颜色
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
radius: ['60%', '80%'],
|
||||
center: ['30%', '50%'],
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
show: false,
|
||||
position: 'center',
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
show: false,
|
||||
fontSize: '40',
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: resData.elementsList,
|
||||
color: blueColorList,
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
radius: ['35%', '55%'],
|
||||
center: ['30%', '50%'],
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
show: false,
|
||||
position: 'center',
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
show: false,
|
||||
fontSize: '40',
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: newList,
|
||||
color: greenColorList,
|
||||
},
|
||||
],
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
for (let i = 0; i < resData.allDept.length; i++) {
|
||||
// debugger;
|
||||
const item = resData.allDept[i];
|
||||
source[i].unshift(item);
|
||||
}
|
||||
source.unshift(product);
|
||||
// console.log(source);
|
||||
// // console.log(newData)
|
||||
this.chart = echarts.init(this.$refs.chart);
|
||||
this.chart.setOption({
|
||||
legend: {
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
},
|
||||
right: "10%",
|
||||
top: "3%",
|
||||
data: resData.allSystem,
|
||||
},
|
||||
tooltip: {},
|
||||
color: this.colorList,
|
||||
grid: {
|
||||
left: "8%",
|
||||
top: "10%",
|
||||
},
|
||||
dataset: {
|
||||
source,
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
// splitLine: {
|
||||
// lineStyle: {
|
||||
// type: 'dashed',
|
||||
// },
|
||||
// },
|
||||
splitLine: {
|
||||
show: false, //不显示网格线
|
||||
},
|
||||
splitArea: {
|
||||
show: false, //不显示网格区域
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "rgb(255, 255, 255)",
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
// scale: true,
|
||||
splitLine: {
|
||||
show: false, //不显示网格线
|
||||
},
|
||||
splitArea: {
|
||||
show: false, //不显示网格区域
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "rgb(255, 255, 255)",
|
||||
},
|
||||
},
|
||||
},
|
||||
series: this.series,
|
||||
});
|
||||
// // console.log(this.$refs.chart.dataset);
|
||||
});
|
||||
},
|
||||
initLine() {
|
||||
this.request({
|
||||
url: "/hx/qualityAssurance/getQualitySystem/1",
|
||||
method: "get",
|
||||
}).then(({ data }) => {
|
||||
this.chart2 = echarts.init(this.$refs.chart2);
|
||||
this.setOptions2(data);
|
||||
});
|
||||
},
|
||||
setOptions2(resData) {
|
||||
resData.elementsList.map((item) => {
|
||||
item["value"] = item.total;
|
||||
});
|
||||
let newList = [];
|
||||
for (const k in resData.reviewList[0]) {
|
||||
let str = "";
|
||||
if (k == "externalTotal") {
|
||||
str = "外审";
|
||||
} else if (k == "internalTotal") {
|
||||
str = "内审";
|
||||
} else {
|
||||
str = "第三方审核";
|
||||
}
|
||||
newList.push({
|
||||
value: resData.reviewList[0][k],
|
||||
name: str,
|
||||
});
|
||||
}
|
||||
// // console.log(newList)
|
||||
this.chart2.setOption({
|
||||
tooltip: {
|
||||
trigger: "item",
|
||||
},
|
||||
legend: {
|
||||
top: "5%",
|
||||
right: "5%",
|
||||
orient: "vertical",
|
||||
// left: 'right',
|
||||
textStyle: {
|
||||
color: "#fff", //legend字体颜色
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "",
|
||||
type: "pie",
|
||||
radius: ["60%", "80%"],
|
||||
center: ["30%", "50%"],
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
show: false,
|
||||
position: "center",
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
show: false,
|
||||
fontSize: "40",
|
||||
fontWeight: "bold",
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: resData.elementsList,
|
||||
color: blueColorList,
|
||||
},
|
||||
{
|
||||
name: "",
|
||||
type: "pie",
|
||||
radius: ["35%", "55%"],
|
||||
center: ["30%", "50%"],
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
show: false,
|
||||
position: "center",
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
show: false,
|
||||
fontSize: "40",
|
||||
fontWeight: "bold",
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: newList,
|
||||
color: greenColorList,
|
||||
},
|
||||
],
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.warp-scroll {
|
||||
height: 215px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
li,
|
||||
a {
|
||||
display: block;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 15px;
|
||||
}
|
||||
li {
|
||||
display: block;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
background: #2a437d;
|
||||
opacity: 0.6;
|
||||
// box-shadow: 0px 1px 0px 0px rgba(139, 177, 237, 0.5);
|
||||
margin-bottom: 1px;
|
||||
img {
|
||||
vertical-align: sub;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
height: 215px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
li,
|
||||
a {
|
||||
display: block;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 15px;
|
||||
}
|
||||
li {
|
||||
display: block;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
background: #2a437d;
|
||||
opacity: 0.6;
|
||||
// box-shadow: 0px 1px 0px 0px rgba(139, 177, 237, 0.5);
|
||||
margin-bottom: 1px;
|
||||
img {
|
||||
vertical-align: sub;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.wrap {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
@ -44,7 +44,7 @@
|
||||
>
|
||||
<el-col style="text-align: center" :span="4">序号</el-col>
|
||||
<el-col style="text-align: center" :span="8">部门</el-col>
|
||||
<el-col style="text-align: center" :span="12">作业内容</el-col>
|
||||
<el-col style="text-align: center" :span="12">案例名称</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
<vue-seamless-scroll
|
||||
@ -68,7 +68,7 @@
|
||||
style="text-align: center"
|
||||
:title="item.faultRevelation"
|
||||
:span="12"
|
||||
>{{ item.faultRevelation }}</el-col
|
||||
>{{ item.remark }}</el-col
|
||||
>
|
||||
</el-row>
|
||||
</li>
|
||||
@ -679,7 +679,7 @@ export default {
|
||||
});
|
||||
},
|
||||
setOptions22(resData) {
|
||||
console.log(resData);
|
||||
// console.log(resData);
|
||||
let deptName = [];
|
||||
let cate = []; // 率
|
||||
let completed = []; // 完成
|
||||
|
@ -170,7 +170,8 @@ export default {
|
||||
this.request({
|
||||
url: "/hx/scientificProduction/getHxFactoryResourcesPic",
|
||||
}).then(({ data }) => {
|
||||
this.dataInfo = data;
|
||||
// console.log(data);
|
||||
if (data) this.dataInfo = data;
|
||||
});
|
||||
this.request({
|
||||
url: "/hx/scientificProduction/getHxCarUsePic1",
|
||||
|
@ -1,139 +1,139 @@
|
||||
<template>
|
||||
<container2 title="本周计划">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</container2>
|
||||
<container2 title="本周计划">
|
||||
<div style="height: 100%; width: 100%" ref="chart"></div>
|
||||
</container2>
|
||||
</template>
|
||||
<script>
|
||||
import container2 from './components/container2/index.vue'
|
||||
import echarts from 'echarts'
|
||||
import container2 from "./components/container2/index.vue";
|
||||
import echarts from "echarts";
|
||||
export default {
|
||||
components: {
|
||||
container2, //#endregion,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart()
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: '/hx/scientificProduction/getHxWeekPlanUsePic',
|
||||
}).then(({ data }) => {
|
||||
this.chart = echarts.init(this.$refs.chart)
|
||||
this.setOptions(data)
|
||||
})
|
||||
},
|
||||
setOptions(resData) {
|
||||
// realCharge // 装药
|
||||
// realDeliver // 交付
|
||||
// realFlawDetection // 探伤
|
||||
// realHousing // 壳体入厂
|
||||
let real = [] // 实际
|
||||
let target = [] // 目标
|
||||
let rate = [] // 率
|
||||
target.push(resData.targetFlawDetection)
|
||||
target.push(resData.targetCharge)
|
||||
target.push(resData.targetDeliver)
|
||||
target.push(resData.targetHousing)
|
||||
real.push(resData.flawDetectionRate)
|
||||
real.push(resData.chargeRate)
|
||||
real.push(resData.deliverRate)
|
||||
real.push(resData.housingRate)
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
// formatter: '{a1}<br/>{b1}:{c1}',
|
||||
},
|
||||
// legend: {
|
||||
// data: ['数量', '完成率'],
|
||||
// textStyle: {
|
||||
// color: '#fff', //legend字体颜色
|
||||
// },
|
||||
// // selectedMode: false,
|
||||
// },
|
||||
grid: {
|
||||
containLabel: true,
|
||||
left: 20,
|
||||
right: 10,
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
},
|
||||
xAxis: {
|
||||
data: ['探伤', '装药', '交付', '壳体入厂'],
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: 'rgb(255, 255, 255)',
|
||||
},
|
||||
},
|
||||
},
|
||||
// dataZoom: {
|
||||
// type: 'slider',
|
||||
// start: 0,
|
||||
// end: 50,
|
||||
// },
|
||||
color: ['#ccc', 'red'],
|
||||
yAxis: {
|
||||
name: '',
|
||||
splitLine: {
|
||||
show: true,
|
||||
// 改变轴线颜色
|
||||
lineStyle: {
|
||||
// 使用深浅的间隔色
|
||||
color: ['rgba(255, 255, 255,.5)'],
|
||||
},
|
||||
},
|
||||
// axisLabel: {
|
||||
// formatter: '{value}%',
|
||||
// },
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: 'rgb(255, 255, 255)',
|
||||
},
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '目标',
|
||||
type: 'bar',
|
||||
z: '-1',
|
||||
barGap: '-100%',
|
||||
barWidth: 30,
|
||||
itemStyle: {
|
||||
color: 'rgba(126, 167, 252, .3)',
|
||||
},
|
||||
data: target,
|
||||
},
|
||||
{
|
||||
name: '数量',
|
||||
type: 'bar',
|
||||
barWidth: 30,
|
||||
// position: [0, 0],
|
||||
itemStyle: {
|
||||
color: '#7EA7FC',
|
||||
},
|
||||
data: real,
|
||||
},
|
||||
// {
|
||||
// name: '目标',
|
||||
// type: 'scatter',
|
||||
// symbol: 'rect',
|
||||
// symbolSize: [30, 4],
|
||||
// symbolOffset: [3, 0],
|
||||
// position: [0, 0],
|
||||
// itemStyle: {
|
||||
// color: '#F6D97E',
|
||||
// },
|
||||
// data: [20, 30, 45, 20, 20, 30, 20, 30, 40, 20, 90, 90],
|
||||
// },
|
||||
],
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
components: {
|
||||
container2, //#endregion,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.request({
|
||||
url: "/hx/scientificProduction/getHxWeekPlanUsePic",
|
||||
}).then(({ data }) => {
|
||||
this.chart = echarts.init(this.$refs.chart);
|
||||
if (data) this.setOptions(data);
|
||||
});
|
||||
},
|
||||
setOptions(resData) {
|
||||
// realCharge // 装药
|
||||
// realDeliver // 交付
|
||||
// realFlawDetection // 探伤
|
||||
// realHousing // 壳体入厂
|
||||
let real = []; // 实际
|
||||
let target = []; // 目标
|
||||
let rate = []; // 率
|
||||
target.push(resData.targetFlawDetection);
|
||||
target.push(resData.targetCharge);
|
||||
target.push(resData.targetDeliver);
|
||||
target.push(resData.targetHousing);
|
||||
real.push(resData.flawDetectionRate);
|
||||
real.push(resData.chargeRate);
|
||||
real.push(resData.deliverRate);
|
||||
real.push(resData.housingRate);
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
// formatter: '{a1}<br/>{b1}:{c1}',
|
||||
},
|
||||
// legend: {
|
||||
// data: ['数量', '完成率'],
|
||||
// textStyle: {
|
||||
// color: '#fff', //legend字体颜色
|
||||
// },
|
||||
// // selectedMode: false,
|
||||
// },
|
||||
grid: {
|
||||
containLabel: true,
|
||||
left: 20,
|
||||
right: 10,
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
},
|
||||
xAxis: {
|
||||
data: ["探伤", "装药", "交付", "壳体入厂"],
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "rgb(255, 255, 255)",
|
||||
},
|
||||
},
|
||||
},
|
||||
// dataZoom: {
|
||||
// type: 'slider',
|
||||
// start: 0,
|
||||
// end: 50,
|
||||
// },
|
||||
color: ["#ccc", "red"],
|
||||
yAxis: {
|
||||
name: "",
|
||||
splitLine: {
|
||||
show: true,
|
||||
// 改变轴线颜色
|
||||
lineStyle: {
|
||||
// 使用深浅的间隔色
|
||||
color: ["rgba(255, 255, 255,.5)"],
|
||||
},
|
||||
},
|
||||
// axisLabel: {
|
||||
// formatter: '{value}%',
|
||||
// },
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "rgb(255, 255, 255)",
|
||||
},
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "目标",
|
||||
type: "bar",
|
||||
z: "-1",
|
||||
barGap: "-100%",
|
||||
barWidth: 30,
|
||||
itemStyle: {
|
||||
color: "rgba(126, 167, 252, .3)",
|
||||
},
|
||||
data: target,
|
||||
},
|
||||
{
|
||||
name: "数量",
|
||||
type: "bar",
|
||||
barWidth: 30,
|
||||
// position: [0, 0],
|
||||
itemStyle: {
|
||||
color: "#7EA7FC",
|
||||
},
|
||||
data: real,
|
||||
},
|
||||
// {
|
||||
// name: '目标',
|
||||
// type: 'scatter',
|
||||
// symbol: 'rect',
|
||||
// symbolSize: [30, 4],
|
||||
// symbolOffset: [3, 0],
|
||||
// position: [0, 0],
|
||||
// itemStyle: {
|
||||
// color: '#F6D97E',
|
||||
// },
|
||||
// data: [20, 30, 45, 20, 20, 30, 20, 30, 40, 20, 90, 90],
|
||||
// },
|
||||
],
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@ -74,6 +74,7 @@ export default {
|
||||
});
|
||||
},
|
||||
setOptions(list) {
|
||||
console.log(list);
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
@ -219,6 +220,18 @@ export default {
|
||||
},
|
||||
symbol: "none",
|
||||
},
|
||||
{
|
||||
name: "装药完成率",
|
||||
yAxisIndex: 1,
|
||||
type: "line",
|
||||
smooth: false,
|
||||
itemStyle: {
|
||||
color: "#F6D97E",
|
||||
},
|
||||
data: list.map((e) => e.chargeRate),
|
||||
// data: [23, 43, 23, 43, 54, 54, 54],
|
||||
symbol: "none",
|
||||
},
|
||||
{
|
||||
name: "总装完成率",
|
||||
yAxisIndex: 1,
|
||||
@ -231,18 +244,6 @@ export default {
|
||||
// data: [600, 500, 700, 620, 750, 800, 900],
|
||||
symbol: "none",
|
||||
},
|
||||
{
|
||||
name: "装药完成率",
|
||||
yAxisIndex: 1,
|
||||
type: "line",
|
||||
smooth: false,
|
||||
itemStyle: {
|
||||
color: "#F6D97E",
|
||||
},
|
||||
data: list.map((e) => e.chargeRate),
|
||||
// data: [650, 550, 750, 670, 780, 900, 900],
|
||||
symbol: "none",
|
||||
},
|
||||
],
|
||||
});
|
||||
},
|
||||
|
@ -12,6 +12,20 @@
|
||||
</container1>
|
||||
<container1 style="margin-right: 14px" title="生产计划">
|
||||
<div class="trends">
|
||||
<div style="text-align: right; margin-right: 30px">
|
||||
<el-date-picker
|
||||
style="width: 30%"
|
||||
v-model="prodMonthlyPlan"
|
||||
value-format="yyyy-MM"
|
||||
type="month"
|
||||
size="mini"
|
||||
placeholder="选择月"
|
||||
:clearable="false"
|
||||
:editable="false"
|
||||
@change="initChart2"
|
||||
>
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div style="height: 100%; width: 100%" ref="chart2"></div>
|
||||
</div>
|
||||
</container1>
|
||||
@ -27,7 +41,7 @@
|
||||
</container1>
|
||||
<container1 style="margin-right: 14px" title="单台产品信息">
|
||||
<div class="trends" style="text-align: center">
|
||||
<img :src="dataInfo.pic" alt="" />
|
||||
<img :src="dataInfo.pic" alt="" width="100%" />
|
||||
</div>
|
||||
</container1>
|
||||
</div>
|
||||
@ -47,6 +61,7 @@ import {
|
||||
} from "@/utils/gradualColor";
|
||||
|
||||
import echarts from "echarts";
|
||||
|
||||
require("echarts/theme/macarons"); // echarts theme
|
||||
export default {
|
||||
components: {
|
||||
@ -65,12 +80,13 @@ export default {
|
||||
chart3: null,
|
||||
listData: [1, 2, 3, 4, 5, 6, 7, 8],
|
||||
customColor: colorList,
|
||||
prodMonthlyPlan: "", //
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart();
|
||||
this.initChart2();
|
||||
this.initChart2(this.prodMonthlyPlan);
|
||||
this.initChart3();
|
||||
});
|
||||
},
|
||||
@ -176,7 +192,7 @@ export default {
|
||||
backgroundStyle: {
|
||||
color: "rgba(180, 180, 180, 0.2)",
|
||||
},
|
||||
name: "支付",
|
||||
name: "交付",
|
||||
type: "bar",
|
||||
stack: "total",
|
||||
// label: {
|
||||
@ -193,9 +209,9 @@ export default {
|
||||
});
|
||||
},
|
||||
|
||||
initChart2() {
|
||||
initChart2(month) {
|
||||
this.request({
|
||||
url: "/hx/scientificProduction/getProductionPlanPic",
|
||||
url: "/hx/scientificProduction/getProductionPlanPic?month=" + month,
|
||||
}).then(({ data }) => {
|
||||
this.chart2 = echarts.init(this.$refs.chart2);
|
||||
this.setOptions2(data);
|
||||
@ -253,50 +269,76 @@ export default {
|
||||
};
|
||||
},
|
||||
setOptions2(resData) {
|
||||
let adiabat = []; // 绝热数量
|
||||
let deliver = []; // 交付数量
|
||||
let charge = []; // 装药数量
|
||||
let assembly = []; // 总装数量
|
||||
const xAixsList = resData.map((el) => el.productModel); // 横坐标列表
|
||||
|
||||
let titData = resData.allModel;
|
||||
delete resData.allModel;
|
||||
let titList = [];
|
||||
for (let index = 0; index < titData.length; index++) {
|
||||
adiabat.push([]);
|
||||
deliver.push([]);
|
||||
charge.push([]);
|
||||
assembly.push([]);
|
||||
}
|
||||
let newData = {};
|
||||
for (let i = 0; i < resData.list.length; i++) {
|
||||
const item = resData.list[i];
|
||||
for (const key in item) {
|
||||
newData[key] = item[key];
|
||||
}
|
||||
}
|
||||
for (const key in newData) {
|
||||
if (Object.hasOwnProperty.call(newData, key)) {
|
||||
const item = newData[key];
|
||||
titList.push(key);
|
||||
for (let i = 0; i < item.length; i++) {
|
||||
const ele = item[i];
|
||||
let index = titData.findIndex((e) => e == ele.productModel);
|
||||
adiabat[index][titList.length - 1] = ele.adiabat;
|
||||
deliver[index][titList.length - 1] = ele.deliver;
|
||||
charge[index][titList.length - 1] = ele.charge;
|
||||
assembly[index][titList.length - 1] = ele.assembly;
|
||||
}
|
||||
}
|
||||
}
|
||||
// console.log(adiabat)
|
||||
// console.log(deliver)
|
||||
// console.log(charge)
|
||||
// console.log(assembly)
|
||||
const adiabatList = []; // 绝热
|
||||
adiabatList.push(resData.map((el) => el.realAdiabat)); // 实际
|
||||
adiabatList.push(resData.map((el) => el.forecastAdiabat)); // 预测
|
||||
|
||||
const deliverList = [];
|
||||
deliverList.push(resData.map((el) => el.realDeliver)); // 交付数量列表
|
||||
deliverList.push(resData.map((el) => el.forecastDeliver)); // 交付数量列表
|
||||
|
||||
const chargeList = [];
|
||||
chargeList.push(resData.map((el) => el.realCharge)); //装药数量列表
|
||||
chargeList.push(resData.map((el) => el.forecastCharge)); //装药数量列表
|
||||
const assemblyList = [];
|
||||
assemblyList.push(resData.map((el) => el.realAssembly)); // 总装数列表
|
||||
assemblyList.push(resData.map((el) => el.forecastAssembly)); // 总装数列表
|
||||
// // console.log(adiabatList);
|
||||
// // return;
|
||||
// let adiabat = []; // 绝热数量
|
||||
// let deliver = []; // 交付数量
|
||||
// let charge = []; // 装药数量
|
||||
// let assembly = []; // 总装数量
|
||||
|
||||
// let titData = resData.allModel;
|
||||
// delete resData.allModel;
|
||||
// let titList = [];
|
||||
// for (let index = 0; index < titData.length; index++) {
|
||||
// adiabat.push([]);
|
||||
// deliver.push([]);
|
||||
// charge.push([]);
|
||||
// assembly.push([]);
|
||||
// }
|
||||
// let newData = {};
|
||||
// for (let i = 0; i < resData.list.length; i++) {
|
||||
// const item = resData.list[i];
|
||||
// for (const key in item) {
|
||||
// newData[key] = item[key];
|
||||
// }
|
||||
// }
|
||||
// for (const key in newData) {
|
||||
// if (Object.hasOwnProperty.call(newData, key)) {
|
||||
// const item = newData[key];
|
||||
// titList.push(key);
|
||||
// for (let i = 0; i < item.length; i++) {
|
||||
// const ele = item[i];
|
||||
// let index = titData.findIndex((e) => e == ele.productModel);
|
||||
// adiabat[index][titList.length - 1] = ele.adiabat;
|
||||
// deliver[index][titList.length - 1] = ele.deliver;
|
||||
// charge[index][titList.length - 1] = ele.charge;
|
||||
// assembly[index][titList.length - 1] = ele.assembly;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// // console.log(adiabat);
|
||||
// // console.log(deliver)
|
||||
// // console.log(charge)
|
||||
// // console.log(assembly)
|
||||
|
||||
// debugger
|
||||
|
||||
// // console.log(resData);
|
||||
// const adiabatList = [];
|
||||
// // console.log(xAixsList);
|
||||
this.chart2.setOption({
|
||||
tooltip: {
|
||||
formatter: (params, ticket, callback) => {
|
||||
const type = ["实际", "预测"];
|
||||
// // console.log(type[params.dataIndex]);
|
||||
// console.log(params.seriesIndex % 2);
|
||||
|
||||
let seriesName = params.seriesName;
|
||||
let newSeriesName = seriesName.split(",");
|
||||
let name = params.name;
|
||||
@ -304,14 +346,17 @@ export default {
|
||||
return `
|
||||
<div>
|
||||
<div>${name}</div>
|
||||
<div><span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:${params.color};"></span> ${newSeriesName[0]}</div>
|
||||
<div>${newSeriesName[1]} ${num}</div>
|
||||
|
||||
<div>${type[params.seriesIndex % 2]} ${num}</div>
|
||||
</div>
|
||||
`;
|
||||
},
|
||||
// <div><span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:${
|
||||
// params.color
|
||||
// };"></span> ${newSeriesName[0]} ${num}</div>
|
||||
},
|
||||
legend: {
|
||||
data: ["绝热", "交付", "装药", "总装"],
|
||||
data: ["绝热", "装药", "总装", "交付"],
|
||||
textStyle: {
|
||||
color: "#fff", //legend字体颜色
|
||||
},
|
||||
@ -331,23 +376,23 @@ export default {
|
||||
// color: '#fff',
|
||||
// },
|
||||
// },
|
||||
dataZoom: [
|
||||
{
|
||||
type: "slider",
|
||||
textStyle: {
|
||||
color: "#fff",
|
||||
},
|
||||
startValue: this.dataZoomStart(titList.length, 4, "start"),
|
||||
endValue: this.dataZoomStart(titList.length, 4, "end"),
|
||||
},
|
||||
{
|
||||
type: "inside",
|
||||
},
|
||||
],
|
||||
// dataZoom: [
|
||||
// {
|
||||
// type: "slider",
|
||||
// textStyle: {
|
||||
// color: "#fff",
|
||||
// },
|
||||
// startValue: this.dataZoomStart(xAixsList.length, 4, "start"),
|
||||
// endValue: this.dataZoomStart(xAixsList.length, 4, "end"),
|
||||
// },
|
||||
// {
|
||||
// type: "inside",
|
||||
// },
|
||||
// ],
|
||||
xAxis: [
|
||||
{
|
||||
type: "category",
|
||||
data: titList,
|
||||
data: xAixsList,
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "rgb(255, 255, 255)",
|
||||
@ -380,70 +425,154 @@ export default {
|
||||
},
|
||||
],
|
||||
series: [
|
||||
...adiabat.map((e, index) => {
|
||||
...adiabatList.map((el, index) => {
|
||||
return {
|
||||
// name: '绝热',
|
||||
name: "绝热," + titData[index],
|
||||
name: "绝热",
|
||||
type: "bar",
|
||||
stack: "adiabat",
|
||||
data: el,
|
||||
emphasis: {
|
||||
focus: "series",
|
||||
},
|
||||
// barWidth: 30,
|
||||
data: e,
|
||||
itemStyle: {
|
||||
color: blueColorList[index],
|
||||
},
|
||||
};
|
||||
}),
|
||||
...deliver.map((e, index) => {
|
||||
...chargeList.map((el, index) => {
|
||||
return {
|
||||
// name: '交付',
|
||||
name: "交付," + titData[index],
|
||||
type: "bar",
|
||||
stack: "deliver",
|
||||
emphasis: {
|
||||
focus: "series",
|
||||
},
|
||||
// barWidth: 30,
|
||||
data: e,
|
||||
itemStyle: {
|
||||
color: greenColorList[index],
|
||||
},
|
||||
};
|
||||
}),
|
||||
...charge.map((e, index) => {
|
||||
return {
|
||||
// name: '装药',
|
||||
name: "装药," + titData[index],
|
||||
name: "装药",
|
||||
type: "bar",
|
||||
data: el,
|
||||
stack: "charge",
|
||||
emphasis: {
|
||||
focus: "series",
|
||||
},
|
||||
// barWidth: 30,
|
||||
data: e,
|
||||
itemStyle: {
|
||||
color: yelloColorList[index],
|
||||
},
|
||||
};
|
||||
}),
|
||||
...assembly.map((e, index) => {
|
||||
...assemblyList.map((el, index) => {
|
||||
return {
|
||||
// name: '总装',
|
||||
name: "总装," + titData[index],
|
||||
name: "总装",
|
||||
type: "bar",
|
||||
data: el,
|
||||
stack: "assembly",
|
||||
emphasis: {
|
||||
focus: "series",
|
||||
},
|
||||
// barWidth: 30,
|
||||
data: e,
|
||||
itemStyle: {
|
||||
color: redColorList[index],
|
||||
},
|
||||
};
|
||||
}),
|
||||
...deliverList.map((el, index) => {
|
||||
return {
|
||||
name: "交付",
|
||||
type: "bar",
|
||||
data: el,
|
||||
stack: "deliver",
|
||||
emphasis: {
|
||||
focus: "series",
|
||||
},
|
||||
itemStyle: {
|
||||
color: greenColorList[index],
|
||||
},
|
||||
};
|
||||
}),
|
||||
// {
|
||||
// name: "装药",
|
||||
// type: "bar",
|
||||
// data: chargeList,
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// },
|
||||
|
||||
// {
|
||||
// name: "总装",
|
||||
// type: "bar",
|
||||
// data: assemblyList,
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// },
|
||||
|
||||
// {
|
||||
// name: "交付",
|
||||
// type: "bar",
|
||||
// data: deliverList,
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// },
|
||||
|
||||
// ...adiabatList.map((e, index) => {
|
||||
// return {
|
||||
// // name: '绝热',
|
||||
// name: "绝热," + titData[index],
|
||||
// type: "bar",
|
||||
// stack: "adiabat",
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// // barWidth: 30,
|
||||
// data: e,
|
||||
// itemStyle: {
|
||||
// color: blueColorList[index],
|
||||
// },
|
||||
// };
|
||||
// }),
|
||||
|
||||
// ...charge.map((e, index) => {
|
||||
// return {
|
||||
// // name: '装药',
|
||||
// name: "装药," + titData[index],
|
||||
// type: "bar",
|
||||
// stack: "charge",
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// // barWidth: 30,
|
||||
// data: e,
|
||||
// itemStyle: {
|
||||
// color: yelloColorList[index],
|
||||
// },
|
||||
// };
|
||||
// }),
|
||||
// ...assembly.map((e, index) => {
|
||||
// return {
|
||||
// // name: '总装',
|
||||
// name: "总装," + titData[index],
|
||||
// type: "bar",
|
||||
// stack: "assembly",
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// // barWidth: 30,
|
||||
// data: e,
|
||||
// itemStyle: {
|
||||
// color: redColorList[index],
|
||||
// },
|
||||
// };
|
||||
// }),
|
||||
// ...deliver.map((e, index) => {
|
||||
// return {
|
||||
// // name: '交付',
|
||||
// name: "交付," + titData[index],
|
||||
// type: "bar",
|
||||
// stack: "deliver",
|
||||
// emphasis: {
|
||||
// focus: "series",
|
||||
// },
|
||||
// // barWidth: 30,
|
||||
// data: e,
|
||||
// itemStyle: {
|
||||
// color: greenColorList[index],
|
||||
// },
|
||||
// };
|
||||
// }),
|
||||
// {
|
||||
// name: '绝热',
|
||||
// type: 'bar',
|
||||
@ -554,7 +683,7 @@ export default {
|
||||
});
|
||||
},
|
||||
setOptions3(resData) {
|
||||
// console.log(resData)
|
||||
// // console.log(resData)
|
||||
|
||||
let models = [];
|
||||
let adiabat = [];
|
||||
@ -568,10 +697,10 @@ export default {
|
||||
for (let i = 0; i < resData.length; i++) {
|
||||
const item = resData[i];
|
||||
models.push(item.model);
|
||||
adiabat.push(item.adiabat);
|
||||
charge.push(item.charge);
|
||||
deliver.push(item.deliver);
|
||||
assembly.push(item.assembly);
|
||||
adiabat.push(item.realAdiabat);
|
||||
charge.push(item.realCharge);
|
||||
deliver.push(item.realDeliver);
|
||||
assembly.push(item.realAssembly);
|
||||
review.push(item.review);
|
||||
settlement.push(item.settlement);
|
||||
productionNumber.push(item.productionNumber);
|
||||
@ -625,16 +754,16 @@ export default {
|
||||
type: "bar",
|
||||
data: charge,
|
||||
},
|
||||
{
|
||||
name: "交付数(地试数)",
|
||||
type: "bar",
|
||||
data: deliver,
|
||||
},
|
||||
{
|
||||
name: "总装数",
|
||||
type: "bar",
|
||||
data: assembly,
|
||||
},
|
||||
{
|
||||
name: "交付数(地试数)",
|
||||
type: "bar",
|
||||
data: deliver,
|
||||
},
|
||||
{
|
||||
name: "评审数",
|
||||
type: "bar",
|
||||
@ -655,6 +784,12 @@ export default {
|
||||
},
|
||||
},
|
||||
created() {
|
||||
const month = new Date().getMonth() + 1;
|
||||
if (month < 10) {
|
||||
this.prodMonthlyPlan = `${new Date().getFullYear()}-0${month}`;
|
||||
} else {
|
||||
this.prodMonthlyPlan = `${new Date().getFullYear()}-${month}`;
|
||||
}
|
||||
this.getData();
|
||||
},
|
||||
};
|
||||
@ -665,4 +800,25 @@ export default {
|
||||
height: 100%;
|
||||
padding: 0 25px;
|
||||
}
|
||||
|
||||
::v-deep .el-date-editor {
|
||||
border-radius: 0;
|
||||
box-shadow: none !important;
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
vertical-align: middle;
|
||||
color: #fff;
|
||||
background-color: transparent;
|
||||
.el-range-input,
|
||||
.el-range-separator {
|
||||
color: #fff;
|
||||
}
|
||||
.el-range-editor.is-active {
|
||||
border-color: #fff !important;
|
||||
}
|
||||
|
||||
input {
|
||||
background-color: transparent;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -69,7 +69,7 @@
|
||||
item.projectName
|
||||
}}</el-col>
|
||||
<el-col style="text-align: center" :span="7">{{
|
||||
item.category
|
||||
item.name
|
||||
}}</el-col>
|
||||
<el-col style="text-align: center" :span="5">{{
|
||||
item.total
|
||||
|
@ -33,7 +33,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -32,7 +32,7 @@ export default {
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
},
|
||||
formatter: function (params, ticket, callback) {
|
||||
console.log(params)
|
||||
// console.log(params)
|
||||
var res = params[0].name;
|
||||
for (var i = 0, l = params.length; i < l; i++) {
|
||||
res += '<br/>' + params[i].seriesName + ' : ' + Math.abs(params[i].value);
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<container3>
|
||||
<container100>
|
||||
<img
|
||||
v-if="pic.length"
|
||||
class="img"
|
||||
@ -82,7 +82,7 @@
|
||||
</div>
|
||||
<div class="box">
|
||||
<i
|
||||
>{{ getItem(pointLevelCount, "一级").COUNTNUMBER }}/{{
|
||||
>{{ getItem(pointLevelCount, "Ⅰ级").COUNTNUMBER }}/{{
|
||||
getItem(sourceLevelCount, "一级").COUNTNUMBER
|
||||
}}</i
|
||||
><span class="num2">个</span>
|
||||
@ -94,7 +94,7 @@
|
||||
</div>
|
||||
<div class="box">
|
||||
<i
|
||||
>{{ getItem(pointLevelCount, "二级").COUNTNUMBER }}/{{
|
||||
>{{ getItem(pointLevelCount, "Ⅱ级").COUNTNUMBER }}/{{
|
||||
getItem(sourceLevelCount, "二级").COUNTNUMBER
|
||||
}}</i
|
||||
><span class="num2">个</span>
|
||||
@ -106,7 +106,7 @@
|
||||
</div>
|
||||
<div class="box">
|
||||
<i
|
||||
>{{ getItem(pointLevelCount, "三级").COUNTNUMBER }}/{{
|
||||
>{{ getItem(pointLevelCount, "Ⅲ级").COUNTNUMBER }}/{{
|
||||
getItem(sourceLevelCount, "三级").COUNTNUMBER
|
||||
}}</i
|
||||
><span class="num2">个</span>
|
||||
@ -120,12 +120,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</container3>
|
||||
</container100>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import container3 from "../components/container3/index.vue";
|
||||
import container100 from "../components/container3/index.vue";
|
||||
import rocketTit from "../components/rocketTit/index.vue";
|
||||
import progressBar from "./../components/progress/index.vue";
|
||||
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
mixins: [resize],
|
||||
name: "left1",
|
||||
components: {
|
||||
container3,
|
||||
container100,
|
||||
rocketTit,
|
||||
progressBar,
|
||||
},
|
||||
@ -145,15 +145,15 @@ export default {
|
||||
pic: "",
|
||||
pointLevelCount: [
|
||||
{
|
||||
name: "二级",
|
||||
name: "Ⅰ级",
|
||||
COUNTNUMBER: 0,
|
||||
},
|
||||
{
|
||||
name: "三级",
|
||||
name: "Ⅱ级",
|
||||
COUNTNUMBER: 0,
|
||||
},
|
||||
{
|
||||
name: "一级",
|
||||
name: "Ⅲ级",
|
||||
COUNTNUMBER: 0,
|
||||
},
|
||||
],
|
||||
@ -189,12 +189,17 @@ export default {
|
||||
this.$bus.emit("getTarget", item);
|
||||
},
|
||||
getItem(list, name) {
|
||||
for (let index = 0; index < list.length; index++) {
|
||||
const item = list[index];
|
||||
if (name == item.name) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return list.find((item) => {
|
||||
return item.name === name;
|
||||
});
|
||||
// for (let index = 0; index < list.length; index++) {
|
||||
// const item = list[index];
|
||||
// console.log(item.name + "---" + name + "---" + (name == item.name));
|
||||
// if (name == item.name) {
|
||||
// // console.log(item);
|
||||
// return item;
|
||||
// }
|
||||
// }
|
||||
},
|
||||
getData() {
|
||||
this.request({
|
||||
@ -202,10 +207,17 @@ export default {
|
||||
method: "get",
|
||||
}).then((res) => {
|
||||
if (200 == res.code) {
|
||||
console.log(res.data);
|
||||
this.pointLevelCount = res.data.pointLevelCount;
|
||||
this.sourceLevelCount = res.data.sourceLevelCount;
|
||||
this.points = res.data.points;
|
||||
// console.log(res.data);
|
||||
|
||||
if (res.data.pointLevelCount) {
|
||||
this.pointLevelCount = res.data.pointLevelCount;
|
||||
}
|
||||
if (res.data.sourceLevelCount) {
|
||||
this.sourceLevelCount = res.data.sourceLevelCount;
|
||||
}
|
||||
if (res.data.points) {
|
||||
this.points = res.data.points;
|
||||
}
|
||||
}
|
||||
});
|
||||
this.request({
|
||||
|
@ -140,7 +140,7 @@ import container3 from "./components/container3/index.vue";
|
||||
import bigScreenTabs from "../components/bigScreenTabs/index.vue";
|
||||
import colorList from "@/utils/colorPalette";
|
||||
import vueSeamlessScroll from "vue-seamless-scroll";
|
||||
|
||||
// import _ from 'loda'
|
||||
import echarts from "echarts";
|
||||
require("echarts/theme/macarons"); // echarts theme
|
||||
import resize from "../../dashboard/mixins/resize";
|
||||
@ -431,6 +431,7 @@ export default {
|
||||
this.chart3 = echarts.init(this.$refs.chart3);
|
||||
// list 列表数据, mapList柱状图数据
|
||||
let { list, mapList } = res.data;
|
||||
console.log(list);
|
||||
// 根据troubleItem处理list
|
||||
// {"a1": true, "a2": true}
|
||||
let troubleList = this.troubleItem;
|
||||
@ -449,7 +450,7 @@ export default {
|
||||
}
|
||||
|
||||
if (troubleList.updateSuggest && troubleList.tempUpdateMethod) {
|
||||
troubleTitleList.push({ name: "措施", span: 5 });
|
||||
troubleTitleList.push({ name: "整改情况", span: 5 });
|
||||
}
|
||||
|
||||
if (troubleList.responsiblePerson) {
|
||||
@ -467,11 +468,11 @@ export default {
|
||||
});
|
||||
|
||||
this.troubleTitleList = troubleTitleList;
|
||||
|
||||
console.log(troubleTitleList);
|
||||
// 处理list得到troubleDataList
|
||||
let tmpObj = {};
|
||||
list.map((e, i) => {
|
||||
// let obj = {};
|
||||
list.forEach((e, i) => {});
|
||||
this.scrollList = list.map((e, i) => {
|
||||
let tmpObj = {};
|
||||
tmpObj["序号"] = i;
|
||||
if (troubleList.responsibleUnit) {
|
||||
tmpObj["车间名称"] = e.responsibleUnit;
|
||||
@ -480,7 +481,7 @@ export default {
|
||||
tmpObj["隐患内容"] = e.address + " " + e.existProblem;
|
||||
}
|
||||
if (troubleList.updateSuggest && troubleList.tempUpdateMethod) {
|
||||
tmpObj["措施"] = e.updateSuggest + " " + e.tempUpdateMethod;
|
||||
tmpObj["整改情况"] = e.updateSuggest + " " + e.tempUpdateMethod;
|
||||
}
|
||||
if (troubleList.responsiblePerson) {
|
||||
tmpObj["责任人"] = e.responsibleUnit;
|
||||
@ -488,16 +489,18 @@ export default {
|
||||
if (troubleList.category) {
|
||||
tmpObj["类别"] = e.category;
|
||||
}
|
||||
console.log(tmpObj);
|
||||
console.log();
|
||||
|
||||
troubleDataList.push(tmpObj);
|
||||
return tmpObj;
|
||||
});
|
||||
console.log("scrollList");
|
||||
console.log(troubleDataList);
|
||||
// console.log("scrollList");
|
||||
// console.log(troubleDataList);
|
||||
|
||||
// 得到
|
||||
|
||||
this.scrollList = troubleDataList;
|
||||
// this.scrollList = troubleDataList;
|
||||
|
||||
this.listData2 = Array(this.scrollList.length).fill(0);
|
||||
this.$refs.seamlessScroll.reset();
|
||||
this.chart3.setOption({
|
||||
@ -629,7 +632,7 @@ export default {
|
||||
if (200 == res.code) {
|
||||
// 如何处理列表数据
|
||||
this.troubleItem = JSON.parse(res.data);
|
||||
console.log(this.troubleItem);
|
||||
// // console.log(this.troubleItem);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
@ -10,7 +10,7 @@
|
||||
</el-row> -->
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="图片" align="center" prop="bigPic" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-image style="width: 100px; height: 100px" :src="scope.row.bigPic" fit="cover"></el-image>
|
||||
|
@ -27,7 +27,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="今日日期" align="center" prop="todayDate" />
|
||||
<el-table-column
|
||||
label="今日运行设备数"
|
||||
|
@ -27,7 +27,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="本月收入" align="center" prop="income" />
|
||||
<el-table-column label="本月支出" align="center" prop="expenditure" />
|
||||
|
@ -1,170 +1,193 @@
|
||||
<template>
|
||||
<el-row :gutter="20">
|
||||
<!--用户数据-->
|
||||
<el-col :span="24" :xs="24">
|
||||
<el-row :gutter="10" class="mb8 fr">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
:loading="exportLoading"
|
||||
@click="importTemplate"
|
||||
>导出模板</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<!--用户数据-->
|
||||
<el-col :span="24" :xs="24">
|
||||
<el-row :gutter="10" class="mb8 fr">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-upload2"
|
||||
size="mini"
|
||||
@click="handleImport"
|
||||
>导入</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
:loading="exportLoading"
|
||||
@click="importTemplate"
|
||||
>导出模板</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="指标名称" align="center" prop="indicatorName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="经营责任书目标数量" align="center" prop="targetTasks" />
|
||||
<el-table-column label="经营责任书已完成数量" align="center" prop="completedTasks" />
|
||||
</el-table>
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" type="index" width="80" />
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:autoScroll="false"
|
||||
:pageSizes="[2, 5, 10, 20]"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-col>
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
<!-- <div class="el-upload__tip" slot="tip">
|
||||
<el-table-column label="指标名称" align="center" prop="indicatorName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column
|
||||
label="经营责任书目标数量"
|
||||
align="center"
|
||||
prop="targetTasks"
|
||||
/>
|
||||
<el-table-column
|
||||
label="经营责任书已完成数量"
|
||||
align="center"
|
||||
prop="completedTasks"
|
||||
/>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:autoScroll="false"
|
||||
:pageSizes="[2, 5, 10, 20]"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-col>
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
:title="upload.title"
|
||||
:visible.sync="upload.open"
|
||||
width="400px"
|
||||
append-to-body
|
||||
>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
<!-- <div class="el-upload__tip" slot="tip">
|
||||
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<!-- <el-link
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
style="font-size: 12px; vertical-align: baseline"
|
||||
@click="importTemplate"
|
||||
>下载模板</el-link
|
||||
> -->
|
||||
</div>
|
||||
</el-upload>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-row>
|
||||
</template>
|
||||
<script>
|
||||
import { leftOneList, importTemplate } from './indexApi'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { leftOneList, importTemplate } from "./indexApi";
|
||||
import { getToken } from "@/utils/auth";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: this.page_size,
|
||||
},
|
||||
// 用户信息
|
||||
userList: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 用户导入参数
|
||||
upload: {
|
||||
// 是否显示弹出层(用户导入)
|
||||
open: false,
|
||||
// 弹出层标题(用户导入)
|
||||
title: '',
|
||||
// 是否禁用上传
|
||||
isUploading: false,
|
||||
// 是否更新已经存在的用户数据
|
||||
updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: 'Bearer ' + getToken() },
|
||||
// 上传的地址
|
||||
url: process.env.VUE_APP_BASE_API + '/hx/businessResponsibility/importData',
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 查询用户列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
leftOneList(this.queryParams).then(res => {
|
||||
this.userList = res.rows
|
||||
this.total = res.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const queryParams = this.queryParams
|
||||
this.$modal
|
||||
.confirm('是否确认导出所有用户数据项?')
|
||||
.then(() => {
|
||||
this.exportLoading = true
|
||||
return exportUser(queryParams)
|
||||
})
|
||||
.then(response => {
|
||||
this.$download.name(response.msg)
|
||||
this.exportLoading = false
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
/** 导入按钮操作 */
|
||||
handleImport() {
|
||||
this.upload.title = '数据导入'
|
||||
this.upload.open = true
|
||||
},
|
||||
/** 下载模板操作 */
|
||||
importTemplate() {
|
||||
importTemplate().then(response => {
|
||||
this.$download.name(response.msg)
|
||||
})
|
||||
},
|
||||
// 文件上传中处理
|
||||
handleFileUploadProgress(event, file, fileList) {
|
||||
this.upload.isUploading = true
|
||||
},
|
||||
// 文件上传成功处理
|
||||
handleFileSuccess(response, file, fileList) {
|
||||
this.upload.open = false
|
||||
this.upload.isUploading = false
|
||||
this.$refs.upload.clearFiles()
|
||||
this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
|
||||
this.getList()
|
||||
},
|
||||
// 提交上传文件
|
||||
submitFileForm() {
|
||||
this.$refs.upload.submit()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
}
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: this.page_size,
|
||||
},
|
||||
// 用户信息
|
||||
userList: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 用户导入参数
|
||||
upload: {
|
||||
// 是否显示弹出层(用户导入)
|
||||
open: false,
|
||||
// 弹出层标题(用户导入)
|
||||
title: "",
|
||||
// 是否禁用上传
|
||||
isUploading: false,
|
||||
// 是否更新已经存在的用户数据
|
||||
updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
// 上传的地址
|
||||
url:
|
||||
process.env.VUE_APP_BASE_API +
|
||||
"/hx/businessResponsibility/importData",
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
/** 查询用户列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
leftOneList(this.queryParams).then((res) => {
|
||||
this.userList = res.rows;
|
||||
this.total = res.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const queryParams = this.queryParams;
|
||||
this.$modal
|
||||
.confirm("是否确认导出所有用户数据项?")
|
||||
.then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportUser(queryParams);
|
||||
})
|
||||
.then((response) => {
|
||||
this.$download.name(response.msg);
|
||||
this.exportLoading = false;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
/** 导入按钮操作 */
|
||||
handleImport() {
|
||||
this.upload.title = "数据导入";
|
||||
this.upload.open = true;
|
||||
},
|
||||
/** 下载模板操作 */
|
||||
importTemplate() {
|
||||
importTemplate().then((response) => {
|
||||
this.$download.name(response.msg);
|
||||
});
|
||||
},
|
||||
// 文件上传中处理
|
||||
handleFileUploadProgress(event, file, fileList) {
|
||||
this.upload.isUploading = true;
|
||||
},
|
||||
// 文件上传成功处理
|
||||
handleFileSuccess(response, file, fileList) {
|
||||
this.upload.open = false;
|
||||
this.upload.isUploading = false;
|
||||
this.$refs.upload.clearFiles();
|
||||
this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
|
||||
this.getList();
|
||||
},
|
||||
// 提交上传文件
|
||||
submitFileForm() {
|
||||
this.$refs.upload.submit();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="预测收入(件)" align="center" prop="forecastRevenue" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="型号名称" align="center" prop="translateName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="任务数" align="center" prop="completedTaskNumber" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="型号名称" align="center" prop="productName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="交付数量(件)" align="center" prop="actualDeliveryQuantity" />
|
||||
|
@ -10,7 +10,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="预测装药量(件)" align="center" prop="forecastQuantity" />
|
||||
<el-table-column label="实际装药量(件)" align="center" prop="actualQuantity" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="工房名称" align="center" prop="workHomeName" />
|
||||
<el-table-column label="横坐标百分比(不要%号)" align="center" prop="abscissa" />
|
||||
<el-table-column label="纵坐标百分比(不要%号)" align="center" prop="ordinate" />
|
||||
|
@ -17,7 +17,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="大图类型" align="center" prop="type">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.type == '1'">危险点图</div>
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="工房总数" align="center" prop="workshopTotal" />
|
||||
<el-table-column label="作业工房数" align="center" prop="workingWorkshopTotal" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="汽车名称" align="center" prop="carName" />
|
||||
<el-table-column label="作业内容" align="center" prop="workContent" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="周开始日期" align="center" prop="month" />
|
||||
<el-table-column label="周结束日期" align="center" prop="serialNumber" />
|
||||
<el-table-column label="实际探伤完成量" align="center" prop="realFlawDetection" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="工房名称" align="center" prop="workHome" />
|
||||
<el-table-column label="车间名称" align="center" prop="workshop" />
|
||||
<el-table-column label="产品" align="center" prop="product" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="编号" align="center" prop="numberNo" />
|
||||
<el-table-column label="称量" align="center" prop="weighing" />
|
||||
<el-table-column label="混合" align="center" prop="blend" />
|
||||
|
@ -27,7 +27,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="酯工作内容" align="center" prop="jobContent" />
|
||||
<el-table-column label="开车时间" align="center" prop="driveDate" />
|
||||
<el-table-column
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="工位名称" align="center" prop="stationName" />
|
||||
<el-table-column label="升温工位数" align="center" prop="riseNumber" />
|
||||
<el-table-column label="降温工位数" align="center" prop="coolingNumber" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="年份" align="center" prop="year" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column label="实际装药量" align="center" prop="realCharge" />
|
||||
|
@ -1,175 +1,227 @@
|
||||
<template>
|
||||
<el-row :gutter="20">
|
||||
<!--用户数据-->
|
||||
<el-col :span="24" :xs="24">
|
||||
<el-row :gutter="10" class="mb8 fr">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
:loading="exportLoading"
|
||||
@click="importTemplate"
|
||||
>导出模板</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<!--用户数据-->
|
||||
<el-col :span="24" :xs="24">
|
||||
<el-row :gutter="10" class="mb8 fr">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-upload2"
|
||||
size="mini"
|
||||
@click="handleImport"
|
||||
>导入</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
:loading="exportLoading"
|
||||
@click="importTemplate"
|
||||
>导出模板</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column label="生产数量" align="center" prop="productionNumber" />
|
||||
<el-table-column label="绝热数量" align="center" prop="adiabat" />
|
||||
<el-table-column label="装药数量" align="center" prop="charge" />
|
||||
<el-table-column label="总装数量" align="center" prop="assembly" />
|
||||
<el-table-column label="交付数量" align="center" prop="deliver" />
|
||||
<el-table-column label="评审数量" align="center" prop="review" />
|
||||
<el-table-column label="结算数量" align="center" prop="settlement" />
|
||||
</el-table>
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" type="index" width="80" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column
|
||||
label="生产数量"
|
||||
align="center"
|
||||
prop="productionNumber"
|
||||
/>
|
||||
<el-table-column
|
||||
label="实际绝热数量"
|
||||
align="center"
|
||||
prop="realAdiabat"
|
||||
/>
|
||||
<el-table-column
|
||||
label="预测绝热数量"
|
||||
align="center"
|
||||
prop="forecastAdiabat"
|
||||
/>
|
||||
<el-table-column
|
||||
label="实际装药数量"
|
||||
align="center"
|
||||
prop="realCharge"
|
||||
/>
|
||||
<el-table-column
|
||||
label="预测装药数量"
|
||||
align="center"
|
||||
prop="forecastCharge"
|
||||
/>
|
||||
<el-table-column
|
||||
label="实际总装数量"
|
||||
align="center"
|
||||
prop="realAssembly"
|
||||
/>
|
||||
<el-table-column
|
||||
label="预测总装数量"
|
||||
align="center"
|
||||
prop="forecastAssembly"
|
||||
/>
|
||||
<el-table-column
|
||||
label="实际交付数量"
|
||||
align="center"
|
||||
prop="realDeliver"
|
||||
/>
|
||||
<el-table-column
|
||||
label="预测交付数量"
|
||||
align="center"
|
||||
prop="forecastDeliver"
|
||||
/>
|
||||
<el-table-column label="评审数量" align="center" prop="review" />
|
||||
<el-table-column label="结算数量" align="center" prop="settlement" />
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:autoScroll="false"
|
||||
:pageSizes="[2, 5, 10, 20]"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-col>
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
<!-- <div class="el-upload__tip" slot="tip">
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:autoScroll="false"
|
||||
:pageSizes="[2, 5, 10, 20]"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-col>
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
:title="upload.title"
|
||||
:visible.sync="upload.open"
|
||||
width="400px"
|
||||
append-to-body
|
||||
>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
<!-- <div class="el-upload__tip" slot="tip">
|
||||
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<!-- <el-link
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
style="font-size: 12px; vertical-align: baseline"
|
||||
@click="importTemplate"
|
||||
>下载模板</el-link
|
||||
> -->
|
||||
</div>
|
||||
</el-upload>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-row>
|
||||
</template>
|
||||
<script>
|
||||
import { leftTwoList, leftTwoImportTemplate } from './indexApi'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { leftTwoList, leftTwoImportTemplate } from "./indexApi";
|
||||
import { getToken } from "@/utils/auth";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: this.page_size,
|
||||
},
|
||||
// 用户信息
|
||||
userList: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 用户导入参数
|
||||
upload: {
|
||||
// 是否显示弹出层(用户导入)
|
||||
open: false,
|
||||
// 弹出层标题(用户导入)
|
||||
title: '',
|
||||
// 是否禁用上传
|
||||
isUploading: false,
|
||||
// 是否更新已经存在的用户数据
|
||||
updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: 'Bearer ' + getToken() },
|
||||
// 上传的地址
|
||||
url: process.env.VUE_APP_BASE_API + '/hx/productionPlan/importData',
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 查询用户列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
leftTwoList(this.queryParams).then(res => {
|
||||
this.userList = res.rows
|
||||
this.total = res.total
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const queryParams = this.queryParams
|
||||
this.$modal
|
||||
.confirm('是否确认导出所有用户数据项?')
|
||||
.then(() => {
|
||||
this.exportLoading = true
|
||||
return exportUser(queryParams)
|
||||
})
|
||||
.then(response => {
|
||||
this.$download.name(response.msg)
|
||||
this.exportLoading = false
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
/** 导入按钮操作 */
|
||||
handleImport() {
|
||||
this.upload.title = '数据导入'
|
||||
this.upload.open = true
|
||||
},
|
||||
/** 下载模板操作 */
|
||||
importTemplate() {
|
||||
leftTwoImportTemplate().then(response => {
|
||||
this.$download.name(response.msg)
|
||||
})
|
||||
},
|
||||
// 文件上传中处理
|
||||
handleFileUploadProgress(event, file, fileList) {
|
||||
this.upload.isUploading = true
|
||||
},
|
||||
// 文件上传成功处理
|
||||
handleFileSuccess(response, file, fileList) {
|
||||
this.upload.open = false
|
||||
this.upload.isUploading = false
|
||||
this.$refs.upload.clearFiles()
|
||||
this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
|
||||
this.getList()
|
||||
},
|
||||
// 提交上传文件
|
||||
submitFileForm() {
|
||||
this.$refs.upload.submit()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
},
|
||||
}
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: this.page_size,
|
||||
},
|
||||
// 用户信息
|
||||
userList: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 用户导入参数
|
||||
upload: {
|
||||
// 是否显示弹出层(用户导入)
|
||||
open: false,
|
||||
// 弹出层标题(用户导入)
|
||||
title: "",
|
||||
// 是否禁用上传
|
||||
isUploading: false,
|
||||
// 是否更新已经存在的用户数据
|
||||
updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
// 上传的地址
|
||||
url: process.env.VUE_APP_BASE_API + "/hx/productionPlan/importData",
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
/** 查询用户列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
leftTwoList(this.queryParams).then((res) => {
|
||||
this.userList = res.rows;
|
||||
this.total = res.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const queryParams = this.queryParams;
|
||||
this.$modal
|
||||
.confirm("是否确认导出所有用户数据项?")
|
||||
.then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportUser(queryParams);
|
||||
})
|
||||
.then((response) => {
|
||||
this.$download.name(response.msg);
|
||||
this.exportLoading = false;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
/** 导入按钮操作 */
|
||||
handleImport() {
|
||||
this.upload.title = "数据导入";
|
||||
this.upload.open = true;
|
||||
},
|
||||
/** 下载模板操作 */
|
||||
importTemplate() {
|
||||
leftTwoImportTemplate().then((response) => {
|
||||
this.$download.name(response.msg);
|
||||
});
|
||||
},
|
||||
// 文件上传中处理
|
||||
handleFileUploadProgress(event, file, fileList) {
|
||||
this.upload.isUploading = true;
|
||||
},
|
||||
// 文件上传成功处理
|
||||
handleFileSuccess(response, file, fileList) {
|
||||
this.upload.open = false;
|
||||
this.upload.isUploading = false;
|
||||
this.$refs.upload.clearFiles();
|
||||
this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
|
||||
this.getList();
|
||||
},
|
||||
// 提交上传文件
|
||||
submitFileForm() {
|
||||
this.$refs.upload.submit();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="类型(原材料/配套件)" align="center" prop="category" />
|
||||
<el-table-column label="型号名称" align="center" prop="name" />
|
||||
<el-table-column label="现有可满足生产台数" align="center" prop="existing" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="分类(原材料/配套件)" align="center" prop="category" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="原材料或配套件的名称" align="center" prop="name" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="库房编号" align="center" prop="numberNo" />
|
||||
<el-table-column label="库房名称" align="center" prop="name" />
|
||||
<el-table-column label="库房类型" align="center" prop="category" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="实际军品收入累计数" align="center" prop="realMilitaryIncome" />
|
||||
<el-table-column label="目标军品收入数" align="center" prop="targetMilitaryIncome" />
|
||||
<el-table-column label="实际装药量累计数" align="center" prop="realCharge" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="大型装药量数量" align="center" prop="bigCharge" />
|
||||
<el-table-column label="中型装药量数量" align="center" prop="mediumCharge" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="归属(厂计划/六院计划)" align="center" prop="ascription" />
|
||||
<el-table-column label="型号" align="center" prop="model" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="物资名称" align="center" prop="materialName" />
|
||||
<el-table-column label="现有库存" align="center" prop="stock" />
|
||||
<el-table-column label="是否开始备货采购" align="center" prop="startPurchase" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="年份" align="center" prop="year" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column label="实际累计生产数量(件)" align="center" prop="realTotal" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="绝热完成数量" align="center" prop="realInsulate" />
|
||||
<el-table-column label="绝热计划数量" align="center" prop="targetInsulate" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="工作内容" align="center" prop="jobContent" />
|
||||
<el-table-column label="进展情况" align="center" prop="progress" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="绝热完成数量(个)" align="center" prop="realAdiabat" />
|
||||
<el-table-column label="装药完成数(个)" align="center" prop="realCharge" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="工作内容" align="center" prop="jobContent" />
|
||||
<el-table-column label="会议名称" align="center" prop="meetingName" />
|
||||
<el-table-column label="督办领导" align="center" prop="checkLeader" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="班组名称" align="center" prop="teamName" />
|
||||
<el-table-column label="人员数量" align="center" prop="peopleTotal" />
|
||||
|
@ -38,7 +38,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="实际收入(万)" align="center" prop="realIncome" />
|
||||
<el-table-column label="实际利润(万)" align="center" prop="realProfit" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="实际收入" align="center" prop="realIncome" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column label="预算执行率" align="center" prop="budgetImplementationRate" />
|
||||
|
@ -12,7 +12,7 @@
|
||||
<left5 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">全厂经营指标列表</span></el-divider>
|
||||
<center1 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">部门收入完成率</span></el-divider>
|
||||
<el-divider content-position="left"><span class="text-bold-18">经营指标/部门收入</span></el-divider>
|
||||
<center2 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">成本分析</span></el-divider>
|
||||
<center3 />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="年度" align="center" prop="year" />
|
||||
<el-table-column label="五力名称" align="center" prop="fiveForce" />
|
||||
<el-table-column label="指标名称" align="center" prop="indexName" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月度" align="center" prop="month" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column label="目标收入" align="center" prop="targetIncome" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="合同名称" align="center" prop="contractName" />
|
||||
<el-table-column label="签订日期" align="center" prop="contractDate" />
|
||||
<el-table-column label="计划数量" align="center" prop="planQuantity" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="预测收入" align="center" prop="forecastIncome" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门" align="center" prop="deptName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="综合计划数量(件)" align="center" prop="comprehensivePlanTotal" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="公示内容" align="center" prop="publicityContent" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="负责人" align="center" prop="director" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="目标收入" align="center" prop="targetIncome" />
|
||||
<el-table-column label="实际收入" align="center" prop="realIncome" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="合同日期" align="center" prop="contractDate" />
|
||||
<el-table-column label="产业类型" align="center" prop="industryCategory" />
|
||||
<el-table-column label="合同编号" align="center" prop="contractNo" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="预测收入" align="center" prop="forecastIncome" />
|
||||
|
@ -27,7 +27,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column
|
||||
label="全厂质量体系问题总数"
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="SPC参数" align="center" prop="spcName" />
|
||||
<el-table-column label="关键参数类别" align="center" prop="paramCategory" />
|
||||
<el-table-column label="产品实物" align="center" prop="product" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="SPC参数" align="center" prop="spcName" />
|
||||
<el-table-column label="产品实物名称" align="center" prop="productName" />
|
||||
<el-table-column label="实际值" align="center" prop="realValue" />
|
||||
|
@ -1,61 +1,91 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量计划</span></el-divider>
|
||||
<left1 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量体系要素</span></el-divider>
|
||||
<left2 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量体系审查</span></el-divider>
|
||||
<left3 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">视频检验系统实况</span></el-divider>
|
||||
<left4 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量管理合格率</span></el-divider>
|
||||
<center1 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">关键参数SPC分析</span></el-divider>
|
||||
<center2 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">产品实际SPC列表</span></el-divider>
|
||||
<center3 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量问题</span></el-divider>
|
||||
<right1 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量检查分析</span></el-divider>
|
||||
<right2 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">质量案例</span></el-divider>
|
||||
<right3 />
|
||||
</div>
|
||||
<div class="app-container">
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量计划</span></el-divider
|
||||
>
|
||||
<left1 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量体系要素</span></el-divider
|
||||
>
|
||||
<left2 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量体系审查</span></el-divider
|
||||
>
|
||||
<left3 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">视频检验系统实况</span></el-divider
|
||||
>
|
||||
<left4 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量管理合格率</span></el-divider
|
||||
>
|
||||
<center1 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">关键参数SPC分析</span></el-divider
|
||||
>
|
||||
<center2 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">产品实际SPC列表</span></el-divider
|
||||
>
|
||||
<center3 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量问题</span></el-divider
|
||||
>
|
||||
<el-alert size="small" type="warning" style="margin-bottom: 10px"
|
||||
>维度1、2、3分别型号、类别、部门
|
||||
上传数据表格也加上注释:在不同维度下,“名称”有不同含义,如,型号维度下名称为型号1、型号2……类别维度下名称为工艺、外形……部门维度下名称为部门1、部门2……</el-alert
|
||||
>
|
||||
<right1 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量检查分析</span></el-divider
|
||||
>
|
||||
<right2 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">质量案例</span></el-divider
|
||||
>
|
||||
<right3 />
|
||||
<el-divider content-position="left"
|
||||
><span class="text-bold-18">产品合格率</span></el-divider
|
||||
>
|
||||
<productQualified />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import left1 from './left1.vue'
|
||||
import left2 from './left2.vue'
|
||||
import left3 from './left3.vue'
|
||||
import left4 from './left4.vue'
|
||||
import center1 from './center1.vue'
|
||||
import center2 from './center2.vue'
|
||||
import center3 from './center3.vue'
|
||||
import right1 from './right1.vue'
|
||||
import right2 from './right2.vue'
|
||||
import right3 from './right3.vue'
|
||||
import left1 from "./left1.vue";
|
||||
import left2 from "./left2.vue";
|
||||
import left3 from "./left3.vue";
|
||||
import left4 from "./left4.vue";
|
||||
import center1 from "./center1.vue";
|
||||
import center2 from "./center2.vue";
|
||||
import center3 from "./center3.vue";
|
||||
import right1 from "./right1.vue";
|
||||
import right2 from "./right2.vue";
|
||||
import right3 from "./right3.vue";
|
||||
import productQualified from "./productQualified.vue";
|
||||
export default {
|
||||
components: {
|
||||
left1,
|
||||
left2,
|
||||
left3,
|
||||
left4,
|
||||
center1,
|
||||
center2,
|
||||
center3,
|
||||
right1,
|
||||
right2,
|
||||
right3,
|
||||
},
|
||||
}
|
||||
components: {
|
||||
left1,
|
||||
left2,
|
||||
left3,
|
||||
left4,
|
||||
center1,
|
||||
center2,
|
||||
center3,
|
||||
right1,
|
||||
right2,
|
||||
right3,
|
||||
productQualified,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
.el-divider:nth-child(n + 2) {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.el-divider:nth-child(n + 2) {
|
||||
margin-top: 50px;
|
||||
}
|
||||
}
|
||||
.text-bold-18 {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
|
@ -1,141 +1,156 @@
|
||||
import request from '@/utils/request'
|
||||
import request from "@/utils/request";
|
||||
|
||||
/** --------------- left1 --------------- */
|
||||
// 质量计划列表
|
||||
export function leftOneList(params) {
|
||||
return request({
|
||||
url: '/hx/qualityPlan/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityPlan/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function importTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualityPlan/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityPlan/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- left2 --------------- */
|
||||
// 质量体系要素列表
|
||||
export function leftTwoList(params) {
|
||||
return request({
|
||||
url: '/hx/qualitySystem/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualitySystem/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function leftTwoImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualitySystem/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualitySystem/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- left3 --------------- */
|
||||
// 质量体系审查列表
|
||||
export function leftThreeList(params) {
|
||||
return request({
|
||||
url: '/hx/qualitySystem/reviewList',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualitySystem/reviewList",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function leftThreeImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualitySystem/importReviewTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualitySystem/importReviewTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- left4 --------------- */
|
||||
// 质量体系审查列表
|
||||
export function leftFourList(params) {
|
||||
return request({
|
||||
url: '/hx/videoSystem/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/videoSystem/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function leftFourImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/videoSystem/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/videoSystem/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- center1 --------------- */
|
||||
export function centerOneList(params) {
|
||||
return request({
|
||||
url: '/hx/qualityManage/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityManage/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function centerOneImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualityManage/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityManage/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- center2 --------------- */
|
||||
// 关键参数SPC分析
|
||||
export function centerTwoList(params) {
|
||||
return request({
|
||||
url: '/hx/spcInfo/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/spcInfo/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function centerTwoImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/spcInfo/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/spcInfo/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- center3 --------------- */
|
||||
// 产品实际SPC列表
|
||||
export function centerThreeList(params) {
|
||||
return request({
|
||||
url: '/hx/spcProduct/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/spcProduct/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function centerThreeImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/spcProduct/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/spcProduct/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- right1 --------------- */
|
||||
// 质量问题
|
||||
export function rightOneList(params) {
|
||||
return request({
|
||||
url: '/hx/qualityProblem/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityProblem/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function rightOneImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualityProblem/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityProblem/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- right2 --------------- */
|
||||
// 质量检查分析
|
||||
export function rightTwoList(params) {
|
||||
return request({
|
||||
url: '/hx/qualityInspect/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityInspect/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function rightTwoImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualityInspect/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityInspect/importTemplate",
|
||||
});
|
||||
}
|
||||
/** --------------- right3 --------------- */
|
||||
// 质量案例
|
||||
export function rightThreeList(params) {
|
||||
return request({
|
||||
url: '/hx/qualityCase/list',
|
||||
params,
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityCase/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function rightThreeImportTemplate() {
|
||||
return request({
|
||||
url: '/hx/qualityCase/importTemplate',
|
||||
})
|
||||
return request({
|
||||
url: "/hx/qualityCase/importTemplate",
|
||||
});
|
||||
}
|
||||
|
||||
/** --------------- --------------- */
|
||||
// 产品合格率列表
|
||||
export function productQualifiedList(params) {
|
||||
return request({
|
||||
url: "/hx/productQualified/list",
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 导出模板
|
||||
export function productQualifiedImportTemplate() {
|
||||
return request({
|
||||
url: "/hx/productQualified/importTemplate",
|
||||
});
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="完成数" align="center" prop="completeNumber" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="月份" align="center" prop="todayDate" />
|
||||
<el-table-column label="体系要素名称" align="center" prop="systemName" />
|
||||
|
@ -20,11 +20,11 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="内审数量" align="center" prop="internalReviewNumber" />
|
||||
<el-table-column label="外审数量" align="center" prop="externalReviewNumber" />
|
||||
<el-table-column label="第三方审数量" align="center" prop="otherReviewNumber" />
|
||||
<el-table-column label="内审问题数量" align="center" prop="internalReviewNumber" />
|
||||
<el-table-column label="外审问题数量" align="center" prop="externalReviewNumber" />
|
||||
<el-table-column label="第三方审问题数量" align="center" prop="otherReviewNumber" />
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="视频点名称" align="center" prop="videoName" />
|
||||
<el-table-column label="视频点地址" align="center" prop="videoAddress" />
|
||||
<el-table-column label="实况信息" align="center" prop="videoNowInfo" />
|
||||
|
189
src/views/chartList/page4/productQualified.vue
Normal file
189
src/views/chartList/page4/productQualified.vue
Normal file
@ -0,0 +1,189 @@
|
||||
<template>
|
||||
<el-row :gutter="20">
|
||||
<!--用户数据-->
|
||||
<el-col :span="24" :xs="24">
|
||||
<el-row :gutter="10" class="mb8 fr">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="el-icon-upload2"
|
||||
size="mini"
|
||||
@click="handleImport"
|
||||
>导入</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
:loading="exportLoading"
|
||||
@click="importTemplate"
|
||||
>导出模板</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" type="index" width="80" />
|
||||
<el-table-column label="产品名称" align="center" prop="productName" />
|
||||
<el-table-column label="产品型号" align="center" prop="productModel" />
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column
|
||||
label="合格数量"
|
||||
align="center"
|
||||
prop="qualifiedTotal"
|
||||
/>
|
||||
<el-table-column label="总数量" align="center" prop="total" />
|
||||
<el-table-column label="类型" align="center" prop="total">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.category == `1`">大型</span>
|
||||
<span v-else-if="scope.row.category == `2`">中型</span>
|
||||
<span v-else-if="scope.row.category == `3`">小型</span>
|
||||
<span v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:autoScroll="false"
|
||||
:pageSizes="[2, 5, 10, 20]"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-col>
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
:title="upload.title"
|
||||
:visible.sync="upload.open"
|
||||
width="400px"
|
||||
append-to-body
|
||||
>
|
||||
<el-upload
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-row>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
productQualifiedList,
|
||||
productQualifiedImportTemplate,
|
||||
} from "./indexApi";
|
||||
import { getToken } from "@/utils/auth";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: this.page_size,
|
||||
},
|
||||
// 用户信息
|
||||
userList: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 用户导入参数
|
||||
upload: {
|
||||
// 是否显示弹出层(用户导入)
|
||||
open: false,
|
||||
// 弹出层标题(用户导入)
|
||||
title: "",
|
||||
// 是否禁用上传
|
||||
isUploading: false,
|
||||
// 是否更新已经存在的用户数据
|
||||
updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
// 上传的地址
|
||||
url: process.env.VUE_APP_BASE_API + "/hx/productQualified/importData",
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
/** 查询用户列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
productQualifiedList(this.queryParams).then((res) => {
|
||||
this.userList = res.rows;
|
||||
this.total = res.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const queryParams = this.queryParams;
|
||||
this.$modal
|
||||
.confirm("是否确认导出所有数据项?")
|
||||
.then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportUser(queryParams);
|
||||
})
|
||||
.then((response) => {
|
||||
this.$download.name(response.msg);
|
||||
this.exportLoading = false;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
/** 导入按钮操作 */
|
||||
handleImport() {
|
||||
this.upload.title = "数据导入";
|
||||
this.upload.open = true;
|
||||
},
|
||||
/** 下载模板操作 */
|
||||
importTemplate() {
|
||||
productQualifiedImportTemplate().then((response) => {
|
||||
this.$download.name(response.msg);
|
||||
});
|
||||
},
|
||||
// 文件上传中处理
|
||||
handleFileUploadProgress(event, file, fileList) {
|
||||
this.upload.isUploading = true;
|
||||
},
|
||||
// 文件上传成功处理
|
||||
handleFileSuccess(response, file, fileList) {
|
||||
this.upload.open = false;
|
||||
this.upload.isUploading = false;
|
||||
this.$refs.upload.clearFiles();
|
||||
this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
|
||||
this.getList();
|
||||
},
|
||||
// 提交上传文件
|
||||
submitFileForm() {
|
||||
this.$refs.upload.submit();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
};
|
||||
</script>
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="名称" align="center" prop="name" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="完成总数" align="center" prop="completedTotal" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="月份" align="center" prop="month" />
|
||||
<el-table-column label="完成数" align="center" prop="completedTotal" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="班组名" align="center" prop="className" />
|
||||
<el-table-column label="日期" align="center" prop="todayDate" />
|
||||
<el-table-column label="案例名称" align="center" prop="remark" />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="危险场所名称" align="center" prop="placeName" />
|
||||
<el-table-column label="类型" align="center" prop="placeType" />
|
||||
<el-table-column label="初始数量" align="center" prop="initTotal" />
|
||||
|
@ -17,7 +17,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="视频类型" align="center" prop="category">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.category == '1'">奖惩播放</div>
|
||||
|
@ -8,7 +8,7 @@
|
||||
<left3 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">安全隐患管理</span></el-divider>
|
||||
<left4 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">危险场所管理</span></el-divider>
|
||||
<el-divider content-position="left"><span class="text-bold-18">危险场所压减管理</span></el-divider>
|
||||
<center1 />
|
||||
<el-divider content-position="left"><span class="text-bold-18">视频管理</span></el-divider>
|
||||
<center2 />
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="userList">
|
||||
<el-table-column label="序号" align="center" prop="id" width="80" />
|
||||
<el-table-column label="序号" align="center" type="index" width="80"/>
|
||||
<el-table-column label="危险源名称" align="center" prop="sourceName" />
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="等级" align="center" prop="level" />
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user