消息提醒维护功能修改

dev-scheduling
jinna 2 months ago
parent e32bcb366c
commit 5ae250f947
  1. 18
      src/api/qualityManagement/productionTesting/productionQuality.js
  2. 18
      src/api/qualityManagement/remindRedeem/remindRedeem.js
  3. 36
      src/utils/formatter.js
  4. 4
      src/views/basicData/calculationFormula/tankDosing.vue
  5. 4
      src/views/basicData/calculationFormula/theoreticalValue.vue
  6. 2
      src/views/basicData/localPlateParts/index.vue
  7. 2
      src/views/basicData/platThicknessRelation/index.vue
  8. 3
      src/views/basicData/teamManagement.vue
  9. 8
      src/views/exemption/components/addDialog.vue
  10. 4
      src/views/oem/oemCustomer/index.vue
  11. 6
      src/views/oem/outsourcingAssignmentControl/index.vue
  12. 10
      src/views/orderManagement/components/mold/addMoldDailog.vue
  13. 8
      src/views/processManagement/processCapability.vue
  14. 207
      src/views/productionTesting/productionQuality.vue
  15. 2
      src/views/qualityManagement/inspectionArchiving/ERecord/index.vue
  16. 2
      src/views/qualityManagement/inspectionArchiving/ERecord/printDialog.vue
  17. 259
      src/views/qualityManagement/remindRedeem/components/batchAddColor.vue
  18. 260
      src/views/qualityManagement/remindRedeem/components/batchAddMaterials.vue
  19. 267
      src/views/qualityManagement/remindRedeem/components/batchAddPart.vue
  20. 339
      src/views/qualityManagement/remindRedeem/components/batchAddPlate.vue
  21. 295
      src/views/qualityManagement/remindRedeem/components/cladLayer.vue
  22. 255
      src/views/qualityManagement/remindRedeem/components/colorReminder.vue
  23. 231
      src/views/qualityManagement/remindRedeem/components/materialsReminder.vue
  24. 295
      src/views/qualityManagement/remindRedeem/components/partReminder.vue
  25. 576
      src/views/qualityManagement/remindRedeem/index.vue
  26. 4
      src/views/qualityManagement/tankSolutionSystem/workTankManagement.vue
  27. 4
      src/views/safetyManagement/equipmentInspectionPoint/index.vue
  28. 10
      src/views/safetyManagement/safetyInspectionPoint/index.vue
  29. 4
      src/views/safetyManagement/safetyInspectionTask/index.vue
  30. 4
      src/views/safetyManagement/wasteGasSet/components/alarmPoint.vue
  31. 4
      src/views/safetyManagement/wasteGasSet/components/dosingRecord.vue
  32. 4
      src/views/safetyManagement/wasteGasSet/components/wasteGasRunRec.vue
  33. 11
      src/views/safetyManagement/wastewater/components/dischargeRec.vue
  34. 5
      src/views/safetyManagement/wastewater/components/dosingRecord.vue
  35. 4
      src/views/safetyManagement/wastewater/components/testRecord.vue

@ -124,4 +124,22 @@ export const getMeasurement = () =>{
url:"/api/blade-desk/measurementRecords/listResult",
method:"get"
})
}
// 程式编码高亮提醒
export const getCodeRemind = (data) =>{
return request({
url:'/api/blade-desk/QA/InspectionTask/getMaterialMsg',
method:'post',
data
})
}
// 参数高亮提醒
export const getParamRemind = (data) =>{
return request({
url:'/api/blade-desk/QA/InspectionTask/getPlateMsg',
method:'post',
data
})
}

@ -61,4 +61,22 @@ export const getSubPartList = (params) =>{
method:'get',
params
})
}
// 查询
export const getRemindList = (params) =>{
return request({
url:'/api/blade-desk/QA/RemindMsg/list',
method:'get',
params
})
}
// 保存
export const saveRemind = (data) =>{
return request({
url:'/api/blade-desk/QA/RemindMsg/saveBat',
method:'post',
data
})
}

@ -44,3 +44,39 @@ export default class formatter {
}
}
}
// 小数点后位数
export function getDecimal(value,num) {
if (value == null) return '';
// 步骤1:移除所有非数字和非小数点的字符
let filterVal = value.replace(/[^\d.]/g, '');
// 步骤2:处理多个小数点的情况(只保留第一个小数点)
filterVal = filterVal.replace(/(\.\d*)\./g, '$1');
// 步骤3:处理小数点后位数
let regex = new RegExp(`(\\.\\d{${num}})\\d+`, 'g');
filterVal = filterVal.replace(regex, '$1');
// 步骤4:处理首位为0的情况
// 情况1:纯数字且长度>1,首位为0(如0123)→ 保留第一个0,后面的数字正常显示(但禁止多个0开头)
// 情况2:0后面跟小数点(如0.123)→ 允许
if (filterVal.startsWith('0') && filterVal.length > 1 && !filterVal.startsWith('0.')) {
// 移除开头多余的0(只保留一个0,后面的数字正常显示)
filterVal = filterVal.replace(/^0+/, '0');
// 若处理后是0且后面有数字(如0123→0123,再处理为0123→改为0)
if (filterVal === '0' && val.length > 1) {
filterVal = '0';
} else {
// 如0123→改为0,01234→改为0,0.123→不变
filterVal = filterVal.replace(/^0(?!\.)/, '');
// 若过滤后为空(如01→过滤后为空),则设为0
if (!filterVal) {
filterVal = '0';
}
}
}
return filterVal;
}

@ -17,8 +17,8 @@
@on-load="onLoad"
>
<template #menu-left>
<el-button type="primary" icon="el-icon-plus" @click="addEdit">新增 </el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete()"
<el-button type="primary" @click="addEdit">新增 </el-button>
<el-button type="danger" @click="handleDelete()"
>删除
</el-button>
</template>

@ -5,9 +5,9 @@
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad">
<template #menu-left>
<el-button type="primary" icon="el-icon-plus" @click="addEdit">新增
<el-button type="primary" @click="addEdit">新增
</el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete()">删除
<el-button type="danger" @click="handleDelete()">删除
</el-button>
</template>
<template #menu-right>

