页面接口联调

master
jinna 6 months ago
parent 4668c972b7
commit df481cf26c
  1. 7
      src/api/qualityManagement/periodicTesting/projectCycle.js
  2. 10
      src/api/qualityManagement/qcSupplyInspection.js
  3. 109
      src/api/qualityManagement/qualityObjective.js
  4. 37
      src/api/qualityManagement/remindRedeem/remindRedeem.js
  5. 3
      src/views/periodicTesting/components/addProjectCycleDialog.vue
  6. 4
      src/views/periodicTesting/components/viewDialog.vue
  7. 26
      src/views/periodicTesting/projectCycle.vue
  8. 16
      src/views/periodicTesting/testTask.vue
  9. 39
      src/views/qualityManagement/qcSupplyInspection/index.vue
  10. 601
      src/views/qualityManagement/qualityObjective/annualTarget.vue
  11. 144
      src/views/qualityManagement/qualityObjective/components/addAnnmualEditDialog.vue
  12. 402
      src/views/qualityManagement/qualityObjective/components/addMonthEditDialog.vue
  13. 295
      src/views/qualityManagement/qualityObjective/monthQuota.vue
  14. 412
      src/views/qualityManagement/remindRedeem/components/batchAdd.vue
  15. 104
      src/views/qualityManagement/remindRedeem/index.vue
  16. 64
      src/views/qualityManagement/tankSolutionSystem/components/printPdf.vue

@ -71,13 +71,10 @@ export const getPlateList = () => {
}
// 根据角色ID获取工艺员列表
export const getUserList = (ids) =>{
export const getUserList = () =>{
return request({
url:'/blade-system/user/list-all-by-role-ids',
url:'/blade-system/user/list-process-engineer',
method:'get',
params:{
ids
}
})
}

@ -0,0 +1,10 @@
import request from '@/axios';
// 获取列表
export const getList = (params) => {
return request({
url: '/api/blade-desk/QA/SupplyInspection/list',
method: 'get',
params
});
};

@ -0,0 +1,109 @@
import request from '@/axios';
// 获取月度指标数据
export const getMonthList = (params) =>{
return request({
url:'/api/blade-desk/QA/IndicatorMonth/list',
method:'get',
params
})
}
// 月份数据新增
export const addMonth = (data) =>{
return request({
url:'/api/blade-desk/QA/IndicatorMonth/saveBat',
method:'post',
data
})
}
// 月度数据删除
export const deleteMonth = (params) =>{
return request({
url:'/api/blade-desk/QA/IndicatorMonth/remove',
method:'post',
params
})
}
// 月度指标详情
export const getMonthDetail = (params) =>{
return request({
url:'/api/blade-desk/QA/IndicatorMonth/detail',
method:'get',
params
})
}
// 月度数据修改
export const editMonth = (data) =>{
return request({
url:'/api/blade-desk/QA/IndicatorMonth/update',
method:'post',
data
})
}
// 年度指标数据
export const getYearData = (params) =>{
return request({
url:'/api/blade-desk/QA/IndicatorYear/list',
method:'get',
params
})
}
// 年度指标类别下拉
export const getTypeList = () =>{
return request({
url:'/api/blade-system/dict/dictionary?code=IndicatorYear-IndicatorType',
method:'get'
})
}
// 作业中心下拉接口
export const getWorkCenter = () =>{
return request({
url:'/api/blade-desk/BA/WorkCenter/listForSelect',
method:'get'
})
}
// 年度指标新增
export const addYearData = (data) =>{
return request({
url:'/api/blade-desk/QA/IndicatorYear/save',
method:'post',
data
})
}
// 年度指标详情
export const getYearDetail = (params) =>{
return request({
url:'/api/blade-desk/QA/IndicatorYear/detail',
method:'get',
params
})
}
// 年度指标数据修改
export const editYearData = (data) =>{
return request({
url:'/api/blade-desk/QA/IndicatorYear/update',
method:'post',
data
})
}
// 年度指标删除
export const deleteYear = (params) =>{
return request({
url:'/api/blade-desk/QA/IndicatorYear/remove',
method:'post',
params
})
}

@ -7,4 +7,39 @@ export const getList = (params) => {
method: 'get',
params
});
};
};
// 生产标识下拉
export const getPqList = () =>{
return request({
url:'/api/blade-desk/BA/ProdMark/listForSelect',
method:'get'
})
}
// 批量新增
export const addBatch = (data) =>{
return request({
url:'/api/blade-desk/QA/RemindMsg/saveBat',
method:'post',
data
})
}
// 修改
export const editRemind = (data) =>{
return request({
url:'/api/blade-desk/QA/RemindMsg/update',
method:"post",
data
})
}
// 删除
export const deleteRemind = (params) =>{
return request({
url:'/api/blade-desk/QA/RemindMsg/remove',
method:'post',
params
})
}

