You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

711 lines
19 KiB
Vue

<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="100px"
class="edit-el-form"
>
<el-form-item label="订单编码" prop="orderNo">
<el-input
v-model="queryParams.orderNo"
placeholder="请输入订单编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!--
<el-form-item label="批次编码" prop="incomeBatchNo">
<el-input
v-model="queryParams.incomeBatchNo"
placeholder="请选择批次编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>-->
<el-form-item label="产品编号" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入产品编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="检验类型" prop="typeCode">
<el-select
v-model="queryParams.typeCode"
clearable
placeholder="请选择检验类型"
@change="getCheckTypeList"
>
<el-option
v-for="dict in dict.type.check_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="检验节点" prop="checkType">
<el-select
v-model="queryParams.checkType"
clearable
placeholder="请选择检验节点"
@change="getProjectListFunc"
>
<el-option
v-for="dict in checkTypeList"
:key="dict.checkType"
:label="dict.checkName"
:value="dict.checkType"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="定量检测项" prop="projectNoArray">
<el-select
v-model="queryParams.projectNoArray"
multiple
collapse-tags
placeholder="请选择"
>
<el-option
v-for="item in projectNoOptions"
:key="item.recordId"
:label="item.ruleName"
:value="item.recordId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="统计单位" prop="supplierCode">
<el-select
v-model="queryParams.supplierCode"
clearable
placeholder="请选择统计单位"
filterable
clearable
>
<el-option
v-for="dict in workCenterList"
:key="dict.supplierCode"
:label="dict.supplierName"
:value="dict.supplierCode"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="生产时间" prop="incomeTimeArray">
<el-date-picker
v-model="queryParams.incomeTimeArray"
format="yyyy-MM-dd"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-s-data"
size="mini"
@click="handleAnalysis"
>图标分析</el-button
>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="tableList">
<el-table-column type="expand">
<template #default="props">
<el-table
:data="props.row.details"
size="mini"
style="width: 100%; margin-left: 0%"
:show-header="false"
class="expandClass"
>
><!---->
<el-table-column type="expand" />
<el-table-column
label="日期"
align="center"
prop="ymdms"
width="150"
/>
<template v-for="(detail, index) in detailTitleCol2">
<el-table-column
:prop="detail.col2Id"
align="center"
:key="detail.col2Id"
:label="detail.col2Name"
:show-overflow-tooltip="true"
/>
</template>
</el-table>
</template>
</el-table-column>
<el-table-column label="日期" align="center" prop="ymdms" width="150" />
<template v-for="(column1, index) in titleCol1">
<el-table-column
align="center"
:prop="column1.col1Id"
:key="column1.col1Id"
:label="column1.col1Name"
>
<template v-for="(column2, index) in titleCol2">
<el-table-column
:prop="column1.col1Id + column2.col2Id"
align="center"
:key="column1.col1Id + column2.col2Id"
:label="column2.col2Name"
:show-overflow-tooltip="true"
/>
</template>
</el-table-column>
</template>
</el-table>
<!-- 图标分析 -->
<el-dialog
:title="title"
:visible.sync="open"
width="1880px"
append-to-body
>
<div
class="echartbox"
id="echart1"
style="margin: auto; margin-top: 20px; width: 1820px; height: 545px"
></div>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getDLTableAvgInfo,
getDLDetailList,
getCheckTypeList,
getSupplierList,
getProjectOptionList,
} from "@/api/quality/qcTable";
import * as echarts from "echarts";
import moment from "moment/moment";
export default {
name: "qcAnalysis",
dicts: ["check_type"],
data() {
return {
detailListLoading: true,
refreshNewWorkerTable: true,
// 选择领料单
selectPrepare: [],
// 打印
formRef: "form",
validateRules: [],
printDialogVisible: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 表格数据
tableList: [],
titleCol1: [],
titleCol2: [],
detailTitleCol2: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
checkNo: null,
typeCode: null,
checkType: null,
orderNo: null,
productId: null,
materialCode: null,
prodType: null,
materialName: null,
productSpc: null,
wetDetailPlanId: null,
incomeTime: null,
incomeBatchNo: null,
incomeTimeArray: [],
ymArrayStart: null,
ymArrayEnd: null,
},
workCenterList: [],
checkTypeList: [],
projectNoOptions: [],
// 表单参数
form: {},
// 表单校验
rules: {},
openReport: false,
titleReport: "工单报工详情",
analyzeList: [],
legenddata: [],
seriesdata: [],
xAxisdata: [],
detailechartslist: [],
titledata: "",
};
},
created() {
this.getDate();
this.getList();
},
methods: {
//产品编码格式化
productCodeFormate(row, column, cellValue) {
return cellValue.slice(7, 18); //返回值
},
//订单编码格式化
orderCodeFormate(row, column, cellValue) {
if (cellValue != null) {
return cellValue.slice(3, 18); //返回值
}
},
/**获取默认查询时间段**/
getDate() {
let start = this.Fungetdate(0);
let end = this.Fungetdate(0);
this.queryParams.incomeTimeArray.push(start, end);
},
Fungetdate(num) {
var dd = new Date();
dd.setDate(dd.getDate() + num);
var y = dd.getFullYear();
var m = dd.getMonth() + 1; //获取当前月份的日期
var d = dd.getDate();
return y + "-" + m + "-" + d;
},
/**获取车间数据**/
getWorkCenterList() {
getWorkcenterList(this.queryParams).then((response) => {
this.workCenterList = response;
});
},
getCheckTypeList(val) {
//获取检验节点
getCheckTypeList(val).then((response) => {
this.checkTypeList = response;
});
//获取统计单位
getSupplierList(val).then((response) => {
this.workCenterList = response;
});
},
//获取定量检测项
getProjectListFunc(val) {
getProjectOptionList(val).then((response) => {
this.projectNoOptions = response;
});
},
indexMethod(index) {
return index + 1;
},
/** 查询备料单列表 */
getList() {
this.loading = true;
if (this.queryParams.incomeTimeArray.length > 0) {
this.queryParams.ymArrayStart = moment(
this.queryParams.incomeTimeArray[0]
).format("YYYY-MM-DD");
this.queryParams.ymArrayEnd = moment(
this.queryParams.incomeTimeArray[1]
).format("YYYY-MM-DD");
}
getDLTableAvgInfo(this.queryParams).then((response) => {
this.titleCol1 = [];
this.titleCol2 = [];
this.detailTitleCol2 = [];
let col1 = response.titleCol1;
let col2 = response.titleCol2;
for (let i = 0; i < col1.length; i++) {
var titleobj1 = {};
titleobj1.col1Id = "mcode" + i;
titleobj1.col1Name = col1[i];
this.titleCol1.push(titleobj1);
}
for (let j = 0; j < col2.length; j++) {
var titleobj2 = {};
titleobj2.col2Id = "Pcode" + j;
titleobj2.col2Name = col2[j];
this.titleCol2.push(titleobj2);
}
for (let i = 0; i < col1.length; i++) {
for (let j = 0; j < col2.length; j++) {
var detailTitle = {};
detailTitle.col2Id = "mcode" + i + "Pcode" + j + "Detail";
detailTitle.col2Name = col2[j];
this.detailTitleCol2.push(detailTitle);
}
}
this.analyzeList = response;
this.tableList = response.dxData;
this.loading = false;
});
},
getanalyzeList() {
if (this.queryParams.incomeTimeArray.length > 0) {
this.queryParams.ymArrayStart = moment(
this.queryParams.incomeTimeArray[0]
).format("YYYY-MM-DD");
this.queryParams.ymArrayEnd = moment(
this.queryParams.incomeTimeArray[1]
).format("YYYY-MM-DD");
}
getDLTableAvgInfo(this.queryParams).then((response) => {
this.detailechartslist = [];
this.seriesdata = [];
this.legenddata = [];
this.xAxisdata = [];
let col1 = response.titleCol1;
let col2 = response.titleCol2;
// mcode0Pcode0
for (let i = 0; i < col1.length; i++) {
for (let j = 0; j < col2.length; j++) {
var detailTitle = {};
detailTitle.col1Id = "mcode" + i + "Pcode" + j;
detailTitle.col1Name = col1[i];
detailTitle.col1xName = col2[j];
this.detailechartslist.push(detailTitle);
}
}
console.log(
this.detailechartslist,
this.seriesdata,
this.legenddata,
this.xAxisdata
);
if (this.detailechartslist.length > 0) {
this.analyzeList = response;
const datalist = this.detailechartslist.map((item) => {
const xdata = this.analyzeList.dxData.map((d) => {
return (d.ymdms = moment(d.ymdms, "YYYY-MM-DD AVG").format(
"YYYY-MM-DD"
));
});
const datalist = this.analyzeList.dxData.map((d) => d[item.col1Id]);
return {
...item,
xdata,
datalist,
};
});
this.xAxisdata = datalist[0].xdata;
this.titledata = datalist[0].col1xName;
datalist.forEach((e, index) => {
this.legenddata.push(e.col1Name);
if (e.houer) {
state.xAxisdata = e.col1Name;
}
var item = {
name: e.col1Name,
type: "bar",
barGap: 0,
label: {
show: true,
position: "insideBottom",
distance: 15,
align: "left",
verticalAlign: "middle",
rotate: 90,
formatter: "{c} {name|{a}}",
fontSize: 16,
rich: {
name: {},
},
},
emphasis: {
focus: "series",
},
data: e.datalist,
};
this.seriesdata.push(item);
});
this.initChart1();
} else {
this.$modal.msgError("数据为空");
this.detailechartslist = [];
this.seriesdata = [];
this.legenddata = [];
this.xAxisdata = [];
(this.titledata = ""), this.initChart1();
}
});
},
// 取消按钮
cancel() {
this.open = false;
this.openReport = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
prepareId: null,
checkNo: null,
workorderName: null,
parentOrder: null,
orderId: null,
orderNo: null,
productId: null,
materialCode: null,
prodType: null,
materialName: null,
productSpc: null,
wetDetailPlanId: null,
incomeTime: null,
incomeBatchNo: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
factoryCode: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.getDate();
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.prepareId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
this.selectPrepare = selection;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加备料单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const prepareId = row.prepareId || this.ids;
getPrepare(prepareId).then((response) => {
this.form = response.data;
this.open = true;
this.title = "修改备料单";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.prepareId != null) {
updatePrepare(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPrepare(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 报工详情按钮操作 */
handleDetail(row) {
this.reset();
let sr = row;
this.queryParams.orderNo = sr.orderNo;
getXJCheckTableDetail(this.queryParams).then((response) => {
this.pOrderTableList = response;
this.openReport = true;
this.titleReport = "过程巡检详情";
});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"quality/staticTable/exportDLTable",
{
...this.queryParams,
},
`DLTable_${new Date().getTime()}.xlsx`
);
},
// 图表分析
handleAnalysis() {
this.title = "图表分析";
//
if (
this.queryParams.projectNoArray.length > 0 &&
this.queryParams.projectNoArray.length < 2
) {
// this.projectNoOptions.forEach((item) => {
// if (item.recordId == this.queryParams.projectNoArray) {
// console.log(item);
// }
// });
this.open = true;
this.getanalyzeList();
} else if (this.queryParams.projectNoArray.length < 0) {
this.$modal.msgError("请选择定量检测项");
} else {
this.$modal.msgError("请选择一项定量检测项");
}
},
// 取消
cancel() {
this.open = false;
},
// 加载图表
initChart1() {
const _this = this;
// mcode0Pcode0 mcode1Pcode0
var chartDom = document.getElementById("echart1");
// 检查是否已经初始化了 ECharts 实例
if (echarts.getInstanceByDom(chartDom)) {
// 销毁已有的实例
echarts.dispose(chartDom);
}
var myChart1 = echarts.init(document.querySelector("#echart1"));
var option1 = {
title: {
text: this.titledata,
left: "left",
},
grid: {
left: "0.5%",
right: "1%",
top: "8%",
bottom: "3%",
containLabel: true,
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
},
legend: {
top: 10,
left: "center",
data: this.legenddata,
},
xAxis: [
{
axisLabel: {
rotate: 45,
interval: 0,
},
type: "category",
axisTick: { show: false },
data: this.xAxisdata,
},
],
yAxis: [
{
type: "value",
},
],
series: this.seriesdata,
};
myChart1.setOption(option1);
},
},
};
</script>
<style>
.my-print-head {
margin-top: 20px;
font-weight: bold;
}
.my-print-nav {
margin-top: 15px;
margin-bottom: 15px;
}
.my-print-table {
}
.my-print-foot {
margin-top: 20px;
}
#.el-table .cell {
white-space: pre-line !important;
}
.el-table .cell.el-tooltip {
white-space: pre-wrap; /*这是重点。文本换行*/
}
/deep/ .el-table__expand-icon {
display: none;
}
.expandClass .el-table__expand-icon {
display: none;
}
</style>