@ -55,7 +55,7 @@ export default {
// size: "medium",
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchMenuSpan: 18,
searchIcon: true,
searchIndex: 3,
tree: false,

@ -77,7 +77,7 @@ export default {
// size: "medium",
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchMenuSpan: 18,
searchIcon: true,
searchIndex: 3,
tree: false,

@ -541,6 +541,9 @@ export default {
this.$refs.crud.toggleSelection();
},
rowUpdate(row, index, done, loading) {
row.csId = row.csId ? row.csId : null
row.tsType = row.tsType ? row.tsType : null
row.special = row.special ? row.special : ''
updateTeam(row).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')

@ -109,6 +109,7 @@ export default {
},
],
change: (value) => {
console.log('value--------------------',value)
this.handleReportUserChange(value);
},
},
@ -116,7 +117,7 @@ export default {
label: '岗位',
prop: 'postName',
span: 24,
disabled: true,
// disabled: true,
rules: [{ required: false, message: '请输入岗位', trigger: 'blur' }],
},
{
@ -246,6 +247,11 @@ export default {
console.log('提出人值为空,跳过获取岗位信息');
return;
}
if(this.infoTitle == '重新提交'){
console.log('row-------------',this.rowItem)
this.formData.postName = this.rowItem.postName;
return
}
getPostItem(value.value).then(res => {
console.log('【获取岗位信息】响应:', res.data.code);
if (res.data.code == 200) {

@ -113,7 +113,7 @@ export default {
border: true,
selection: false,
index: true,
menuWidth: 200,
menuWidth: 120,
dialogClickModal: false,
excelBtn: true,
viewBtn: false,
@ -191,7 +191,7 @@ export default {
sortable: true,
search: false,
overHidden: true,
// width: 120,
width: 120,
rules: [
{
required: true,

@ -133,7 +133,7 @@ export default {
sortable: true,
filter: true,
span: 24,
width: 150,
minWidth: 150,
search: false,
type: "select",
rules: [{ required: true, message: "请输入分派比例", trigger: "blur" }],
@ -145,7 +145,7 @@ export default {
sortable: true,
filter: true,
span: 24,
width: 150,
minWidth: 150,
type: "select",
search: true,
filterable: true,
@ -177,7 +177,7 @@ export default {
filter: true,
span: 24,
search: false,
width: 150,
minWidth: 150,
// cell: true,
// type: "select",
// dicData: [

@ -59,8 +59,8 @@
</template>
<template #default="scope">
<el-form-item :prop="`moldPlan[${scope.$index}].toolCode`" :rules="formRules.toolCode">
<el-input v-model="scope.row.toolCode" :disabled="scope.row.disabled"></el-input>
<!-- <el-select
<!-- <el-input v-model="scope.row.toolCode" :disabled="scope.row.disabled"></el-input> -->
<el-select
v-model="scope.row.toolCode"
:filterable="true"
:disabled="scope.row.disabled"
@ -73,7 +73,7 @@
:label="item.name"
:value="item.code"
></el-option>
</el-select> -->
</el-select>
</el-form-item>
</template>
</el-table-column>
@ -193,7 +193,7 @@
</template>
<script>
import { add,getPartList,getProdIdentList,getUserByRoleAlias,getMoldList } from '@/api/orderManagement/moldPlan';
import { add,getPartList,getProdIdentList,getUserByRoleAlias,getMoldList,getToolList } from '@/api/orderManagement/moldPlan';
import { index } from '@/views/plugin/workflow/api/statistics';
export default {
@ -353,7 +353,7 @@ export default {
partCodeChange(val, i) {
this.form.moldPlan[i].partName =
this.partCodeList.find(item => item.partCode === val)?.partName || '';
getMoldList({partId:this.partCodeList.find(item => item.partCode === val)?.id}).then(res =>{
getToolList({partCode:val}).then(res =>{
console.log('res-----------',res)
this.form.moldPlan[i].modeArray = res.data.data
})

@ -42,6 +42,10 @@
</span>
</template>
<template #localArea-form="{type}">
<el-input v-if="type == 'add' || 'edit'" v-model="form.localArea" @input="validateSmallBat"></el-input>
</template>
<template #name="{ row }">
<i :class="row.source" style="margin-right: 5px" />
<span>{{ row.name }}</span>
@ -66,6 +70,7 @@ import { mapGetters } from "vuex";
import {getList,getPlateSmall,addProcessAbility,updateProcessAbility,deleteProcessAbility,saveProcessAbility} from "@/api/basicData/processCapability"
import { getDictionary } from "@/api/system/dict";
import basicImport from "@/components/basic-import/main.vue";
import {getDecimal} from "@/utils/formatter";
export default {
components: {
@ -319,6 +324,9 @@ export default {
},
},
methods: {
validateSmallBat(value){
this.form.localArea = getDecimal(value,5)
},
getType(){
getTypeData().then(res =>{

@ -49,16 +49,14 @@
<el-descriptions-item label="车间订单号" class="fixed-width-item">{{
dialogData.woCode
}}</el-descriptions-item>
<el-descriptions-item label="产品号">{{ dialogData.prodCode }}</el-descriptions-item>
<el-descriptions-item label="产品型号">{{
dialogData.prodType
}}</el-descriptions-item>
<el-descriptions-item label="零件号">{{ dialogData.partCode }}</el-descriptions-item>
<el-descriptions-item label="零件名称">{{dialogData.prodName}}</el-descriptions-item>
<el-descriptions-item label="生产标识">{{
dialogData.prodIdent
}}</el-descriptions-item>
<el-descriptions-item label="批次号">{{ dialogData.batchNo }}</el-descriptions-item>
<el-descriptions-item label="产品名称">{{
dialogData.prodName
<el-descriptions-item label="流程卡号">{{
dialogData.cardNo
}}</el-descriptions-item>
<el-descriptions-item label="生产数量">{{ dialogData.poQty }}</el-descriptions-item>
<el-descriptions-item label="面积(dm²)">{{
@ -68,14 +66,23 @@
<el-descriptions-item label="工艺路线">{{
dialogData.process
}}</el-descriptions-item>
<el-descriptions-item label="材料">{{ dialogData.material }}</el-descriptions-item>
<el-descriptions-item label="硬度">{{ dialogData.hardness }}</el-descriptions-item>
<el-descriptions-item label="试验数量">{{ dialogData.orderCheckQty }}</el-descriptions-item>
<el-descriptions-item label="消耗数量">{{ dialogData.orderLossQty }}</el-descriptions-item>
<el-descriptions-item label="报废数量">{{ dialogData.orderScrapQty }}</el-descriptions-item>
<el-descriptions-item label="硬度">{{ dialogData.hardness }}</el-descriptions-item>
<el-descriptions-item label="工艺规程"> {{dialogData.processSpec}}</el-descriptions-item>
<el-descriptions-item label="关键信息" :span="5">{{dialogData.keyInfo}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="5">{{ dialogData.remark }}</el-descriptions-item>
<el-descriptions-item label="提醒内容" :span="5">
<!-- <el-descriptions-item label="硬度">{{ dialogData.hardness }}</el-descriptions-item> -->
<!-- <el-descriptions-item label="工艺规程"> {{dialogData.processSpec}}</el-descriptions-item> -->
<el-descriptions-item label="关键信息" :span="2">{{dialogData.keyInfo}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="3">{{ dialogData.remark }}</el-descriptions-item>
<el-descriptions-item label="提醒颜色" :span="2">
<div style="display: flex;" v-if="colorMsges && colorMsges.length > 0">
<span>{{colorMsges[0].remindColor}}</span>
<div style="width:50%;height:30px;margin-left:10px;" :style="{background:colorMsges[0].showColor}"></div>
</div>
<div v-else style="width:30px;"></div>
</el-descriptions-item>
<el-descriptions-item label="提醒内容" :span="3">
<p v-for="item in remindMsgList" :key="item.id">{{item.remindContent}}</p>
<!-- <p>1提醒内容1</p>
<p>2提醒内容2</p> -->
@ -243,6 +250,7 @@
show-overflow-tooltip
v-if="scope.row.item.name == '厚度检测'"
style="margin: 12px"
:cell-class-name="cellClassName"
>
<el-table-column width="57px">
<template #header>
@ -278,7 +286,8 @@
</div>
</template>
<template #default="subScope">
<el-input v-model="subScope.row.gaugeValue7" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "></el-input>
<el-input v-model="subScope.row.gaugeValue7" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "
@blur="validateCode(subScope.row)"></el-input>
</template>
</el-table-column>
<el-table-column label="名称1" prop="gaugeValue1" align="center">
@ -288,7 +297,8 @@
</el-table-column>
<el-table-column label="参数1(um)" prop="gaugeValue2" align="center">
<template #default="subScope">
<el-input v-model="subScope.row.gaugeValue2" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "></el-input>
<el-input v-model="subScope.row.gaugeValue2" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "
@blur="validateNum1(subScope.row)"></el-input>
</template>
</el-table-column>
<el-table-column label="名称2" prop="gaugeValue3" align="center">
@ -298,7 +308,8 @@
</el-table-column>
<el-table-column label="参数2(um)" prop="gaugeValue4" align="center">
<template #default="subScope">
<el-input v-model="subScope.row.gaugeValue4" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "></el-input>
<el-input v-model="subScope.row.gaugeValue4" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "
@blur="validateNum2(subScope.row)"></el-input>
</template>
</el-table-column>
<el-table-column label="名称3" prop="gaugeValue5" align="center">
@ -308,7 +319,8 @@
</el-table-column>
<el-table-column label="参数3(um)" prop="gaugeValue6" align="center">
<template #default="subScope">
<el-input v-model="subScope.row.gaugeValue6" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "></el-input>
<el-input v-model="subScope.row.gaugeValue6" :disabled="scope.row.checkUserRealName != null && scope.row.checkUserRealName != '' "
@blur="validateNum3(subScope.row)"></el-input>
</template>
</el-table-column>
<el-table-column label="设备编码" prop="gaugeValue8" align="center">
@ -456,7 +468,8 @@
</el-table>
<!-- -->
<el-descriptions v-if="dialogData.ppsName == '烧结包装防护'" title="子件" :column="5" border style="margin-top: 24px"></el-descriptions>
<el-table v-if="dialogData.ppsName == '烧结包装防护'" :data="vxeTableData1" show-overflow-tooltip>
<!-- v-if="dialogData.ppsName == '烧结包装防护'" -->
<el-table :data="vxeTableData1" show-overflow-tooltip>
<el-table-column label="子件号" prop="partCode" align="center"></el-table-column>
<el-table-column label="子件名称" prop="partName" align="center"></el-table-column>
<el-table-column label="数量" prop="qty" align="center"></el-table-column>
@ -491,7 +504,8 @@
<script>
import {dateFormat} from '@/utils/date'
import {createInspection,getInspectionList,getInspectionDetail,fillInspection,getSameLotList,applySameLot,
refreshHardness,getThicknessList,goQualityRecord,goCertificate,getSubPackageList, getSupplierList,getMeasurement} from '@/api/qualityManagement/productionTesting/productionQuality.js'
refreshHardness,getThicknessList,goQualityRecord,goCertificate,getSubPackageList, getSupplierList,getMeasurement,
getCodeRemind,getParamRemind} from '@/api/qualityManagement/productionTesting/productionQuality.js'
import sametankView from './components/sametankView.vue';
export default {
components: { sametankView },
@ -523,8 +537,10 @@ export default {
vxeTableData5: [],
vxeTableData2: [],
remindMsgList:[], //
colorMsges:[], //
thicknessData:[],
measureList:[],
vxeTableData1:[],
option: {
tip: false,
height: 'auto',
@ -973,6 +989,113 @@ export default {
},
methods: {
validateCode(row){
console.log('row----------------',row)
getCodeRemind({
material:this.dialogData.material,
formula:row.gaugeValue7 ? row.gaugeValue7 : ''
}).then(res =>{
console.log('res=============',res)
if(res.data.data.checkMaterial == '1'){
row.codeStatus = true
}
})
},
validateNum1(row){
getParamRemind({
prodIdent:this.dialogData.prodIdent,
platingInfo:this.dialogData.platingInfo,
plateCode:this.dialogData.plateCode,
configCode:this.dialogData.configCode,
param1:row.gaugeValue2 ? row.gaugeValue2 : '',
}).then(res =>{
console.log('res=============',res)
if(res.data.data.checkParam1 == '1'){
row.num1Status = true
}else{
row.num1Status = false
}
})
},
validateNum2(row){
getParamRemind({
prodIdent:this.dialogData.prodIdent,
platingInfo:this.dialogData.platingInfo,
plateCode:this.dialogData.plateCode,
configCode:this.dialogData.configCode,
param2:row.gaugeValue4 ? row.gaugeValue4 : '',
}).then(res =>{
console.log('res=============',res)
if(res.data.data.checkParam2 == '1'){
row.num2Status = true
}else{
row.num2Status = false
}
})
},
validateNum3(row){
getParamRemind({
prodIdent:this.dialogData.prodIdent,
platingInfo:this.dialogData.platingInfo,
plateCode:this.dialogData.plateCode,
configCode:this.dialogData.configCode,
param3:row.gaugeValue6 ? row.gaugeValue6 : '',
}).then(res =>{
console.log('res=============',res)
if(res.data.data.checkParam3 == '1'){
row.num3Status = true
}else{
row.num3Status = false
}
})
},
cellClassName({ row, column, rowIndex, columnIndex }) {
console.log('row=============',row)
console.log('column=============',column)
console.log('rowIndex=============',rowIndex)
console.log('columnIndex=============',columnIndex)
if(column.property == 'gaugeValue7'){
if(row.codeStatus == true){
return 'high_td';
}
}
if(column.property == 'gaugeValue2'){
if(row.num1Status == true){
return 'high_td';
}
}
if(column.property == 'gaugeValue4'){
if(row.num2Status == true){
return 'high_td';
}
}
if(column.property == 'gaugeValue6'){
if(row.num3Status == true){
return 'high_td';
}
}
return '';
// if (column.property === 'score') {
// if (row.score < 60) {
// return 'cell-fail';
// }
// if (row.score > 90) {
// return 'cell-excellent';
// }
// }
// return '';
},
addSpecimen(row){
if(row.checkUserRealName != null && row.checkUserRealName != ''){
return
@ -1217,6 +1340,41 @@ export default {
}
this.getDChyData = [...map.values()];
console.log('this.getDChyData',this.getDChyData)
if(this.thicknessData.length>0){
this.thicknessData.forEach(item =>{
getCodeRemind({
material:this.dialogData.material,
formula:item.gaugeValue7
}).then(res =>{
if(res.data.data.checkMaterial == '1'){
item.codeStatus = true
}
})
getParamRemind({
prodIdent:this.dialogData.prodIdent,
platingInfo:this.dialogData.platingInfo,
plateCode:this.dialogData.plateCode,
configCode:this.dialogData.configCode,
param1:item.gaugeValue2 ? item.gaugeValue2 : '',
param2:item.gaugeValue4 ? item.gaugeValue4 : '',
param3:item.gaugeValue6 ? item.gaugeValue6 : '',
}).then(res =>{
item.num3Status = false
item.num2Status = false
item.num1Status = false
if(res.data.data.checkParam3 == '1'){
item.num3Status = true
}
if(res.data.data.checkParam2 == '1'){
item.num2Status = true
}
if(res.data.data.checkParam1 == '1'){
item.num1Status = true
}
})
})
}
}
})
},
@ -1387,6 +1545,7 @@ export default {
handleResult(row) {
console.log('row------------------',row)
this.checkedId = row.id
this.vxeTableData1 = []
getMeasurement().then(res =>{
this.measureList = res.data.data
})
@ -1398,6 +1557,7 @@ export default {
this.dialogData = res.data.data.orderInfo;
this.dialogData.ppsName = res.data.data.processName;
this.remindMsgList = res.data.data.remindMsgList;
this.colorMsges = res.data.data.colorMsges;
// res.data.data.wpItemList[0].standard = {
// standardValue:null,
// downValue:null
@ -1439,14 +1599,14 @@ export default {
}
if(this.dialogData.ppsName === '烧结包装防护'){
// if(this.dialogData.ppsName === ''){
getSubPackageList({
yoId:res.data.data.orderInfo.yoId
}).then(res3 =>{
this.vxeTableData1 = res3.data.data
console.log('vxeTableData1------------------',this.vxeTableData1)
})
}
// }
console.log('vxeTableData-------------',this.vxeTableData)
@ -1487,4 +1647,13 @@ export default {
:deep(.row-expand-cover .el-table__expand-column .el-icon) {
visibility: hidden;
}
:deep .high_td{
background: yellow;
.el-input{
.el-input__wrapper{
background: yellow !important;
}
}
}
</style>

@ -746,7 +746,7 @@ export default {
},
planOpenSj:false,
sjTypeSelectOpen: false,
sjTypeSelectOpen: true,
sjPrintType: 1,
showSjPrint:false,
data: [],

@ -221,7 +221,7 @@ export default {
// },
printConfig :{
id: 'printMe',
extraCss: 'https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css',
// extraCss: 'https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css',
extraHead: '<meta http-equiv="Content-Language" content="zh-cn"/>',
// preview: true,
},

@ -0,0 +1,259 @@
<template>
<el-dialog
:title="title"
append-to-body
:modelValue="openShow"
width="70%"
@close="closeDialog()"
>
<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-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" align="center"></el-table-column>
<el-table-column label="虚拟子件号" prop="subPartCode" align="center">
<template #header>
<span><i style="color: red">*</i>虚拟子件号</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].subPartCode`" :rules="formRules.subPartCode">
<el-input v-model="scope.row.subPartCode"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="提醒颜色" prop="remindColor" align="center">
<template #header>
<span><i style="color: red">*</i>提醒颜色</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].remindColor`" :rules="formRules.remindColor">
<el-input v-model="scope.row.remindColor"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="显示颜色" prop="showColor" align="center">
<template #header>
<span><i style="color: red">*</i>显示颜色</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].showColor`" :rules="formRules.showColor">
<el-color-picker v-model="scope.row.showColor" show-alpha color-format="rgb" style="width:99%;"></el-color-picker>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog()"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { getPqList,saveRemind,editRemind } from "@/api/qualityManagement/remindRedeem/remindRedeem"
export default {
props:{
showDialog:{
type: Boolean,
default: false
},
moldAddMore:{
type: Boolean,
default: false
},
title:{
type: String,
default: ''
},
checkRow:{
type: Object,
default: () => {
return {}
}
}
},
data(){
return{
openShow:false,
formError:"",
form:{
tableData:[]
},
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',
},
],
// plate
subPartCode: [{ required: true, message: '请输入虚拟子件号', trigger: ['change', 'submit'] }],
remindColor:[{ required: true, message: '请输入提醒颜色', trigger: ['change', 'submit'] }],
showColor:[{ required: true, message: '请选择显示颜色', trigger: ['change', 'submit'] }]
},
rowDetail:{}
}
},
created(){
this.openShow = this.showDialog
if(this.title == '新增'){
//
if (this.moldAddMore && this.form.tableData.length === 0) {
this.addTable();
}
}else{
this.rowDetail = JSON.parse(JSON.stringify(this.checkRow))
this.form.tableData = []
this.form.tableData.push(this.rowDetail)
}
},
methods:{
closeDialog(val){
console.log('val-----------',val)
this.$emit('closeDialog',val)
},
selectChange(list, row) {
row._select = !row._select;
},
// push tableData
addTable() {
this.form.tableData.push({
_select: false, //
subPartCode: '',
remindColor: '',
showColor:null,
});
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
submitForm(){
this.formError = '';
// 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 subPartCodeSet = new Set();
let duplicateCode = null;
for (const row of this.form.tableData) {
const code = row.subPartCode;
//
if (!code) continue;
if (subPartCodeSet.has(code)) {
duplicateCode = code;
break; //
}
subPartCodeSet.add(code);
}
if (duplicateCode) {
this.formError = `数据重复:虚拟子件号【${duplicateCode}】已存在,请检查并修改。`;
// 使 Message
this.$message.warning(this.formError);
return;
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
console.log('submitData---------',submitData)
submitData.map(item =>{
item.remindMsgType = 2
})
if(this.title == '新增'){
saveRemind(submitData).then(res => {
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editRemind(submitData[0]).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
})
},
}
}
</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>

@ -0,0 +1,260 @@
<template>
<el-dialog
:title="title"
append-to-body
:modelValue="openShow"
width="70%"
@close="closeDialog()"
>
<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-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" align="center"></el-table-column>
<el-table-column label="程式编号" prop="formula" align="center">
<template #header>
<span><i style="color: red">*</i>程式编号</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].formula`" :rules="formRules.formula">
<el-input v-model="scope.row.formula"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="材料" prop="material" align="center">
<template #header>
<el-tooltip class="item" effect="dark" content="存在多个材料时,请以【、】分割" placement="top">
<div>
<i style="color: red;margin:0px 5px;">*</i>
<el-icon><InfoFilled /></el-icon>
<span style="margin-left: 2px;">材料</span>
</div>
</el-tooltip>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].material`" :rules="formRules.material">
<el-input v-model="scope.row.material"></el-input>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog()"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { getPqList,saveRemind,editRemind } from "@/api/qualityManagement/remindRedeem/remindRedeem"
export default {
props:{
showDialog:{
type: Boolean,
default: false
},
moldAddMore:{
type: Boolean,
default: false
},
title:{
type: String,
default: ''
},
checkRow:{
type: Object,
default: () => {
return {}
}
}
},
data(){
return{
openShow:false,
formError:"",
form:{
tableData:[]
},
rowDetail:{},
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',
},
],
// plate
formula: [{ required: true, message: '请输入程式编号', trigger: ['change', 'submit'] }],
material:[{ required: true, message: '请输入材料', trigger: ['change', 'submit'] }]
}
}
},
created(){
this.openShow = this.showDialog
if(this.title == '新增'){
//
if (this.moldAddMore && this.form.tableData.length === 0) {
this.addTable();
}
}else{
this.rowDetail = JSON.parse(JSON.stringify(this.checkRow))
this.form.tableData = []
this.form.tableData.push(this.rowDetail)
}
},
methods:{
closeDialog(val){
this.$emit('closeDialog',val)
},
selectChange(list, row) {
row._select = !row._select;
},
// push tableData
addTable() {
this.form.tableData.push({
_select: false, //
formula: '',
material: '',
});
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
submitForm(){
this.formError = '';
// 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;
}
// 2.
const programNumbers = this.form.tableData.map(row => row.formula);
const duplicates = [];
const seen = new Set();
//
programNumbers.forEach(num => {
if (seen.has(num)) {
if (!duplicates.includes(num)) {
duplicates.push(num);
}
} else {
seen.add(num);
}
});
if (duplicates.length > 0) {
this.formError = `程式编号 【${duplicates.join(', ')}】存在重复,请检查`;
// // /
// this.$nextTick(() => {
// //
// // el-input ref DOM
// const firstError = document.querySelector('.error-message');
// if (firstError) {
// firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
// }
// });
return;
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
submitData.map(item =>{
item.remindMsgType = 3
})
if(this.title == '新增'){
saveRemind(submitData).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editRemind(submitData[0]).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
})
},
}
}
</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>

@ -0,0 +1,267 @@
<template>
<el-dialog
:title="title"
append-to-body
:modelValue="openShow"
width="70%"
@close="closeDialog()"
>
<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-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" align="center"></el-table-column>
<el-table-column label="零件号" prop="partCode" align="center">
<template #header>
<span><i style="color: red">*</i>零件号</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].partCode`" :rules="formRules.partCode">
<el-input v-model="scope.row.partCode"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="生产标识" prop="qualityLevel" align="center">
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].qualityLevel`" :rules="formRules.qualityLevel">
<!-- <el-input v-model="scope.row.qualityLevel"></el-input> -->
<el-select v-model="scope.row.qualityLevel" clearable>
<el-option v-for="item in productionList" :key="item.id" :label="item.name" :value="item.name"></el-option>"
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="提醒内容" prop="remindContent" align="center">
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].remindContent`" :rules="formRules.remindContent">
<el-input v-model="scope.row.remindContent"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="热处理检验" prop="isHeatTreatment" align="center">
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].isHeatTreatment`" :rules="formRules.isHeatTreatment">
<el-switch
style="margin:0 auto;"
v-model="scope.row.isHeatTreatment"
>
</el-switch>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="镀后检验" prop="isAfterPlating" align="center">
<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"
>
</el-switch>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog()"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { getPqList,saveRemind,editRemind } from "@/api/qualityManagement/remindRedeem/remindRedeem"
export default {
props:{
showDialog:{
type: Boolean,
default: false
},
moldAddMore:{
type: Boolean,
default: false
},
title:{
type: String,
default: ''
},
checkRow:{
type: Object,
default: () => {
return {}
}
}
},
data(){
return{
openShow:false,
formError:"",
form:{
tableData:[]
},
rowDetail:{},
productionList:[],
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',
},
],
// plate
partCode: [{ required: true, message: '请输入程式编号', trigger: ['change', 'submit'] }],
}
}
},
created(){
this.openShow = this.showDialog
this.getPqList()
if(this.title == '新增'){
//
if (this.moldAddMore && this.form.tableData.length === 0) {
this.addTable();
}
}else{
this.rowDetail = JSON.parse(JSON.stringify(this.checkRow))
this.rowDetail.isHeatTreatment = this.rowDetail.isHeatTreatment == 1 ? true : false
this.rowDetail.isAfterPlating = this.rowDetail.isAfterPlating == 1 ? true : false
this.form.tableData = []
this.form.tableData.push(this.rowDetail)
}
},
methods:{
getPqList(){
getPqList().then(res =>{
this.productionList = res.data.data
})
},
closeDialog(val){
this.$emit('closeDialog',val)
},
selectChange(list, row) {
row._select = !row._select;
},
// push tableData
addTable() {
this.form.tableData.push({
_select: false, //
partCode: '',
qualityLevel: '',
remindContent:'',
isHeatTreatment:false,
isAfterPlating:false
});
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
submitForm(){
this.formError = '';
// 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;
});
submitData.map(item =>{
item.remindMsgType = 0
item.isHeatTreatment = item.isHeatTreatment ? 1 : 0,
item.isAfterPlating = item.isAfterPlating ? 1 : 0,
item.qualityLevel = item.qualityLevel ? item.qualityLevel : ''
})
console.log('submitData---------------',submitData)
if(this.title == '新增'){
saveRemind(submitData).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editRemind(submitData[0]).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
})
},
}
}
</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>

@ -0,0 +1,339 @@
<template>
<el-dialog
:title="title"
append-to-body
:modelValue="openShow"
width="70%"
@close="closeDialog()"
>
<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-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" align="center"></el-table-column>
<el-table-column label="镀种信息" prop="plateing" align="center">
<template #header>
<span><i style="color: red">*</i>镀种信息</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].plateing`" :rules="formRules.plateing">
<el-input v-model="scope.row.plateing"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="生产标识" prop="qualityLevel" align="center">
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].qualityLevel`" :rules="formRules.qualityLevel">
<!-- <el-input v-model="scope.row.qualityLevel"></el-input> -->
<el-select v-model="scope.row.qualityLevel" clearable>
<el-option v-for="item in productionList" :key="item.id" :label="item.name" :value="item.name"></el-option>"
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="参数1下限" prop="param1Down" align="center">
<template #header>
<span><i style="color: red">*</i>参数1下限</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].param1Down`" :rules="formRules.param1Down">
<el-input-number v-model="scope.row.param1Down" style="width:99%;" :controls="false" :min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="参数1上限" prop="param1Up" align="center">
<!-- <template #header>
<span><i style="color: red">*</i>参数1上限</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].param1Up`" :rules="formRules.param1Up">
<el-input-number v-model="scope.row.param1Up" style="width:99%;" :controls="false" :min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="参数2下限" prop="param2Down" align="center">
<!-- <template #header>
<span><i style="color: red">*</i>参数2下限</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].param2Down`" :rules="formRules.param2Down">
<el-input-number v-model="scope.row.param2Down" style="width:99%;" :controls="false" :min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="参数2上限" prop="param2Up" align="center">
<!-- <template #header>
<span><i style="color: red">*</i>参数2上限</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].param2Up`" :rules="formRules.param2Up">
<el-input-number v-model="scope.row.param2Up" style="width:99%;" :controls="false" :min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="参数3下限" prop="param3Down" align="center">
<!-- <template #header>
<span><i style="color: red">*</i>参数3下限</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].param3Down`" :rules="formRules.param3Down">
<el-input-number v-model="scope.row.param3Down" style="width:99%;" :controls="false" :min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="参数3上限" prop="param3Up" align="center">
<!-- <template #header>
<span><i style="color: red">*</i>参数3上限</span>
</template> -->
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].param3Up`" :rules="formRules.param3Up">
<el-input-number v-model="scope.row.param3Up" style="width:99%;" :controls="false" :min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog()"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { getPqList,saveRemind,editRemind } from "@/api/qualityManagement/remindRedeem/remindRedeem"
export default {
props:{
showDialog:{
type: Boolean,
default: false
},
moldAddMore:{
type: Boolean,
default: false
},
title:{
type: String,
default: ''
},
checkRow:{
type: Object,
default: () => {
return {}
}
}
},
data(){
return{
openShow:false,
formError:"",
form:{
tableData:[]
},
productionList:[],
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',
},
],
// plateing
plateing: [{ required: true, message: '请输入镀种信息', trigger: ['change', 'submit'] }],
param1Down:[{ required: true, message: '请输入参数1下限', trigger: ['change', 'submit'] }]
},
rowDetail:{}
}
},
created(){
this.openShow = this.showDialog
this.getPqList()
if (this.title == '新增') {
//
if (this.moldAddMore && this.form.tableData.length === 0) {
this.addTable();
}
}else{
this.form.tableData = []
this.rowDetail = JSON.parse(JSON.stringify(this.checkRow))
this.rowDetail.param1Down = this.rowDetail.param1Down != -1 ? this.rowDetail.param1Down : null
this.rowDetail.param1Up = this.rowDetail.param1Up != -1 ? this.rowDetail.param1Up : null
this.rowDetail.param2Down = this.rowDetail.param2Down != -1 ? this.rowDetail.param2Down : null
this.rowDetail.param2Up = this.rowDetail.param2Up != -1 ? this.rowDetail.param2Up : null
this.rowDetail.param3Down = this.rowDetail.param3Down != -1 ? this.rowDetail.param3Down : null
this.rowDetail.param3Up = this.rowDetail.param3Up != -1 ? this.rowDetail.param3Up : null
this.form.tableData.push(this.rowDetail)
}
console.log('table----------',this.form.tableData)
},
methods:{
getPqList(){
getPqList().then(res =>{
this.productionList = res.data.data
})
},
closeDialog(val){
this.$emit('closeDialog',val)
},
selectChange(list, row) {
row._select = !row._select;
},
// push tableData
addTable() {
this.form.tableData.push({
_select: false, //
plateing: '', // ID
qualityLevel: '', // /
param1Down: null, //
param1Up: null,
param2Down: null,
param2Up: null, //
param3Down: null, //
param3Up: null, //
});
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
// ID
getProductionName(id) {
if (!id) return '';
const item = this.productionList.find(p => p.id === id);
return item ? item.name : id;
},
submitForm(){
this.formError = '';
// 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 uniqueKeys = new Set();
let duplicateInfo = null;
for (const row of this.form.tableData) {
// _
// qualityLevel
const key = `${row.plateing}_${row.qualityLevel}`;
if (uniqueKeys.has(key)) {
duplicateInfo = row;
break; //
}
uniqueKeys.add(key);
}
if (duplicateInfo) {
this.formError = `数据重复:镀种信息【${duplicateInfo.plateing}】与生产标识【${duplicateInfo.qualityLevel}】已存在,请检查表格数据。`;
//
return;
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
submitData.map(item =>{
item.remindMsgType = 1
item.param1Down = item.param1Down ? item.param1Down : ''
item.param1Up = item.param1Up ? item.param1Up : ''
item.param2Down = item.param2Down ? item.param2Down : ''
item.param2Up = item.param2Up ? item.param2Up : ''
item.param3Down = item.param3Down ? item.param3Down : ''
item.param3Up = item.param3Up ? item.param3Up : ''
item.qualityLevel = item.qualityLevel ? item.qualityLevel : ''
})
console.log('submitData----------',submitData)
if(this.title == '新增'){
saveRemind(submitData).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
editRemind({...submitData[0]}).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
})
},
}
}
</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>

@ -0,0 +1,295 @@
<template>
<!-- 镀层提醒 -->
<div>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #menu="scope">
<el-button type="text" @click="editRow(scope.row)">修改</el-button>
<el-button type="text" @click="rowDel(scope.row)">删除</el-button>
</template>
<template #menu-left>
<el-button type="primary" @click="handleAdd">新增</el-button>
<el-button type="danger" @click="handleDelete">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport()">导入</el-button>
</template>
<!-- <template #parameter1="scope">
<span v-if="scope.row.param1Down && scope.row.param1Down != '' && !scope.row.param1Up">{{'>' + scope.row.param1Down}}</span>
<span v-if="scope.row.param1Up && scope.row.param1Up != '' && !scope.row.param1Down">{{'<' + scope.row.param1Up}}</span>
<span v-if="scope.row.param1Down && scope.row.param1Down != '' && scope.row.param1Up && scope.row.param1Up != ''">{{scope.row.param1Down}} ~ {{scope.row.param1Up}}</span>
</template>
<template #parameter2="scope">
<span v-if="scope.row.param2Down && scope.row.param2Down != '' && !scope.row.param2Up">{{'>' + scope.row.param2Down}}</span>
<span v-if="scope.row.param2Up && scope.row.param2Up != '' && !scope.row.param2Down">{{'<' + scope.row.param2Up}}</span>
<span v-if="scope.row.param2Down && scope.row.param2Down != '' && scope.row.param2Up && scope.row.param2Up != ''">{{scope.row.param2Down}} ~ {{scope.row.param2Up}}</span>
</template>
<template #parameter3="scope">
<span v-if="scope.row.param3Down && scope.row.param3Down != '' && !scope.row.param3Up">{{'>' + scope.row.param3Down}}</span>
<span v-if="scope.row.param3Up && scope.row.param3Up != '' && !scope.row.param3Down">{{'<' + scope.row.param3Up}}</span>
<span v-if="scope.row.param3Down && scope.row.param3Down != '' && scope.row.param3Up && scope.row.param3Up != ''">{{scope.row.param3Down}} ~ {{scope.row.param3Up}}</span>
</template> -->
</avue-crud>
<batchAddPlate
v-if="showDialog"
:show-Dialog="showDialog"
:moldAddMore="moldAddMore"
:title="title"
:checkRow="checkRow"
@closeDialog="closeDialog"
></batchAddPlate>
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/RemindMsg/downloadExcelTemplatePlate"
templateName="镀层提醒维护模板.xls"
importUrl="/blade-desk/QA/RemindMsg/importExcelPlate"
@closeDialog="closeDialog"></basic-import>
</div>
</template>
<script>
import {getRemindList,deleteRemind} from '@/api/qualityManagement/remindRedeem/remindRedeem'
import batchAddPlate from "./batchAddPlate.vue"
import basicImport from '@/components/basic-import/main.vue'
export default {
components:{
batchAddPlate,
basicImport
},
data(){
return{
loading:false,
form:{},
page:{
pageSize: 10,
currentPage: 1,
total: 0,
},
query:{},
data:[],
showDialog:false,
moldAddMore:false,
title:"新增",
selectionList:[],
checkRow:{},
isShowImport:false,
option:{
height: 'auto',
align: 'center',
calcHeight: 32,
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: true,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menuWidth: 100,
dialogWidth: '35%',
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
columnSort: true,
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
menuAlign: 'center',
gridBtn: false,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
searchMenuPosition: 'right',
column: [
{
label: '镀种信息',
prop: 'plateing',
// search: true,
// sortable: true,
overHidden: true,
// headerAlign: 'center',
// align: 'left',
// searchLabelWidth: 80,
span:24,
rules: [
{
required: true,
message: '请输入镀种信息',
trigger: 'blur',
},
],
},
{
label:"生产标识",
prop:"qualityLevel",
span:24,
overHidden: true,
},
{
label:"参数1",
prop:"param1",
span:24,
overHidden: true,
},
{
label:"参数2",
prop:"param2",
span:24,
overHidden: true,
},
{
label:"参数3",
prop:"param3",
span:24,
overHidden: true,
},
]
}
}
},
created(){
},
methods:{
//
handleImport() {
this.isShowImport = true
},
searchChange(params, done){
this.query = params;
this.onLoad()
done();
},
searchReset(){
this.query = {};
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage;
},
sizeChange(pageSize){
this.page.pageSize = pageSize;
},
refreshChange(){
this.onLoad()
},
selectionChange(list){
this.selectionList = list;
},
handleDelete(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据!')
return
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
deleteRemind({ids:this.selectionList.map(item => item.id).join(',')}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
rowDel(row){
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
deleteRemind({ids:row.id}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
handleAdd(){
this.title = "新增"
this.moldAddMore = true
this.showDialog = true
},
editRow(row){
this.moldAddMore = false
this.checkRow = row
this.title = '编辑'
this.showDialog = true
},
closeDialog(val){
this.showDialog = false
this.isShowImport = false
if(val){
this.onLoad()
}
},
onLoad(){
this.loading = true
getRemindList({
remindMsgType:1,
current:this.page.currentPage,
size:this.page.pageSize,
...this.query,
}).then(res =>{
console.log('res--------------',res)
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {
// plate:"P001",
// production:"",
// // parameter1:"1",
// // parameter2:"2",
// // parameter3:"3",
// param1Down:'0.5',
// param1Up:'1.25',
// param2Down:'0.5',
// param2Up:'1.25',
// param3Down:'0.5',
// param3Up:'',
// }
// ];
// this.page.total = this.data.length
// this.loading = false
}
}
};
</script>
<style>
</style>

@ -0,0 +1,255 @@
<template>
<!-- 颜色提醒 -->
<div>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #showColor="scope">
<div style="width:90%;height:25px;margin:0 auto;"
:style="{ backgroundColor: scope.row.showColor || '#fff' }"></div>
</template>
<template #menu-left>
<el-button type="primary" @click="handleAdd">新增</el-button>
<el-button type="danger" @click="handleDelete">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport()">导入</el-button>
</template>
<template #menu="scope">
<el-button type="text" @click="editRow(scope.row)">修改</el-button>
<el-button type="text" @click="rowDel(scope.row)">删除</el-button>
</template>
</avue-crud>
<batchAddColor
v-if="showDialog"
:showDialog="showDialog"
:title="title"
:moldAddMore="moldAddMore"
:checkRow="checkRow"
@closeDialog="closeDialog"
></batchAddColor>
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/RemindMsg/downloadExcelTemplateColor"
templateName="颜色提醒维护模板.xls"
importUrl="/blade-desk/QA/RemindMsg/importExcelColor"
@closeDialog="closeDialog"></basic-import>
</div>
</template>
<script>
import {getRemindList,deleteRemind} from '@/api/qualityManagement/remindRedeem/remindRedeem'
import batchAddColor from './batchAddColor.vue'
import basicImport from '@/components/basic-import/main.vue'
export default {
components:{
batchAddColor,
basicImport
},
data(){
return{
loading:false,
form:{},
page:{
pageSize: 10,
currentPage: 1,
total: 0,
},
query:{},
data:[],
selectionList:[],
isShowImport:false,
showDialog:false,
title:'',
moldAddMore:false,
checkRow:false,
option:{
height: 'auto',
align: 'center',
calcHeight: 32,
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: true,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menuWidth: 100,
dialogWidth: '35%',
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
columnSort: true,
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
menuAlign: 'center',
gridBtn: false,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
searchMenuPosition: 'right',
column: [
{
label:"虚拟子件号",
prop:"subPartCode",
overHidden: true,
span:24,
},
{
label:"提醒颜色",
prop:"remindColor",
overHidden: true,
span:24,
},
{
label:"显示颜色",
prop:"showColor",
overHidden: true,
span:24,
},
]
}
}
},
created(){
},
methods:{
//
handleImport() {
this.isShowImport = true
},
searchChange(params, done){
this.query = params;
this.onLoad()
done();
},
searchReset(){
this.query = {};
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage;
},
sizeChange(pageSize){
this.page.pageSize = pageSize;
},
refreshChange(){
this.onLoad()
},
selectionChange(list){
this.selectionList = list;
},
handleDelete(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据!')
return
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
deleteRemind({ids:this.selectionList.map(item => item.id).join(',')}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
rowDel(row){
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
deleteRemind({ids:row.id}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
handleAdd(){
this.title = "新增"
this.moldAddMore = true
this.showDialog = true
},
editRow(row){
this.checkRow = row
this.moldAddMore = false
this.title = '编辑'
this.showDialog = true
},
closeDialog(val){
this.showDialog = false
this.moldAddMore = false
this.isShowImport = false
if(val){
this.onLoad()
}
},
onLoad(){
this.loading = true
getRemindList({
remindMsgType:2,
current:this.page.currentPage,
size:this.page.pageSize,
...this.query,
}).then(res =>{
console.log('res--------------',res)
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {
// subPart:"0001",
// color:'',
// displayColor:'rgb(0, 0, 0)'
// }
// ]
// this.page.total = this.data.length
// this.loading = false
}
}
}
</script>
<style>
</style>

@ -0,0 +1,231 @@
<template>
<div>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #menu="scope">
<el-button type="text" @click="editRow(scope.row)">修改</el-button>
<el-button type="text" @click="rowDel(scope.row)">删除</el-button>
</template>
<template #menu-left>
<el-button type="primary" @click="handleAdd">新增</el-button>
<el-button type="danger" @click="handleDelete">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport()">导入</el-button>
</template>
</avue-crud>
<batchAddMaterials
v-if="showDialog"
:showDialog="showDialog"
:title="title"
:moldAddMore="moldAddMore"
:checkRow="checkRow"
@closeDialog="closeDialog"
></batchAddMaterials>
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/RemindMsg/downloadExcelTemplateMaterial"
templateName="材料提醒维护模板.xls"
importUrl="/blade-desk/QA/RemindMsg/importExcelMaterial"
@closeDialog="closeDialog"></basic-import>
</div>
</template>
<script>
import {getRemindList,deleteRemind} from '@/api/qualityManagement/remindRedeem/remindRedeem'
import batchAddMaterials from './batchAddMaterials.vue';
import basicImport from '@/components/basic-import/main.vue'
export default {
components: { batchAddMaterials,basicImport },
data() {
return {
loading: false,
form: {},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
query: {},
data: [],
selectionList: [],
showDialog: false,
title: '',
moldAddMore: false,
checkRow: false,
isShowImport:false,
option: {
height: 'auto',
align: 'center',
calcHeight: 32,
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: true,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menuWidth: 100,
dialogWidth: '35%',
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
columnSort: true,
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
menuAlign: 'center',
gridBtn: false,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
searchMenuPosition: 'right',
column: [
{
label: '程式编号',
prop: 'formula',
overHidden: true,
span: 24,
},
{
label: '材料',
prop: 'material',
overHidden: true,
span: 24,
},
],
},
};
},
created() {},
methods: {
//
handleImport() {
this.isShowImport = true
},
searchChange(params, done) {
this.query = params;
this.onLoad();
done();
},
searchReset() {
this.query = {};
this.onLoad();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad();
},
selectionChange(list) {
this.selectionList = list;
},
handleDelete() {
if (this.selectionList.length == 0) {
this.$message.error('请至少选择一条数据!');
return;
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deleteRemind({ids:this.selectionList.map(item => item.id).join(',')}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
});
},
rowDel(row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deleteRemind({ids:row.id}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
});
},
closeDialog(val) {
this.showDialog = false;
this.moldAddMore = false;
this.isShowImport = false;
if (val) {
this.onLoad();
}
},
handleAdd() {
this.title = '新增';
this.moldAddMore = true;
this.showDialog = true;
},
editRow(row){
this.title = '修改';
this.moldAddMore = false;
this.checkRow = row;
this.showDialog = true;
},
onLoad() {
this.loading = true;
getRemindList({
remindMsgType:3,
current:this.page.currentPage,
size:this.page.pageSize,
...this.query,
}).then(res =>{
console.log('res--------------',res)
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [{ programNumber: '1', materials: '1' }];
// this.page.total = this.data.length;
// this.loading = false;
},
},
};
</script>
<style>
</style>

@ -0,0 +1,295 @@
<template>
<div>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #menu-left>
<el-button type="primary" @click="handleAdd">新增</el-button>
<el-button type="danger" @click="handleDelete">删除</el-button>
</template>
<template #menu="scope">
<el-button text @click="editRow(scope.row)">修改</el-button>
<el-button text @click="rowDel(scope.row)">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport()">导入</el-button>
</template>
</avue-crud>
<batchAddPart
v-if="showDialog"
:showDialog="showDialog"
:title="title"
:moldAddMore="moldAddMore"
:checkRow="checkRow"
@closeDialog="closeDialog"
></batchAddPart>
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/RemindMsg/downloadExcelTemplate"
templateName="零件号提醒维护模板.xls"
importUrl="/blade-desk/QA/RemindMsg/importExcel"
@closeDialog="closeDialog"></basic-import>
</div>
</template>
<script>
import {getRemindList,deleteRemind} from '@/api/qualityManagement/remindRedeem/remindRedeem'
import batchAddPart from "./batchAddPart.vue"
import basicImport from '@/components/basic-import/main.vue'
export default {
components:{
batchAddPart,
basicImport
},
data() {
return {
loading:false,
form:{},
showDialog:false,
title:"",
moldAddMore:false,
checkRow:{},
page:{
pageSize: 10,
currentPage: 1,
total: 0,
},
query:{},
data:[],
selectionList:[],
isShowImport:false,
option:{
height: 'auto',
align: 'center',
calcHeight: 32,
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: true,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menuWidth: 100,
dialogWidth: '35%',
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
columnSort: true,
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
menuAlign: 'center',
gridBtn: false,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
searchMenuPosition: 'right',
column: [
{
label: '零件号',
prop: 'partCode',
// search: true,
// sortable: true,
overHidden: true,
// headerAlign: 'center',
// align: 'left',
// searchLabelWidth: 80,
span:24,
rules: [
{
required: true,
message: '请输入零件号',
trigger: 'blur',
},
],
},
{
label:"生产标识",
prop:"qualityLevel",
span:24,
overHidden: true,
},
{
label:"提醒内容",
prop:"remindContent",
type:"textarea",
span:24,
overHidden: true,
},
{
label:"热处理检验",
prop:"isHeatTreatment",
overHidden: true,
span:24,
type:"switch",
dicData:[
{
label:"否",
value:"0"
},
{
label:"是",
value:"1"
},
]
},
{
label:"镀后检验",
prop:"isAfterPlating",
overHidden: true,
span:24,
type:"switch",
dicData:[
{
label:"否",
value:"0"
},
{
label:"是",
value:"1"
},
]
}
]
}
}
},
created() {
},
methods:{
handleImport(){
this.isShowImport = true
},
searchChange(params, done){
this.query = params;
this.onLoad()
done();
},
searchReset(){
this.query = {};
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage;
},
sizeChange(pageSize){
this.page.pageSize = pageSize;
},
refreshChange(){
this.onLoad()
},
selectionChange(list){
this.selectionList = list;
},
handleAdd(){
this.title = '新增'
this.showDialog = true
this.moldAddMore = true
},
editRow(row){
this.checkRow = row
this.title = '编辑'
this.moldAddMore = false
this.showDialog = true
},
closeDialog(val){
this.showDialog = false
this.moldAddMore = false
this.isShowImport = false
if(val){
this.onLoad()
}
},
handleDelete(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据!')
return
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
deleteRemind({ids:this.selectionList.map(item => item.id).join(',')}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
rowDel(row){
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() =>{
deleteRemind({ids:row.id}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
onLoad(){
this.loading = true;
getRemindList({
remindMsgType:0,
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 = [
// {
// partCode:"P001",
// productionMark:"",
// content:"",
// heatTreatment:"1",
// afterPlating:"1"
// }
// ];
// this.page.total = this.data.length;
// this.loading = false;
}
}
}
</script>
<style>
</style>

@ -1,557 +1,39 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form"
v-model:page="page" ref="crud"
v-model:search="searchParams"
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
@row-update="rowUpdate"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad"
:beforeOpen="beforeOpen">
<template #menu-left>
<el-button type="primary" @click="handleAdd()">新增</el-button>
<el-button type="danger" @click="batchDel()">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport()">导入</el-button>
</template>
<template #menu="{ row }">
</template>
<template #partCode-form="{type}">
<el-select v-if="type == 'edit'" remote filterable :remote-method="queryPart"
:loading="partLoading" placeholder="请选择零件" v-model="form.partId"
@change="changePart">
<el-option v-for="item in partData" :key="item.id" :label="item.partCode" :value="item.id"></el-option>
</el-select>
</template>
<template #partCode-search="{ disabled, size }">
<el-select remote filterable :remote-method="queryPart"
:loading="partLoading" placeholder="请选择零件" v-model="searchParams.partId"
>
<el-option v-for="item in partData" :key="item.id" :label="item.partCode" :value="item.id"></el-option>
</el-select>
</template>
<!-- <template #heatTreat="scope">
<el-tag v-if="scope.row.afterPlating" type="success"></el-tag>
<el-tag v-else type="warning"></el-tag>
</template> -->
</avue-crud>
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/RemindMsg/downloadExcelTemplate"
templateName="提醒信息维护模板.xls"
importUrl="/blade-desk/QA/RemindMsg/importExcel"
@closeDialog="closeDialog"></basic-import>
<batch-add v-if="showDialog" :show-dialog="showDialog" @closeDialog="closeDialog"></batch-add>
</basic-container>
<basic-container>
<!-- 消息提醒维护 -->
<el-tabs v-model="tabPosition">
<el-tab-pane label="零件号提醒" name="partCode"></el-tab-pane>
<el-tab-pane label="镀层提醒" name="cladLayer"></el-tab-pane>
<el-tab-pane label="颜色提醒" name="color"></el-tab-pane>
<el-tab-pane label="材料提醒" name="materials"></el-tab-pane>
</el-tabs>
<partReminder v-if="tabPosition == 'partCode'"></partReminder>
<cladLayer v-if="tabPosition == 'cladLayer'"></cladLayer>
<colorReminder v-if="tabPosition == 'color'"></colorReminder>
<materialsReminder v-if="tabPosition == 'materials'"></materialsReminder>
</basic-container>
</template>
<script>
import {
add,
getRole,
getRoleAlias,
getRoleTreeById,
grant,
grantTree,
remove,
update,
} from '@/api/system/role';
import {getList,deleteRemind,editRemind,getPartList,getSubPartList} 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';
import partReminder from './components/partReminder.vue'
import cladLayer from './components/cladLayer.vue'
import colorReminder from "./components/colorReminder.vue"
import materialsReminder from "./components/materialsReminder.vue"
export default {
components: {
basicImport,
batchAdd
partReminder,
cladLayer,
colorReminder,
materialsReminder
},
data() {
return {
partData:[],
partLoading:false,
isShowImport:false,
inBatchesOpen: false,
platingSmallOpen: false,
planOrderArr: [],
isOpen: false,
rowItem: {},
poId: null,
form: {},
box: false,
props: {
label: 'title',
value: 'key',
},
menuGrantList: [],
dataScopeGrantList: [],
apiScopeGrantList: [],
apiGrantList: [],
menuTreeObj: [],
dataScopeTreeObj: [],
apiScopeTreeObj: [],
selectionList: [],
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
showDialog:false,
searchParams:{},
option: {
columnSort: true,
tip: false,
height: 'auto',
calcHeight: 32,
simplePage: false,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: true,
addBtn: false,
editBtn: true,
viewBtn: false,
delBtn: false,
editBtnText: '修改',
labelWidth: 120,
menuWidth: 80,
dialogWidth: 900,
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
excelBtn: true,
index: false,
showOverflowTooltip: true,
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
gridBtn: false,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: 'right',
align: 'center',
column: [
{
label: '零件号',
prop: 'partCode',
// bind: 'dsPart.partCode',
search: true,
sortable: true,
width: 150,
span: 12,
type:'select',
rules: [
{
required: true,
message: '请选择零件号',
trigger: 'blur',
},
],
// dicUrl:'/api/blade-desk/dsPart/getPartList',
// dicUrl:"/api/blade-desk/dsPart/list?current=1&size=100",
// props:{
// label: 'partCode',
// value:'id',
// res:'res.records'
// },
// onChange:val =>{
// console.log('val-------------',val)
// this.form.partName = val && val.item && val.item.partName
// getSubPartList({
// partCode:val && val.item && val.item.partCode
// }).then(res =>{
// console.log('option--------',this.option)
// this.option.column[6].dicData = res.data.data
// // this.form.tableData[index].subList = res.data.data
// })
// }
},
{
label: '零件名称',
prop: 'partName',
// bind: 'dsPart.partName',
search: true,
sortable: true,
width: 150,
editDisabled:true,
span: 12,
},
{
label: '生产标识',
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: '材料',
prop: 'material',
bind: 'dsPart.material',
search: false,
sortable: true,
width: 150,
span: 12,
display: false,
},
{
label: '镀种',
prop: 'plate',
bind: 'dsPart.plate',
search: false,
sortable: true,
width: 150,
span: 12,
display: false,
},
{
label: '工艺一级路线',
prop: 'craftWay',
bind: 'dsPart.craftWay',
search: false,
sortable: true,
width: 150,
span: 12,
display: false,
},
{
label: '子件编码',
prop: 'subPartCode',
type:'select',
search: false,
sortable: true,
width: 150,
span: 12,
type:'select',
dicData:[],
props:{
label:"partCode",
value:"id"
}
},
{
label: '提醒内容',
prop: 'remindContent',
search: false,
type: 'textarea',
rows: 2,
sortable: true,
width: 150,
span: 12,
},
{
label: '参数1名称',
prop: 'param1',
search: false,
sortable: true,
width: 150,
span: 12,
display: false,
},
{
label: '镀金检测',
prop: 'testAu',
search: false,
sortable: true,
width: 150,
span: 12,
display: false,
},
{
label: '镀银检测',
prop: 'testAg',
search: false,
sortable: true,
width: 150,
span: 12,
display: false,
},
{
label: '热处理',
prop: 'isHeatTreatment',
search: false,
sortable: true,
width: 150,
span: 12,
type: 'switch',
dicData: [
{ label: '关', value: '0' },
{ label: '开', value: '1' }
],
},
{
label: '镀后检验',
prop: 'isAfterPlating',
search: false,
sortable: true,
width: 150,
span: 12,
type: 'switch',
dicData: [
{ label: '关', value: '0' },
{ label: '开', value: '1' }
],
},
],
},
data: [],
isRushOpen: false,//
isBatchOpen: false,//
};
},
mounted() {
// this.getPartList()
},
return {
tabPosition: 'partCode'
}
}
}
</script>
methods: {
changePart(val){
let tmp = this.partData.find(item => item.id == val)
this.form.partName = tmp && tmp.partName
getSubPartList({
partCode:val && val.item && val.item.partCode
}).then(res =>{
console.log('option--------',this.option)
this.form.subPartCode = ''
this.option.column[6].dicData = res.data.data
// this.form.tableData[index].subList = res.data.data
})
},
getPartList(){
getPartList({
current:1,
size:50
}).then(res =>{
console.log('partData--------',res)
this.partData = res.data.data.records
})
},
queryPart(query){
this.partLoading = true
console.log('form----------',this.form)
if(query){
getPartList({
current:1,
size:50,
partCode:query
}).then(res =>{
this.partData = res.data.data.records
this.partLoading = false
})
}else{
getPartList({
current:1,
size:50
}).then(res =>{
console.log('partData--------',res)
this.partData = res.data.data.records
let tmp = this.partData.find(item => item.id == this.form.partId)
if(!tmp){
getPartList({
current:1,
size:50,
partCode:this.form.partCode
}).then(res =>{
this.partData = [...this.partData,...res.data.data.records]
this.partLoading = false
})
}else{
this.partLoading = false
}
})
}
},
//
handleAdd(){
console.log('111111111111111')
this.showDialog = true
},
//
handleImport() {
this.isShowImport = true
},
//
batchDel() {
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据')
return
}
this.$confirm('确定将选择数据批量删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deleteRemind({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
closeDialog(val) {
this.isRushOpen = false
this.isBatchOpen = false
this.showDialog = false
this.isShowImport = false
if(val){
this.onLoad()
}
},
initData(roleId) {
getRoleTreeById(roleId).then(res => {
const column = this.findObject(this.option.column, 'parentId');
column.dicData = res.data.data;
});
},
submit() {
const menuList = this.$refs.treeMenu.getCheckedKeys();
const dataScopeList = this.$refs.treeDataScope.getCheckedKeys();
const apiScopeList = this.$refs.treeApiScope.getCheckedKeys();
grant(this.idsArray, menuList, dataScopeList, apiScopeList).then(() => {
this.box = false;
this.$message({
type: 'success',
message: '操作成功!',
});
this.selectionList = [];
this.onLoad(this.page);
});
},
rowSave(row, done, loading) {
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: 'success',
message: '操作成功!',
});
done();
},
error => {
window.console.log(error);
loading();
}
);
},
rowUpdate( row, index, done, loading){
editRemind(row).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.onLoad()
done()
}
})
},
rowDel(row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deleteRemind({
ids:row.id
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
<style>
searchReset() {
this.searchParams = {}
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
console.log('params-------------',params)
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.crud.toggleSelection();
},
beforeOpen(done, type) {
if(type == 'edit'){
if(this.form.partCode && this.form.partCode != ''){
getPartList({
current:1,
size:10,
partCode:this.form.partCode
}).then(res =>{
this.partData = [...this.partData,...res.data.data.records]
done()
})
}else{
done()
}
}
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad();
},
onLoad(page, params = {}) {
this.loading = true;
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
}).catch(err =>{
console.log('err00000000000',err)
this.loading = false
this.data = []
this.page.total = 0
})
},
},
};
</script>
</style>

@ -21,7 +21,9 @@
>
<template #menu-left>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete"> </el-button>
<el-button type="success" icon="el-icon-upload" @click="handleImport">导入 </el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport">导入 </el-button>
</template>
<template #status-desc="{type}">
<p v-if="type == 'edit'" style="color:red">作业槽停用将停止下发槽液任务</p>

@ -84,7 +84,7 @@ export default {
delBtnIcon: " ",
editBtnIcon: " ",
labelWidth: 120,
menuWidth: 150,
menuWidth: 80,
dialogWidth: 600,
dialogClickModal: false,
searchEnter: true,
@ -100,7 +100,7 @@ export default {
searchLabelPosition: "left",
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
menuAlign: "center",
gridBtn: false,
searchMenuPosition: "right",
align: "center",

@ -19,10 +19,10 @@
>
<template #menu-left>
<el-button type="primary" @click="handleAdd">新增 </el-button>
<el-button type="danger" icon="el-icon-delete" @click="handleDelete">删除 </el-button>
<el-button type="danger" @click="handleDelete">删除 </el-button>
</template>
<template #menu-right>
<el-button type="primary" icon="el-icon-printer" @click="handlePrint">打印 </el-button>
<el-button type="primary" @click="handlePrint">打印 </el-button>
<el-button type="primary" @click="handleImport">导入 </el-button>
</template>
</avue-crud>
@ -74,7 +74,7 @@ export default {
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchMenuSpan: 12,
searchIcon: true,
searchIndex: 3,
tree: false,
@ -91,7 +91,7 @@ export default {
delBtnIcon: ' ',
editBtnIcon: ' ',
labelWidth: 120,
menuWidth: 150,
menuWidth: 100,
dialogWidth: 600,
dialogClickModal: false,
searchEnter: true,
@ -106,7 +106,7 @@ export default {
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
menuAlign: 'center',
gridBtn: false,
searchMenuPosition: 'right',
align: 'center',

@ -90,7 +90,7 @@ export default {
filter: true,
search: true,
type: "select",
value: "2",
// value: "2",
searchLabelWidth: 80,
dicData: [
{
@ -236,7 +236,7 @@ export default {
},
//
searchReset() {
this.query = {}
this.query = {taskStatus:'2'}
this.onLoad(this.page)
},
//

@ -76,7 +76,7 @@ export default {
editBtnIcon: " ",
viewBtnText: "详情",
labelWidth: 120,
menuWidth: 120,
menuWidth: 80,
dialogWidth: 1040,
dialogClickModal: false,
searchEnter: true,
@ -92,7 +92,7 @@ export default {
searchLabelPosition: "left",
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
menuAlign: "center",
gridBtn: false,
searchMenuPosition: "right",
align: "center",

@ -88,7 +88,7 @@ export default {
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
menuWidth: 120,
menuWidth: 80,
dialogWidth: 1040,
dialogClickModal: false,
searchEnter: true,
@ -104,7 +104,7 @@ export default {
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
menuAlign: 'center',
gridBtn: false,
searchMenuPosition: 'right',
align: 'center',

@ -495,6 +495,10 @@ export default {
done()
},
searchReset(){
this.query = {}
this.onLoad(this.page)
},
// onLoad() {
// this.loading = true;
// this.data = [

@ -75,7 +75,7 @@ export default {
editBtnIcon: " ",
viewBtnText: "详情",
labelWidth: 120,
menuWidth: 120,
menuWidth: 80,
dialogWidth: 1040,
dialogClickModal: false,
searchEnter: true,
@ -91,7 +91,7 @@ export default {
searchLabelPosition: "left",
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
menuAlign: "center",
gridBtn: false,
searchMenuPosition: "right",
align: "center",
@ -281,9 +281,12 @@ export default {
this.moldAddMore = flag
},
//
closeDialog() {
closeDialog(val) {
this.addOpen = false;
this.onLoad(this.page);
this.isShowImport = false
if(val){
this.onLoad(this.page);
}
},
//
handleSubmitData(data) {

@ -66,7 +66,7 @@ export default {
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
menuWidth: 120,
menuWidth: 80,
dialogWidth: 1040,
dialogClickModal: false,
searchEnter: true,
@ -82,7 +82,7 @@ export default {
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
menuAlign: 'center',
gridBtn: false,
searchMenuPosition: 'right',
align: 'center',
@ -143,6 +143,7 @@ export default {
filter: true,
display: false,
editDisplay:false,
hide:true,
span: 12,
type: 'datetime',
rules: [

@ -90,7 +90,7 @@ export default {
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
menuWidth: 120,
menuWidth: 80,
dialogWidth: 1040,
dialogClickModal: false,
searchEnter: true,
@ -106,7 +106,7 @@ export default {
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
menuAlign: 'center',
gridBtn: false,
searchMenuPosition: 'right',
align: 'center',

Loading…
Cancel
Save