页面问题

dev-scheduling
taozi 4 months ago
parent 023e6c0ca5
commit 2d6b0097a8
  1. 112
      src/views/costStatistics/index.vue
  2. 409
      src/views/flowManagement/managementOfKeyTasks.vue
  3. 40
      src/views/inboundOutboundManagement/components/addEditDialog.vue
  4. 122
      src/views/inboundOutboundManagement/glassCakeOutbound/components/outboundDialog.vue
  5. 66
      src/views/inboundOutboundManagement/glassCakeOutbound/index.vue
  6. 513
      src/views/inboundOutboundManagement/glassCakeOutbound/index原.vue
  7. 198
      src/views/inboundOutboundManagement/otherIssuing/index.vue
  8. 134
      src/views/inboundOutboundManagement/otherIssuing/otherIssuingDailog.vue
  9. 1
      src/views/inboundOutboundManagement/otherReceiving.vue
  10. 75
      src/views/personnelEfficiencyManagement/performanceManagement/performanceDisclosure.vue
  11. 220
      src/views/safetyManagement/wastewater/components/addEditDialogDischargeRec.vue
  12. 79
      src/views/safetyManagement/wastewater/components/addEditDialogDosingRecord.vue
  13. 227
      src/views/safetyManagement/wastewater/components/addEditDialogTestRecord.vue
  14. 2
      src/views/safetyManagement/wastewater/components/dischargeRec.vue
  15. 94
      src/views/statisticalAnalysis/warehouseAnalysis/inventorySummary.vue
  16. 21
      src/views/warehouseManagement/leveragingManagement.vue

