更新8D处理中心和管理中心

This commit is contained in:
2023-07-04 09:26:40 +08:00
parent 251345fad8
commit 8d2f26293e
22 changed files with 1656 additions and 59 deletions

View File

@@ -2,18 +2,24 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-06-30 16:23:19
* @LastEditTime: 2023-07-03 09:02:50
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions title="">
<el-descriptions-item label="标题">{{ dataInfo.title }}</el-descriptions-item>
<el-descriptions-item label="产品">{{ dataInfo.productName }}</el-descriptions-item>
<el-descriptions-item label="发生日期">{{ dataInfo.occurrenceDate | timeFormatter }}</el-descriptions-item>
<el-descriptions-item label="配套产品/系统">{{ dataInfo.supportProducts }}</el-descriptions-item>
<el-descriptions-item label="发生日期">{{
dataInfo.occurrenceDate | timeFormatter
}}</el-descriptions-item>
<el-descriptions-item label="配套产品/系统">{{
dataInfo.supportProducts
}}</el-descriptions-item>
<el-descriptions-item label="启动人">{{ dataInfo.userName }}</el-descriptions-item>
<el-descriptions-item label="8D类型">{{ eightDisciplineType[dataInfo.eightDisciplineType] }}</el-descriptions-item>
</el-descriptions>
<el-descriptions-item label="8D类型">{{
eightDisciplineType[dataInfo.eightDisciplineType]
}}</el-descriptions-item>
</el-descriptions>
</template>
<script>
@@ -22,32 +28,30 @@ import { timeFormatter } from "@/filters/code-filter";
export default {
data() {
return {
dataInfo: '',
eightDisciplineType: {
1: '客诉问题',
2: '重大质量问题',
0: '重复发生问题',
},
}
dataInfo: "",
eightDisciplineType: {
1: "客诉问题",
2: "重大质量问题",
0: "重复发生问题",
},
};
},
methods: {
init(id) {
console.log(codeFilter('eightDisciplineType'))
this.$nextTick(() => {
this.$http
.get(`/code/startEightDiscipline/${id}`)
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = '';
return this.$message.error(res.msg);
}
this.dataInfo = res.data;
})
.catch(() => {
})
this.$http
.get(`/code/startEightDiscipline/${id}`)
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data;
})
.catch(() => {});
});
},
}
}
},
};
</script>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:01:55
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions-item label="描述">{{ dataInfo }}</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
data() {
return {
dataInfo: "",
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplinePreliminaryAnalysis/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data.list[0]?.description;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,76 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:26:10
* @Description:
-->
<template>
<base-table border :table-props="tableProps" :table-data="tableData" />
</template>
<script>
import i18n from "@/i18n";
import codeFilter from "@/filters/code-filter";
const tableProps = [
{
prop: "step",
label: i18n.t("disqualification.step"),
align: "center",
filter: codeFilter('step'),
},
{
prop: "memberName",
label: "成员",
align: "center",
},
{
prop: "time",
label: "时间(小时)",
align: "center",
},
{
prop: "approverName",
label: "审批人",
align: "center",
},
{
prop: "terminationApproverName",
label: "终止审批人",
align: "center",
},
];
export default {
data() {
return {
dataInfo: "",
tableProps,
tableData:[]
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplineCreateTeam/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.tableData = [];
return this.$message.error(res.msg);
}
this.tableData = res.data.list;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,89 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:38:52
* @Description:
-->
<template>
<base-table border :table-props="tableProps" :table-data="tableData" />
</template>
<script>
import i18n from "@/i18n";
import codeFilter from "@/filters/code-filter";
import { timeFormatter } from "@/filters/code-filter";
const tableProps = [
{
prop: "containmentLocale",
label: "遏制区域设置",
align: "center",
filter: codeFilter('containmentLocaleName'),
},
{
prop: "developCountermeasures",
label: "拟定对策",
align: "center",
filter: codeFilter('developCountermeasuresName'),
},
{
prop: "controlleQuantity",
label: "应受控数量",
align: "center",
},
{
prop: "actualQuantity",
label: "实际数量",
align: "center",
},
{
prop: "defectQuantity",
label: "不良数量",
align: "center",
},
{
prop: "userName",
label: "负责人",
align: "center",
},
{
prop: "completionDate",
label: "完成日期",
align: "center",
filter: timeFormatter,
},
];
export default {
data() {
return {
dataInfo: "",
tableProps,
tableData:[]
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplineTemporaryTreatmentMeasures/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.tableData = [];
return this.$message.error(res.msg);
}
this.tableData = res.data.list;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:41:50
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions-item label="问题类型">{{ dataInfo }}</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
data() {
return {
dataInfo: "",
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplineRootCauseAnalysis/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data.list[0]?.problemType;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:43:27
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions-item label="描述">{{ dataInfo }}</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
data() {
return {
dataInfo: "",
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplineDescriptionCorrectiveAction/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data.list[0]?.description;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:44:13
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions-item label="描述">{{ dataInfo }}</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
data() {
return {
dataInfo: "",
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplineValidation/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data.list[0]?.description;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:45:12
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions-item label="描述">{{ dataInfo }}</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
data() {
return {
dataInfo: "",
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplinePreventRecurrence/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data.list[0]?.description;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 10:45:56
* @Description:
-->
<template>
<el-descriptions title="">
<el-descriptions-item label="描述">{{ dataInfo }}</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
data() {
return {
dataInfo: "",
};
},
methods: {
init(id) {
const param = {
startEightDisciplineId: id,
limit: 10,
page: 1,
};
this.$nextTick(() => {
this.$http
.get("/code/startEightDisciplineSummaryExperience/page", {
params: param,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataInfo = "";
return this.$message.error(res.msg);
}
this.dataInfo = res.data.list[0]?.description;
})
.catch(() => {});
});
},
},
};
</script>

View File

@@ -105,6 +105,7 @@ export default {
methods: {
init(id) {
this.id = id
this.activeName = 'D0'
this.visible = true;
this.D0Visible = true
this.oldTab = 'D0Visible'

View File

@@ -0,0 +1,125 @@
<template>
<div class="mod-demo-echarts">
<el-row :gutter="20">
<el-col :span="24">
<el-card>
<div id="lineChart" class="chart-box"></div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
props: {
title: {
type: String,
},
dataList: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
//testdata
lineChart: {},
};
},
mounted() {
this.initChartLine();
},
activated() {
// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug
if (this.lineChart) {
this.lineChart.resize();
}
},
methods: {
// 折线图
initChartLine() {
var option = {
title: {
text: this.title,
left: "left",
},
tooltip: {
trigger: "axis",
axisPointer: {
// Use axis to trigger tooltip
type: "shadow", // 'shadow' as default; can also be 'line' or 'shadow'
},
},
legend: {
top: "6%",
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "category",
data: [
...new Set(
this.dataList?.map((item) => {
return item.month;
})
),
],
},
yAxis: {
type: "value",
},
series: [],
};
this.dataList.forEach((item) => {
const i = option.series.findIndex((c) => c.id === item.productTypeId);
if (i >= 0) {
option.series[i].data.push(item.productTypeNumber);
} else {
console.log(item.productTypeName)
const obj = {
name: item.productTypeName,
id: item.productTypeId,
type: "bar",
stack: "total",
label: {
show: true,
},
emphasis: {
focus: "series",
},
data: [],
};
obj.data.push(item.productTypeNumber);
option.series.push(obj);
}
})
console.log(option.series)
this.lineChart = echarts.init(document.getElementById("lineChart"))
this.lineChart.setOption(option);
window.addEventListener("resize", () => {
this.lineChart.resize();
});
},
},
};
</script>
<style lang="scss">
.mod-demo-echarts {
> .el-row {
.el-col {
}
}
.chart-box {
min-height: 400px;
}
}
</style>

View File

@@ -0,0 +1,100 @@
<template>
<div class="mod-demo-echarts">
<el-row :gutter="20">
<el-col :span="24">
<el-card>
<div id="pieChart" class="chart-box"></div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
props: {
title: {
type: String,
},
dataList: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
//testdata
pieChart: {},
};
},
mounted() {
this.initChartLine();
},
activated() {
// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug
if (this.pieChart) {
this.pieChart.resize();
}
},
methods: {
// 折线图
initChartLine() {
var option = {
title: {
text: this.title,
left: "left",
},
tooltip: {
trigger: "item",
formatter: "{b} : {c} ({d}%)",
},
legend: {
orient: "vertical",
left: "left",
top: "6%",
},
series: [
{
type: "pie",
radius: "50%",
data: this.dataList?.map((item) => {
const obj = {
value: item.productTypeNumber,
name: item.productTypeName,
};
return obj;
}),
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
},
],
};
this.pieChart = echarts.init(document.getElementById("pieChart"));
this.pieChart.setOption(option);
window.addEventListener("resize", () => {
this.pieChart.resize();
});
},
},
};
</script>
<style lang="scss">
.mod-demo-echarts {
> .el-row {
.el-col {
}
}
.chart-box {
min-height: 400px;
}
}
</style>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-01-04 10:29:40
* @LastEditors: zwq
* @LastEditTime: 2023-06-30 14:53:49
* @LastEditTime: 2023-07-03 16:13:18
* @Description:
-->
<template>
@@ -13,7 +13,7 @@
<el-form-item prop="customId" label="客户">
<el-select v-model="dataForm.customId" filterable clearable placeholder="请选择客户">
<el-option
v-for="item in this.urlOptions.optionArr.arr0"
v-for="item in urlOptions.optionArr.arr0"
:key="item.id"
:label="item.customerName"
:value="item.id"
@@ -24,7 +24,7 @@
<el-form-item prop="productId" label="产品">
<el-select v-model="dataForm.productId" filterable clearable placeholder="请选择产品">
<el-option
v-for="item in this.urlOptions.optionArr.arr1"
v-for="item in urlOptions.optionArr.arr1"
:key="item.id"
:label="item.productName"
:value="item.id"
@@ -48,6 +48,14 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="role" label="角色" v-if="showObj.role">
<el-radio-group v-model="dataForm.role">
<el-radio :label="1">启动人</el-radio>
<el-radio :label="2">分析人</el-radio>
<el-radio :label="3">负责人</el-radio>
<el-radio :label="4">处理人</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="occurrenceDate" label="发生时间">
<el-date-picker
v-model="dataForm.occurrenceDate"
@@ -105,6 +113,12 @@ const eightDisciplineStatusArr = [
];
export default {
mixins: [basicAdd],
props: {
showObj: {
type: Object,
default: () => ({})
}
},
data() {
return {
urlOptions: {
@@ -114,6 +128,7 @@ export default {
eightDisciplineStatusArr,
dataForm: {
title: "",
role: "",
eightDisciplineStatus: "",
occurrenceDate: "",
customId: "",

View File

@@ -0,0 +1,86 @@
<!--
* @Author: zwq
* @Date: 2023-01-04 10:29:40
* @LastEditors: zwq
* @LastEditTime: 2023-07-03 15:10:57
* @Description:
-->
<template>
<el-form :model="dataForm" ref="dataForm" label-width="120px">
<el-form-item prop="title" :label="$t('code.title')">
<el-input v-model="dataForm.title" :placeholder="$t('code.title')" clearable></el-input>
</el-form-item>
<el-form-item prop="productId" label="产品">
<el-select v-model="dataForm.productId" filterable clearable placeholder="请选择产品">
<el-option
v-for="item in this.urlOptions.optionArr.arr0"
:key="item.id"
:label="item.productName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="defectId" label="缺陷">
<el-select v-model="dataForm.defectId" filterable clearable placeholder="请选择缺陷">
<el-option
v-for="item in this.urlOptions.optionArr.arr1"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="description" label="关键字">
<el-input v-model="dataForm.description" placeholder="关键字" clearable></el-input>
</el-form-item>
</el-form>
</template>
<script>
import basicAdd from "@/mixins/basic-add";
export default {
mixins: [basicAdd],
data() {
return {
urlOptions: {
optionArrUrl: ["/basic/qmsProduct/page","/basic/qmsProduct/page"],
},
visible: false,
dataForm: {
title: "",
productId: "",
defectId: '',
description: ''
},
};
},
computed: {
dataRule() {
return {
// paramCode: [
// {
// required: true,
// message: this.$t("validate.required"),
// trigger: "blur",
// },
// ],
};
},
},
methods: {
init() {
this.visible = true;
this.$nextTick(() => {
this.$refs["dataForm"].resetFields();
this.getArr();
});
},
dataFormSubmit() {
this.$emit("refreshDataList", this.dataForm);
},
},
};
</script>