This commit is contained in:
2023-01-06 15:49:40 +08:00
parent f6b3f2f323
commit 461bd6ba85
26 changed files with 1219 additions and 573 deletions

View File

@@ -1,3 +1,10 @@
<!--
* @Author: zwq
* @Date: 2022-08-22 14:57:51
* @LastEditors: zwq
* @LastEditTime: 2023-01-06 15:34:54
* @Description:
-->
<template>
<el-submenu v-if="menu.children && menu.children.length >= 1" :index="menu.id" :popper-append-to-body="false">
<template slot="title">
@@ -7,7 +14,8 @@
<sub-menu v-for="item in menu.children" :key="item.id" :menu="item"></sub-menu>
</el-submenu>
<el-menu-item v-else :index="menu.id" @click="gotoRouteHandle(menu.id)">
<svg class="icon-svg aui-sidebar__menu-icon" aria-hidden="true"><use :xlink:href="`#${menu.icon}`"></use></svg>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true"><use xlink:href="#椭圆形"></use></svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon" aria-hidden="true"><use :xlink:href="`#${menu.icon}`"></use></svg> -->
<span>{{ menu.name }}</span>
</el-menu-item>
</template>

View File

@@ -21,36 +21,51 @@
<span>产品管理</span>
</template>
<el-menu-item index="productType" @click="$router.push({ name: 'productType' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-zonghe"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">产品类型</span>
</el-menu-item>
<el-menu-item index="productList" @click="$router.push({ name: 'productList' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-log"></use></svg>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-log"></use></svg> -->
<span slot="title">产品列表</span>
</el-menu-item>
</el-submenu>
<el-menu-item index="factoryManage" @click="$router.push({ name: 'factoryManage' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-config"></use></svg>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-config"></use></svg> -->
<span slot="title">工厂管理</span>
</el-menu-item>
<el-submenu index="process">
<template slot="title">
<svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-config"></use>
<use xlink:href="#组织管理"></use>
</svg>
<span>过程管理</span>
</template>
<el-menu-item index="processType" @click="$router.push({ name: 'processType' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-zonghe"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">工序类型</span>
</el-menu-item>
<el-menu-item index="processDefine" @click="$router.push({ name: 'processDefine' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-zonghe"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">工序定义</span>
</el-menu-item>
@@ -62,50 +77,42 @@
<el-submenu index="Machine">
<template slot="title">
<svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-config"></use>
<use xlink:href="#icon-zonghe"></use>
</svg>
<span>机台管理</span>
</template>
<el-menu-item index="siteManage" @click="$router.push({ name: 'siteManage' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-zonghe"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">站点管理</span>
</el-menu-item>
<el-menu-item index="machineManage" @click="$router.push({ name: 'machineManage' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-zonghe"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">机台管理</span>
</el-menu-item>
</el-submenu>
<el-menu-item index="toolsType" @click="$router.push({ name: 'toolsType' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-zonghe"></use></svg> -->
<span slot="title">量具管理</span>
</el-menu-item>
<el-menu-item index="unitList" @click="$router.push({ name: 'unitList' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-log"></use></svg>
<span slot="title">计量单位管理</span>
</el-menu-item>
</el-submenu>
<el-submenu index="spc">
<template slot="title">
<svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-shoucang"></use>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span>SPC</span>
</template>
<el-menu-item index="echart-line" @click="$router.push({ name: 'echart-line' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-tubiao"></use></svg>
<span slot="title">spc折线</span>
</el-menu-item>
<el-menu-item index="echart-2line" @click="$router.push({ name: 'echart-2line' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-tubiao"></use></svg>
<span slot="title">spc2折线</span>
</el-menu-item>
<el-menu-item index="echart-line" @click="$router.push({ name: 'echart-3line' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-tubiao"></use></svg>
<span slot="title">spc3折线</span>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#icon-log"></use></svg> -->
<span slot="title">计量单位管理</span>
</el-menu-item>
</el-submenu>
<el-submenu index="quality">
@@ -116,15 +123,27 @@
<span>质量规划</span>
</template>
<el-menu-item index="controlGraph" @click="$router.push({ name: 'controlGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#控制中心"></use></svg>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#控制中心"></use></svg> -->
<span slot="title">控制图形</span>
</el-menu-item>
<el-menu-item index="controlRatio" @click="$router.push({ name: 'controlRatio' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#控制中心"></use></svg>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#控制中心"></use></svg> -->
<span slot="title">控制系数</span>
</el-menu-item>
<el-menu-item index="interpretationScheme" @click="$router.push({ name: 'interpretationScheme' })">
<svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#方案管理"></use></svg>
<el-menu-item
index="interpretationScheme"
@click="$router.push({ name: 'interpretationScheme' })"
>
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<!-- <svg class="icon-svg aui-sidebar__menu-icon"><use xlink:href="#方案管理"></use></svg> -->
<span slot="title">判读方案</span>
</el-menu-item>
</el-submenu>
@@ -135,34 +154,49 @@
</svg>
<span>过程检验</span>
</template>
<el-menu-item index="generalOperation" @click="$router.push({ name: 'generalOperation' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<el-menu-item
index="generalOperation"
@click="$router.push({ name: 'generalOperation' })"
>
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-log"></use>
</svg>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">通用作业</span>
</el-menu-item>
<el-submenu index="Metrological">
<template slot="title">
<svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-log"></use>
<use xlink:href="#icon-tubiao"></use>
</svg>
<span>计量分析</span>
</template>
<el-menu-item index="XbarRGraph" @click="$router.push({ name: 'XbarRGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">均值极差控制图</span>
</el-menu-item>
<el-menu-item index="XbarSGraph" @click="$router.push({ name: 'XbarSGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">均值标准差控制图</span>
</el-menu-item>
<el-menu-item index="XMRGraph" @click="$router.push({ name: 'XMRGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">单值移动极差控制图</span>
</el-menu-item>
@@ -170,31 +204,43 @@
<el-submenu index="Counting">
<template slot="title">
<svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-log"></use>
<use xlink:href="#icon-tubiao"></use>
</svg>
<span>计数分析</span>
</template>
<el-menu-item index="CGraph" @click="$router.push({ name: 'CGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">C图</span>
</el-menu-item>
<el-menu-item index="UGraph" @click="$router.push({ name: 'UGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">U图</span>
</el-menu-item>
<el-menu-item index="NPGraph" @click="$router.push({ name: 'NPGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">NP图</span>
</el-menu-item>
<el-menu-item index="PGraph" @click="$router.push({ name: 'PGraph' })">
<svg class="icon-svg aui-sidebar__menu-icon">
<!-- <svg class="icon-svg aui-sidebar__menu-icon">
<use xlink:href="#icon-tubiao"></use>
</svg> -->
<svg class="icon-svg aui-sidebar__menu-icon-son" aria-hidden="true">
<use xlink:href="#椭圆形"></use>
</svg>
<span slot="title">P图</span>
</el-menu-item>