@ -3,7 +3,12 @@
<!-- 成本统计 -->
<el-form :inline="true" :model="searchForm">
<el-form-item label="月份">
<el-date-picker v-model="searchForm.monthDate" type="month" placeholder="选择月" required>
<el-date-picker
v-model="searchForm.monthDate"
type="month"
placeholder="选择月"
required
>
</el-date-picker>
</el-form-item>
<el-form-item>
@ -14,10 +19,23 @@
</el-form>
<el-row>
<el-col :span="20">
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad">
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template #menu-left>
<el-button type="primary" @click="openCostCalcDialog">成本计算</el-button>
<!-- <el-button type="primary" @click="isLockClick">锁定/解锁</el-button> -->
@ -30,11 +48,24 @@
</avue-crud>
</el-col>
<el-col :span="4">
<avue-crud :option="detailsOption" :table-loading="loading" :data="data" v-model="form" v-model:page="page"
ref="crud" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
@search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
@size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
style="margin-top: 46px; margin-left: 12px"></avue-crud>
<avue-crud
:option="detailsOption"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@row-update="rowUpdate"
@row-save="rowSave"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
style="margin-top: 46px; margin-left: 12px"
></avue-crud>
</el-col>
</el-row>
<el-dialog
@ -55,18 +86,13 @@
</div>
</template>
</el-dialog>
</basic-container>
</template>
<script>
import ClosedDialog from '../productionManagement/components/closedDialog.vue';
export default {
data() {
return {
selectMonth: '',
openShow: false,
searchForm: {},
loading: false,
@ -100,7 +126,7 @@ export default {
viewBtnText: "详情",
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menu: false,
menuWidth: 220,
dialogWidth: 1200,
dialogClickModal: false,
@ -212,7 +238,7 @@ export default {
viewBtnText: "详情",
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menu: false,
menuWidth: 220,
dialogWidth: 1200,
dialogClickModal: false,
@ -237,7 +263,7 @@ export default {
delBtnIcon: " ",
editBtnIcon: " ",
align: "center",
menu: true,
menu: false,
header: false,
column: [
@ -261,6 +287,16 @@ export default {
},
mounted() {},
methods: {
openCostCalcDialog() {
this.openShow = true
},
CloseDialog() {
this.openShow = false
},
handleRecalculate() {
this.$message.success("重新计算成功")
this.openShow = false
},
selectionChange(val) {
this.selectionList = val;
},
@ -296,50 +332,12 @@ export default {
volumeOutput2: "90",
wcCode: "类型1",
wcCode1: "4",
selectMonth: '1',
},
];
},
openCostCalcDialog() {
this.openShow = true
},
CloseDialog() {
this.openShow = false
}
},
};
</script>
<style scoped>
/* 确保操作列不换行 */
.avue-crud .el-table .cell {
white-space: nowrap;
}
.cost-confirm-dialog .dialog-content {
display: flex;
align-items: center;
padding: 10px 0;
font-size: 16px;
line-height: 24px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.cost-confirm-dialog .el-icon-warning {
color: #E6A23C;
font-size: 24px;
margin-right: 15px;
}
<style></style>
.cost-confirm-dialog .month-highlight {
color: #409EFF;
font-weight: bold;
margin: 0 4px;
}
.cost-confirm-dialog .dialog-footer {
text-align: right;
margin-top: 20px;
}
</style>

@ -1,22 +1,9 @@
<template>
<basic-container>
<!-- 重点工作管理 -->
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset" @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="handleAdd">新增</el-button>
</template>
@ -24,9 +11,7 @@
<template #menu="{ row }">
<el-button type="text" @click="handleView(row)">详情</el-button>
<el-button type="text" @click="handleEdit(row)">修改</el-button>
<el-button type="text" v-if="row.status == 1" @click="checkRow(row)"
>审核</el-button
>
<el-button type="text" v-if="row.status == 1" @click="checkRow(row)">审核</el-button>
<el-button type="text" @click="deleteRow(row)">删除</el-button>
</template>
@ -36,87 +21,23 @@
<template #expand="{ row }">
<el-table :data="row.detailList">
<el-table-column
label="里程碑计划"
align="center"
prop="milestonePlan"
></el-table-column>
<el-table-column
label="里程碑负责人"
align="center"
prop="milestoneMan.userName"
></el-table-column>
<el-table-column
label="里程碑输出物"
align="center"
prop="outputMaterial"
></el-table-column>
<el-table-column
label="里程碑节点"
width="200"
align="center"
prop="milestoneNode"
></el-table-column>
<el-table-column
align="center"
label="执行类型"
prop="executeResultTitle"
></el-table-column>
<el-table-column
align="center"
label="状态"
prop="statusTitle"
></el-table-column>
<el-table-column
align="center"
label="延期时间"
prop="delayTime"
></el-table-column>
<el-table-column
align="center"
label="核查结果"
prop="checkResultTitle"
></el-table-column>
<el-table-column
align="center"
label="核查人"
prop="checkMan.userName"
></el-table-column>
<el-table-column
align="center"
label="评价等级"
prop="gradeTitle"
></el-table-column>
<el-table-column
align="center"
label="评价人"
prop="gradeMan.userName"
></el-table-column>
<el-table-column
align="center"
label="业务领导评价"
prop="evaluate"
></el-table-column>
<el-table-column label="里程碑计划" align="center" prop="milestonePlan"></el-table-column>
<el-table-column label="里程碑负责人" align="center" prop="milestoneMan.userName"></el-table-column>
<el-table-column label="里程碑输出物" align="center" prop="outputMaterial"></el-table-column>
<el-table-column label="里程碑节点" width="200" align="center" prop="milestoneNode"></el-table-column>
<el-table-column align="center" label="执行类型" prop="executeResultTitle"></el-table-column>
<el-table-column align="center" label="状态" prop="statusTitle"></el-table-column>
<el-table-column align="center" label="延期时间" prop="delayTime"></el-table-column>
<el-table-column align="center" label="核查结果" prop="checkResultTitle"></el-table-column>
<el-table-column align="center" label="核查人" prop="checkMan.userName"></el-table-column>
<el-table-column align="center" label="评价等级" prop="gradeTitle"></el-table-column>
<el-table-column align="center" label="评价人" prop="gradeMan.userName"></el-table-column>
<el-table-column align="center" label="业务领导评价" prop="evaluate"></el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button
type="text"
v-if="scope.row.status == 3"
@click="executeRow(row, scope.row)"
>执行</el-button
>
<el-button
type="text"
v-if="scope.row.status == 4"
@click="auditRow(row, scope.row)"
>核查</el-button
>
<el-button
type="text"
v-if="scope.row.status == 6"
@click="examineRow(row, scope.row)"
>核准</el-button
>
<el-button type="text" v-if="scope.row.status == 3" @click="executeRow(row, scope.row)">执行</el-button>
<el-button type="text" v-if="scope.row.status == 4" @click="auditRow(row, scope.row)">核查</el-button>
<el-button type="text" v-if="scope.row.status == 6" @click="examineRow(row, scope.row)">核准</el-button>
</template>
</el-table-column>
</el-table>
@ -128,10 +49,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="projectName">
<el-input
:disabled="title == '详情'"
v-model="addForm.projectName"
></el-input>
<el-input :disabled="title == '详情'" v-model="addForm.projectName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
@ -154,33 +72,21 @@
<el-row>
<el-col :span="24">
<el-form-item label="项目背景" prop="projectBackcloth">
<el-input
:disabled="title == '详情'"
type="textarea"
v-model="addForm.projectBackcloth"
></el-input>
<el-input :disabled="title == '详情'" type="textarea" v-model="addForm.projectBackcloth"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="项目目标" prop="projectTarget">
<el-input
:disabled="title == '详情'"
type="textarea"
v-model="addForm.projectTarget"
></el-input>
<el-input :disabled="title == '详情'" type="textarea" v-model="addForm.projectTarget"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="预期效果" prop="desiredResult">
<el-input
:disabled="title == '详情'"
type="textarea"
v-model="addForm.desiredResult"
></el-input>
<el-input :disabled="title == '详情'" type="textarea" v-model="addForm.desiredResult"></el-input>
</el-form-item>
</el-col>
</el-row>
@ -205,10 +111,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="项目支持人" prop="projectSupportMan.userId">
<el-select
:disabled="title == '详情'"
v-model="addForm.projectSupportMan.userId"
>
<el-select :disabled="title == '详情'" v-model="addForm.projectSupportMan.userId">
<el-option label="测试" :value="521"></el-option>
<el-option label="支持人二" value="2"></el-option>
</el-select>
@ -216,59 +119,35 @@
</el-col>
<el-col :span="8">
<el-form-item label="项目开始时间" prop="projectStartTime">
<el-date-picker
:disabled="title == '详情'"
style="width: 100%"
v-model="addForm.projectStartTime"
type="date"
placeholder="选择日期"
>
<el-date-picker :disabled="title == '详情'" style="width: 100%" v-model="addForm.projectStartTime"
type="date" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目结束预期时间" prop="projectDesiredEnd">
<el-date-picker
:disabled="title == '详情'"
style="width: 100%"
v-model="addForm.projectDesiredEnd"
type="date"
placeholder="选择日期"
>
<el-date-picker :disabled="title == '详情'" style="width: 100%" v-model="addForm.projectDesiredEnd"
type="date" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="margin: 10px 0" v-if="title == '新增' || title == '修改'">
<el-button type="primary" icon="el-icon-plus" @click="openDialog()"
>插入一行</el-button
>
<el-button plain type="danger" @click="delTable">删除选择行</el-button>
<el-button type="primary" icon="el-icon-plus" @click="openDialog()">插入一行</el-button>
<!-- <el-button plain type="danger" @click="delTable">删除选择行</el-button> -->
<!-- <el-button type="primary" @click="handleSave">保存</el-button> -->
</div>
<!-- 插入一行 -->
<el-table :data="addForm.detailList" ref="detailTable">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" width="80" label="序号"></el-table-column>
<el-table-column
align="center"
:width="title == '详情' ? '120' : ''"
label="里程碑计划"
prop="milestonePlan"
>
<el-table-column align="center" :width="title == '详情' ? '120' : ''" label="里程碑计划">
<template #default="scope">
<template v-if="title != '详情'">
<el-form-item
:prop="'detailList.' + scope.$index + '.milestonePlan'"
:rules="{ required: true, message: '请输入里程碑计划', trigger: ['blur'] }"
label-width="0"
>
<el-input
v-model="scope.row.milestonePlan"
placeholder="请输入里程碑计划"
@input="() => {$refs.addForm.validateField('detailList.' + scope.$index + '.milestonePlan')}"
></el-input>
<el-form-item label-width="0">
<el-input v-model="scope.row.milestonePlan" placeholder="请输入里程碑计划"
@input="() => { $refs.addForm.validateField('detailList.' + scope.$index + '.milestonePlan') }"></el-input>
</el-form-item>
</template>
<template v-else>
@ -276,19 +155,11 @@
</template>
</template>
</el-table-column>
<el-table-column
align="center"
:width="title == '详情' ? '120' : ''"
label="里程碑负责人"
prop="milestoneMan.userId"
>
<el-table-column align="center" :width="title == '详情' ? '120' : ''" label="里程碑负责人" prop="milestoneMan.userId">
<template #default="scope">
<template v-if="title != '详情'">
<el-form-item
:prop="'detailList.' + scope.$index + '.milestoneMan.userId'"
:rules="{ required: true, message: '请选择里程碑负责人', trigger: 'change' }"
label-width="0"
>
<el-form-item :prop="'detailList.' + scope.$index + '.milestoneMan.userId'"
:rules="{ required: true, message: '请选择里程碑负责人', trigger: 'change' }" label-width="0">
<el-select v-model="scope.row.milestoneMan.userId" placeholder="请选择里程碑负责人">
<el-option label="负责人一" :value="1"></el-option>
<el-option label="负责人二" :value="2"></el-option>
@ -300,19 +171,11 @@
</template>
</template>
</el-table-column>
<el-table-column
align="center"
:width="title == '详情' ? '150' : ''"
label="里程碑输出物"
prop="outputMaterial"
>
<el-table-column align="center" :width="title == '详情' ? '150' : ''" label="里程碑输出物" prop="outputMaterial">
<template #default="scope">
<template v-if="title != '详情'">
<el-form-item
:prop="'detailList.' + scope.$index + '.outputMaterial'"
:rules="{ required: true, message: '请输入里程碑输出物', trigger: 'blur' }"
label-width="0"
>
<el-form-item :prop="'detailList.' + scope.$index + '.outputMaterial'"
:rules="{ required: true, message: '请输入里程碑输出物', trigger: 'blur' }" label-width="0">
<el-input v-model="scope.row.outputMaterial" placeholder="请输入里程碑输出物"></el-input>
</el-form-item>
</template>
@ -321,25 +184,13 @@
</template>
</template>
</el-table-column>
<el-table-column
align="center"
:width="title == '详情' ? '180' : ''"
label="里程碑节点"
prop="milestoneNode"
>
<el-table-column align="center" :width="title == '详情' ? '180' : ''" label="里程碑节点" prop="milestoneNode">
<template #default="scope">
<template v-if="title != '详情'">
<el-form-item
:prop="'detailList.' + scope.$index + '.milestoneNode'"
:rules="{ required: true, message: '请选择里程碑节点', trigger: 'change' }"
label-width="0"
>
<el-date-picker
v-model="scope.row.milestoneNode"
type="datetime"
placeholder="选择日期时间"
style="width: 100%"
/>
<el-form-item :prop="'detailList.' + scope.$index + '.milestoneNode'"
:rules="{ required: true, message: '请选择里程碑节点', trigger: 'change' }" label-width="0">
<el-date-picker v-model="scope.row.milestoneNode" type="datetime" placeholder="选择日期时间"
style="width: 100%" />
</el-form-item>
</template>
<template v-else>
@ -347,52 +198,22 @@
</template>
</template>
</el-table-column>
<el-table-column
v-if="title == '详情'"
align="center"
label="执行类型"
prop="executeResultTitle"
></el-table-column>
<el-table-column
v-if="title == '详情'"
align="center"
label="延期时间"
prop="delayTime"
></el-table-column>
<el-table-column
v-if="title == '详情'"
align="center"
label="核查结果"
prop="checkResultTitle"
></el-table-column>
<el-table-column
v-if="title == '详情'"
align="center"
label="核查人"
prop="checkMan.userName"
></el-table-column>
<el-table-column
v-if="title == '详情'"
align="center"
label="评价等级"
prop="gradeTitle"
></el-table-column>
<el-table-column
v-if="title == '详情'"
align="center"
label="评价人"
prop="gradeMan.userName"
></el-table-column>
<el-table-column
v-if="title == '详情'"
width="200"
align="center"
label="业务领导评价"
prop="evaluate"
></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="执行类型" prop="executeResultTitle"></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="延期时间" prop="delayTime"></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="核查结果" prop="checkResultTitle"></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="核查人" prop="checkMan.userName"></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="评价等级" prop="gradeTitle"></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="评价人" prop="gradeMan.userName"></el-table-column>
<el-table-column v-if="title == '详情'" width="200" align="center" label="业务领导评价"
prop="evaluate"></el-table-column>
<el-table-column v-if="title == '详情'" align="center" label="操作">
<el-button type="text">附件</el-button>
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button plain type="danger" @click="delTable(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<span class="dialog-footer">
@ -411,11 +232,7 @@
</el-select>
</el-form-item>
<el-form-item label="审核意见" prop="checkOpinion">
<el-input
type="textarea"
placeholder="请输入审核意见"
v-model="checkForm.checkOpinion"
></el-input>
<el-input type="textarea" placeholder="请输入审核意见" v-model="checkForm.checkOpinion"></el-input>
</el-form-item>
</el-form>
<template #footer>
@ -427,12 +244,7 @@
</el-dialog>
<!-- 执行/核查/核准弹窗 -->
<el-dialog append-to-body :title="subTitle" v-model="executeDialog">
<el-form
:model="executeForm"
:rules="executeRules"
ref="executeForm"
label-width="100"
>
<el-form :model="executeForm" :rules="executeRules" ref="executeForm" label-width="100">
<el-form-item label="项目名称">
<el-input disabled v-model="detailForm.projectName"></el-input>
</el-form-item>
@ -446,78 +258,44 @@
<el-input disabled v-model="executeForm.milestoneMan.userName"></el-input>
</el-form-item>
<el-form-item label="项目目标">
<el-input
disabled
v-model="executeForm.fmProjectApplication.projectTarget"
></el-input>
<el-input disabled v-model="executeForm.fmProjectApplication.projectTarget"></el-input>
</el-form-item>
<el-form-item label="预期效果">
<el-input
disabled
v-model="executeForm.fmProjectApplication.desiredResult"
></el-input>
<el-input disabled v-model="executeForm.fmProjectApplication.desiredResult"></el-input>
</el-form-item>
<el-form-item label="项目背景">
<el-input
disabled
v-model="executeForm.fmProjectApplication.projectBackcloth"
></el-input>
<el-input disabled v-model="executeForm.fmProjectApplication.projectBackcloth"></el-input>
</el-form-item>
<el-form-item label="里程碑节点">
<el-input disabled v-model="executeForm.milestoneNode"></el-input>
</el-form-item>
<el-form-item label="执行类型" prop="executeResult">
<el-select
:disabled="subTitle == '核查' || subTitle == '核准'"
v-model="executeForm.executeResult"
>
<el-select :disabled="subTitle == '核查' || subTitle == '核准'" v-model="executeForm.executeResult">
<el-option label="延期" :value="1"></el-option>
<el-option label="终止" :value="2"></el-option>
<el-option label="完成" :value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="延期时间" v-if="executeForm.executeResult == 1">
<el-date-picker
:disabled="subTitle == '核查' || subTitle == '核准'"
style="width: 100%"
v-model="executeForm.delayTime"
type="datetime"
placeholder="选择日期时间"
/>
<el-date-picker :disabled="subTitle == '核查' || subTitle == '核准'" style="width: 100%"
v-model="executeForm.delayTime" type="datetime" placeholder="选择日期时间" />
</el-form-item>
<el-form-item label="里程碑描述" prop="milestoneMemo">
<el-input
:disabled="subTitle == '核查' || subTitle == '核准'"
type="textarea"
v-model="executeForm.milestoneMemo"
></el-input>
<el-input :disabled="subTitle == '核查' || subTitle == '核准'" type="textarea"
v-model="executeForm.milestoneMemo"></el-input>
</el-form-item>
<el-form-item label="里程碑进展" prop="evolve">
<el-input
:disabled="subTitle == '核查' || subTitle == '核准'"
type="textarea"
v-model="executeForm.evolve"
></el-input>
<el-input :disabled="subTitle == '核查' || subTitle == '核准'" type="textarea"
v-model="executeForm.evolve"></el-input>
</el-form-item>
<el-form-item label="下一步计划" prop="lastPlan">
<el-input
:disabled="subTitle == '核查' || subTitle == '核准'"
type="textarea"
v-model="executeForm.lastPlan"
></el-input>
<el-input :disabled="subTitle == '核查' || subTitle == '核准'" type="textarea"
v-model="executeForm.lastPlan"></el-input>
</el-form-item>
<el-form-item label="附件" v-if="subTitle == '执行' || subTitle == '核查' || subTitle == '核准'">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList"
>
<el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3"
:on-exceed="handleExceed" :file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">不能上传 exe 附件且不超过 20M</div>
</el-upload>
@ -543,10 +321,7 @@
<el-option label="不通过" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item
label="审核人"
v-if="subTitle == '核查' && executeForm.checkResult == 1"
>
<el-form-item label="审核人" v-if="subTitle == '核查' && executeForm.checkResult == 1">
<el-select v-model="executeForm.userId">
<el-option label="审核人一" value="1"></el-option>
<el-option label="审核人二" value="2"></el-option>
@ -563,11 +338,7 @@
</el-form-item>
<el-form-item label="审核意见" prop="checkOpinion" label-width="80px">
<el-input
type="textarea"
placeholder="请输入审核意见"
v-model="checkForm.checkOpinion"
></el-input>
<el-input type="textarea" placeholder="请输入审核意见" v-model="checkForm.checkOpinion"></el-input>
</el-form-item>
</el-form>
<template #footer>
@ -594,6 +365,7 @@ export default {
subTitle: "执行",
detailForm: {},
checkForm: {},
detailListSelectList: [],
checkRules: {
checkResult: [{ required: true, message: "请选择审核结果", trigger: "blur" }],
@ -945,7 +717,11 @@ export default {
},
// /
submitForm() {
this.addForm.detailList.forEach((item, index) => {
if (item.milestonePlan == '' || item.milestonePlan == null) {
this.$message.error(`请填写第${index + 1}项的里程碑计划`);
}
})
},
//
checkRow() {
@ -1020,18 +796,15 @@ export default {
this.$message.success('删除成功');
}).catch(() => { });
},
delTable() {
//
const selection = this.$refs.detailTable?.getSelection();
if (!selection || selection.length === 0) {
this.$message.warning('请先选择要删除的行');
return;
}
//
this.addForm.detailList = this.addForm.detailList.filter(
row => !selection.some(selected => selected.keyValue === row.keyValue)
);
delTable(index) {
this.$confirm('确定删除该条数据么?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.addForm.detailList.splice(index, 1);
this.$message.success('删除成功');
}).catch(() => { });
},
onLoad() {
this.data = [

@ -215,9 +215,47 @@ export default {
this.openShow = this.showDialog
},
methods: {
submit() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
let hasInvalidRow = false
for (let i = 0; i < this.tableData.length; i++) {
const row = this.tableData[i]
if (!row.goodsId) {
this.$message.warning(`${i + 1}行:请选择物料编号`)
hasInvalidRow = true
break;
}
if (!row.buyQty || row.buyQty <= 0) {
this.$message.warning(`${i + 1}行:请输入有效的数量`)
hasInvalidRow = true
break;
}
if (row.goodsId === '2' && !row.buyQty) {
this.$message.warning(`${i + 1}行:玻璃饼物料必须填写车间订单号`)
hasInvalidRow = true
break
}
}
if (!hasInvalidRow) {
this.$refs.ruleForm.resetFields()
this.tableData = []
this.openShow = true
this.$message.success('添加成功')
}
} else {
this.$message.error('请填写所有必填项')
return false
}
});
},
//
deleteTable(index) {
this.tableData.splice(index, 1)
},
closeDialog() {
this.openShow = false
this.$emit('closeDialog');
this.$emit('closeDialog')
},
//
addTable() {

@ -1,5 +1,5 @@
<template>
<el-dialog title="批量出库" append-to-body :modelValue="openShow" width="90%" @close="closeDialog" fullscreen>
<el-dialog :title="rowItem.isBatch ? '批量出库' : '出库'" append-to-body :modelValue="openShow" width="90%" @close="closeDialog" fullscreen>
<div style="height: 50px;">
<el-input v-model="formInline.orderId" placeholder="扫描出库单号条形码" @keyup.enter.native="query" style="width: 200px;float: left;"></el-input>
<el-button type="danger" @click="delFn" style="float: right;">删除</el-button>
@ -8,7 +8,8 @@
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@search-change="searchChange" @search-reset="searchReset" :before-open="beforeOpen"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad" @row-save="rowSave">
@refresh-change="refreshChange" @on-load="onLoad" @row-save="rowSave"
@cell-click="cellClick">
</avue-crud>
@ -56,7 +57,10 @@ export default {
selection: true,
viewBtn: false,
delBtn: false,
editBtn: false,
editBtn: true,
cellEdit: true,
menu: true,
editBtnText: '修改',
editBtnIcon: ' ',
delBtnIcon: ' ',
@ -130,6 +134,19 @@ addBtnIcon: ' ',
label: '库位',
prop: 'goodsKuwei',
search: false,
type: 'select',
dicData: [
{ label: '库位', value: '库位一' },
{ label: '库位二', value: '库位二' },
{ label: '库位三', value: '库位三' },
{ label: '库位四', value: '库位四' },
],
// rules: [
// { required: true, message: '', trigger: 'change' }
// ],
editDisabled: false,
addDisabled: false,
cell: true
},
{
label: '出库数量',
@ -146,7 +163,13 @@ addBtnIcon: ' ',
{ label: '型号B', value: 'B' },
{ label: '型号C', value: 'C' },
{ label: '型号D', value: 'D' },
]
],
// rules: [
// { required: true, message: '', trigger: 'change' }
// ],
editDisabled: false,
addDisabled: false,
cell: true
},
{
label: '实际库位',
@ -154,11 +177,12 @@ addBtnIcon: ' ',
search: false,
type: 'select',
dicData: [
{ label: '库位', value: '库位一' },
{ label: '库位', value: '库位一' },
{ label: '库位二', value: '库位二' },
{ label: '库位三', value: '库位三' },
{ label: '库位四', value: '库位四' },
]
],
},
]
@ -213,9 +237,8 @@ addBtnIcon: ' ',
this.$emit('closeDialog');
},
submit() {
// 使
const formData = this.data.length > 0 ? {...this.data[0], ...this.rowItem} : {...this.rowItem};
this.$emit('confirmOutbound', formData);
this.$message.success('提交成功')
this.openShow = false
},
delFn() {
this.$confirm('确定将选择数据删除?', {
@ -235,42 +258,91 @@ addBtnIcon: ' ',
// this.$refs.crudScope.toggleSelection();
});
},
cellClick(row, column, cell, event) {
if (column.property === 'actualPartCode' || column.property === 'goodsKuwei') {
this.$refs.crud.rowCellEdit(row, column);
}
},
onLoad() {
// 使rowItem使
if (this.rowItem && this.rowItem.brCode) {
if (this.rowItem) {
if (this.rowItem.isBatch && this.rowItem.items) {
this.data = this.rowItem.items.map(item => ({
...item,
}));
}
else if (this.rowItem.brCode) {
this.data = [{
...this.rowItem,
//
actualPartCode: this.rowItem.actualPartCode || 'A',
actualKuwei: this.rowItem.actualKuwei || '库位一'
}];
} else {
this.data = [
{
brCode: 'aaaa',
woCode: 'WO-090899899',
brCode: 'BR2023001',
woCode: 'WO-2023001',
partCode: 'E6-78787-E1',
partName: '零件一',
batchNo: '9098900',
okNum: '88',
c_materiel_id: '89',
partNames: '8989',
xuqiushuliang: 99,
chukushuliang: 67,
goodbatchNo: '898989',
bsStoreRoomSet: '仓库',
goodsKuwei: '库位一',
partName: '光纤连接器组件',
batchNo: 'B2023001',
okNum: '100',
c_materiel_id: 'MAT001',
partNames: '光纤连接器',
xuqiushuliang: 100,
chukushuliang: 80,
goodbatchNo: 'GB2023001',
bsStoreRoomSet: 'A区仓库',
goodsKuwei: 'A-01-01',
status: 1,
times: '2025-09-08',
times: '2023-06-15',
//
actualPartCode: 'A',
actualKuwei: '库位一'
},
{
brCode: 'BR2023002',
woCode: 'WO-2023002',
partCode: 'E6-78787-E2',
partName: '光纤适配器组件',
batchNo: 'B2023002',
okNum: '150',
c_materiel_id: 'MAT002',
partNames: '光纤适配器',
xuqiushuliang: 150,
chukushuliang: 120,
goodbatchNo: 'GB2023002',
bsStoreRoomSet: 'B区仓库',
goodsKuwei: 'B-02-03',
status: 1,
times: '2023-06-16',
actualPartCode: 'B',
actualKuwei: '库位二'
},
{
brCode: 'BR2023003',
woCode: 'WO-2023003',
partCode: 'E6-78787-E3',
partName: '光纤耦合器组件',
batchNo: 'B2023003',
okNum: '200',
c_materiel_id: 'MAT003',
partNames: '光纤耦合器',
xuqiushuliang: 200,
chukushuliang: 180,
goodbatchNo: 'GB2023003',
bsStoreRoomSet: 'C区仓库',
goodsKuwei: 'C-03-02',
status: 1,
times: '2023-06-17',
actualPartCode: 'C',
actualKuwei: '库位三'
}
];
}
this.page.total = this.data.length
}
}
}
}
</script>
<style lang="scss" scoped></style>