@ -344,7 +344,8 @@ export default {
getDetail(id).then(res =>{
this.projectForm = {
...res.data.data,
isPutOff:res.data.data.isPutOff == 1 ? true : false
isPutOff:res.data.data.isPutOff == 1 ? true : false,
testType:res.data.data.testType != '' ? res.data.data.testType + '' : ''
}
if(this.projectForm.jobType == 1){
this.projectForm = {

@ -48,8 +48,8 @@
</el-col>
</el-row>
</div>
<div style="font-weight: 550;">试验结果</div>
<div class="info_box">
<div style="font-weight: 550;" v-if="detailForm.isDone == 1">试验结果</div>
<div class="info_box" v-if="detailForm.isDone == 1">
<el-row class="item_item" :gutter="20" v-if="detailForm.isDone == 1">
<el-col :span="6">
<span>试验结果</span>

@ -15,9 +15,9 @@
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template #testType="{row}">
<!-- <template #testType="{row}">
<span>{{row.testType == 0 ? '零件' : '试片'}}</span>
</template>
</template> -->
<template #jobType="{row}">
<span v-if="row.jobType == 1">{{row.jobTypeWeekValue.split(',').length}}/</span>
<span v-if="row.jobType == 2">{{row.jobTypeMonthValue.split(',').length}}/</span>
@ -76,9 +76,9 @@
</el-dialog>
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/CycleTestItem/download-excel-template"
templateName="试验项目模板.xlsx"
importUrl="/blade-desk/QA/CycleTestItem/import-excel"
templateUrl="/blade-desk/QA/CycleTest/download-excel-template"
templateName="试验项目周期模板.xlsx"
importUrl="/blade-desk/QA/CycleTest/import-excel"
@closeDialog="closeDialog"></basic-import>
</basic-container>
</template>
@ -175,7 +175,7 @@ export default {
},
{
label: '试验件',
prop: 'testType',
prop: 'testTypeName',
search: false,
sortable: true,
filter: true,
@ -244,12 +244,12 @@ export default {
sortable: true,
filter: true,
width: 200,
dicUrl: '/blade-system/user/page?current=1&&size=99999',
props: {
label: 'name',
value: 'id',
res: 'data.records',
},
// dicUrl: '/blade-system/user/page?current=1&&size=99999',
// props: {
// label: 'name',
// value: 'id',
// res: 'data.records',
// },
},
{
label: '试验周期',
@ -297,7 +297,7 @@ export default {
},
//
getUsers(){
getUserList('1993624442365915137').then(res =>{
getUserList().then(res =>{
this.userData = res.data.data
})
},

@ -19,26 +19,26 @@
@on-load="onLoad"
>
<template #menu-left>
<el-button @click="handleIssue" type="primary"> 批量下发 </el-button>
<el-button @click="handleIssue" type="primary" v-if="permission.issue_btn"> 批量下发 </el-button>
</template>
<template #menu-right="{ size }">
<el-button type="warning" plain @click="handleSearch(1)">临期</el-button>
<el-button type="danger" plain @click="handleSearch(2)">超期</el-button>
</template>
<template #menu="scope">
<el-button type="text" @click="handleView(scope.row, 'view')">详情</el-button>
<el-button type="text" @click="issueRow(scope.row, 'add')" v-show="scope.row.status == 1">
<el-button type="text" @click="handleView(scope.row, 'view')" v-if="permission.detail_task">详情</el-button>
<el-button type="text" @click="issueRow(scope.row, 'add')" v-show="scope.row.status == 1 && permission.issue_btn">
下发
</el-button>
<el-button
type="text"
v-show="scope.row.status == 3"
v-show="scope.row.status == 3 && permission.fill_task"
@click="handleWrite(scope.row, 'drug')"
>填报</el-button
>
<el-button
type="text"
v-show="scope.row.status == 2"
v-show="scope.row.status == 2 && permission.receive_task"
@click="handleReceive(scope.row, 'check')"
>接收</el-button
>
@ -136,6 +136,7 @@
</template>
<script>
import { mapGetters } from 'vuex';
import viewDialog from './components/viewDialog.vue';
import { getList, remove,issueTask,acceptTask,issueAllTask,writeTask } from '@/api/qualityManagement/periodicTesting/testTask.js';
import { getUserList} from '@/api/qualityManagement/periodicTesting/projectCycle.js';
@ -372,7 +373,7 @@ export default {
filter: true,
span: 24,
width: 200,
dicUrl: '/blade-system/user/page?current=1&&size=99999',
// dicUrl: '/blade-system/user/page?current=1&&size=99999',
props: {
label: 'name',
value: 'id',
@ -528,6 +529,7 @@ export default {
};
},
computed: {
...mapGetters(['permission']),
writeRules(){
const rules = {
isDone: [{ required: true, message: '请选择是否进行试验', trigger: 'change' }],
@ -549,6 +551,7 @@ export default {
},
},
mounted() {
console.log('permission--------------',this.permission)
this.getUsers()
},
methods: {
@ -607,6 +610,7 @@ export default {
this.$message.error('请至少选择一条数据');
} else {
this.issueType = 'all'
this.issueForm = {}
this.issueDialog = true;
}
},

@ -39,6 +39,7 @@ import {
remove,
update,
} from '@/api/system/role';
import {getList} from '@/api/qualityManagement/qcSupplyInspection'
import { mapGetters } from 'vuex';
import { validatenull } from '@/utils/validate';
@ -88,6 +89,7 @@ export default {
tree: false,
border: true,
index: true,
menu:false,
selection: false,
addBtn: false,
editBtn: false,
@ -119,8 +121,8 @@ export default {
column: [
{
label: '外协单号',
prop: 'partCode',
bind: 'dsPart.partCode',
prop: 'woCode',
// bind: 'dsPart.partCode',
search: true,
sortable: true,
span: 12,
@ -129,7 +131,7 @@ export default {
{
label: '零件号',
prop: 'partCode',
bind: 'dsPart.partCode',
// bind: 'dsPart.partCode',
search: true,
sortable: true,
span: 12,
@ -138,8 +140,8 @@ export default {
{
label: '批次号',
prop: 'plate',
bind: 'dsPart.plate',
prop: 'batchNo',
// bind: 'dsPart.plate',
search: false,
sortable: true,
span: 12,
@ -147,8 +149,8 @@ export default {
},
{
label: '创建时间',
prop: 'plate',
bind: 'dsPart.plate',
prop: 'createTime',
// bind: 'dsPart.plate',
search: false,
sortable: true,
span: 12,
@ -415,13 +417,22 @@ export default {
onLoad(page, params = {}) {
this.loading = true;
this.data = [
{}
]
this.page.total = this.data.length
// getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
// this.data = res.data.data.records;
this.loading = false;
getList({
current:this.page.currentPage,
size:this.page.pageSize,
...this.query
}).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {}
// ]
// this.page.total = this.data.length
// // getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
// // this.data = res.data.data.records;
// this.loading = false;
// this.page.total = res.data.data.total
// this.selectionClear();
// });

@ -17,7 +17,7 @@
@on-load="onLoad"
>
<template #menu-left>
<el-button type="primary" @click="addFn()"></el-button>
<el-button type="primary" @click="addFn()"></el-button>
<el-button type="danger" @click="handleDelete()">删除</el-button>
</template>
<template #menu-right> </template>
@ -28,7 +28,7 @@
plain
style="border: 0; background-color: transparent !important"
size="medium"
@click.stop="addFn(row)"
@click.stop="addFn(scope.row)"
>修改</el-button
>
</template>
@ -37,10 +37,12 @@
v-if="isOpen"
:showDialog="isOpen"
@closeDialog="closeDialog"
:row-id="rowId"
></addAnnmualEditDialog>
</div>
</template>
<script>
import { getYearData,deleteYear } from "@/api/qualityManagement/qualityObjective"
import addAnnmualEditDialog from './components/addAnnmualEditDialog.vue';
export default {
components: {
@ -49,6 +51,7 @@ export default {
data() {
return {
selectionList: [],
loading:false,
option: {
height: 'auto',
calcHeight: 32,
@ -100,17 +103,23 @@ export default {
column: [
{
label: '类别名称',
prop: 'qatTypeTitle',
prop: 'indicatorType',
type:'select',
sortable: true,
filter: true,
span: 24,
search: true,
headerAlign: 'center',
align: 'left',
// align: 'left',
dicUrl:'/api/blade-system/dict/dictionary?code=IndicatorYear-IndicatorType',
props:{
label:'dictValue',
value:'dictKey'
}
},
{
label: '年份',
prop: 'qatYear',
prop: 'year',
sortable: true,
filter: true,
span: 24,
@ -118,7 +127,7 @@ export default {
},
{
label: '目标值',
prop: 'targetValue',
prop: 'target',
sortable: true,
filter: true,
span: 24,
@ -126,15 +135,15 @@ export default {
},
{
label: '作业中心',
prop: 'wcName',
bind: 'bsWorkCenter.wcName',
prop: 'workstationId',
// bind: 'bsWorkCenter.wcName',
sortable: true,
filter: true,
span: 24,
search: false,
headerAlign: 'center',
align: 'left',
dicUrl: '/blade-desk/bsWorkCenter/getList',
// align: 'left',
dicUrl: '/api/blade-desk/BA/WorkCenter/listForSelect',
props: {
label: 'wcName',
value: 'id',
@ -143,13 +152,13 @@ export default {
{
label: '班组',
prop: 'tsName',
bind: 'bsTeamSet.tsName',
// bind: 'bsTeamSet.tsName',
sortable: true,
filter: true,
span: 24,
search: false,
headerAlign: 'center',
align: 'left',
// align: 'left',
},
],
},
@ -162,14 +171,39 @@ export default {
total: 0,
},
isOpen: false,
rowId:'',
query:{}
};
},
methods: {
addFn() {
addFn(row) {
this.isOpen = true;
this.rowId = row ? row.id : ''
},
closeDialog() {
closeDialog(val) {
this.isOpen = false;
if(val){
this.onLoad()
}
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad();
done();
},
searchReset(){
this.query = {}
this.onLoad()
},
refreshChange() {
this.onLoad();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
handleDelete() {
if (this.selectionList.length === 0) {
@ -180,7 +214,16 @@ export default {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {});
}).then(() => {
deleteYear({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
});
},
//
selectionChange(list) {
@ -188,525 +231,15 @@ export default {
},
onLoad() {
this.loading = true;
this.data = [
{
bsTeamSet: {
bsClassesSet: null,
bsWorkCenter: {
area: 13000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '化学镀镍',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:31:36',
deleted: false,
describe: null,
endPoint: null,
keyValue: 81,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '上挂、下挂、交检、化学镀镍、喷砂',
quantity: null,
roundCycle: null,
saturation: 85.0,
sign: '4',
startPoint: null,
team: '化学镀镍一班崔胜伟、化学镀镍一班郭家梁',
updateTime: '2023-03-06 18:42:47',
wcCode: '001',
wcId: 81,
wcName: '化学镀镍作业中心',
whetherPlate: false,
},
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:30:26',
dayPutDueTime: '00:30~01:00',
deleted: false,
dispatcher: {
userId: 355,
userName: '07188',
},
exChangeTime: null,
keyValue: 61,
planner: {
userId: 355,
userName: '07188',
},
specDayPutDueTime: null,
special: false,
specialTitle: '否',
teamLeader: {
userId: 68,
userName: '03772',
},
teamMember: 'admin、10477、03772、03555、12645、10917、10711、03800、崔殿龙、张欣',
tsCode: '001',
tsId: 61,
tsName: '化学镀镍一班崔胜伟',
tsType: null,
tsTypeTitle: null,
updateTime: '2023-02-06 12:30:26',
},
bsWorkCenter: {
area: 13000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '化学镀镍',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:31:36',
deleted: false,
describe: null,
endPoint: null,
keyValue: 81,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '上挂、下挂、交检、化学镀镍、喷砂',
quantity: null,
roundCycle: null,
saturation: 85.0,
sign: '4',
startPoint: null,
team: '化学镀镍一班崔胜伟、化学镀镍一班郭家梁',
updateTime: '2023-03-06 18:42:47',
wcCode: '001',
wcId: 81,
wcName: '化学镀镍作业中心',
whetherPlate: false,
},
createMan: {
userId: 541,
userName: '崔殿龙',
},
createTime: '2023-12-12 11:44:41',
keyValue: 25,
qatId: 25,
qatType: 1,
qatTypeTitle: '后工序不合格品率',
qatYear: '2023-01-01 00:00:00',
targetValue: 266.0,
},
{
bsTeamSet: {
bsClassesSet: null,
bsWorkCenter: {
area: 13000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '化学镀镍',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:31:36',
deleted: false,
describe: null,
endPoint: null,
keyValue: 81,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '上挂、下挂、交检、化学镀镍、喷砂',
quantity: null,
roundCycle: null,
saturation: 85.0,
sign: '4',
startPoint: null,
team: '化学镀镍一班崔胜伟、化学镀镍一班郭家梁',
updateTime: '2023-03-06 18:42:47',
wcCode: '001',
wcId: 81,
wcName: '化学镀镍作业中心',
whetherPlate: false,
},
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:30:26',
dayPutDueTime: '00:30~01:00',
deleted: false,
dispatcher: {
userId: 355,
userName: '07188',
},
exChangeTime: null,
keyValue: 61,
planner: {
userId: 355,
userName: '07188',
},
specDayPutDueTime: null,
special: false,
specialTitle: '否',
teamLeader: {
userId: 68,
userName: '03772',
},
teamMember: 'admin、10477、03772、03555、12645、10917、10711、03800、崔殿龙、张欣',
tsCode: '001',
tsId: 61,
tsName: '化学镀镍一班崔胜伟',
tsType: null,
tsTypeTitle: null,
updateTime: '2023-02-06 12:30:26',
},
bsWorkCenter: {
area: 13000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '化学镀镍',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:31:36',
deleted: false,
describe: null,
endPoint: null,
keyValue: 81,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '上挂、下挂、交检、化学镀镍、喷砂',
quantity: null,
roundCycle: null,
saturation: 85.0,
sign: '4',
startPoint: null,
team: '化学镀镍一班崔胜伟、化学镀镍一班郭家梁',
updateTime: '2023-03-06 18:42:47',
wcCode: '001',
wcId: 81,
wcName: '化学镀镍作业中心',
whetherPlate: false,
},
createMan: {
userId: 541,
userName: '崔殿龙',
},
createTime: '2024-03-11 11:42:12',
keyValue: 41,
qatId: 41,
qatType: 2,
qatTypeTitle: '低层次质量问题',
qatYear: '2024-01-01 00:00:00',
targetValue: 57.0,
},
{
bsTeamSet: {
bsClassesSet: null,
bsWorkCenter: null,
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-07 11:01:50',
dayPutDueTime: '24',
deleted: false,
dispatcher: {
userId: 261,
userName: '03886',
},
exChangeTime: null,
keyValue: 70,
planner: {
userId: 261,
userName: '03886',
},
specDayPutDueTime: null,
special: true,
specialTitle: '是',
teamLeader: {
userId: 425,
userName: '03791',
},
teamMember:
'07793、03803、07791、03791、13343、12752、11345、11344、57644、56942、0001、admin、123456、崔殿龙',
tsCode: '008',
tsId: 70,
tsName: '涂色标班组',
tsType: null,
tsTypeTitle: null,
updateTime: '2023-02-07 11:01:50',
},
bsWorkCenter: {
area: 20000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '涂色标、清洗',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-07 10:30:14',
deleted: false,
describe: null,
endPoint: null,
keyValue: 87,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '涂色标、涂色标(带)',
quantity: null,
roundCycle: null,
saturation: 90.0,
sign: '4',
startPoint: null,
team: '涂色标班组',
updateTime: '2023-03-06 18:16:54',
wcCode: '006',
wcId: 87,
wcName: '涂色标作业中心',
whetherPlate: false,
},
createMan: {
userId: 541,
userName: '崔殿龙',
},
createTime: '2024-03-11 11:43:46',
keyValue: 61,
qatId: 61,
qatType: 2,
qatTypeTitle: '低层次质量问题',
qatYear: '2024-01-01 00:00:00',
targetValue: 54.0,
},
{
bsTeamSet: {
bsClassesSet: null,
bsWorkCenter: {
area: 13000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '化学镀镍',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:31:36',
deleted: false,
describe: null,
endPoint: null,
keyValue: 81,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '上挂、下挂、交检、化学镀镍、喷砂',
quantity: null,
roundCycle: null,
saturation: 85.0,
sign: '4',
startPoint: null,
team: '化学镀镍一班崔胜伟、化学镀镍一班郭家梁',
updateTime: '2023-03-06 18:42:47',
wcCode: '001',
wcId: 81,
wcName: '化学镀镍作业中心',
whetherPlate: false,
},
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:30:26',
dayPutDueTime: '00:30~01:00',
deleted: false,
dispatcher: {
userId: 355,
userName: '07188',
},
exChangeTime: null,
keyValue: 61,
planner: {
userId: 355,
userName: '07188',
},
specDayPutDueTime: null,
special: false,
specialTitle: '否',
teamLeader: {
userId: 68,
userName: '03772',
},
teamMember: 'admin、10477、03772、03555、12645、10917、10711、03800、崔殿龙、张欣',
tsCode: '001',
tsId: 61,
tsName: '化学镀镍一班崔胜伟',
tsType: null,
tsTypeTitle: null,
updateTime: '2023-02-06 12:30:26',
},
bsWorkCenter: {
area: 13000.0,
batchNo: null,
bigBatch: false,
bsJfCenter: {
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2024-12-09 00:00:00',
deleted: false,
jcCode: 'RBZX',
jcId: 1,
jcName: '热表中心',
keyValue: 1,
updateTime: '2024-12-09 00:00:00',
},
checkout: false,
craftAbility: '化学镀镍',
createMan: {
userId: 1,
userName: 'admin',
},
createTime: '2023-02-06 12:31:36',
deleted: false,
describe: null,
endPoint: null,
keyValue: 81,
leaderUser: {
userId: 541,
userName: '崔殿龙',
},
limitType: 0,
processes: '上挂、下挂、交检、化学镀镍、喷砂',
quantity: null,
roundCycle: null,
saturation: 85.0,
sign: '4',
startPoint: null,
team: '化学镀镍一班崔胜伟、化学镀镍一班郭家梁',
updateTime: '2023-03-06 18:42:47',
wcCode: '001',
wcId: 81,
wcName: '化学镀镍作业中心',
whetherPlate: false,
},
createMan: {
userId: 541,
userName: '崔殿龙',
},
createTime: '2024-03-11 15:52:36',
keyValue: 62,
qatId: 62,
qatType: 6,
qatTypeTitle: '外部问题率',
qatYear: '2024-01-01 00:00:00',
targetValue: 12.0,
},
];
this.page.total = this.data.length;
this.loading = false;
setTimeout(() => {
this.selectionClear();
}, 500);
getYearData({
current:this.page.currentPage,
size:this.page.pageSize,
...this.query
}).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
},
},
};

@ -1,37 +1,38 @@
<template>
<el-dialog title="新增" append-to-body :modelValue="openShow" width="60%" @close="closeDialog" >
<el-dialog title="新增" append-to-body :modelValue="openShow" width="60%" @close="closeDialog(false)" >
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto">
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="类别名称:" prop="qatType">
<el-select v-model="ruleForm.qatType" :disabled="flag" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label"
:value="item.value" />
<el-form-item label="类别名称:" prop="indicatorType">
<el-select v-model="ruleForm.indicatorType" :disabled="flag" placeholder="请选择">
<el-option v-for="item in options" :key="item.id" :label="item.dictValue"
:value="item.dictKey" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="年份:" prop="qatYear">
<el-date-picker v-model="ruleForm.qatYear" type="years" placeholder="请输入" style="width:100%" />
<el-form-item label="年份:" prop="year">
<el-date-picker v-model="ruleForm.year" type="year"
format="YYYY" value-format="YYYY" placeholder="请输入" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目标值:" prop="targetValue">
<el-input v-model="ruleForm.targetValue" disabled />
<el-form-item label="目标值:" prop="target">
<el-input v-model="ruleForm.target" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="作业中心:" prop="wcId">
<el-select v-model="ruleForm.wcId" :disabled="flag" placeholder="请选择">
<el-option v-for="item in optionsWC" :key="item.value" :label="item.label"
:value="item.value" />
<el-form-item label="作业中心:" prop="workstationId">
<el-select v-model="ruleForm.workstationId" :disabled="flag" placeholder="请选择">
<el-option v-for="item in optionsWC" :key="item.id" :label="item.wcName"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="班组:" prop="tsId">
<el-select v-model="ruleForm.tsId" :disabled="flag" placeholder="请选择">
<el-form-item label="班组:" prop="teamId">
<el-select v-model="ruleForm.teamId" :disabled="flag || !ruleForm.workstationId" placeholder="请选择">
<el-option v-for="item in optionsTS" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
@ -40,27 +41,34 @@
</el-row>
</el-form>
<el-table :data="tableData" style="width: 100%;" border >
<el-table :data="tableData" style="width: 100%;" border height="400">
<el-table-column prop="month" label="月份" align="center"></el-table-column>
<el-table-column min-width="140" prop="targetValue" label="目标值" align="center">
<template #header>
<span><i style="color:red">*</i>目标值</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.targetValue" size="small" type="number" @input="tgChange()" style="width: 50%;margin: auto;"></el-input>
<el-input-number
style="width:90%;"
v-model="scope.row.targetValue"
controls-position="right"
@change="changeTarget(scope.row.targetValue,scope.$index)"
/>
<!-- <el-input v-model="scope.row.targetValue" size="small" type="number" @input="tgChange()" style="width: 50%;margin: auto;"></el-input> -->
</template>
</el-table-column>
</el-table>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button @click="closeDialog(false)"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import {getTypeList,getWorkCenter,addYearData,getYearDetail,editYearData} from '@/api/qualityManagement/qualityObjective'
export default {
props: {
showDialog: {
@ -70,6 +78,10 @@ export default {
moldAddMore: {
type: Boolean,
default: false
},
rowId:{
type:String,
default:""
}
},
data() {
@ -115,25 +127,24 @@ export default {
],
ruleForm: {
years: '',
targetValue:0
},
rules: {
qatType: [
{ required: true, message: '请选择', trigger: 'blur' },
indicatorType: [
{ required: true, message: '请选择类别', trigger: 'blur' },
],
qatYear: [
{ required: true, message: '请选择', trigger: 'blur' },
year: [
{ required: true, message: '请选择年份', trigger: 'blur' },
],
targetValue: [
{ required: true, message: '请输入', trigger: 'blur' },
// target: [
// { required: true, message: '', trigger: 'blur' },
// ],
workstationId: [
{ required: true, message: '请选择作业中心', trigger: 'blur' },
],
wcId: [
{ required: true, message: '请选择', trigger: 'blur' },
],
tsId: [
{ required: true, message: '请选择', trigger: 'blur' },
]
// teamId: [
// { required: true, message: '', trigger: 'blur' },
// ]
},
options: [
{
@ -197,11 +208,76 @@ export default {
},
mounted() {
this.openShow = this.showDialog
this.getType()
this.getWCList()
if(this.rowId != ''){
this.getDetail()
}
},
methods: {
closeDialog() {
getDetail(){
getYearDetail({
id:this.rowId
}).then(res =>{
this.ruleForm = {...res.data.data,indicatorType:res.data.data.indicatorType + ''}
this.tableData = res.data.data.monthList
})
},
changeTarget(){
let num = 0;
this.tableData.forEach((item) =>{
if (item.targetValue != null) {
num += Number(item.targetValue);
}
this.ruleForm.target = num
})
},
getType(){
getTypeList().then(res =>{
this.options = res.data.data
console.log('option-----------',this.options)
})
},
getWCList(){
getWorkCenter().then(res =>{
this.optionsWC = res.data.data
})
},
closeDialog(val) {
this.openShow = false
this.$emit('closeDialog');
this.$emit('closeDialog',val);
},
submit(){
this.$refs.ruleFormRef.validate(valid =>{
if(valid){
let tmp = this.tableData.find(item => !item.targetValue || item.targetValue == '')
if(tmp){
this.$message.error('数据请填写完全')
return
}
let params = {
...this.ruleForm,
monthList:this.tableData
}
console.log("para-----------",params)
if(this.rowId == ''){
addYearData(params).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editYearData(params).then(res =>{
if(res.data.code == 200){
this.$message.success('编辑成功')
this.closeDialog(true)
}
})
}
}
})
},
//
addTable() {

@ -1,100 +1,173 @@
<template>
<el-dialog title="新增" append-to-body :modelValue="openShow" width="90%" @close="closeDialog" fullscreen>
<el-dialog :title="moldAddMore ? '新增' : '修改'" append-to-body :modelValue="openShow" width="90%" @close="closeDialog(false)" fullscreen>
<div style="margin-bottom: 12px;" v-if="moldAddMore">
<el-button type="primary" @click="addTable">插入一行</el-button>
<el-button type="danger" @click="delTable">删除行</el-button>
</div>
<el-table :data="tableData" style="width: 100%" class="table-box" >
<el-table-column prop="partName" label="月份" align="center" width="160">
<template #header>
<span><i style="color:red">*</i>月份</span>
</template>
<template #default="scope">
<el-date-picker v-model="value5" type="month" placeholder="请选择" style="width:80%" />
</template>
</el-table-column>
<el-table-column min-width="140" prop="actualHgxsld" label="后工序审理实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="targetHgxsld" label="后工序审理目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="160" prop="actualHgxpcx" label="后工序批次性实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="160" prop="targetHgxpcx" label="后工序批次性目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="actualZlsse" label="质量损失额实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="targetZlsse" label="质量损失额目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="180" prop="actualBhgpl" label="出厂不合格品率实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="180" prop="targetBhgpl" label="出厂不合格品率目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="actualShyh" label="适航宇航实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="targetShyh" label="适航宇航目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="actualTs" label="投诉实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="targetTs" label="投诉目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="actualDcc" label="低层次实际值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
<el-table-column min-width="140" prop="targetDcc" label="低层次目标值">
<template #default="scope">
<el-input v-model="scope.row.name" ></el-input>
</template>
</el-table-column>
</el-table>
<!-- 单个 Form 包裹整个表格 -->
<el-form
ref="tableForm"
:model="form"
:rules="formRules"
label-width="0px"
>
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px;">
{{ formError }}
</div>
<el-table :data="form.tableData" @select="selectChange" border>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="month" label="月份" align="center" width="160">
<template #header>
<span><i style="color:red">*</i>月份</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].month`" :rules="formRules.month">
<el-date-picker v-model="scope.row.month" type="month" placeholder="请选择" style="width:80%"
format="YYYY-MM" value-format="YYYY-MM" />
</el-form-item>
</template>
</el-table-column>
<el-table-column min-width="140" prop="afterReviewActual" label="后工序审理实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.afterReviewActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="afterReviewTarget" label="后工序审理目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.afterReviewTarget"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="160" prop="afterBatActual" label="后工序批次性实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.afterBatActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="160" prop="afterBatTarget" label="后工序批次性目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.afterBatTarget"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="lossActual" label="质量损失额实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.lossActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="lossTarget" label="质量损失额目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.lossTarget"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="180" prop="unqualifiedActual" label="出厂不合格品率实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.unqualifiedActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="180" prop="unqualifiedTarget" label="出厂不合格品率目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.unqualifiedTarget"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="spaceActual" label="适航宇航实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.spaceActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="spaceTarget" label="适航宇航目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.spaceTarget"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="complaintActual" label="投诉实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.complaintActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="complaintTarget" label="投诉目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.complaintTarget"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="lowActual" label="低层次实际值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.lowActual"
controls-position="right"
/>
</template>
</el-table-column>
<el-table-column min-width="140" prop="lowTarget" label="低层次目标值">
<template #default="scope">
<el-input-number
style="width:90%;"
v-model="scope.row.lowTarget"
controls-position="right"
/>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button @click="closeDialog(false)"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { addMonth,getMonthDetail,editMonth } from '@/api/qualityManagement/qualityObjective'
export default {
props: {
showDialog: {
@ -104,41 +177,180 @@ export default {
moldAddMore: {
type: Boolean,
default: false
},
rowId:{
type:String,
default:''
}
},
data() {
var validateDate = (rule, value, callback) => {
let tmp = this.form.tableData.filter(item => item.month == value)
if(this.form.tableData.length > 1 && tmp.length > 1){
this.formError = '日期不能重复'
callback(new Error('日期不能重复'));
return
}else{
callback()
}
};
return {
openShow: false,
tableData: []
formError:'',
form:{
tableData: [],
},
//
formRules: {
// 1
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array' //
},
],
month: [
{
required: true,
message: '请选择月份',
trigger: ['change', 'submit']
},
{ validator: validateDate, trigger: 'blur' }
],
}
}
},
mounted() {
this.openShow = this.showDialog
console.log('moldAddMore-----------',this.moldAddMore)
console.log('rowId-----------',this.rowId)
if(!this.moldAddMore && this.rowId != ''){
this.getDetail()
}
},
methods: {
closeDialog() {
closeDialog(val) {
this.openShow = false
this.$emit('closeDialog');
this.$emit('closeDialog',val);
},
getDetail(){
getMonthDetail({
id:this.rowId
}).then(res =>{
this.form.tableData.push(res.data.data)
})
},
//
addTable() {
this.tableData.push({
code: '3',
No: '3',
number: '3',
shuliang: '',
shuliang: 0,
memo: ''
})
this.form.tableData.push({_select:false})
},
selectChange(list, row) {
row._select = !row._select;
},
//
delTable(row, index) {
this.tableData.splice(index, 1)
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
this.form.tableData = this.form.tableData.filter(row => !row._select);
})
},
submit(){
this.formError = '';
if(this.form.tableData.length == 0){
this.$message.error('请至少填写一条数据')
return
}
// Form
this.$refs.tableForm.validate((isValid, invalidFields) => {
if (!isValid) {
this.formError = '未校验通过,请查看表格数据是否有误';
this.$nextTick(() => {
//
const firstError = document.querySelector('.el-form-item.is-error');
if (firstError) {
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
return;
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
//
try {
console.log('form----------------',this.form.tableData)
if(this.moldAddMore){
addMonth(this.form.tableData).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editMonth({
...this.form.tableData[0]
}).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
} catch (err) {
this.$message.error('网络错误,请稍后重试');
console.error('提交失败:', err);
}
})
},
}
}
</script>
<style lang="scss" scoped>
//
:deep(.el-table .el-form-item) {
margin-bottom: 0; //
}
//
:deep(.el-form-item__error) {
font-size: 12px;
white-space: nowrap;
z-index: 10;
background: #fff;
padding: 2px 4px;
border: 1px solid #f56c6c;
border-radius: 4px;
}
// textarea
.el-table__row {
height: 80px !important;
}
.el-table__cell {
vertical-align: middle !important;
}
.error-message {
font-size: 14px;
line-height: 1.5;
}
:deep(.el-table .el-table__cell) {
height: 50px !important;
padding: 0 !important;
line-height: 50px !important;
}
</style>

@ -5,7 +5,7 @@
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad">
<template #menu-left>
<el-button type="primary" @click="addFn(null,true)"></el-button>
<el-button type="primary" @click="addFn(null,true)"></el-button>
<el-button type="danger" @click="handleDelete()">删除</el-button>
</template>
<template #menu-right>
@ -13,23 +13,27 @@
</template>
<template #menu="scope">
<el-button type="primary" text plain style="border: 0; background-color: transparent !important"
size="medium" @click.stop="addFn(row,false)">修改</el-button>
size="medium" @click.stop="addFn(scope.row,false)">修改</el-button>
</template>
</avue-crud>
<!-- 增加 修改 -->
<addEditDialog v-if="isOpen" :showDialog="isOpen" @closeDialog="closeDialog" :moldAddMore="moldAddMore"></addEditDialog>
<addEditDialog v-if="isOpen" :row-id="rowId" :showDialog="isOpen" @closeDialog="closeDialog" :moldAddMore="moldAddMore"></addEditDialog>
</div>
</template>
<script>
import addEditDialog from './components/addMonthEditDialog.vue'
import {getMonthList,deleteMonth} from '@/api/qualityManagement/qualityObjective'
export default {
components: {
addEditDialog
addEditDialog,
Table
},
data() {
return {
loading:false,
selectionList: [],
rowId:'',
option: {
height: 'auto',
calcHeight: 32,
@ -76,9 +80,12 @@ export default {
column: [
{
label: '月份',
prop: 'mauMonth',
prop: 'month',
type: "month",
sortable: true,
filter: true,
format:'YYYY-MM',
valueFormat:'YYYY-MM',
span: 24,
search: true,
width: 120,
@ -86,7 +93,7 @@ export default {
},
{
label: '后工序审理实际值',
prop: 'actualHgxsld',
prop: 'afterReviewActual',
sortable: true,
filter: true,
span: 24,
@ -95,7 +102,7 @@ export default {
},
{
label: '后工序审理目标值',
prop: 'targetHgxsld',
prop: 'afterReviewTarget',
sortable: true,
filter: true,
span: 24,
@ -104,7 +111,7 @@ export default {
},
{
label: '后工序批次性实际值',
prop: 'actualHgxpcx',
prop: 'afterBatActual',
sortable: true,
filter: true,
span: 24,
@ -113,7 +120,7 @@ export default {
},
{
label: '后工序批次目标值',
prop: 'targetHgxpcx',
prop: 'afterBatTarget',
sortable: true,
filter: true,
span: 24,
@ -123,7 +130,7 @@ export default {
{
label: '质量损失额实际值',
prop: 'actualZlsse',
prop: 'lossActual',
sortable: true,
filter: true,
span: 24,
@ -132,7 +139,7 @@ export default {
},
{
label: '质量损失额目标值',
prop: 'targetZlsse',
prop: 'lossTarget',
sortable: true,
filter: true,
span: 24,
@ -141,7 +148,7 @@ export default {
},
{
label: '出厂不合格品率实际值',
prop: 'actualBhgpl',
prop: 'unqualifiedActual',
sortable: true,
filter: true,
span: 24,
@ -150,7 +157,7 @@ export default {
},
{
label: '出厂不合格品率目标值',
prop: 'targetBhgpl',
prop: 'unqualifiedTarget',
sortable: true,
filter: true,
span: 24,
@ -159,7 +166,7 @@ export default {
},
{
label: '适航宇航实际值',
prop: 'actualShyh',
prop: 'spaceActual',
sortable: true,
filter: true,
span: 24,
@ -168,7 +175,7 @@ export default {
},
{
label: '适航宇航目标值',
prop: 'targetShyh',
prop: 'spaceTarget',
sortable: true,
filter: true,
span: 24,
@ -177,7 +184,7 @@ export default {
},
{
label: '投诉实际值',
prop: 'actualTs',
prop: 'complaintActual',
sortable: true,
filter: true,
span: 24,
@ -186,7 +193,7 @@ export default {
},
{
label: '投诉目标值',
prop: 'targetTs',
prop: 'complaintTarget',
sortable: true,
filter: true,
span: 24,
@ -195,7 +202,7 @@ export default {
},
{
label: '低层次实际值',
prop: 'actualDcc',
prop: 'lowActual',
sortable: true,
filter: true,
span: 24,
@ -204,7 +211,7 @@ export default {
},
{
label: '低层次目标值',
prop: 'targetDcc',
prop: 'lowTarget',
sortable: true,
filter: true,
span: 24,
@ -215,6 +222,7 @@ export default {
]
},
query:{},
form: {
name: '',
},
@ -230,10 +238,34 @@ export default {
methods: {
addFn(row,flag) {
this.isOpen = true
this.rowId = row ? row.id : ''
console.log('row----------',row)
this.moldAddMore = flag
},
closeDialog() {
closeDialog(val) {
this.isOpen = false
if(val){
this.onLoad()
}
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad();
done();
},
searchReset(){
this.query = {}
this.onLoad()
},
refreshChange() {
this.onLoad();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
handleDelete() {
if (this.selectionList.length === 0) {
@ -245,6 +277,14 @@ export default {
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deleteMonth({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
//
@ -253,109 +293,118 @@ export default {
},
onLoad() {
this.loading = true
this.data = [
{
"actualBhgpl": 22.0,
"actualDcc": 22.0,
"actualHgxpcx": 22.0,
"actualHgxsld": 22.0,
"actualShyh": 22.0,
"actualTs": 22.0,
"actualZlsse": 22.0,
"keyValue": 4,
"mauId": 4,
"mauMonth": "2024-05",
"targetBhgpl": 32.0,
"targetDcc": 22.0,
"targetHgxpcx": 22.0,
"targetHgxsld": 22.0,
"targetShyh": 22.0,
"targetTs": 22.0,
"targetZlsse": 32.0,
"updateMan": {
"userId": 541,
"userName": "崔殿龙"
},
"updateTime": "2024-04-16 14:05:59"
},
{
"actualBhgpl": 7.0,
"actualDcc": 13.0,
"actualHgxpcx": 3.0,
"actualHgxsld": 1.0,
"actualShyh": 9.0,
"actualTs": 11.0,
"actualZlsse": 5.0,
"keyValue": 1,
"mauId": 1,
"mauMonth": "2024-04",
"targetBhgpl": 18.0,
"targetDcc": 14.0,
"targetHgxpcx": 4.0,
"targetHgxsld": 12.0,
"targetShyh": 10.0,
"targetTs": 12.0,
"targetZlsse": 16.0,
"updateMan": {
"userId": 541,
"userName": "崔殿龙"
},
"updateTime": "2024-04-16 13:48:56"
},
{
"actualBhgpl": 11.0,
"actualDcc": 11.0,
"actualHgxpcx": 11.0,
"actualHgxsld": 11.0,
"actualShyh": 11.0,
"actualTs": 11.0,
"actualZlsse": 11.1,
"keyValue": 3,
"mauId": 3,
"mauMonth": "2024-03",
"targetBhgpl": 11.0,
"targetDcc": 11.0,
"targetHgxpcx": 11.0,
"targetHgxsld": 11.0,
"targetShyh": 11.0,
"targetTs": 11.0,
"targetZlsse": 12.0,
"updateMan": {
"userId": 541,
"userName": "崔殿龙"
},
"updateTime": "2024-04-23 09:09:16"
},
{
"actualBhgpl": 7.0,
"actualDcc": 7.0,
"actualHgxpcx": 77.0,
"actualHgxsld": 7.0,
"actualShyh": 7.0,
"actualTs": 77.0,
"actualZlsse": 7.0,
"keyValue": 15,
"mauId": 15,
"mauMonth": "2024-02",
"targetBhgpl": 17.0,
"targetDcc": 7.0,
"targetHgxpcx": 7.0,
"targetHgxsld": 12.0,
"targetShyh": 7.0,
"targetTs": 7.0,
"targetZlsse": 17.0,
"updateMan": {
"userId": 541,
"userName": "崔殿龙"
},
"updateTime": "2024-04-16 15:51:52"
}
]
this.page.total = this.data.length
this.loading = false
setTimeout(() => {
this.selectionClear()
}, 500)
getMonthList({
current:this.page.currentPage,
size:this.page.pageSize,
...this.query
}).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {
// "actualBhgpl": 22.0,
// "actualDcc": 22.0,
// "actualHgxpcx": 22.0,
// "actualHgxsld": 22.0,
// "actualShyh": 22.0,
// "actualTs": 22.0,
// "actualZlsse": 22.0,
// "keyValue": 4,
// "mauId": 4,
// "mauMonth": "2024-05",
// "targetBhgpl": 32.0,
// "targetDcc": 22.0,
// "targetHgxpcx": 22.0,
// "targetHgxsld": 22.0,
// "targetShyh": 22.0,
// "targetTs": 22.0,
// "targetZlsse": 32.0,
// "updateMan": {
// "userId": 541,
// "userName": "殿"
// },
// "updateTime": "2024-04-16 14:05:59"
// },
// {
// "actualBhgpl": 7.0,
// "actualDcc": 13.0,
// "actualHgxpcx": 3.0,
// "actualHgxsld": 1.0,
// "actualShyh": 9.0,
// "actualTs": 11.0,
// "actualZlsse": 5.0,
// "keyValue": 1,
// "mauId": 1,
// "mauMonth": "2024-04",
// "targetBhgpl": 18.0,
// "targetDcc": 14.0,
// "targetHgxpcx": 4.0,
// "targetHgxsld": 12.0,
// "targetShyh": 10.0,
// "targetTs": 12.0,
// "targetZlsse": 16.0,
// "updateMan": {
// "userId": 541,
// "userName": "殿"
// },
// "updateTime": "2024-04-16 13:48:56"
// },
// {
// "actualBhgpl": 11.0,
// "actualDcc": 11.0,
// "actualHgxpcx": 11.0,
// "actualHgxsld": 11.0,
// "actualShyh": 11.0,
// "actualTs": 11.0,
// "actualZlsse": 11.1,
// "keyValue": 3,
// "mauId": 3,
// "mauMonth": "2024-03",
// "targetBhgpl": 11.0,
// "targetDcc": 11.0,
// "targetHgxpcx": 11.0,
// "targetHgxsld": 11.0,
// "targetShyh": 11.0,
// "targetTs": 11.0,
// "targetZlsse": 12.0,
// "updateMan": {
// "userId": 541,
// "userName": "殿"
// },
// "updateTime": "2024-04-23 09:09:16"
// },
// {
// "actualBhgpl": 7.0,
// "actualDcc": 7.0,
// "actualHgxpcx": 77.0,
// "actualHgxsld": 7.0,
// "actualShyh": 7.0,
// "actualTs": 77.0,
// "actualZlsse": 7.0,
// "keyValue": 15,
// "mauId": 15,
// "mauMonth": "2024-02",
// "targetBhgpl": 17.0,
// "targetDcc": 7.0,
// "targetHgxpcx": 7.0,
// "targetHgxsld": 12.0,
// "targetShyh": 7.0,
// "targetTs": 7.0,
// "targetZlsse": 17.0,
// "updateMan": {
// "userId": 541,
// "userName": "殿"
// },
// "updateTime": "2024-04-16 15:51:52"
// }
// ]
// this.page.total = this.data.length
// this.loading = false
// setTimeout(() => {
// this.selectionClear()
// }, 500)
}
}
}

@ -0,0 +1,412 @@
<template>
<el-dialog title="新增" append-to-body :modelValue="openShow" width="70%" @close="closeDialog(false)">
<div style="margin-bottom: 12px">
<el-button type="primary" @click="addTable">插入一行</el-button>
<el-button type="danger" @click="delTable">删除选中行</el-button>
</div>
<!-- 单个 Form 包裹整个表格 -->
<el-form
ref="tableForm"
:model="form"
:rules="formRules"
label-width="0px"
>
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px;">
{{ formError }}
</div>
<el-table :data="form.tableData" @select="selectChange" border>
<el-table-column type="selection" width="55"></el-table-column>
<!-- 零件号绑定数组字段 -->
<el-table-column align="center" label="零件号" width="200">
<template #header>
<span><i style="color: red">*</i>零件号</span>
</template>
<template #default="scope">
<!-- prop 格式数组名[索引].字段名 -->
<el-form-item :prop="`tableData[${scope.$index}].partId`" :rules="formRules.partId">
<el-select
v-model="scope.row.partId"
placeholder="请选择"
style="width: 100%"
@change="(val) => changePart(val,scope.$index)"
>
<el-option
v-for="item in partData"
:key="item.id"
:value="item.id"
:label="item.code"
></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<!-- 零件名称 -->
<el-table-column align="center" label="零件名称" width="200">
<!-- <template #header>
<span><i style="color: red">*</i>零件名称</span>
</template> -->
<template #default="scope">
{{scope.row.partName}}
</template>
</el-table-column>
<!-- 生产标识 -->
<el-table-column align="center" label="生产标识" width="200">
<template #header>
<span><i style="color: red">*</i>生产标识</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].prodFlagText`" :rules="formRules.prodFlagText">
<el-select
v-model="scope.row.prodFlagText"
placeholder="请选择"
style="width: 100%"
>
<el-option v-for="item in pqList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<!-- 子件编码 -->
<el-table-column align="center" label="子件编码" width="200">
<!-- <template #header>
<span><i style="color: red">*</i>子件编码</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].subPartId`" :rules="formRules.subPartId">
<el-select
v-model="scope.row.subPartId"
placeholder="请选择"
style="width: 100%"
>
<el-option v-for="item in pqList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<!-- 提醒内容 -->
<el-table-column align="center" label="提醒内容">
<!-- <template #header>
<span><i style="color: red">*</i>提醒内容</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].remindContent`" :rules="formRules.remindContent">
<el-input
v-model="scope.row.remindContent"
placeholder="请输入"
style="width: 100%"
type="textarea"
:rows="2"
></el-input>
</el-form-item>
</template>
</el-table-column>
<!-- 热处理 -->
<el-table-column align="center" label="热处理" width="100">
<!-- <template #header>
<span><i style="color: red">*</i>热处理</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].isHeatTreatment`" :rules="formRules.isHeatTreatment">
<el-switch
v-model="scope.row.isHeatTreatment"
inline-prompt
active-text="开"
inactive-text="关"
style="margin: 0 auto;"
/>
<!-- <el-select
v-model="scope.row.subPartId"
placeholder="请选择"
style="width: 100%"
>
<el-option v-for="item in pqList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> -->
</el-form-item>
</template>
</el-table-column>
<!-- 镀后检验 -->
<el-table-column align="center" label="镀后检验" width="100">
<!-- <template #header>
<span><i style="color: red">*</i>镀后检验</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].isAfterPlating`" :rules="formRules.isAfterPlating">
<el-switch
style="margin: 0 auto;"
v-model="scope.row.isAfterPlating"
inline-prompt
active-text="开"
inactive-text="关"
/>
<!-- <el-select
v-model="scope.row.subPartId"
placeholder="请选择"
style="width: 100%"
>
<el-option v-for="item in pqList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> -->
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog(false)"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
// import { getWorkCenterList } from '@/api/processManagement/addQuantity.js';
import {getPqList,addBatch} from '@/api/qualityManagement/remindRedeem/remindRedeem'
// import { submitBatchData } from '@/api/processManagement/periodical.js'; //
export default {
props: {
showDialog: { type: Boolean, default: false },
moldAddMore: { type: Boolean, default: false },
tabPosition: { type: String, default: '' },
},
data() {
return {
openShow: false,
wcData: [],
formError: '', //
//
form: {
tableData: [] // Form
},
//
formRules: {
// 1
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array' //
},
{
validator: (rule, value, callback) => {
if (value.length === 0) {
callback(new Error('请至少添加一行数据'));
} else {
callback();
}
},
trigger: 'submit'
}
],
// partId
// partId: [
// { required: true, message: '', trigger: ['change', 'submit'] }
// ],
// partName
prodFlagText: [
{
required: true,
message: '请选择生产标识',
trigger: ['change', 'submit']
}
],
// remindContent
// remindContent: [
// { required: true, message: '', trigger: ['blur', 'submit'] },
// { max: 200, message: '200', trigger: ['input', 'submit'] }
// ]
},
pqList:[],
partData:[],
};
},
mounted() {
this.openShow = this.showDialog;
// this.getWorkCenterList();
this.getPqData()
this.partData = [
{id:'001',code:'编号001',name:'零件名称1'},
{id:'002',code:'编号002',name:'零件名称2'},
{id:'003',code:'编号003',name:'零件名称3'},
]
//
if (this.moldAddMore && this.form.tableData.length === 0) {
this.addTable();
}
},
methods: {
getPqData(){
getPqList().then(res =>{
this.pqList = res.data.data
})
},
getWorkCenterList() {
getWorkCenterList().then(res => {
this.wcData = res.data.data || [];
});
},
//
changePart(val,index){
let tmp = this.partData.find(item => item.id == val)
this.form.tableData[index].partName = tmp.name
},
selectChange(list, row) {
row._select = !row._select;
},
// push tableData
addTable() {
this.form.tableData.push({
_select: false, //
partId: '', // ID
partName: '', // /
remindContent: '' //
});
},
//
delTable() {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
this.form.tableData = this.form.tableData.filter(row => !row._select);
})
},
closeDialog() {
this.openShow = false;
this.$emit('closeDialog');
//
this.form.tableData = [];
this.formError = '';
this.$refs.tableForm?.resetFields();
},
//
submitForm() {
this.formError = '';
if(this.form.tableData.length == 0){
this.$message.error('请至少填写一条数据')
return
}
// Form
this.$refs.tableForm.validate((isValid, invalidFields) => {
if (!isValid) {
//
this.formError = '存在未完善的字段,请检查表格中的红色提示';
this.$nextTick(() => {
//
const firstError = document.querySelector('.el-form-item.is-error');
if (firstError) {
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
return;
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
//
try {
// const res = await submitBatchData(submitData);
// if (res.code === 200) {
// this.$message.success('');
// this.closeDialog();
// this.$emit('submitSuccess', submitData);
// } else {
// this.$message.error(res.msg || '');
// }
this.form.tableData.map(item =>{
item.isHeatTreatment = item.isHeatTreatment ? 1 : 0,
item.isAfterPlating = item.isAfterPlating ? 1 : 0
})
console.log('form----------------',this.form.tableData)
addBatch(this.form.tableData).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
//
// this.$message.success('');
// this.closeDialog();
// this.$emit('submitSuccess', submitData);
} catch (err) {
this.$message.error('网络错误,请稍后重试');
console.error('提交失败:', err);
}
});
}
},
};
</script>
<style lang="scss" scoped>
//
:deep(.el-table .el-form-item) {
margin-bottom: 0; //
}
//
:deep(.el-form-item__error) {
font-size: 12px;
white-space: nowrap;
z-index: 10;
background: #fff;
padding: 2px 4px;
border: 1px solid #f56c6c;
border-radius: 4px;
}
// textarea
.el-table__row {
height: 80px !important;
}
.el-table__cell {
vertical-align: middle !important;
}
.error-message {
font-size: 14px;
line-height: 1.5;
}
:deep(.el-table .el-table__cell) {
height: 50px !important;
padding: 0 !important;
line-height: 50px !important;
}
</style>

@ -29,6 +29,8 @@
templateName="试验项目模板.xlsx"
importUrl="/blade-desk/QA/CycleTestItem/import-excel"
@closeDialog="closeDialog"></basic-import>
<batch-add v-if="showDialog" :show-dialog="showDialog" @closeDialog="closeDialog"></batch-add>
</basic-container>
</template>
@ -44,14 +46,16 @@ import {
remove,
update,
} from '@/api/system/role';
import {getList} from '@/api/qualityManagement/remindRedeem/remindRedeem'
import {getList,deleteRemind} from '@/api/qualityManagement/remindRedeem/remindRedeem'
import { mapGetters } from 'vuex';
import { validatenull } from '@/utils/validate';
import basicImport from '@/components/basic-import/main.vue'
import batchAdd from './components/batchAdd.vue';
export default {
components: {
basicImport,
batchAdd
},
data() {
return {
@ -83,6 +87,7 @@ export default {
currentPage: 1,
total: 0,
},
showDialog:false,
option: {
columnSort: true,
tip: false,
@ -128,12 +133,13 @@ export default {
column: [
{
label: '零件号',
prop: 'partCode',
bind: 'dsPart.partCode',
prop: 'partId',
// bind: 'dsPart.partCode',
search: true,
sortable: true,
width: 150,
span: 12,
type:'select',
rules: [
{
required: true,
@ -145,7 +151,7 @@ export default {
{
label: '零件名称',
prop: 'partName',
bind: 'dsPart.partName',
// bind: 'dsPart.partName',
search: true,
sortable: true,
width: 150,
@ -153,11 +159,17 @@ export default {
},
{
label: '生产标识',
prop: 'cycle',
prop: 'prodFlagText',
search: true,
sortable: true,
width: 150,
span: 12,
type:'select',
dicUrl:'/api/blade-desk/BA/ProdMark/listForSelect',
props:{
label:'name',
value:'id'
}
},
{
label: '材料',
@ -191,7 +203,8 @@ export default {
},
{
label: '子件编码',
prop: 'chlidPart',
prop: 'subPartId',
type:'select',
search: false,
sortable: true,
width: 150,
@ -201,13 +214,15 @@ export default {
label: '提醒内容',
prop: 'remindContent',
search: false,
type: 'textarea',
rows: 2,
sortable: true,
width: 150,
span: 12,
},
{
label: '参数1名称',
prop: 'parameter',
prop: 'param1',
search: false,
sortable: true,
width: 150,
@ -216,7 +231,7 @@ export default {
},
{
label: '镀金检测',
prop: 'metalsTest',
prop: 'testAu',
search: false,
sortable: true,
width: 150,
@ -225,7 +240,7 @@ export default {
},
{
label: '镀银检测',
prop: 'silverTest',
prop: 'testAg',
search: false,
sortable: true,
width: 150,
@ -234,7 +249,7 @@ export default {
},
{
label: '热处理',
prop: 'heatTreat',
prop: 'isHeatTreatment',
search: false,
sortable: true,
width: 150,
@ -247,7 +262,7 @@ export default {
},
{
label: '镀后检验',
prop: 'afterPlating',
prop: 'isAfterPlating',
search: false,
sortable: true,
width: 150,
@ -267,10 +282,15 @@ export default {
};
},
methods: {
//
handleAdd(){
console.log('111111111111111')
this.showDialog = true
},
//
handleImport() {
this.isShowImport = true
},
handleImport() {
this.isShowImport = true
},
//
batchReceiving() {
this.$confirm('确定将选择数据批量接收?', {
@ -291,29 +311,36 @@ export default {
},
//
batchDel() {
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据')
return
}
this.$confirm('确定将选择数据批量删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
// return remove(row.id);
}).then(() => {
deleteRemind({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
.then(() => {
// this.onLoad(this.page);
// this.$message({
// type: 'success',
// message: '!',
// });
});
})
},
//
rushFn() {
this.isRushOpen = true
},
closeDialog() {
closeDialog(val) {
this.isRushOpen = false
this.isBatchOpen = false
this.showDialog = false
if(val){
this.onLoad()
}
},
inBatchesFn(row) {
this.rowItem = row;
@ -392,17 +419,17 @@ export default {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
return remove(row.id);
}).then(() => {
deleteRemind({
ids:row.id
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: 'success',
message: '操作成功!',
});
});
})
},
searchReset() {
@ -524,6 +551,13 @@ export default {
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
}).catch(err =>{
console.log('err00000000000',err)
this.loading = false
this.data = [
{}
]
this.page.total = 0
})
// this.data = [
// {}

@ -0,0 +1,64 @@
<template>
<div>
<!-- 包含所有ECharts的容器给容器加ID -->
<div id="chartsContainer" style="padding: 20px;">
<!-- ECharts图表1 -->
<div class="echarts" id="chart1" style="width: 600px; height: 300px;"></div>
<!-- ECharts图表2 -->
<div class="echarts" id="chart2" style="width: 600px; height: 300px;"></div>
<!-- ECharts图表3 -->
<div class="echarts" id="chart3" style="width: 600px; height: 300px;"></div>
<!-- ECharts图表4 -->
<div class="echarts" id="chart4" style="width: 600px; height: 300px;"></div>
</div>
<!-- 导出按钮 -->
<el-button type="primary" @click="handleExportPdf">导出PDF</el-button>
</div>
</template>
<script>
import * as echarts from 'echarts';
import { exportEchartsToPdf } from '@/utils/exportPdf'; //
export default {
name: 'EchartsToPdf',
mounted() {
// 4ECharts
this.initCharts();
},
methods: {
// ECharts
initCharts() {
// option
const chartOption = {
title: { text: '分析项目' },
xAxis: {
type: 'category',
data: ['2025-12-05', '2025-12-06', '2025-12-07', '2025-12-08', '2025-12-09', '2025-12-10', '2025-12-11', '2025-12-12', '2025-12-13', '2025-12-14', '2025-12-15', '2025-12-16', '2025-12-17', '2025-12-18']
},
yAxis: { type: 'value' },
series: [
{ name: '上限', type: 'line', data: [30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30] },
{ name: '下限', type: 'line', data: [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] },
{ name: '检测值', type: 'line', data: [30, 25, 7, 28, 20, 10, 8, 18, 10, 22, 10, 8, 18, 0] }
]
};
// 4option
[1, 2, 3, 4].forEach(index => {
const chart = echarts.init(document.getElementById(`chart${index}`));
chart.setOption(chartOption);
// resize
window.addEventListener('resize', () => chart.resize());
});
},
// PDF
handleExportPdf() {
// ID
exportEchartsToPdf('chartsContainer', 'echarts分析报告.pdf');
}
}
};
</script>
Loading…
Cancel
Save