View File

@@ -2,14 +2,16 @@
* @Author: zwq
* @Date: 2022-09-15 10:22:53
* @LastEditors: zwq
* @LastEditTime: 2022-12-01 10:23:29
* @LastEditTime: 2022-12-16 15:25:39
* @Description: C图
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<query-form
ref="queryForm"
:page-name="'缺陷数图'"
:data-form="dataForm"
:groupTypeShow="true"
@getDataList="getDataList"
@rawData="rawData"
@exportHandle="exportHandle"
@@ -17,6 +19,10 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="24">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="CGraph"
:chartLineName="'CGraph'"
:yName="'缺陷数'"
@@ -36,6 +42,10 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {
groupType: 1,
},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -47,25 +57,48 @@ export default {
queryForm,
chartLine,
},
created() {
this.$nextTick(() => {
this.$refs.queryForm.getArr();
});
},
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/CGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
})
.catch(() => {});
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/CGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.loading = false;
this.dataList = res.data;
if (this.dataList.list.length > 0) {
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
} else {
this.chartVisible = false;
this.$message({
message: "没有发现数据",
type: "warning",
});
}
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -2,14 +2,16 @@
* @Author: zwq
* @Date: 2022-09-15 10:22:53
* @LastEditors: zwq
* @LastEditTime: 2022-12-01 10:23:34
* @LastEditTime: 2022-12-16 15:27:52
* @Description: NP图
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<query-form
ref="queryForm"
:page-name="'NP图'"
:data-form="dataForm"
:groupTypeShow="true"
@getDataList="getDataList"
@rawData="rawData"
@exportHandle="exportHandle"
@@ -17,6 +19,10 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="24">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="CGraph"
:chartLineName="'CGraph'"
:yName="'缺陷数'"
@@ -36,6 +42,10 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {
groupType: 1,
},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -47,25 +57,48 @@ export default {
queryForm,
chartLine,
},
created() {
this.$nextTick(() => {
this.$refs.queryForm.getArr();
});
},
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/NPGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
})
.catch(() => {});
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/NPGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.loading = false;
this.dataList = res.data;
if (this.dataList.list.length > 0) {
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
} else {
this.chartVisible = false;
this.$message({
message: "没有发现数据",
type: "warning",
});
}
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -2,14 +2,16 @@
* @Author: zwq
* @Date: 2022-09-15 10:22:53
* @LastEditors: zwq
* @LastEditTime: 2022-12-01 10:23:38
* @LastEditTime: 2022-12-16 15:27:58
* @Description: P图
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<query-form
ref="queryForm"
:page-name="'NP图'"
:data-form="dataForm"
:groupTypeShow="true"
@getDataList="getDataList"
@rawData="rawData"
@exportHandle="exportHandle"
@@ -17,6 +19,10 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="24">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="CGraph"
:chartLineName="'CGraph'"
:yName="'缺陷率'"
@@ -36,6 +42,10 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {
groupType: 1,
},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -47,25 +57,48 @@ export default {
queryForm,
chartLine,
},
created() {
this.$nextTick(() => {
this.$refs.queryForm.getArr();
});
},
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/PGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
})
.catch(() => {});
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/PGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.loading = false;
this.dataList = res.data;
if (this.dataList.list.length > 0) {
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
} else {
this.chartVisible = false;
this.$message({
message: "没有发现数据",
type: "warning",
});
}
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -2,14 +2,16 @@
* @Author: zwq
* @Date: 2022-09-15 10:22:53
* @LastEditors: zwq
* @LastEditTime: 2022-12-01 10:23:43
* @LastEditTime: 2022-12-16 15:28:04
* @Description: U图
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<query-form
ref="queryForm"
:page-name="'U图'"
:data-form="dataForm"
:groupTypeShow="true"
@getDataList="getDataList"
@rawData="rawData"
@exportHandle="exportHandle"
@@ -17,6 +19,10 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="24">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="CGraph"
:chartLineName="'CGraph'"
:yName="'单位缺陷'"
@@ -36,6 +42,10 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {
groupType: 1,
},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -47,25 +57,48 @@ export default {
queryForm,
chartLine,
},
created() {
this.$nextTick(() => {
this.$refs.queryForm.getArr();
});
},
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/UGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
})
.catch(() => {});
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/UGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.loading = false;
if (this.dataList.list.length > 0) {
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.CGraph.initChartLine();
});
} else {
this.chartVisible = false;
this.$message({
message: "没有发现数据",
type: "warning",
});
}
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -2,12 +2,13 @@
* @Author: zwq
* @Date: 2022-09-15 10:23:42
* @LastEditors: zwq
* @LastEditTime: 2022-11-29 16:26:58
* @LastEditTime: 2022-12-16 15:31:18
* @Description: 单值-移动极差 控制图
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<query-form
ref="queryForm"
:page-name="'单值-移动极差控制图'"
:data-form="dataForm"
@getDataList="getDataList"
@@ -17,9 +18,13 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="19">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="XMRGraph"
:chartLineName="'XMRGraph'"
:lineIndex='2'
:lineIndex="2"
:title="chartTitle"
:y-name1="yName1"
:y-name2="yName2"
@@ -42,7 +47,10 @@
:key="index + 'xbar'"
class="rightDiv"
>
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
{{ key
}}<span style="float:right">{{
val.length ? val : parseFloat(val).toFixed(4)
}}</span>
</div>
</el-collapse-item>
<el-collapse-item title="移动极差数值" name="1">
@@ -51,7 +59,10 @@
:key="index + 'rcl'"
class="rightDiv"
>
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
{{ key
}}<span style="float:right">{{
val.length ? val : parseFloat(val).toFixed(4)
}}</span>
</div>
</el-collapse-item>
<el-collapse-item title="waring:" name="2">
@@ -72,6 +83,8 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -87,72 +100,87 @@ export default {
queryForm,
chartLine,
},
created() {
this.$nextTick(() => {
this.$refs.queryForm.getArr();
});
},
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/XMRGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/XMRGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.loading = false;
this.dataList = res.data;
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.rightList = [];
// this.rightList.push({
// name: "cl(上图)",
// value: res.data.xbarCL.cl,
// });
// this.rightList.push({
// name: "lcl(上图)",
// value: res.data.xbarCL.lcl,
// });
// this.rightList.push({
// name: "ucl(上图)",
// value: res.data.xbarCL.ucl,
// });
Object.keys(res.data.sl).map((key) => {
this.rightList.push({
name: key,
value: res.data.sl[key],
});
});
// this.rightList.push({
// name: "cl(下图)",
// value: res.data.rcl.cl,
// });
// this.rightList.push({
// name: "lcl(下图)",
// value: res.data.rcl.lcl,
// });
// this.rightList.push({
// name: "ucl(下图)",
// value: res.data.rcl.ucl,
// });
Object.keys(res.data.standardDiviation).map((key) => {
this.rightList.push({
name: key,
value: res.data.standardDiviation[key],
});
});
Object.keys(res.data.processCapability).map((key) => {
if (key === "warming") {
this.waring = res.data.processCapability[key];
} else {
// this.rightList.push({
// name: "cl(上图)",
// value: res.data.xbarCL.cl,
// });
// this.rightList.push({
// name: "lcl(上图)",
// value: res.data.xbarCL.lcl,
// });
// this.rightList.push({
// name: "ucl(上图)",
// value: res.data.xbarCL.ucl,
// });
Object.keys(res.data.sl).map((key) => {
this.rightList.push({
name: key,
value: res.data.processCapability[key],
value: res.data.sl[key],
});
}
});
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.XMRGraph.initChartLine();
});
})
.catch(() => {});
});
// this.rightList.push({
// name: "cl(下图)",
// value: res.data.rcl.cl,
// });
// this.rightList.push({
// name: "lcl(下图)",
// value: res.data.rcl.lcl,
// });
// this.rightList.push({
// name: "ucl(下图)",
// value: res.data.rcl.ucl,
// });
Object.keys(res.data.standardDiviation).map((key) => {
this.rightList.push({
name: key,
value: res.data.standardDiviation[key],
});
});
Object.keys(res.data.processCapability).map((key) => {
if (key === "warming") {
this.waring = res.data.processCapability[key];
} else {
this.rightList.push({
name: key,
value: res.data.processCapability[key],
});
}
});
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.XMRGraph.initChartLine();
});
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2022-09-15 10:22:12
* @LastEditors: zwq
* @LastEditTime: 2022-12-12 16:40:23
* @LastEditTime: 2022-12-16 15:31:07
* @Description: 均值极差控制图
-->
<template>
@@ -18,6 +18,10 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="19">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="chartRef"
:chartLineName="'XbarRGraph'"
:lineIndex="0"
@@ -79,6 +83,8 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -102,69 +108,79 @@ export default {
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/XbarRGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/XbarRGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.loading = false;
this.dataList = res.data;
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.rightList = [];
// this.rightList.push({
// name: "cl(上图)",
// value: res.data.xbarCL.cl,
// });
// this.rightList.push({
// name: "lcl(上图)",
// value: res.data.xbarCL.lcl,
// });
// this.rightList.push({
// name: "ucl(上图)",
// value: res.data.xbarCL.ucl,
// });
Object.keys(res.data.sl).map((key) => {
this.rightList.push({
name: key,
value: res.data.sl[key],
});
});
// this.rightList.push({
// name: "cl(下图)",
// value: res.data.rcl.cl,
// });
// this.rightList.push({
// name: "lcl(下图)",
// value: res.data.rcl.lcl,
// });
// this.rightList.push({
// name: "ucl(下图)",
// value: res.data.rcl.ucl,
// });
Object.keys(res.data.standardDiviation).map((key) => {
this.rightList.push({
name: key,
value: res.data.standardDiviation[key],
});
});
Object.keys(res.data.processCapability).map((key) => {
if (key === "warming") {
this.waring = res.data.processCapability[key];
} else {
// this.rightList.push({
// name: "cl(上图)",
// value: res.data.xbarCL.cl,
// });
// this.rightList.push({
// name: "lcl(上图)",
// value: res.data.xbarCL.lcl,
// });
// this.rightList.push({
// name: "ucl(上图)",
// value: res.data.xbarCL.ucl,
// });
Object.keys(res.data.sl).map((key) => {
this.rightList.push({
name: key,
value: res.data.processCapability[key],
value: res.data.sl[key],
});
}
});
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.chartRef.initChartLine();
});
})
.catch(() => {});
});
// this.rightList.push({
// name: "cl(下图)",
// value: res.data.rcl.cl,
// });
// this.rightList.push({
// name: "lcl(下图)",
// value: res.data.rcl.lcl,
// });
// this.rightList.push({
// name: "ucl(下图)",
// value: res.data.rcl.ucl,
// });
Object.keys(res.data.standardDiviation).map((key) => {
this.rightList.push({
name: key,
value: res.data.standardDiviation[key],
});
});
Object.keys(res.data.processCapability).map((key) => {
if (key === "warming") {
this.waring = res.data.processCapability[key];
} else {
this.rightList.push({
name: key,
value: res.data.processCapability[key],
});
}
});
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.chartRef.initChartLine();
});
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -2,12 +2,13 @@
* @Author: zwq
* @Date: 2022-09-15 10:22:53
* @LastEditors: zwq
* @LastEditTime: 2022-11-29 16:26:47
* @LastEditTime: 2022-12-16 15:31:13
* @Description: 均值标准差控制图
-->
<template>
<el-card shadow="never" class="aui-card--fill">
<query-form
ref="queryForm"
:page-name="'均值标准差控制图'"
:data-form="dataForm"
@getDataList="getDataList"
@@ -17,9 +18,13 @@
<el-row :gutter="6" v-if="chartVisible">
<el-col :span="19">
<chart-line
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
ref="chart1Ref"
:chartLineName="'XbarSGraph'"
:lineIndex='1'
:lineIndex="1"
:title="chartTitle"
:y-name1="yName1"
:y-name2="yName2"
@@ -42,7 +47,10 @@
:key="index + 'xbar'"
class="rightDiv"
>
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
{{ key
}}<span style="float:right">{{
val.length ? val : parseFloat(val).toFixed(4)
}}</span>
</div>
</el-collapse-item>
<el-collapse-item title="标准差数值" name="1">
@@ -51,7 +59,10 @@
:key="index + 'scl'"
class="rightDiv"
>
{{ key }}<span style="float:right">{{ val.length?val: parseFloat(val).toFixed(4) }}</span>
{{ key
}}<span style="float:right">{{
val.length ? val : parseFloat(val).toFixed(4)
}}</span>
</div>
</el-collapse-item>
<el-collapse-item title="waring:" name="2">
@@ -72,6 +83,8 @@ export default {
mixins: [processPage],
data() {
return {
dataForm: {},
loading: true,
urlOptions: {
exportUrl: "/basic/unit/export",
},
@@ -87,72 +100,87 @@ export default {
queryForm,
chartLine,
},
created() {
this.$nextTick(() => {
this.$refs.queryForm.getArr();
});
},
methods: {
// 获取数据列表
getDataList() {
this.$http
.post("/processInspection/XbarSGraphTest")
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.$refs.queryForm.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.loading = true;
this.$http
.post("/processInspection/XbarSGraph", {
...this.dataForm,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.rightList = [];
this.loading = false;
return this.$message.error(res.msg);
}
this.loading = false;
this.dataList = res.data;
this.rightList = [];
return this.$message.error(res.msg);
}
this.dataList = res.data;
this.rightList = [];
// this.rightList.push({
// name: "cl(上图)",
// value: res.data.xbarCL.cl,
// });
// this.rightList.push({
// name: "lcl(上图)",
// value: res.data.xbarCL.lcl,
// });
// this.rightList.push({
// name: "ucl(上图)",
// value: res.data.xbarCL.ucl,
// });
Object.keys(res.data.sl).map((key) => {
this.rightList.push({
name: key,
value: res.data.sl[key],
});
});
// this.rightList.push({
// name: "cl(下图)",
// value: res.data.rcl.cl,
// });
// this.rightList.push({
// name: "lcl(下图)",
// value: res.data.rcl.lcl,
// });
// this.rightList.push({
// name: "ucl(下图)",
// value: res.data.rcl.ucl,
// });
Object.keys(res.data.standardDiviation).map((key) => {
this.rightList.push({
name: key,
value: res.data.standardDiviation[key],
});
});
Object.keys(res.data.processCapability).map((key) => {
if (key === "warming") {
this.waring = res.data.processCapability[key];
} else {
// this.rightList.push({
// name: "cl(上图)",
// value: res.data.xbarCL.cl,
// });
// this.rightList.push({
// name: "lcl(上图)",
// value: res.data.xbarCL.lcl,
// });
// this.rightList.push({
// name: "ucl(上图)",
// value: res.data.xbarCL.ucl,
// });
Object.keys(res.data.sl).map((key) => {
this.rightList.push({
name: key,
value: res.data.processCapability[key],
value: res.data.sl[key],
});
}
});
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.chart1Ref.initChartLine();
});
})
.catch(() => {});
});
// this.rightList.push({
// name: "cl(下图)",
// value: res.data.rcl.cl,
// });
// this.rightList.push({
// name: "lcl(下图)",
// value: res.data.rcl.lcl,
// });
// this.rightList.push({
// name: "ucl(下图)",
// value: res.data.rcl.ucl,
// });
Object.keys(res.data.standardDiviation).map((key) => {
this.rightList.push({
name: key,
value: res.data.standardDiviation[key],
});
});
Object.keys(res.data.processCapability).map((key) => {
if (key === "warming") {
this.waring = res.data.processCapability[key];
} else {
this.rightList.push({
name: key,
value: res.data.processCapability[key],
});
}
});
this.chartVisible = true;
this.$nextTick(() => {
this.$refs.chart1Ref.initChartLine();
});
})
.catch(() => {});
});
},
rawData() {
console.log("原始数据");

View File

@@ -109,7 +109,7 @@ export default {
},
formatter: (e) => {
let alarmInfo = ''
e[0].data.sRule.forEach(item=>{
e[0].data.sRule?.forEach(item=>{
alarmInfo += this.ruleList[item - 1]+'<br/>'
})
return `
@@ -572,6 +572,8 @@ export default {
},
],
};
console.log(this.mrGraphEntity)
console.log(this.lowLine[this.lineIndex].rules)
this.mrGraphEntity.list?.forEach((item, index) => {
if (item[this.lowLine[this.lineIndex].rules].length) {
option.visualMap[1].pieces.push({

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-12-13 13:43:23
* @LastEditTime: 2023-01-06 14:30:12
* @Description:
-->
<template>
@@ -40,12 +40,23 @@
<el-checkbox
v-if="item.fType === 2"
v-model="scope.row[item.prop]"
:class="
scope.row[item.prop] === '0'? 'redbg'
: ''
"
true-label="1"
false-label="0"
/>
<el-input
v-else
v-model="scope.row[item.prop]"
:class="
(item.usl < scope.row[item.prop] ||
scope.row[item.prop] < item.lsl) &&
!(item.label === '取样时间' || item.label === '样本号' || item.label === '批次号')
? 'redFont'
: ''
"
size="small"
clearable
:readonly="
@@ -124,22 +135,26 @@ export default {
label: "样本号",
},
{
prop: "sampleTime",
prop: "sampleTime1",
label: "取样时间",
},
{
prop: "batchNum",
label: "批次号",
},
// {
// prop: "batchNum",
// label: "批次号",
// },
];
this.featuresList.forEach((item) => {
let obj = {
prop: item.name,
label: item.name,
fType: item.type,
lsl: item.lsl,
usl: item.usl,
};
this.tableProps.push(obj);
this.dataList[0][item.name] = this.workingProcedureName;
this.dataList[0][item.name] = this.workingProcedureName
? this.workingProcedureName
: item.workingProcedureName;
this.dataList[1][item.name] = { 1: "计量型", 2: "计数型" }[item.type];
this.dataList[2][item.name] = item.lsl;
this.dataList[3][item.name] = item.usl;
@@ -154,18 +169,16 @@ export default {
getInfluxdb() {
this.$http
.post(
`/processInspection/inspectionSheet/getFluxParamList?inspectionSheetId=${this.inspectionSheetId}`
`/processInspection/inspectionSheet/getFluxParamList3?inspectionSheetId=${this.inspectionSheetId}`
)
.then((res) => {
res.data.forEach((item) => {
item.sampleTime = this.formatDateTime(item.sampleTime);
// item.events.forEach((item1) => {
// item[item1.argName] = item1.argValue;
// });
Object.assign(item, JSON.parse(item.jsonData));
item.sampleTime1 = this.formatDateTime(item.sampleTime);
item.sampleParamList.forEach((item1) => {
item[item1.argName] = item1.argValue;
});
this.dataList.push(item);
});
this.dataList.concat(res.data);
})
.catch(() => {});
},
@@ -184,14 +197,13 @@ export default {
sampleNumber: sampleNum,
sampleTime: new Date(),
batchNum: this.batchNum,
events: [],
sampleParamList: [],
};
this.featuresList.forEach((item) => {
let obj1 = {
time: new Date(),
inspectionSheetId: this.inspectionSheetId,
sampleNumber: sampleNum,
transationId: "",
workingProcedureName: this.workingProcedureName
? this.workingProcedureName
: item.workingProcedureName,
};
if (item.type === 1) {
obj1.argName = item.name;
@@ -200,13 +212,13 @@ export default {
obj1.argName = item.name;
obj1.argValue = 1;
}
obj.events.push(obj1);
obj.sampleParamList.push(obj1);
});
// obj.jsonData = JSON.stringify(obj.jsonData);
arr.push(obj);
}
this.$http
.post("/processInspection/inspectionSheet/saveFluxParamList2", arr)
.post("/processInspection/inspectionSheet/saveFluxParamList3", arr)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
@@ -220,28 +232,28 @@ export default {
Submit() {
let arr = JSON.parse(JSON.stringify(this.dataList.slice(7)));
arr.forEach((item) => {
(item.workingProcedureName = this.workingProcedureName),
(item.sampleTime = new Date(item.sampleTime));
item.events=[]
(item.workingProcedureName = this.workingProcedureName), (item.sampleParamList = []);
this.featuresList.forEach((item1) => {
let obj1 = {
time: new Date(item.sampleTime),
inspectionSheetId: this.inspectionSheetId,
sampleNumber: item.sampleNumber,
transationId: "",
workingProcedureName: this.workingProcedureName
? this.workingProcedureName
: item1.workingProcedureName,
};
obj1.argName = item1.name;
obj1.argValue = item[item1.name];
item.events.push(obj1);
item.sampleParamList.push(obj1);
});
});
this.$http
.post("/processInspection/inspectionSheet/saveFluxParamList2", arr)
.post("/processInspection/inspectionSheet/saveFluxParamList3", arr)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.init();
this.$nextTick(() => {
this.$emit("refreshDataForm", this.inspectionSheetId);
});
})
.catch(() => {});
},
@@ -272,3 +284,12 @@ export default {
},
};
</script>
<style scoped>
.redFont >>> .el-input__inner {
color: red;
}
.redbg >>> .el-checkbox__inner {
background: red;
}
</style>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-12-09 08:59:32
* @LastEditTime: 2022-12-28 09:45:02
* @Description:
-->
<template>
@@ -71,8 +71,9 @@ export default {
},
methods: {
init() {
this.dataList.splice(0,this.dataList.length)
this.featuresList.forEach((item) => {
item.workingProcedureName = this.workingProcedureName;
item.workingProcedureName = this.workingProcedureName?this.workingProcedureName:item.workingProcedureName
});
this.dataList = JSON.parse(JSON.stringify(this.featuresList));
this.dataListLoading = false;

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-12-12 11:32:04
* @LastEditTime: 2022-12-28 09:25:04
* @Description:
-->
<template>
@@ -304,7 +304,7 @@ export default {
dataRule: {
productId: [{ required: true, message: "产品不能为空", trigger: "change" }],
inspectionStage: [{ required: true, message: "检验阶段不能为空", trigger: "change" }],
workingProcedureId: [{ required: true, message: "工序不能为空", trigger: "change" }],
//workingProcedureId: [{ required: true, message: "工序不能为空", trigger: "change" }],
},
};
},
@@ -343,7 +343,7 @@ export default {
if (this.dataForm.id) {
this.workingProcedureName = this.optionArr.arr4.find((item) => {
return item.workingProcedureId === this.dataForm.workingProcedureId;
}).workingProcedureName;
})?.workingProcedureName;
this.$nextTick(() => {
this.$refs.detailTable.init();
});
@@ -358,20 +358,29 @@ export default {
},
setDataForm() {
this.detailLoading = true;
const obj = {
inspectionStage: this.dataForm.inspectionStage,
productId: this.dataForm.productId,
workingProcedureId: this.dataForm.workingProcedureId,
};
this.$http
.post("/processInspection/inspectionSheet/getInspectionSheetFeaturesList", obj)
.post(
`/processInspection/inspectionSheet/getInspectionSheetFeaturesList?productId=${
this.dataForm.productId
}${
this.dataForm.inspectionStage ? "&inspectionStage=" + this.dataForm.inspectionStage : ""
}${
this.dataForm.workingProcedureId
? "&workingProcedureId=" + this.dataForm.workingProcedureId
: ""
}`
)
.then(({ data: res }) => {
if (res.code !== 0) {
this.featuresList = [];
return this.$message.error(res.msg);
}
this.featuresList = res.data;
if (this.featuresTableVisible) {
this.$nextTick(() => {
this.$refs.featuresTable.init();
});
}
})
.catch(() => {});
this.dataForm.inspectionStage = String(this.dataForm.inspectionStage);

View File

@@ -0,0 +1,123 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-12-16 09:28:44
* @Description:
-->
<template>
<el-dialog title="选择分析判读方案" :visible.sync="visible">
<el-checkbox-group v-model="checkList">
<el-checkbox
style="width:100%;font-size:20px;margin:8px 5px"
v-for="(item,index) in ruleArr"
:key="item.number"
:label="index"
>{{ item.ruleKey.split("x")[0] }}
<el-input
v-show="item.ruleKey.split('x').length >= 2"
v-model="item.arg1"
style="width:60px"
></el-input>
{{ item.ruleKey.split("x")[1] }}
<el-input
v-show="item.ruleKey.split('x').length >= 3"
v-model="item.arg2"
style="width:60px"
></el-input>
{{ item.ruleKey.split("x")[2] }}
</el-checkbox>
</el-checkbox-group>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
data() {
return {
visible: false,
checkList: [],
ruleArr: [
{
number: 1,
ruleKey: "规则一:有1点落在三倍标准差以外",
arg1: null,
arg2: null,
},
{
number: 2,
ruleKey: "规则二:连续x点落在管制中心线同一侧",
arg1: 6,
arg2: null,
},
{
number: 3,
ruleKey: "规则三:连续x点持续上升或下降",
arg1: 6,
arg2: null,
},
{
number: 4,
ruleKey: "规则四:连续x点交替上下跳动",
arg1: 14,
arg2: null,
},
{
number: 5,
ruleKey: "规则五:连续x点中有x点落在中心线同侧两倍标准差以外",
arg1: 3,
arg2: 2,
},
{
number: 6,
ruleKey: "规则六:连续x点中有x点落在中心线同侧一倍标准差以外",
arg1: 5,
arg2: 4,
},
{
number: 7,
ruleKey: "规则七:连续x点落在中心线两侧的一倍标准差以内",
arg1: 15,
arg2: null,
},
{
number: 8,
ruleKey: "规则八:连续x点落在中心线两侧但未在一倍标准差以内",
arg1: 8,
arg2: null,
},
{
number: 9,
ruleKey: "规则九:落在规格线以外",
arg1: null,
arg2: null,
},
{
number: 10,
ruleKey: "规则十:CPK小于目标值",
arg1: null,
arg2: null,
},
],
};
},
methods: {
init() {
this.visible = true;
},
dataFormSubmit(){
let interpretationScheme = []
this.checkList.forEach(item=>{
interpretationScheme.push(this.ruleArr[item])
})
this.visible = false;
this.$emit('setScheme',interpretationScheme)
}
},
};
</script>

View File

@@ -2,153 +2,179 @@
* @Author: zwq
* @Date: 2022-09-15 10:44:29
* @LastEditors: zwq
* @LastEditTime: 2022-12-12 16:42:27
* @LastEditTime: 2023-01-06 15:21:11
* @Description:
-->
<template>
<el-row :gutter="6" style="background-color:#e6f7ff;margin:-20px;padding-top:10px;margin-bottom:0">
<el-form ref="dataForm" :model="dataForm" :rules="rules" size="small" label-width="80px">
<el-col :span="6">
<el-form-item label="检验时间" prop="field101">
<el-date-picker
type="daterange"
v-model="dataForm.field101"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
:style="{ width: '100%' }"
start-placeholder="开始日期"
end-placeholder="结束日期"
range-separator="-"
clearable
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6" v-if="false">
<el-form-item label="工厂" prop="field102">
<el-select
v-model="dataForm.field102"
placeholder="请选择工厂"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in field102Options"
:key="index"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检验类型" prop="field103">
<el-select
v-model="dataForm.field103"
placeholder="请选择检验类型"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in field103Options"
:key="index"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="产品" prop="productId">
<el-select
v-model="dataForm.productId"
placeholder="请选择产品"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in optionArr.arr0"
<div>
<el-row
:gutter="6"
style="background-color:#e6f7ff;margin:-20px;padding-top:10px;margin-bottom:0"
>
<el-form ref="dataForm" :model="dataForm" :rules="rules" size="small" label-width="80px">
<el-col :span="6">
<el-form-item label="检验时间" prop="time">
<el-date-picker
type="daterange"
v-model="dataForm.time"
format="yyyy-MM-dd"
:style="{ width: '100%' }"
start-placeholder="开始日期"
end-placeholder="结束日期"
range-separator="-"
clearable
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6" v-if="false">
<el-form-item label="工厂" prop="field102">
<el-select
v-model="dataForm.field102"
placeholder="请选择工厂"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in field102Options"
:key="index"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="产品" prop="productId">
<el-select
v-model="dataForm.productId"
placeholder="请选择产品"
@change="getWorkingprocedureByProductId"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="item in optionArr.arr0"
:key="item.id"
:label="item.name"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检验类型" prop="inspectionStage">
<el-select
v-model="dataForm.inspectionStage"
@change="getFeaturesList()"
placeholder="请选择检验类型"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="item in inspectionStageArr"
:key="item.name"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工序" prop="workingProcedureId">
<el-select
v-model="dataForm.workingProcedureId"
@change="$forceUpdate(), getFeaturesList()"
placeholder="请选择工序"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="item in optionArr.arr4"
:key="item.workingProcedureId"
:label="item.workingProcedureName"
:value="item.workingProcedureId"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="特性" prop="productFeaturesId">
<el-select
v-model="dataForm.productFeaturesId"
placeholder="请选择特性"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in optionArr.arr2"
:key="index"
:label="item.name"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工艺流程" prop="field105">
<el-select
v-model="dataForm.field105"
placeholder="请选择工艺流程"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in optionArr.arr1"
:key="index"
:label="item.name"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="特性" prop="field106">
<el-select
v-model="dataForm.field106"
placeholder="请选择特性"
filterable
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in optionArr.arr2"
:key="index"
:label="item.name"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="样本大小" prop="field111">
<el-input-number
v-model="dataForm.field111"
placeholder="样本大小"
:step="1"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="rawData()">
<svg class="icon-svg"><use xlink:href="#历史记录"></use></svg>
原始数据
</el-button>
<el-button size="small" type="primary" @click="exportHandle()">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
</el-form-item>
</el-col>
</el-form>
</el-row>
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" v-if="!groupTypeShow">
<el-form-item label="样本大小" prop="sampleSize">
<el-input-number
v-model="dataForm.sampleSize"
placeholder="样本大小"
:step="1"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="6" v-if="groupTypeShow">
<el-form-item label="分组" prop="groupType">
<el-radio-group v-model="dataForm.groupType">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
<el-radio :label="3"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="groupTypeShow ? 6 : 12">
<el-form-item>
<el-button size="small" @click="getDataList()">
<svg class="icon-svg"><use xlink:href="#icon-sousuo"></use></svg>
查询
</el-button>
<el-button size="small" type="primary" @click="rawData()">
<svg class="icon-svg"><use xlink:href="#历史记录"></use></svg>
原始数据
</el-button>
<el-button size="small" type="primary" @click="exportHandle()">
<svg class="icon-svg">
<use xlink:href="#导出"></use>
</svg>
导出
</el-button>
<el-button v-if="!groupTypeShow" size="small" type="primary" @click="showScheme()">
<svg class="icon-svg"><use xlink:href="#方案管理"></use></svg>
配置分析方案
</el-button>
</el-form-item>
</el-col>
</el-form>
</el-row>
<!-- 弹窗, 新增 / 修改 -->
<interpretationScheme
v-if="SchemeVisible"
ref="Scheme"
@setScheme="setScheme"
></interpretationScheme>
</div>
</template>
<script>
import interpretationScheme from "./components/interpretationScheme";
export default {
props: {
pageName: {
@@ -163,13 +189,19 @@ export default {
return {};
},
},
groupTypeShow: {
type: Boolean,
default: false,
},
},
components: {
interpretationScheme,
},
data() {
return {
optionArrUrl: [
"/basic/product/page",
"/basic/workingProcedure/page",
],
SchemeVisible: false,
inspectionStageArr: [],
optionArrUrl: ["/basic/product/page"],
optionArr: {},
rules: {
productId: [
@@ -179,38 +211,62 @@ export default {
trigger: "change",
},
],
field106: [
productFeaturesId: [
{
required: true,
message: "请选择特性",
trigger: "change",
},
],
time: [
{
required: true,
message: "请选择检验时间",
trigger: "change",
},
],
},
field103Options: [
{
label: "进货检验",
value: 1,
},
{
label: "过程检验",
value: 2,
},
{
label: "成品检验",
value: 3,
},
{
label: "出货检验",
value: 4,
},
],
};
},
created(){
},
created() {},
methods: {
getArr(){
getWorkingprocedureByProductId(val) {
this.dataForm.inspectionStage = "";
this.dataForm.workingProcedureId = "";
this.getWorkingprocedureArr(val);
this.getFeaturesList();
},
getWorkingprocedureArr(val) {
if (val) {
const obj = this.optionArr.arr0.find((item) => {
return item.id === val;
});
const obj1 = { 1: "进货检验", 2: "过程检验", 3: "成品检验", 4: "出货检验" };
const inspectionStage = obj.inspectionStage.split(",");
this.inspectionStageArr = [];
inspectionStage.forEach((item) => {
this.inspectionStageArr.push({
value: item,
name: obj1[item],
});
});
this.$http
.get(`/basic/productWorkingprocedureRelation/getWorkingprocedureByProductId/${val}`)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.$set(this.optionArr, "arr4", res.data);
})
.catch(() => {});
} else {
this.inspectionStageArr = [];
this.$set(this.optionArr, "arr2", []);
this.$set(this.optionArr, "arr4", []);
}
},
getArr() {
this.optionArrUrl.forEach((item, index) => {
this.$http
.get(item, {
@@ -221,26 +277,53 @@ export default {
})
.then(({ data: res }) => {
if (res.code !== 0) {
this.$set(this.optionArr, `arr${index}`, []);
this.$set(this.optionArr, `arr${index}`, []);
return this.$message.error(res.msg);
}
this.$set(this.optionArr, `arr${index}`, res.data.list);
})
.catch(() => {});
});
},
getFeaturesList() {
this.$set(this.dataForm, 'productFeaturesId', '')
this.$http
.post("/processInspection/inspectionSheet/getInspectionSheetFeaturesList")
.post(
`/processInspection/inspectionSheet/getInspectionSheetFeaturesList?productId=${
this.dataForm.productId
}${
this.dataForm.inspectionStage ? "&inspectionStage=" + this.dataForm.inspectionStage : ""
}${
this.dataForm.workingProcedureId
? "&workingProcedureId=" + this.dataForm.workingProcedureId
: ""
}`
)
.then(({ data: res }) => {
if (res.code !== 0) {
this.$set(this.optionArr, 'arr2', []);
this.$set(this.optionArr, "arr2", []);
return this.$message.error(res.msg);
}
this.$set(this.optionArr, 'arr2', res.data);
this.$set(this.optionArr, "arr2", res.data);
})
.catch(() => {});
},
},
getDataList() {
this.$emit("getDataList");
console.log(this.dataForm)
(this.dataForm.begin =
this.dataForm.time && this.dataForm.time.length > 0 ? this.dataForm.time[0] : ""),
(this.dataForm.end =
this.dataForm.time && this.dataForm.time.length > 0 ? this.dataForm.time[1] : ""),
this.$emit("getDataList");
},
showScheme() {
this.SchemeVisible = true;
this.$nextTick(() => {
this.$refs.Scheme.init();
});
},
setScheme(interpretationScheme) {
this.dataForm.interpretationScheme = interpretationScheme;
},
rawData() {
this.$emit("rawData");

View File

@@ -2,13 +2,14 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-08-24 16:10:47
* @LastEditTime: 2023-01-03 11:35:26
* @Description:
-->
<template>
<el-dialog title="绑定机台" :visible.sync="visible">
<el-transfer
v-model="machineArr"
:titles="['总机台列表', '绑定机台列表']"
:props="{
key: 'id',
label: 'name',
@@ -38,6 +39,8 @@ export default {
setDataForm() {
if (this.dataForm.machineId) {
this.machineArr = this.dataForm.machineId.split(",");
}else{
this.machineArr = []
}
},
init(id) {
@@ -60,6 +63,7 @@ export default {
});
},
getArr() {
this.platArr.splice(0,this.platArr.length)
this.$http
.get("/basic/machine/page", {
params: {

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2022-09-01 15:42:34
* @LastEditors: zwq
* @LastEditTime: 2022-12-12 15:44:25
* @LastEditTime: 2023-01-06 15:29:29
* @Description:
-->
<template>
@@ -12,15 +12,39 @@
<div slot="header" style="color:#409eff;text-align:center">
工序列表
</div>
<div
v-for="(item, index) in processArr"
:key="index"
class="btn"
:title="item.name"
@mousedown="startDrag(item, $event)"
>
{{ item.name }}
</div>
<el-collapse v-model="activeName" @change="processTypeClick" accordion>
<el-collapse-item
v-for="(item, index) in processTypeArr"
:key="index"
:title="item.name"
:name="index"
>
<div
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<div v-if="processArr.length > 0">
<div
v-for="(item, index) in processArr"
:key="index"
class="btn"
:title="item.name"
@mousedown="startDrag(item, $event)"
>
{{ item.name }}
</div>
</div>
<el-empty
v-else
:image-size="50"
description="此类型下无工序"
style="padding:0;"
></el-empty>
</div>
</el-collapse-item>
</el-collapse>
</el-card>
</el-col>
<el-col :span="21">
@@ -189,10 +213,13 @@ export default {
return {
dataList: [],
processArr: [],
processTypeArr: [],
activeName: "",
processId: "",
graph: "",
type: "grid",
selectCell: "",
loading: false,
editDrawer: false,
editTitle: "",
form: {},
@@ -321,7 +348,7 @@ export default {
},
getArr() {
this.$http
.get("/basic/workingProcedure/page", {
.get("/basic/workingProcedureType/page", {
params: {
page: 1,
limit: 500,
@@ -331,7 +358,7 @@ export default {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.processArr = res.data.list;
this.processTypeArr = res.data.list;
})
.catch(() => {});
},
@@ -351,6 +378,20 @@ export default {
})
.catch(() => {});
},
//点击工序类型
processTypeClick(val) {
this.processArr = [];
if (val === 0 || val) {
this.loading = true;
this.$http
.post(`/basic/workingProcedure/listByType/${this.processTypeArr[val].id}`)
.then(({ data: res }) => {
this.loading = false;
this.processArr = res;
})
.catch(() => {});
}
},
setNode() {
let nodes = [];
this.dataList.forEach((item) => {
@@ -672,7 +713,9 @@ export default {
},
},
beforeDestroy() {
this.graph.dispose();
if (this.graph) {
this.graph.dispose();
}
},
};
</script>
@@ -688,7 +731,7 @@ export default {
.btn {
background-color: #5bdeff;
text-align: center;
padding: 20px;
padding: 10px;
color: white;
cursor: move;
margin-bottom: 10px;

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-09-07 15:45:24
* @LastEditTime: 2023-01-06 15:25:05
* @Description:
-->
<template>
@@ -14,7 +14,7 @@
>
<el-card class="box-card">
<div slot="header" class="clearfix">
<el-steps :active="active" align-center finish-status="success">
<el-steps :active="active" align-center finish-status="success" process-status="finish">
<el-step title="基础信息"></el-step>
<el-step title="工艺流程"></el-step>
<el-step title="产品特性"></el-step>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-09-07 10:49:27
* @LastEditTime: 2023-01-06 14:16:17
* @Description:
-->
<template>
@@ -80,12 +80,26 @@
</el-col>
<el-col :span="8">
<el-form-item label="SPC" prop="isSpc">
<el-input v-model="fourDataForm.isSpc" placeholder="SPC"></el-input>
<el-select
v-model="fourDataForm.isSpc"
:style="{ width: '100%' }"
readonly
placeholder="请选择是否SPC"
>
<el-option
v-for="item in SPCArr"
:key="item.value"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分析图形" prop="controlGraphId">
<el-select
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.controlGraphId"
placeholder="请选择分析图形"
clearable
@@ -103,6 +117,7 @@
<el-col :span="8">
<el-form-item label="样本大小" prop="sampleSize">
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.sampleSize"
placeholder="样本大小"
></el-input-number>
@@ -133,6 +148,7 @@
<el-col :span="8">
<el-form-item label="小数位数" prop="decimalPlaces">
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.decimalPlaces"
placeholder="小数位数"
></el-input-number>
@@ -145,22 +161,35 @@
</el-col>
<el-col :span="8">
<el-form-item label="LSL" prop="lsl">
<el-input-number v-model="fourDataForm.lsl" placeholder="LSL"></el-input-number>
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.lsl"
placeholder="LSL"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="SL" prop="sl">
<el-input-number v-model="fourDataForm.sl" placeholder="SL"></el-input-number>
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.sl"
placeholder="SL"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="USL" prop="usl">
<el-input-number v-model="fourDataForm.usl" placeholder="USL"></el-input-number>
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.usl"
placeholder="USL"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目标CPK" prop="targetCpk">
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.targetCpk"
placeholder="目标CPK"
></el-input-number>
@@ -169,6 +198,7 @@
<el-col :span="8">
<el-form-item label="目标PPK" prop="targetPpk">
<el-input-number
:disabled="fourDataForm.type === 2"
v-model="fourDataForm.targetPpk"
placeholder="目标PPK"
></el-input-number>
@@ -225,6 +255,16 @@ export default {
value: 1,
},
],
SPCArr: [
{
name: "否",
value: 0,
},
{
name: "是",
value: 1,
},
],
defectLevelArr: [
{
name: "致命缺陷",
@@ -245,6 +285,10 @@ export default {
dataRule: {
code: [{ required: true, message: "编码不能为空", trigger: "blur" }],
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
sampleSize: [
{ required: true, message: "样本大小不能为空", trigger: "blur" },
{ pattern: /^([2-9]|[1-2]d|3[0-5])$/, message: "范围在2-35", trigger: "blur" },
],
},
};
},

View File

@@ -2,14 +2,20 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2022-12-13 16:00:33
* @LastEditTime: 2023-01-03 14:06:12
* @Description:
-->
<template>
<div>
<div v-if="workingProcedure.length && productFeaturesOptions.length">
<el-tabs @tab-click="tabClick">
<el-tab-pane label="控制矩阵">
<el-tab-pane
v-loading="loading"
element-loading-text="保存中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
label="控制矩阵"
>
<el-button style="float:right" size="small" type="primary" @click="deleteFeatures()">
<svg class="icon-svg"><use xlink:href="#icon-新建"></use></svg>
保存
@@ -81,9 +87,17 @@
<span>{{ scope.row.isSpc === 1 ? "是" : "否" }}</span>
</template>
</el-table-column>
<el-table-column prop="controlGraphName" align="center" label="分析图形"></el-table-column>
<el-table-column
prop="controlGraphName"
align="center"
label="分析图形"
></el-table-column>
<el-table-column prop="sampleSize" align="center" label="样本大小"></el-table-column>
<el-table-column prop="samplingFrequency" align="center" label="抽样频率"></el-table-column>
<el-table-column
prop="samplingFrequency"
align="center"
label="抽样频率"
></el-table-column>
<el-table-column prop="unitName" align="center" label="单位"></el-table-column>
<el-table-column prop="decimalPlaces" align="center" label="小数位数"></el-table-column>
<el-table-column prop="specifications" align="center" label="规格"></el-table-column>
@@ -130,10 +144,7 @@
ref="fourAddOrUpdate"
@refreshFourDataList="getFourDataList"
></four-add-or-update>
<four-history
v-if="productFeaturesHisVisible"
ref="productFeaturesHisRef"
></four-history>
<four-history v-if="productFeaturesHisVisible" ref="productFeaturesHisRef"></four-history>
</div>
</template>
@@ -166,7 +177,8 @@ export default {
setBatchInsert: [],
inspectionStage: 0,
dataListLoading: false,
productFeaturesHisVisible:false,
loading: false,
productFeaturesHisVisible: false,
};
},
components: {
@@ -176,6 +188,7 @@ export default {
methods: {
init(index) {
this.dataListLoading = false;
this.loading = false;
this.inspectionStage = parseInt(index);
this.productFeaturesList.splice(0, this.productFeaturesList.length);
this.$nextTick(() => {
@@ -229,9 +242,12 @@ export default {
});
},
deleteFeatures() {
this.loading = true;
this.workingProcedure.forEach((item, index) => {
this.$http
.delete(`/basic/featuresStageProcedureRelation/deleteByStageProcedure?inspectionStage=${this.inspectionStage}&productId=${this.productId}&workingProcedureId=${item.workingProcedureId}`)
.delete(
`/basic/featuresStageProcedureRelation/deleteByStageProcedure?inspectionStage=${this.inspectionStage}&productId=${this.productId}&workingProcedureId=${item.workingProcedureId}`
)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
@@ -247,6 +263,7 @@ export default {
this.$http
.post("/basic/featuresStageProcedureRelation/batchInsert", [...this.setBatchInsert])
.then(({ data: res }) => {
this.loading = false;
if (res.code !== 0) {
return this.$message.error(res.msg);
}
@@ -289,11 +306,11 @@ export default {
})
.catch(() => {});
},
productFeaturesHis(id){
this.productFeaturesHisVisible = true;
this.$nextTick(() => {
this.$refs.productFeaturesHisRef.init(id);
});
productFeaturesHis(id) {
this.productFeaturesHisVisible = true;
this.$nextTick(() => {
this.$refs.productFeaturesHisRef.init(id);
});
},
// 表单提交
dataFormSubmit() {},