@ -1,23 +1,10 @@
<template>
<basic-container>
<!-- 领料出库 -->
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
:before-open="beforeOpen"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
@row-save="rowSave"
>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@search-change="searchChange" @search-reset="searchReset" :before-open="beforeOpen"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad" @row-save="rowSave">
<template #menu-left>
<el-button type="primary" @click="addFn">新增出库</el-button>
<el-button type="primary" @click="handleOut">批量打印</el-button>
@ -26,39 +13,22 @@
</template>
<template #menu="scope">
<el-button type="text" @click="detailsFn(scope.row)">详情 </el-button>
<el-button type="text" @click="editFn(scope.row)" v-if="scope.row.status == '1'"
>打印
<el-button type="text" @click="editFn(scope.row)" v-if="scope.row.status == '1'">打印
</el-button>
<el-button
type="text"
@click="ouboundFn(scope.row)"
v-if="scope.row.status == '1'"
>出库
<el-button type="text" @click="ouboundFn(scope.row)" v-if="scope.row.status == '1'">出库
</el-button>
<el-button type="text" @click="handleEdit(scope.row)" v-if="scope.row.status == '1'"
>修改
<el-button type="text" @click="handleEdit(scope.row)" v-if="scope.row.status == '1'">修改
</el-button>
<el-button type="text" @click="handleDelete(scope.row)" v-if="scope.row.status == '1'"
>删除
<el-button type="text" @click="handleDelete(scope.row)" v-if="scope.row.status == '1'">删除
</el-button>
<el-button type="text" @click="handleScrap(scope.row)" v-if="scope.row.status == '2'"
>报废
<el-button type="text" @click="handleScrap(scope.row)" v-if="scope.row.status == '2'">报废
</el-button>
</template>
</avue-crud>
<addOut v-if="isAddOpen" :showDialog="isAddOpen" @closeDialog="closeDialog"> </addOut>
<detailsDialog
v-if="isDetailsOpen"
:showDialog="isDetailsOpen"
@closeDialog="closeDialog"
:rowItem="rowItem"
>
<detailsDialog v-if="isDetailsOpen" :showDialog="isDetailsOpen" @closeDialog="closeDialog" :rowItem="rowItem">
</detailsDialog>
<outboundDialog
v-if="isOutboundOpen"
:showDialog="isOutboundOpen"
@closeDialog="closeDialog"
></outboundDialog>
<outboundDialog v-if="isOutboundOpen" :showDialog="isOutboundOpen" :rowItem="rowItem" @closeDialog="closeDialog" @confirmOutbound="confirmOutbound"></outboundDialog>
</basic-container>
</template>
<script>
@ -405,14 +375,12 @@ export default {
},
//
ouboundFn(row) {
this.$confirm("确定是否出库?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
})
.catch(() => {});
this.isOutboundOpen = true;
this.rowItem = {
...row,
// actualPartCode: row.actualPartCode || 'A',
// actualKuwei: row.actualKuwei || ''
};
},
//
handleEdit(row) {

@ -0,0 +1,513 @@
<template>
<basic-container>
<!-- 领料出库 -->
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@search-change="searchChange" @search-reset="searchReset" :before-open="beforeOpen"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad" @row-save="rowSave">
<template #menu-left>
<el-button type="primary" @click="addFn">新增出库</el-button>
<el-button type="primary" @click="handleOut">批量打印</el-button>
<el-button type="primary" @click="outboundFn">批量出库</el-button>
<el-button type="primary" @click="closeOrder" plain>批量关闭</el-button>
</template>
<template #menu="scope">
<el-button type="text" @click="detailsFn(scope.row)">详情 </el-button>
<el-button type="text" @click="editFn(scope.row)" v-if="scope.row.status == '1'">打印
</el-button>
<el-button type="text" @click="ouboundFn(scope.row)" v-if="scope.row.status == '1'">出库
</el-button>
<el-button type="text" @click="handleEdit(scope.row)" v-if="scope.row.status == '1'">修改
</el-button>
<el-button type="text" @click="handleDelete(scope.row)" v-if="scope.row.status == '1'">删除
</el-button>
<el-button type="text" @click="handleScrap(scope.row)" v-if="scope.row.status == '2'">报废
</el-button>
</template>
</avue-crud>
<addOut v-if="isAddOpen" :showDialog="isAddOpen" @closeDialog="closeDialog"> </addOut>
<detailsDialog v-if="isDetailsOpen" :showDialog="isDetailsOpen" @closeDialog="closeDialog" :rowItem="rowItem">
</detailsDialog>
<outboundDialog v-if="isOutboundOpen" :showDialog="isOutboundOpen" :rowItem="rowItem" @closeDialog="closeDialog" @confirmOutbound="confirmOutbound"></outboundDialog>
</basic-container>
</template>
<script>
import addOut from "./components/addDialog.vue";
import detailsDialog from "./components/detailsDialog.vue";
import outboundDialog from "./components/outboundDialog.vue";
export default {
components: {
addOut,
detailsDialog,
outboundDialog,
},
data() {
return {
loading: false,
data: [],
form: {},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
selectionList: [],
option: {
columnSort: true,
tip: false,
height: "auto",
align: "center",
calcHeight: 32,
simplePage: false,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: false,
selection: true,
viewBtn: false,
delBtn: false,
editBtn: false,
editBtnText: "修改",
editBtnIcon: " ",
delBtnIcon: " ",
addBtn: false,
labelWidth: 140,
searchLabelWidth: 120,
menu: true,
menuWidth: 300,
menuBtn: true,
menuBtnIcon: 'el-icon-menu',
menuBtnTitle: '操作',
menuList: [
{ label: '详情', value: 'details' },
{ label: '打印', value: 'print', display: (row) => row.status == '1' },
{ label: '出库', value: 'outbound', display: (row) => row.status == '1' },
{ label: '修改', value: 'edit', display: (row) => row.status == '1' },
{ label: '删除', value: 'delete', display: (row) => row.status == '1' },
{ label: '报废', value: 'scrap', display: (row) => row.status == '2' }
],
dialogWidth: 1200,
dialogClickModal: false,
searchEnter: true,
excelBtn: true,
gridBtn: false,
searchShowBtn: false,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
gridBtn: false,
searchMenuPosition: "right",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
column: [
{
label: "出库单号",
prop: "brCode",
search: false,
width: 120,
searchLabelWidth: 75,
},
{
label: "车间订单号",
prop: "woCode",
search: true,
width: 120,
searchLabelWidth: 100,
},
{
label: "零件号",
prop: "partCode",
search: true,
width: 120,
searchLabelWidth: 70,
},
{
label: "零件名称",
prop: "partName",
search: false,
width: 120,
},
{
label: "批次号",
prop: "batchNo",
search: false,
width: 120,
},
{
label: "流程卡号",
prop: "processCardNo",
search: true,
width: 120,
},
{
label: "生产数量",
prop: "okNum",
search: false,
width: 120,
},
{
label: "物料编号",
prop: "c_materiel_id",
search: true,
width: 120,
},
{
label: "物料名称",
prop: "partNames",
search: false,
width: 120,
},
{
label: "物料需求数量",
prop: "xuqiushuliang",
search: false,
width: 120,
},
{
label: "库房",
prop: "bsStoreRoomSet",
search: false,
width: 120,
},
{
label: "库位",
prop: "goodsKuwei",
search: false,
width: 120,
},
{
label: "是否印字",
prop: "isPrint",
search: false,
width: 120,
type: "select",
dicData: [
{
label: "是",
value: "1"
},
{
label: "否",
value: "0"
}
]
},
{
label: "粉重",
prop: "powderWeight",
search: false,
width: 120,
},
{
label: "材料号",
prop: "materialCode",
search: false,
width: 120,
},
{
label: "成型厚度",
prop: "chengxinghoudu",
search: false,
width: 120,
},
{
label: "炉批号",
prop: "luPiHao",
search: false,
width: 120,
},
{
label: "物料出库数量",
prop: "chukushuliang",
search: false,
width: 120,
},
// {
// label: "",
// prop: "goodbatchNo",
// search: false,
// width: 120,
// },
{
label: "状态",
prop: "status",
search: true,
width: 120,
searchLabelWidth: 60,
type: "select",
dicData: [
{
label: "待出库",
value: "1",
},
{
label: "已出库",
value: "2",
},
{
label: "已报废",
value: "3",
},
{
label: "订单完成",
value: "4",
},
],
},
{
label: "预计领料日期",
prop: "goodsCode",
search: true,
width: 120,
searchLabelWidth: 100,
hide: true,
type: "date",
searchRange: true,
startPlaceholder: "开始时间",
endPlaceholder: "结束时间",
},
{
label: "预计使用时间",
prop: "times",
search: false,
width: 120,
},
{
label: "创建时间",
prop: "createTime",
search: false,
width: 120,
type: "datetime",
},
{
label: "创建人",
prop: "createUserName",
search: false,
width: 120,
},
{
label: "出库时间",
prop: "outboundTime",
search: false,
width: 120,
type: "datetime",
},
{
label: "出库人",
prop: "outboundUserName",
search: false,
width: 120,
},
],
},
isAddOpen: false,
isDetailsOpen: false,
isOutboundOpen: false,
rowItem: {},
};
},
mounted() { },
methods: {
addFn() {
this.isAddOpen = true;
},
detailsFn(row) {
this.isDetailsOpen = true;
this.rowItem = row;
},
outboundFn() {
this.isOutboundOpen = true;
},
closeDialog() {
this.isAddOpen = false;
this.isDetailsOpen = false;
this.isOutboundOpen = false;
},
//
selectionChange(list) {
this.selectionList = list;
},
//
handleOut() {
// this.$confirm('?', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'warning',
// })
// .then(() => {
// return remove(row.id);
// })
// .then(() => {
// this.onLoad(this.page);
// this.$message({
// type: 'success',
// message: '!',
// });
// });
},
closeOrder() {
this.$confirm("确定是否关闭订单?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
// return remove(row.id);
})
.then(() => {
// this.onLoad(this.page);
// this.$message({
// type: 'success',
// message: '!',
// });
});
},
//
ouboundFn(row) {
//
this.isOutboundOpen = true;
//
this.rowItem = {
...row,
actualPartCode: row.actualPartCode || 'A',
actualKuwei: row.actualKuwei || '库位一'
};
},
//
handleEdit(row) {
this.isAddOpen = true;
},
//
handleDelete(row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
},
//
handleScrap(row) {
this.$confirm('确定将此记录标记为报废?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const index = this.data.findIndex(item => item.brCode === row.brCode);
if (index !== -1) {
this.data[index].status = 3;
this.data[index].statusName = "已报废";
this.$message.success('标记报废成功');
}
}).catch(() => { });
},
onLoad() {
this.data = [
{
brCode: "aaaa",
woCode: "WO-090899899",
partCode: "E6-78787-E1",
partName: "零件一",
batchNo: "9098900",
okNum: "88",
c_materiel_id: "89",
partNames: "8989",
xuqiushuliang: 99,
chukushuliang: 67,
goodbatchNo: "898989",
bsStoreRoomSet: "仓库一",
goodsKuwei: "库位一",
status: 1,
statusName: "待出库",
times: "2025-09-08",
},
{
brCode: "aaaa",
woCode: "WO-090899899",
partCode: "E6-78787-E1",
partName: "零件一",
batchNo: "9098900",
okNum: "88",
c_materiel_id: "89",
partNames: "8989",
xuqiushuliang: 99,
chukushuliang: 67,
goodbatchNo: "898989",
bsStoreRoomSet: "仓库一",
goodsKuwei: "库位一",
status: 2,
statusName: "已出库",
times: "2025-09-08",
},
{
brCode: "aaaa",
woCode: "WO-090899899",
partCode: "E6-78787-E1",
partName: "零件一",
batchNo: "9098900",
okNum: "88",
c_materiel_id: "89",
partNames: "8989",
xuqiushuliang: 99,
chukushuliang: 67,
goodbatchNo: "898989",
bsStoreRoomSet: "仓库一",
goodsKuwei: "库位一",
status: 1,
statusName: "",
times: "2025-09-08",
},
{
brCode: "aaaa",
woCode: "WO-090899899",
partCode: "E6-78787-E1",
partName: "零件一",
batchNo: "9098900",
okNum: "88",
c_materiel_id: "89",
partNames: "8989",
xuqiushuliang: 99,
chukushuliang: 67,
goodbatchNo: "898989",
bsStoreRoomSet: "仓库一",
goodsKuwei: "库位一",
status: 4,
statusName: "订单完成",
times: "2025-09-08",
},
{
brCode: "aaaa",
woCode: "WO-090899899",
partCode: "E6-78787-E1",
partName: "零件一",
batchNo: "9098900",
okNum: "88",
c_materiel_id: "89",
partNames: "8989",
xuqiushuliang: 99,
chukushuliang: 67,
goodbatchNo: "898989",
bsStoreRoomSet: "仓库一",
goodsKuwei: "库位一",
status: 1,
statusName: "待出库",
times: "2025-09-08",
},
];
this.page.total = this.data.length;
},
},
};
</script>

@ -1,34 +1,15 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@row-del="rowDel"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
@current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
<template #menu-left>
<el-input
v-model="input"
style="width: 240px; margin-right: 24px"
placeholder="请扫描条形码"
/>
<el-input v-model="input" style="width: 240px; margin-right: 24px" placeholder="请扫描条形码" />
<el-button type="primary" @click="addView()">新增</el-button>
</template>
<template #menu-right> </template>
<template #menu="scope">
<el-button type="text" size="mini" @click="handle(scope.row.tbId)"
>处理</el-button
>
<el-button type="text" size="mini" @click="handle(scope.row.tbId)">处理</el-button>
</template>
<template #userNam="scope">
{{
@ -74,7 +55,7 @@ export default {
editBtnIcon: " ",
viewBtnText: "详情",
labelWidth: 120,
menuWidth: 120,
menuWidth: 150,
dialogWidth: 1200,
dialogClickModal: false,
searchEnter: true,
@ -97,7 +78,6 @@ export default {
delBtnIcon: " ",
editBtnIcon: " ",
align: "center",
column: [
{
label: "出库单号",
@ -107,6 +87,7 @@ export default {
filter: true,
span: 12,
search: true,
width: 110,
},
{
label: "出库日期",
@ -116,6 +97,7 @@ export default {
sortable: true,
filter: true,
span: 12,
width: 110,
},
{
label: "出库仓库",
@ -125,6 +107,7 @@ export default {
sortable: true,
filter: true,
span: 12,
width: 110,
},
{
label: "出库类别",
@ -134,6 +117,7 @@ export default {
sortable: true,
filter: true,
span: 12,
width:110,
},
{
label: "出库原因",
@ -142,6 +126,7 @@ export default {
sortable: true,
filter: true,
span: 12,
width: 110,
},
{
label: "领料人",
@ -150,15 +135,18 @@ export default {
sortable: true,
filter: true,
span: 12,
width: 100,
},
{
label: "制单人",
prop: "stAccBill.createMan.userName",
prop: "createMan.userName",
bind: "stAccBill.createMan.userName",
search: false,
sortable: true,
filter: true,
span: 12,
width: 100,
},
{
label: "工装编号",
@ -169,27 +157,112 @@ export default {
filter: true,
span: 12,
display: false,
width: 110,
},
{
label: "备注",
prop: "memo",
label: "报废单号",
prop: "bfCode",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
width: 110,
},
{
label: "报废单号",
prop: "bfCode",
label: "关联车间订单号",
prop: "orderCode",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
width: 150,
},
{
label: "审批状态",
prop: "approvalStatus",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
type: "select",
width: 110,
dicData: [
{
label: "未提交",
value: 0,
},
{
label: "审批中",
value: 1,
},
{
label: "审批通过",
value: 2,
},
{
label: "审批不通过",
value: 3,
},
],
},
{
label: "审批意见",
prop: "approvalOpinion",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
width: 110,
},
{
label: "审批人",
prop: "approvalUser",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
width: 110,
},
{
label: "审批时间",
prop: "approvalUser",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
type: "datetime",
width: 110,
},
{
label: "报废原因",
prop: "scrapReason",
bind: "scrapReason",
search: false,
sortable: true,
filter: true,
span: 24,
display: false,
width: 110,
},
{
label: "备注",
prop: "memo",
search: false,
sortable: true,
filter: true,
span: 12,
display: false,
width: 110,
},
],
},
form: {},
page: {
pageSize: 10,
@ -219,7 +292,68 @@ export default {
},
onLoad() {
this.loading = true;
this.data = [{}];
this.data = [
{
tbId: 'OT2023001',
stAccBill: {
billCode: 'OT2023001',
billDate: '2023-06-15',
coStorehouse: {
shName: '原料仓库'
},
billFlagStr: '其他出库',
pfUserInfo: {
userCode: 'U001',
userName: '张三'
},
createMan: {
userName: '李四'
}
},
outTypStr: '生产领料',
pjMold: {
toolingCode: 'MOLD001'
},
bfCode: 'BF2023001',
orderCode: 'WO2023001',
approvalStatus: 2,
approvalOpinion: '审批通过',
approvalUser: '王五',
approvalTime: '2023-06-15 14:30:00',
scrapReason: '无',
memo: '紧急生产需求'
},
{
tbId: 'OT2023002',
stAccBill: {
billCode: 'OT2023002',
billDate: '2023-06-16',
coStorehouse: {
shName: '成品仓库'
},
billFlagStr: '其他出库',
pfUserInfo: {
userCode: 'U002',
userName: '赵六'
},
createMan: {
userName: '钱七'
}
},
outTypStr: '样品出库',
pjMold: {
toolingCode: 'MOLD002'
},
bfCode: 'BF2023002',
orderCode: 'WO2023002',
approvalStatus: 2,
approvalOpinion: '审批通过',
approvalUser: '孙八',
approvalTime: '2023-06-16 10:15:00',
scrapReason: '无',
memo: '客户样品需求'
}
];
this.page.total = this.data.length;
this.loading = false;
setTimeout(() => {

@ -76,28 +76,108 @@
@edit-actived="editActived">
<el-table-column type="checkbox" width="40" />
<el-table-column label="仓库物料" prop="rlsId">
<template v-slot:edit="scope">
<!-- <st-store-goods-out v-model="scope.row.rlsId" :option="[]" :params="goodsParams"
@itemValue="goodsItemValue" /> -->
<template #header>
<span><i style="color: red">*</i>仓库物料</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.rlsId" placeholder="请输入" />
</template>
</el-table-column>
<!-- <template v-slot:edit="scope">
<st-store-goods-out v-model="scope.row.rlsId" :option="[]" :params="goodsParams"
@itemValue="goodsItemValue" />
</template>
<template v-slot="{ row }">{{ row.goodsCodeAndGoodsName }}</template> -->
<el-table-column label="物料名称" prop="coGoods.goodsName">
<template #header>
<span><i style="color: red">*</i>物料名称</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.coGoods.goodsName" placeholder="请输入" />
</template>
</el-table-column>
<el-table-column label="型号/牌号" prop="coGoods.mtltmrk">
<template #header>
<span><i style="color: red">*</i>型号/牌号</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.coGoods.mtltmrk" placeholder="请输入" />
</template>
</el-table-column>
<el-table-column label="批号" prop="piNo">
<template #header>
<span><i style="color: red">*</i>批号</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.piNo" placeholder="请输入" />
</template>
</el-table-column>
<el-table-column label="炉批号" prop="stovePiNo">
<template #header>
<span><i style="color: red">*</i>炉批号</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.stovePiNo" placeholder="请输入" />
</template>
</el-table-column>
<el-table-column label="库位号" prop="storageLocation.location">
<template #header>
<span><i style="color: red">*</i>库位号</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.storageLocation.location" placeholder="请输入" />
</template>
</el-table-column>
<el-table-column label="库存数量" prop="quantity">
<template #header>
<span><i style="color: red">*</i>库存数量</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.quantity" placeholder="请输入" type="number"/>
</template>
<template v-slot="{ row }">{{ row.goodsCodeAndGoodsName }}</template>
</el-table-column>
<el-table-column label="物料名称" prop="coGoods.goodsName" />
<el-table-column label="型号/牌号" prop="coGoods.mtltmrk" />
<el-table-column label="批号" prop="piNo" />
<el-table-column label="炉批号" prop="stovePiNo" />
<el-table-column label="库位号" prop="storageLocation.location" />
<el-table-column label="库存数量" prop="quantity" />
<el-table-column label="出库件数" :edit-render="{ type: 'default' }" prop="outQuantity">
<!-- <el-table-column label="出库件数" :edit-render="{ type: 'default' }" prop="outQuantity">
<template v-slot:edit="scope">
<!-- <vd-input-number v-model="scope.row.outQuantity" :min="-1000000000" :max="1000000000"
:precision="4" /> -->
<vd-input-number v-model="scope.row.outQuantity" :min="-1000000000" :max="1000000000"
:precision="4" />
</template>
<template v-slot="{ row }">{{ row.outQuantity }}</template>
</el-table-column> -->
<el-table-column label="出库件数" prop="outQuantity">
<template #header>
<span><i style="color: red">*</i>出库件数</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.outQuantity" placeholder="请输入" type="number"/>
</template>
</el-table-column>
<el-table-column label="计量单位" prop="coGoods.unitName">
<template #header>
<span><i style="color: red">*</i>计量单位</span>
</template>
<template #default="scope">
<el-input v-model="scope.row.coGoods.unitName" placeholder="请输入"/>
</template>
</el-table-column>
<el-table-column label="到期日期" prop="scrapCycle">
<template #header>
<span><i style="color: red">*</i>到期日期</span>
</template>
<template #default="scope">
<el-date-picker v-model="scope.row.scrapCycle" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="选择日期" style="width: 100%" />
</template>
</el-table-column>
<el-table-column label="入库日期" prop="createTime">
<template #header>
<span><i style="color: red">*</i>入库日期</span>
</template>
<template #default="scope">
<el-date-picker v-model="scope.row.createTime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="选择日期" style="width: 100%" />
</template>
</el-table-column>
<el-table-column label="计量单位" prop="coGoods.unitName" />
<el-table-column label="到期日期" prop="scrapCycle" />
<el-table-column label="入库日期" prop="createTime" />
</el-table>
</el-form>
@ -315,8 +395,25 @@ export default {
},
insertEvent(row = -1) {
//
// this.$refs.xTable.insertAt({}, row);
this.outbankList.push(row)
//
const newRow = {
rlsId: '',
coGoods: {
goodsName: '',
mtltmrk: '',
unitName: ''
},
piNo: '',
stovePiNo: '',
storageLocation: {
location: ''
},
quantity: 0,
outQuantity: 0,
scrapCycle: '',
createTime: ''
};
this.outbankList.push(newRow);
},
editActived({ row, rowIndex, column, columnIndex, $columnIndex, cell }) {
@ -439,6 +536,7 @@ export default {
};
},
submit() {
this.$message.success("保存成功");
// this.$refs.form.validate(formValid => {
// if (formValid) {
// if (this.isShowInput) {

@ -25,7 +25,6 @@
<!-- 新增 -->
<addEditDialog v-if="isOpen" :showDialog="isOpen" @closeDialog="closeDialog" :moldAddMore="moldAddMore"
:buy-cycle="buyCycle"></addEditDialog>
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/CycleTestItem/download-excel-template"
templateName="试验项目模板.xlsx"

@ -17,6 +17,7 @@
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
@cell-click="cellClick"
>
<!-- <template #menu="scope">
<el-button type="text" @click="viewRow(scope.row)">详情</el-button>
@ -32,7 +33,7 @@
:disabled-date="pickerOptions"
>
</el-date-picker>
<el-button type="primary" style="margin-left: 10px">查询</el-button>
<el-button type="primary" style="margin-left: 10px" @click="queryPerformance">查询</el-button>
</div>
<el-table :data="tableData" style="margin-top: 10px">
<el-table-column
@ -51,21 +52,25 @@
align="center"
label="订单准时完成率"
prop="orderTime"
width="130"
></el-table-column>
<el-table-column
align="center"
label="重点零件完成率"
prop="keyPoint"
width="130"
></el-table-column>
<el-table-column
align="center"
label="后工序审理单分数"
prop="after"
width="140"
></el-table-column>
<el-table-column
align="center"
label="出厂不合格率DPP"
prop="unqualified"
width="140"
></el-table-column>
<el-table-column
align="center"
@ -86,7 +91,7 @@
prop="check"
width="80"
></el-table-column>
<el-table-column align="center" label="投稿加分项" prop="add"></el-table-column>
<el-table-column align="center" label="投稿加分项" prop="add" width="100"></el-table-column>
<el-table-column
align="center"
label="群策群力"
@ -97,6 +102,7 @@
align="center"
label="优秀员工加分"
prop="excellence"
width="120"
></el-table-column>
<el-table-column
align="center"
@ -122,7 +128,7 @@ export default {
showExcel: false,
monthValue: "2025-09",
pickerOptions: (time) => {
const year = new Date().getFullYear(); //
const year = new Date().getFullYear()
return time.getFullYear() !== year; //
},
tableData: [
@ -227,7 +233,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "二月",
@ -235,6 +241,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "三月",
@ -242,6 +249,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "四月",
@ -249,6 +257,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "五月",
@ -256,6 +265,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "六月",
@ -263,6 +273,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "七月",
@ -270,6 +281,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "八月",
@ -277,6 +289,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "九月",
@ -284,6 +297,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "十月",
@ -291,6 +305,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "十一月",
@ -298,6 +313,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
{
label: "十二月",
@ -305,6 +321,7 @@ export default {
search: false,
sortable: true,
overHidden: true,
click: true,
},
],
},
@ -314,9 +331,59 @@ export default {
this.viewOpen();
},
methods: {
cellClick(row, column, cell, event) {
const monthProps = [
"january", "february", "march", "april", "may", "june",
"july", "august", "september", "october", "november", "december"
];
if (monthProps.includes(column.property)) {
const monthMap = {
"january": "01",
"february": "02",
"march": "03",
"april": "04",
"may": "05",
"june": "06",
"july": "07",
"august": "08",
"september": "09",
"october": "10",
"november": "11",
"december": "12"
};
const currentYear = new Date().getFullYear();
this.monthValue = `${currentYear}-${monthMap[column.property]}`;
this.showExcel = true;
}
},
viewRow(row) {
this.showExcel = true;
},
queryPerformance() {
const month = this.monthValue.split("-")[1];
//
// const baseScore = 70 + parseInt(month) * 2;
// this.tableData = [{
// KPI: baseScore,
// lh: 20 + parseInt(month),
// orderTime: Math.floor(Math.random() * 10),
// keyPoint: Math.floor(Math.random() * 10),
// after: Math.floor(Math.random() * 10),
// unqualified: (Math.random() * 5).toFixed(2),
// costMoney: (Math.random() * 10).toFixed(2),
// notice: Math.floor(Math.random() * 5),
// all: Math.floor(Math.random() * 5),
// leave: Math.floor(Math.random() * 5),
// check: Math.floor(Math.random() * 5),
// add: Math.floor(Math.random() * 10),
// excellence: Math.floor(Math.random() * 5),
// cost: Math.floor(Math.random() * 5),
// total: baseScore + 20 + parseInt(month),
// }];
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},

@ -1,70 +1,92 @@
<template>
<el-dialog title="新增" append-to-body v-model="openShow" width="70%" @close="closeDialog">
<el-dialog 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>
<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="tableData" style="width: 100%" border :cell-style="{ padding: '5px' }">
<!-- 报废槽液类型可选择 -->
<el-table-column prop="wasteType" label="报废槽液类型" align="center" width="170">
<el-table :data="form.tableData" @select="selectChange" border :cell-style="{ padding: '5px' }">
<el-table-column type="selection" width="55"></el-table-column>
<!-- 报废槽液类型 -->
<el-table-column align="center" label="报废槽液类型" width="170">
<template #header>
<span><i style="color: red">*</i>报废槽液类型</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].wasteType`" :rules="formRules.wasteType">
<el-select v-model="scope.row.wasteType" placeholder="请选择" style="width: 100%">
<el-option label="预镀镍废液" value="预镀镍废液" />
<el-option label="除油废液" value="除油废液" />
<el-option label="其它废液" value="其它废液" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<!-- 排放班组可选择 -->
<el-table-column prop="teamName" label="排放班组" align="center" width="170">
<!-- 排放班组 -->
<el-table-column align="center" label="排放班组" width="170">
<template #header>
<span><i style="color: red">*</i>排放班组</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].teamName`" :rules="formRules.teamName">
<el-select v-model="scope.row.teamName" placeholder="请选择" style="width: 100%">
<el-option label="化学镀镍二班" value="化学镀镍二班" />
<el-option label="零件管理班" value="零件管理班" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<!-- 排放量输入框 -->
<el-table-column prop="amount" label="排放量(单位:L)" align="center" width="170">
<!-- 排放量 -->
<el-table-column align="center" label="排放量(单位:L)" width="170">
<template #header>
<span><i style="color: red">*</i>排放量</span>
</template>
<template #default="scope">
<el-input v-model.number="scope.row.amount" placeholder="请输入" />
<el-form-item :prop="`tableData[${scope.$index}].amount`" :rules="formRules.amount">
<el-input-number
v-model="scope.row.amount"
placeholder="请输入"
controls-position="right"
:min="0.01"
:precision="2"
style="width: 100%" />
</el-form-item>
</template>
</el-table-column>
<!-- 日期日期选择器 -->
<el-table-column prop="dirDate" label="日期" align="center" width="170">
<!-- 日期 -->
<el-table-column align="center" label="日期" width="170">
<template #header>
<span><i style="color: red">*</i>日期</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].dirDate`" :rules="formRules.dirDate">
<el-date-picker v-model="scope.row.dirDate" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" type="date" placeholder="选择日期" style="width: 100%" />
</el-form-item>
</template>
</el-table-column>
<!-- 备注输入框 -->
<el-table-column prop="memo" label="备注" align="center">
<!-- 备注 -->
<el-table-column align="center" label="备注">
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].memo`" :rules="formRules.memo">
<el-input v-model="scope.row.memo" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
@ -72,68 +94,127 @@
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-form>
</el-dialog>
</template>
<script>
export default {
props: {
showDialog: {
type: Boolean,
default: false,
},
moldAddMore: {
type: Boolean,
default: false,
},
showDialog: { type: Boolean, default: false },
moldAddMore: { type: Boolean, default: false },
},
data() {
return {
openShow: false,
tableData: [],
formError: '', //
//
form: {
tableData: [] // Form
tableData: []
},
//
formRules: {
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array'
},
{
validator: (rule, value, callback) => {
if (value.length === 0) {
callback(new Error('请至少添加一行数据'));
} else {
callback();
}
},
trigger: 'submit'
}
],
wasteType: [
{ required: true, message: '请选择报废槽液类型', trigger: ['change', 'submit'] }
],
teamName: [
{ required: true, message: '请选择排放班组', trigger: ['change', 'submit'] }
],
amount: [
{
required: true,
message: '请输入排放量',
trigger: ['blur', 'submit'],
validator: (rule, value, callback) => {
// null
if (value === null || value === undefined || value === '') {
callback(new Error('请输入排放量'));
} else if (isNaN(value) || typeof value !== 'number') {
callback(new Error('排放量必须为数字'));
} else if (value <= 0) {
callback(new Error('排放量必须大于0'));
} else {
callback();
}
}
}
],
dirDate: [
{ required: true, message: '请选择日期', trigger: ['change', 'submit'] }
],
memo: [
{ max: 200, message: '备注不能超过200个字符', trigger: ['input', 'submit'] }
]
}
};
},
mounted() {
this.openShow = this.showDialog
},
watch: {
//
showDialog: {
handler(newVal) {
showDialog(newVal) {
this.openShow = newVal;
}
},
methods: {
selectChange(list, row) {
row._select = !row._select;
},
immediate: true
//
addTable() {
this.form.tableData.push({
_select: false,
wasteType: '',
teamName: '',
amount: null,
dirDate: '',
memo: ''
});
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
methods: {
closeDialog() {
this.openShow = false;
this.$emit('closeDialog');
//
this.form.tableData = [];
this.formError = '';
//
this.tableData = [{ wasteType: null, teamName: null, amount: null, dirDate: null, memo: '' }];
},
//
addTable() {
this.tableData.push({});
},
//
delTable() {
this.tableData.pop()
this.$refs.tableForm?.resetFields();
},
//
//
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' });
@ -142,27 +223,17 @@ export default {
return;
}
//
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = 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.$message.success('提交成功');
this.closeDialog();
this.$emit('submitSuccess', submitData);
this.$emit('submitData', submitData);
} catch (err) {
this.$message.error('网络错误,请稍后重试');
console.error('提交失败:', err);
@ -172,4 +243,35 @@ export default {
},
};
</script>
<style lang="scss" scoped></style>
<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;
}
//
.el-table__row {
height: 80px !important;
}
.el-table__cell {
vertical-align: middle !important;
}
.error-message {
font-size: 14px;
line-height: 1.5;
}
</style>

@ -4,6 +4,10 @@
<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="tableData" style="width: 100%" border :cell-style="{ padding: '5px' }">
<!-- 设施 -->
<el-table-column prop="device" label="设施" align="center" width="170">
@ -11,7 +15,10 @@
<span><i style="color: red">*</i>设施</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].device`" :rules="formRules.device">
<el-input v-model="scope.row.device" placeholder="请输入" />
</el-form-item>
</template>
</el-table-column>
@ -63,6 +70,7 @@
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
@ -87,6 +95,48 @@ export default {
return {
openShow: false,
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'
}
],
// wcId
device: [
{ required: true, message: '请选择作业中心', trigger: ['change', 'submit'] }
],
// batchNo
batchNo: [
{
required: true,
message: `${this.tabPosition === 'bathInspection' ? '选择' : '输入'}${this.tabPosition === 'bathInspection' ? '槽号槽名' : '设备检查项'}`,
trigger: ['change', 'submit']
}
],
// preserveContent
preserveContent: [
{ required: true, message: '请填写维护内容', trigger: ['blur', 'submit'] },
{ max: 200, message: '维护内容不能超过200个字符', trigger: ['input', 'submit'] }
]
}
};
},
watch: {
@ -145,4 +195,31 @@ export default {
},
};
</script>
<style lang="scss" scoped></style>
<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;
}
.el-table__row {
height: 80px !important;
}
.el-table__cell {
vertical-align: middle !important;
}
.error-message {
font-size: 14px;
line-height: 1.5;
}
</style>

@ -1,96 +1,123 @@
<template>
<el-dialog title="新增" append-to-body v-model="openShow" width="70%" @close="closeDialog">
<el-dialog 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>
<el-button type="danger" @click="delTable">删除选中</el-button>
</div>
<el-table :data="tableData" style="width: 100%" border :cell-style="{ padding: '5px' }">
<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 :cell-style="{ padding: '5px' }">
<el-table-column type="selection" width="55"></el-table-column>
<!-- 设施 -->
<el-table-column prop="device" label="设施" align="center" width="150">
<template #header>
<span><i style="color: red">*</i>设施</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].device`" :rules="formRules.device">
<el-input v-model="scope.row.device" placeholder="请输入" />
</el-form-item>
</template>
</el-table-column>
<!-- 化验时间 -->
<el-table-column prop="dosingTime" label="化验时间" align="center" width="150">
<template #header>
<span><i style="color: red">*</i>化验时间</span>
</template>
<template #default="scope">
<el-date-picker v-model="scope.row.dosingTime"
format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
type="datetime" placeholder="选择时间"
<el-form-item :prop="`tableData[${scope.$index}].dosingTime`" :rules="formRules.dosingTime">
<el-date-picker v-model="scope.row.dosingTime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择时间"
style="width: 100%" />
</el-form-item>
</template>
</el-table-column>
<!-- 化验人 -->
<el-table-column prop="dosingMan" label="化验人" align="center" width="150">
<template #header>
<span><i style="color: red">*</i>化验人</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].dosingMan`" :rules="formRules.dosingMan">
<el-select v-model="scope.row.dosingMan" placeholder="请选择" style="width: 100%">
<el-option label="崔殿龙" value="541" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<!-- -->
<el-table-column prop="itNi" label="镍" align="center" width="100">
<template #header>
<span></span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].itNi`">
<el-input v-model="scope.row.itNi" />
</el-form-item>
</template>
</el-table-column>
<!-- -->
<el-table-column prop="itCu" label="铜" align="center" width="100">
<template #header>
<span></span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].itCu`">
<el-input v-model="scope.row.itCu" />
</el-form-item>
</template>
</el-table-column>
<!-- 六价铬 -->
<el-table-column prop="itCr" label="六价铬" align="center" width="100">
<template #header>
<span>六价铬</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].itCr`">
<el-input v-model="scope.row.itCr" />
</el-form-item>
</template>
</el-table-column>
<!-- 氰化物 -->
<el-table-column prop="itCn2" label="氰化物" align="center" width="100">
<template #header>
<span>氰化物</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].itCn2`">
<el-input v-model="scope.row.itCn2" />
</el-form-item>
</template>
</el-table-column>
<!-- PH -->
<el-table-column prop="itPh" label="PH" align="center" width="80">
<template #header>
<span>PH</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].itPh`">
<el-input v-model="scope.row.itPh" />
</el-form-item>
</template>
</el-table-column>
<!-- 备注输入框 -->
<!-- 备注 -->
<el-table-column prop="memo" label="备注" align="center">
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].memo`">
<el-input v-model="scope.row.memo" />
</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="submit"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
export default {
props: {
@ -106,25 +133,54 @@ export default {
data() {
return {
openShow: false,
tableData: [],
};
formError: '',
form: {
tableData: []
},
watch: {
//
showDialog: {
handler(newVal) {
this.openShow = newVal;
formRules: {
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array'
},
immediate: true
{
validator: (rule, value, callback) => {
if (value.length === 0) {
callback(new Error('请至少添加一行数据'));
} else {
callback();
}
},
trigger: 'submit'
}
],
device: [
{ required: true, message: '请输入设施', trigger: ['blur', 'submit'] }
],
dosingTime: [
{ required: true, message: '请选择化验时间', trigger: ['change', 'submit'] }
],
dosingMan: [
{ required: true, message: '请选择化验人', trigger: ['change', 'submit'] }
]
}
};
},
mounted() {
this.openShow = this.showDialog;
if (this.moldAddMore && this.form.tableData.length === 0) {
this.addTable();
}
},
methods: {
closeDialog() {
this.openShow = false;
this.$emit('closeDialog');
//
this.tableData =
[{
selectChange(list, row) {
row._select = !row._select;
},
addTable() {
this.form.tableData.push({
_select: false,
device: null,
dosingTime: null,
dosingMan: null,
@ -134,39 +190,84 @@ export default {
itCn2: null,
itPh: null,
memo: '',
}];
},
//
addTable() {
this.tableData.push({});
});
},
//
delTable() {
this.tableData.pop()
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();
},
//
submit() {
const isValid = this.tableData.every(row => {
//
if (!row.device || !row.dosingTime || !row.dosingMan) {
//
const missingFields = [];
if (!row.device) missingFields.push("设施");
if (!row.dosingTime) missingFields.push("化验时间");
if (!row.dosingMan) missingFields.push("化验人");
this.$message.error(`请完善必填项: ${missingFields.join(", ")}`);
return false;
submitForm() {
this.formError = '';
this.$refs.tableForm.validate((isValid) => {
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 {
this.$message.success('提交成功');
this.$emit('submitData', submitData);
this.closeDialog();
} catch (err) {
this.$message.error('提交失败,请稍后重试');
console.error(err);
}
return true;
});
if (isValid) {
//
console.log(this.tableData, 'this.tableData');
this.$emit('submitData', this.tableData);
this.closeDialog(); //
}
},
watch: {
showDialog: {
handler(newVal) {
this.openShow = newVal;
},
immediate: true
}
}
};
</script>
<style lang="scss" scoped></style>
<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;
}
.el-table__row {
height: 80px !important;
}
.el-table__cell {
vertical-align: middle !important;
}
.error-message {
font-size: 14px;
line-height: 1.5;
}
</style>

@ -222,7 +222,7 @@ export default {
//
handleSubmitData(data) {
//
this.$message.success("数据提交成功!");
// this.$message.success("");
this.addOpen = false;
},
//

@ -165,7 +165,7 @@ export default {
type: 'select',
width: 200,
hide: true,
search: true,
search: false,
sortable: true,
overHidden: true,
rules: [
@ -387,12 +387,102 @@ export default {
],
},
{
label: 'ERP入库时间',
label: '是否印字',
prop: 'isPrint',
bind: 'coGoods.isPrint',
width: 200,
search: false,
sortable: true,
overHidden: true,
type: 'select',
dicData: [
{
label: '是',
value: 1,
},
{
label: '否',
value: 0,
},
],
rules: [
{
required: true,
message: '请输入是否印字',
trigger: 'blur',
},
],
},
{
label: '粉重',
prop: 'weight',
bind: 'coGoods.weight',
width: 200,
search: false,
sortable: true,
rules: [
{
required: true,
message: '请输入粉重',
trigger: 'blur',
},
],
},
{
label: '材料号',
prop: 'materialNo',
bind: 'coGoods.materialNo',
width: 200,
search: false,
sortable: true,
rules: [
{
required: true,
message: '请输入材料号',
trigger: 'blur',
},
],
},
{
label: '成型厚度',
prop: 'moldingThickness',
bind: 'coGoods.moldingThickness',
width: 200,
search: false,
sortable: true,
rules: [
{
required: true,
message: '请输入成型厚度',
trigger: 'blur',
},
],
},
{
label: '入库时间',
prop: 'createTime',
width: 200,
search: true,
sortable: true,
overHidden: true,
type: 'datetimerange',
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
searchRange: true,
rules: [
{
required: true,
message: '请输入入库时间',
trigger: 'blur',
},
],
},
{
label: '入库数量',
prop: 'inNum',
width: 200,
rules: [
{
required: true,

@ -35,6 +35,7 @@
'部分归还' : row.stLend.curStatus == 25 ? '已归还' : "新建" }}
</template> -->
<template #menu-left>
<el-input v-model="input" style="width: 240px; margin-right: 24px" placeholder="请扫描条形码" @keyup.enter.native="handleEnter"/>
<el-button type="primary" @click="handleAdd">新增</el-button>
<el-button type="primary" @click="jichu()">批量借出</el-button>
<el-button type="primary" @click="handleReturn">批量归还</el-button>
@ -157,7 +158,7 @@ export default {
selection: true,
viewBtn: false,
editBtn: false,
delBtn: true,
delBtn: false,
addBtn: false,
editBtnText: "修改",
addBtnIcon: " ",
@ -795,23 +796,23 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// API
// deleteLeveraging(row.id).then(() => {
// this.$message.success('');
// this.onLoad();
// }).catch(() => {
// this.$message.error('');
// });
//
const index = this.data.findIndex(item => item.leCode === row.leCode);
if (index !== -1) {
this.data.splice(index, 1);
this.page.total = this.data.length;
this.$message.success('删除成功');
}
}).catch(() => {});
},
handleEnter() {
this.$confirm("确定借出?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
callback();
});
},
onLoad() {
this.data = [
{

Loading…
Cancel
Save