Browse Source

2025.03.06 NPI优化:

项目物料 - 页面整体分页大小没办法手动自己调整,已详情的方式弹出新界面
- 物料转量产后需增加撤销按钮
- 信息显示串行
- 下达前删除的文档下达后又出现了,邮件也同步发了,需要修正
- 删除其他部门权限,除了PJM其他人员不能操作只能查看
- 邮件收到有待上传的文档,系统里没有
java8
jiayang yue 10 months ago
parent
commit
8af221ae15
  1. 1
      src/api/eam/eamProject.js
  2. 82
      src/views/modules/eam/com_project_proof_record.vue
  3. 2
      src/views/modules/eam/eamProjectInfo.vue
  4. 461
      src/views/modules/eam/eamProjectPartInfo.vue

1
src/api/eam/eamProject.js

@ -13,6 +13,7 @@ export const eamProjectPartSearch= data => createAPI(`/pms/eamProject/eamProject
export const queryEamProjectPart= data => createAPI(`/pms/eamProject/queryEamProjectPart`,'post',data) export const queryEamProjectPart= data => createAPI(`/pms/eamProject/queryEamProjectPart`,'post',data)
export const eamProjectPartInfoSave= data => createAPI(`/pms/eamProject/eamProjectPartInfoSave`,'post',data) export const eamProjectPartInfoSave= data => createAPI(`/pms/eamProject/eamProjectPartInfoSave`,'post',data)
export const eamProjectPartInfoEdit= data => createAPI(`/pms/eamProject/eamProjectPartInfoEdit`,'post',data) export const eamProjectPartInfoEdit= data => createAPI(`/pms/eamProject/eamProjectPartInfoEdit`,'post',data)
export const eamProjectPartInfoCancelEdit= data => createAPI(`/pms/eamProject/eamProjectPartInfoCancelEdit`,'post',data)
export const eamProjectPartInfoDelete= data => createAPI(`/pms/eamProject/eamProjectPartInfoDelete`,'post',data) export const eamProjectPartInfoDelete= data => createAPI(`/pms/eamProject/eamProjectPartInfoDelete`,'post',data)
export const searchConfirmatorList= data => createAPI(`/pms/eamProject/searchConfirmatorList`,'post',data) export const searchConfirmatorList= data => createAPI(`/pms/eamProject/searchConfirmatorList`,'post',data)
export const addConfirmatory= data => createAPI(`/pms/eamProject/addConfirmatory`,'post',data) export const addConfirmatory= data => createAPI(`/pms/eamProject/addConfirmatory`,'post',data)

82
src/views/modules/eam/com_project_proof_record.vue

@ -10,7 +10,7 @@
:data="dataList" :data="dataList"
border border
style="width: 100%;margin-top: -5px;" style="width: 100%;margin-top: -5px;"
:height="this.height +30"
:height="adjustedHeightLeft"
highlight-current-row highlight-current-row
ref="proofingTable" ref="proofingTable"
@row-click="proofDocumentClickRow" @row-click="proofDocumentClickRow"
@ -18,6 +18,23 @@
:row-class-name="tableRowClassName2" :row-class-name="tableRowClassName2"
v-loading="dataListLoading"> v-loading="dataListLoading">
<el-table-column <el-table-column
v-for="(item,index) in columnList" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
<el-table-column
v-if="!this.authUpdate"
header-align="center" header-align="center"
align="center" align="center"
width="170" width="170"
@ -31,19 +48,13 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
v-for="(item,index) in columnList" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
v-else
header-align="center"
align="center"
width="50"
fixed="right"
label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -58,7 +69,7 @@
:data="proofDocumentList" :data="proofDocumentList"
border border
style="width: 100%;margin-top: 5px;" style="width: 100%;margin-top: 5px;"
:height="this.height - 11"
:height="adjustedHeightRight"
ref="proofDocumentTable" ref="proofDocumentTable"
@row-click="uploadDocumentClickRow" @row-click="uploadDocumentClickRow"
@current-change="changeCurrentRow1" @current-change="changeCurrentRow1"
@ -66,6 +77,7 @@
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
v-loading="dataListLoading"> v-loading="dataListLoading">
<el-table-column <el-table-column
v-if="!this.authUpdate"
header-align="center" header-align="center"
align="center" align="center"
width="140" width="140"
@ -78,6 +90,18 @@
<a type="text" size="small" v-if="scope.row.documentId !== null" @click="viewDocumentFile(scope.row)">查看附件</a> <a type="text" size="small" v-if="scope.row.documentId !== null" @click="viewDocumentFile(scope.row)">查看附件</a>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
v-else
header-align="center"
align="center"
width="120"
fixed="left"
label="操作">
<template slot-scope="scope">
<a type="primary" size="small" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a>
<a type="text" size="small" v-if="scope.row.documentId !== null" @click="viewDocumentFile(scope.row)">查看附件</a>
</template>
</el-table-column>
<el-table-column label="序号" type="index" align="center" :index="indexMethod"> <el-table-column label="序号" type="index" align="center" :index="indexMethod">
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
@ -514,12 +538,28 @@
import {getSiteAndBuByUserName} from "../../../api/qc/qc"; import {getSiteAndBuByUserName} from "../../../api/qc/qc";
import {updateColumnSize} from "../../../api/table"; import {updateColumnSize} from "../../../api/table";
export default { export default {
props: {
// prop
inModal: {
type: Boolean,
default: false
}
},
computed: { computed: {
he() { he() {
return he return he
}, },
row() { row() {
return row return row
},
// 100
adjustedHeightLeft() {
// this.height + 30
return (this.height + (this.inModal ? 200 : 0)) + 30;
},
adjustedHeightRight() {
// this.height - 11
return (this.height + (this.inModal ? 200 : 0)) - 11;
} }
}, },
components: { components: {
@ -535,6 +575,7 @@
}, },
data() { data() {
return { return {
authUpdate: false,
userBuList: [], userBuList: [],
dataList: [], dataList: [],
searchData: { searchData: {
@ -905,7 +946,7 @@
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 120,
columnWidth: 90,
}, },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
@ -923,7 +964,7 @@
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 120,
columnWidth: 260,
}, },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
@ -941,7 +982,7 @@
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 120,
columnWidth: 141,
}, },
{ {
userId: this.$store.state.user.name, userId: this.$store.state.user.name,
@ -959,7 +1000,7 @@
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 80,
columnWidth: 100,
}, },
], ],
columnFileContentArray: [ columnFileContentArray: [
@ -979,7 +1020,7 @@
sortLv: 0, sortLv: 0,
status: true, status: true,
fixed: '', fixed: '',
columnWidth: 120,
columnWidth: 100,
}, },
// //
{ {
@ -1215,9 +1256,10 @@
this.documentSelection = val this.documentSelection = val
}, },
// //
init(inData) {
init(inData,authUpdate) {
// //
this.searchData = JSON.parse(JSON.stringify(inData)); this.searchData = JSON.parse(JSON.stringify(inData));
this.authUpdate = authUpdate
// //
proofingInformationSearch(this.searchData).then(({data}) => { proofingInformationSearch(this.searchData).then(({data}) => {
// //

2
src/views/modules/eam/eamProjectInfo.vue

@ -1161,7 +1161,7 @@ import {updateColumnSize} from "../../../api/table";
functionId: 401003, functionId: 401003,
serialNumber: '401003Table1BuDesc', serialNumber: '401003Table1BuDesc',
tableId: "401003Table1", tableId: "401003Table1",
tableName: "BU文档清单表",
tableName: "项目信息表",
columnProp: 'buDesc', columnProp: 'buDesc',
headerAlign: "center", headerAlign: "center",
align: "center", align: "center",

461
src/views/modules/eam/eamProjectPartInfo.vue

@ -206,32 +206,37 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
v-if="!this.allMFGList.includes(this.$store.state.user.name) || this.$store.state.user.name === 'admin'"
v-if="this.$store.state.user.name === 'admin' || !this.authUpdate"
fixed="right" fixed="right"
header-align="center" header-align="center"
align="center" align="center"
width="180"
width="220"
label="操作"> label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.partType !== 'Active'"> <div v-if="scope.row.partType !== 'Active'">
<a v-if="scope.row.status === '草稿' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">下达</a> <a v-if="scope.row.status === '草稿' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">下达</a>
<a v-if="scope.row.status !== '草稿' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">新增打样</a> <a v-if="scope.row.status !== '草稿' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">新增打样</a>
<a style="color: gray; pointer-events: none;">详情</a>
<a v-if="scope.row.status !== '草稿' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">转正式料号</a> <a v-if="scope.row.status !== '草稿' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">转正式料号</a>
<a v-if="scope.row.status === '进行中' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">转量产</a> <a v-if="scope.row.status === '进行中' && scope.row.status !== '已量产'" style="color: gray; pointer-events: none;">转量产</a>
</div> </div>
<div v-else-if="scope.row.status !== '已量产' && scope.row.status !== '正式量产'"> <div v-else-if="scope.row.status !== '已量产' && scope.row.status !== '正式量产'">
<a v-if="scope.row.status === '草稿' && scope.row.status !== '已量产'" type="text" size="small" @click="updateModalStatus(scope.row)">下达</a> <a v-if="scope.row.status === '草稿' && scope.row.status !== '已量产'" type="text" size="small" @click="updateModalStatus(scope.row)">下达</a>
<a v-if="scope.row.status !== '草稿'" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a> <a v-if="scope.row.status !== '草稿'" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a>
<a type="text" size="small" @click="showProofDetailModal(scope.row)">详情</a>
<a v-if="scope.row.status !== '草稿' && scope.row.status !== '已量产'" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a> <a v-if="scope.row.status !== '草稿' && scope.row.status !== '已量产'" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a>
<a v-if="scope.row.status === '进行中' || scope.row.status === '已量产'" type="text" size="small" @click="updateModalStatus(scope.row)">转量产</a> <a v-if="scope.row.status === '进行中' || scope.row.status === '已量产'" type="text" size="small" @click="updateModalStatus(scope.row)">转量产</a>
</div> </div>
<div v-else-if="scope.row.status === '已量产'"> <div v-else-if="scope.row.status === '已量产'">
<a style="color: #0c4dbb" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a> <a style="color: #0c4dbb" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a>
<a style="color: #0c4dbb" type="text" size="small" @click="showProofDetailModal(scope.row)">详情</a>
<a style="color: #0c4dbb" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a> <a style="color: #0c4dbb" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a>
<a style="color: #0c4dbb" type="text" size="small" @click="updateModalStatus(scope.row)">转量产</a> <a style="color: #0c4dbb" type="text" size="small" @click="updateModalStatus(scope.row)">转量产</a>
<a style="color: #0c4dbb" type="text" size="small" @click="cancelModalStatus(scope.row)">撤销</a>
</div> </div>
<div v-else> <div v-else>
<a style="color: red" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a> <a style="color: red" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a>
<a style="color: red" type="text" size="small" @click="showProofDetailModal(scope.row)">详情</a>
<a style="color: red" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a> <a style="color: red" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a>
<a style="color: red" type="text" size="small" @click="updateModalStatus(scope.row)">转量产</a> <a style="color: red" type="text" size="small" @click="updateModalStatus(scope.row)">转量产</a>
</div> </div>
@ -298,9 +303,9 @@
<proofRecord ref="proofRecord"></proofRecord> <proofRecord ref="proofRecord"></proofRecord>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="转量产阶段文档" name="massProductionStage"> <el-tab-pane label="转量产阶段文档" name="massProductionStage">
<el-button type="primary" icon="el-icon-upload" style="margin-top: -5px" @click="projectDocumentList()">文档清单定义</el-button>
<el-button type="primary" v-if="!this.authUpdate" icon="el-icon-upload" style="margin-top: -5px" @click="projectDocumentList()">文档清单定义</el-button>
<el-button type="primary" v-if="this.proofingCurrentRow.status !== '草稿'" icon="el-icon-upload" style="margin-top: -5px" @click="uploadOtherDocument()">上传其他文档</el-button> <el-button type="primary" v-if="this.proofingCurrentRow.status !== '草稿'" icon="el-icon-upload" style="margin-top: -5px" @click="uploadOtherDocument()">上传其他文档</el-button>
<el-button type="primary" v-if="this.sendMassMailFlag === true" style="margin-top: -5px" @click="sendMassMailHandle()">邮件提醒</el-button>
<el-button type="primary" v-if="this.sendMassMailFlag === true && !this.authUpdate" style="margin-top: -5px" @click="sendMassMailHandle()">邮件提醒</el-button>
<el-table <el-table
:data="projectOtherDocumentList" :data="projectOtherDocumentList"
border border
@ -312,18 +317,31 @@
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
v-loading="dataListLoading"> v-loading="dataListLoading">
<el-table-column <el-table-column
v-if="this.authUpdate"
header-align="center" header-align="center"
align="center" align="center"
width="150"
width="120"
fixed="left" fixed="left"
label="操作"> label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<a type="primary" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a> <a type="primary" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a>
<a type="text" size="small" v-if="scope.row.documentDefinitionListId !== '-1' && !shouldShowDelete(scope.row)" @click="warnSendMail(scope.row)">提醒</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row) || scope.row.projectPhase === 'SOP文档'" @click="viewMassDocumentFile(scope.row)">查看附件</a> <a type="text" size="small" v-if="shouldShowDelete(scope.row) || scope.row.projectPhase === 'SOP文档'" @click="viewMassDocumentFile(scope.row)">查看附件</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row)" @click="massProductionDocumentDelete(scope.row)">删除</a>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
v-else
header-align="center"
align="center"
width="150"
fixed="left"
label="操作">
<template slot-scope="scope">
<a type="primary" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a>
<a type="text" size="small" v-if="scope.row.documentDefinitionListId !== '-1' && !shouldShowDelete(scope.row)" @click="warnSendMail(scope.row)">提醒</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row) || scope.row.projectPhase === 'SOP文档'" @click="viewMassDocumentFile(scope.row)">查看附件</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row)" @click="massProductionDocumentDelete(scope.row)">删除</a>
</template>
</el-table-column>
<el-table-column label="序号" type="index" align="center" :index="indexMethod"> <el-table-column label="序号" type="index" align="center" :index="indexMethod">
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
@ -357,7 +375,7 @@
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="所有文档" name="allDocument"> <el-tab-pane label="所有文档" name="allDocument">
<el-button type="primary" v-if="this.proofingCurrentRow.status !== '草稿'" icon="el-icon-upload" style="margin-top: -5px" @click="projectProductionValidationDocument()">选择生产确认文档</el-button>
<el-button type="primary" v-if="this.proofingCurrentRow.status !== '草稿' && !this.authUpdate" icon="el-icon-upload" style="margin-top: -5px" @click="projectProductionValidationDocument()">选择生产确认文档</el-button>
<el-table <el-table
:data="projectAllDocumentList" :data="projectAllDocumentList"
border border
@ -1192,6 +1210,278 @@
</el-footer> </el-footer>
</el-dialog> </el-dialog>
<!-- 模态框详情 -->
<el-dialog :visible.sync="dialogVisible" width="80%">
<el-tabs style="margin-top: -2px; width: 100%; height: 100%;" v-model="activeModalTab" type="border-card" @tab-click="tabClick">
<el-tab-pane label="打样记录" name="proofRecord">
<!-- 注意这里使用了一个新的 ref用于模态框内部的 proofRecord 组件 -->
<proofRecord ref="proofRecordModal" :inModal="true"></proofRecord>
</el-tab-pane>
<el-tab-pane label="转量产阶段文档" name="massProductionStage">
<el-button type="primary" v-if="!this.authUpdate" icon="el-icon-upload" style="margin-top: -5px" @click="projectDocumentList()">文档清单定义</el-button>
<el-button type="primary" v-if="this.proofingCurrentRow.status !== '草稿'" icon="el-icon-upload" style="margin-top: -5px" @click="uploadOtherDocument()">上传其他文档</el-button>
<el-button type="primary" v-if="this.sendMassMailFlag === true && !this.authUpdate" style="margin-top: -5px" @click="sendMassMailHandle()">邮件提醒</el-button>
<el-table
:data="projectOtherDocumentList"
border
style="width: 100%;margin-top: 5px;"
:height="this.height + 250"
ref="proofDocumentTable"
@row-click="projectOtherDocumentClickRow"
@current-change="changeCurrentRow1"
:row-class-name="tableRowClassName"
v-loading="dataListLoading">
<el-table-column
v-if="this.authUpdate"
header-align="center"
align="center"
width="120"
fixed="left"
label="操作">
<template slot-scope="scope">
<a type="primary" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row) || scope.row.projectPhase === 'SOP文档'" @click="viewMassDocumentFile(scope.row)">查看附件</a>
</template>
</el-table-column>
<el-table-column
v-else
header-align="center"
align="center"
width="150"
fixed="left"
label="操作">
<template slot-scope="scope">
<a type="primary" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a>
<a type="text" size="small" v-if="scope.row.documentDefinitionListId !== '-1' && !shouldShowDelete(scope.row)" @click="warnSendMail(scope.row)">提醒</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row) || scope.row.projectPhase === 'SOP文档'" @click="viewMassDocumentFile(scope.row)">查看附件</a>
<a type="text" size="small" v-if="shouldShowDelete(scope.row)" @click="massProductionDocumentDelete(scope.row)">删除</a>
</template>
</el-table-column>
<el-table-column label="序号" type="index" align="center" :index="indexMethod">
<template slot-scope="scope">
<span>
{{ scope.$index + 1 }}
</span>
</template>
</el-table-column>
<el-table-column label="文档类型" align="left">
<template slot-scope="scope">
<span>
{{ getCombinedDocumentType(scope.row) }}
</span>
</template>
</el-table-column>
<el-table-column
v-for="(item,index) in columnFileContentArray" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="所有文档" name="allDocument">
<el-button type="primary" v-if="this.proofingCurrentRow.status !== '草稿' && !this.authUpdate" icon="el-icon-upload" style="margin-top: -5px" @click="projectProductionValidationDocument()">选择生产确认文档</el-button>
<el-table
:data="projectAllDocumentList"
border
style="width: 100%;margin-top: 5px;"
:height="this.height + 250"
ref="projectAllDocumentDocumentTable"
@row-click="projectAllDocumentClickRow"
v-loading="dataListLoading"
:row-class-name="tableRowClassName">
<el-table-column
header-align="center"
fixed="left"
align="center"
width="80"
label="操作">
<template slot-scope="scope">
<a type="text" size="small" v-if="shouldShowDelete(scope.row) || scope.row.uploadedFlag === 'Y'" @click="viewMassDocumentFile(scope.row)">查看附件</a>
<a type="text" size="small" v-if="scope.row.uploadedFlag === 'N'" @click="uploadAllDocumentFile(scope.row)">上传文件</a>
</template>
</el-table-column>
<el-table-column label="序号" type="index" align="center" :index="indexMethod">
<template slot-scope="scope">
<span>
{{ scope.$index + 1 }}
</span>
</template>
</el-table-column>
<el-table-column label="文档类型" align="left">
<template slot-scope="scope">
<span>
{{ getCombinedDocumentType(scope.row) }}
</span>
</template>
</el-table-column>
<el-table-column
v-for="(item,index) in columnProjectAllDocumentList" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="生产文档确认进度" name="productionDocumentsConfirmProgress">
<el-row>
<el-col :span="8" class="left-section">
<div class="table-container" style="height: 100%;margin-top: -5px">
<p style="margin-top: -5px">文档清单</p>
<el-table :data="confirmProgressDocumentList"
border
style="width: 100%;margin-top: -5px;"
:height="this.height + 95">
<el-table-column header-align="center" align="center" width="50" prop="itemNo" label="序号"></el-table-column>
<el-table-column header-align="center" align="left" prop="documentType" label="文档类型"></el-table-column>
<el-table-column header-align="center" align="left" prop="fileName" label="文件名"></el-table-column>
<el-table-column
header-align="center"
align="center"
width="90"
fixed="right"
label="操作">
<template slot-scope="scope">
<a type="text" size="small" @click="viewMassDocumentFile(scope.row)">查看附件</a>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col :span="15" class="right-section">
<div class="table-container" style="height: 100%;margin-top: -5px">
<p style="margin-top: -5px">推送人员清单</p>
<el-table :data="confirmProgressPusherList"
border
style="width: 100%;margin-top: -5px;"
:height="this.height + 95">
<el-table-column header-align="center" align="center" width="40" prop="itemNo" label="序号"></el-table-column>
<el-table-column header-align="center" align="left" width="70" prop="userDisplay" label="指定确认人"></el-table-column>
<el-table-column header-align="center" align="center" :formatter="formatDate" prop="wantedConfirmDate" label="要求确认日期"></el-table-column>
<el-table-column header-align="center" align="center" prop="confirmFlag" label="是否确认"></el-table-column>
<el-table-column header-align="center" align="left" prop="confirmedBy" label="实际确认人"></el-table-column>
<el-table-column header-align="center" align="left" prop="remark" label="备注"></el-table-column>
<el-table-column header-align="center" align="center" prop="confirmedDate" label="实际确认时间"></el-table-column>
<el-table-column header-align="center" align="center" prop="createDate" label="推送时间"></el-table-column>
<el-table-column header-align="center" align="left" prop="createBy" label="推送人"></el-table-column>
<el-table-column
header-align="center"
align="center"
width="90"
fixed="left"
label="操作">
<template slot-scope="scope">
<a type="text" size="small" @click="confirmDocument(scope.row)">确认</a>
<a type="text" size="small" @click="viewDocumentFile(scope.row)">查看附件</a>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="量产BOM" name="massProductionBOM">
<el-table
:data="projectPartBomList"
row-key="levelCode"
border
style="width: 100%; margin-top: 5px;"
:height="this.height + 250"
ref="projectBomTable"
v-loading="dataListLoading"
:tree-props="{ children: 'children' }">
<!-- 数据列 -->
<el-table-column
label=""
prop=""
header-align="center"
align="center"
width="80">
</el-table-column>
<el-table-column
v-for="(item, index) in columnProjectBomList"
:key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed === '' ? false : item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<div v-if="item.columnProp === 'levelCode'">
<span v-if="scope.row.levelCode === '1'">{{ '主BOM' }}</span>
<span v-else>{{ scope.row.levelCode }}</span>
</div>
<div v-else>
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</div>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="产品工艺路线" name="Routing">
<el-table
:data="projectPartRoutingList"
border
style="width: 100%; margin-top: 5px;"
:height="this.height + 250"
ref="projectBomTable"
v-loading="dataListLoading"
>
<!-- 数据列 -->
<el-table-column
v-for="(item, index) in columnProjectRoutingList"
:key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed === '' ? false : item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<div v-if="item.columnProp === 'levelCode'">
<span v-if="scope.row.levelCode === '1'">{{ '1' }}</span>
<span v-else>{{ scope.row.levelCode }}</span>
</div>
<div v-else>
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</div>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<div slot="footer" class="dialog-footer" style="margin-top: 0px">
<el-button @click="dialogVisible = false">关闭</el-button>
</div>
</el-dialog>
<upload-file-list-1 folder="projectPMPDocumentFiles" title="上传文档" :file-list.sync="fileList" :label="'文档类型ID:'" :no="otherDocumentCurrentRow.documentTypeId" :no-type="otherDocumentCurrentRow.documentType" <upload-file-list-1 folder="projectPMPDocumentFiles" title="上传文档" :file-list.sync="fileList" :label="'文档类型ID:'" :no="otherDocumentCurrentRow.documentTypeId" :no-type="otherDocumentCurrentRow.documentType"
:proofing-id="proofingCurrentRow.proofingId" :proofing-no="proofingCurrentRow.proofingNo" :bu="proofingCurrentRow.buNo" :site="proofingCurrentRow.site" :upload-dialog.sync="uploadDialog" :no-desc="otherDocumentCurrentRow.documentDesc" :id="otherDocumentCurrentRow.id" :proofing-id="proofingCurrentRow.proofingId" :proofing-no="proofingCurrentRow.proofingNo" :bu="proofingCurrentRow.buNo" :site="proofingCurrentRow.site" :upload-dialog.sync="uploadDialog" :no-desc="otherDocumentCurrentRow.documentDesc" :id="otherDocumentCurrentRow.id"
:project-id="proofingCurrentRow.projectId" :project-no="proofingCurrentRow.projectNo" :project-desc="proofingCurrentRow.projectDesc" :document-type="proofingCurrentRow.documentType" :conclusion="'N/A'" :project-id="proofingCurrentRow.projectId" :project-no="proofingCurrentRow.projectNo" :project-desc="proofingCurrentRow.projectDesc" :document-type="proofingCurrentRow.documentType" :conclusion="'N/A'"
@ -1264,6 +1554,7 @@ import {
confirmatorSendMailHandle, confirmatorSendMailHandle,
eamProjectPartSearch, eamProjectPartSearch,
eamProjectPartInfoEdit, eamProjectPartInfoEdit,
eamProjectPartInfoCancelEdit,
getFinalPartDesc, getFinalPartDesc,
addConfirmatory, addConfirmatory,
deleteConfirmatory, deleteConfirmatory,
@ -1340,6 +1631,12 @@ import {updateColumnSize} from "../../../api/table";
exportHeader: ["项目物料"], exportHeader: ["项目物料"],
exportFooter: [], exportFooter: [],
exportList:[], exportList:[],
authSearch: false,
authSave: false,
authUpdate: false,
authDelete: false,
dialogVisible: false, //
activeModalTab: 'proofRecord',
// end // end
tagNo:'', tagNo:'',
fileName:'', fileName:'',
@ -4146,6 +4443,94 @@ import {updateColumnSize} from "../../../api/table";
} }
}) })
}, },
cancelModalStatus (row) {
this.modalData = {
site: row.site,
bu: row.site + '_' + row.buNo,
buNo: row.buNo,
username: this.$store.state.user.name,
customerNo: row.customerNo,
customerDesc: row.customerDesc,
projectCategory: row.projectCategory,
projectPartId: row.projectPartId,
testPartNo: row.testPartNo,
partDesc: row.partDesc,
projectId: row.projectId,
projectNo: row.projectNo,
projectDesc: row.projectDesc,
priority: row.priority,
closeDate: row.closeDate,
needDate: row.needDate,
projectManager: row.projectManager,
projectManagerName: row.projectManager.split('-')[1], //
projectOwner: row.projectOwner,
projectOwnerName: row.projectOwner.split('-')[1], //
engineer: row.engineer,
engineerName: row.engineer.split('-')[1], //
cQualityEngineer1: row.cQualityEngineer1,
cQualityEngineer1Name: row.cQualityEngineer1.split('-')[1], //
cQualityEngineer2: row.cQualityEngineer2,
cQualityEngineer2Name: row.cQualityEngineer2.split('-')[1], //
cQualityEngineer3: row.cQualityEngineer3,
cQualityEngineer3Name: row.cQualityEngineer3.split('-')[1], //
cQualityEngineer4: row.cQualityEngineer4,
cQualityEngineer5: row.cQualityEngineer5,
cQualityEngineer6: row.cQualityEngineer6,
cManufactureEngineer: row.cManufactureEngineer,
cManufactureEngineerName: row.cManufactureEngineer.split('-')[1], //
docEngineer: row.docEngineer,
ipqcHardTag: row.ipqcHardTag,
buildDate: row.buildDate,
status: row.status,
partType: row.partType,
// active: row.active,
createBy: this.$store.state.user.name,
updateBy: this.$store.state.user.name,
}
if (row.cQualityEngineer4 != null && row.cQualityEngineer4 !== '') {
this.modalData.cQualityEngineer4Name = row.cQualityEngineer4.split('-')[1] //
}
if (row.cQualityEngineer5 != null && row.cQualityEngineer5 !== '') {
this.modalData.cQualityEngineer5Name = row.cQualityEngineer5.split('-')[1] //
}
if (row.cQualityEngineer6 != null && row.cQualityEngineer6 !== '') {
this.modalData.cQualityEngineer6Name = row.cQualityEngineer6.split('-')[1] //
}
if (row.docEngineer != null && row.docEngineer !== '') {
this.modalData.docEngineerName = row.docEngineer.split('-')[1] //
}
if (row.ipqcHardTag != null && row.ipqcHardTag !== '') {
this.modalData.ipqcHardTagName = row.ipqcHardTag.split('-')[1] //
}
if (row.status === '已量产') {
this.modalData.status = '进行中'
this.modalData.closeDate = ''
this.$confirm(`是否确认撤销该项目?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
eamProjectPartInfoCancelEdit(this.modalData).then(({data}) => {
if (data && (data.code === 0 || data.code === '0')) {
EventBus.$emit('updateProjectInfo')
this.getDataList()
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定'
})
}
})
}).catch(() => {
})
}
},
getRowProjectInfo(){ getRowProjectInfo(){
let inData={ let inData={
site: this.proofingCurrentRow.site, site: this.proofingCurrentRow.site,
@ -4169,20 +4554,36 @@ import {updateColumnSize} from "../../../api/table";
} }
this.$refs.proofRecord.init(inData) this.$refs.proofRecord.init(inData)
}, },
editProjectDocument(modalData) {
modalData.buNo = modalData.bu.split('_')[1]
modalData.proofingId = -1
editProjectDocument(modalData).then(({data}) => {
//
if (data && data.code === 0) {
this.$message({
message: '编辑成功',
type: 'success'
})
//
this.refreshCurrentTabTable()
}
})
showProofDetailModal(row) {
//
this.proofingCurrentRow = row;
//
this.dialogVisible = true;
// proofRecord
this.$nextTick(() => {
let inData = {
site: this.proofingCurrentRow.site,
projectId: this.proofingCurrentRow.projectId,
projectPartId: this.proofingCurrentRow.projectPartId,
projectManager: this.proofingCurrentRow.projectManager,
projectOwner: this.proofingCurrentRow.projectOwner,
engineer: this.proofingCurrentRow.engineer,
cQualityEngineer1: this.proofingCurrentRow.cQualityEngineer1,
cQualityEngineer2: this.proofingCurrentRow.cQualityEngineer2,
cQualityEngineer3: this.proofingCurrentRow.cQualityEngineer3,
cQualityEngineer4: this.proofingCurrentRow.cQualityEngineer4,
cQualityEngineer5: this.proofingCurrentRow.cQualityEngineer5,
cQualityEngineer6: this.proofingCurrentRow.cQualityEngineer6,
cManufactureEngineer: this.proofingCurrentRow.cManufactureEngineer,
docEngineer: this.proofingCurrentRow.docEngineer,
ipqcHardTag: this.proofingCurrentRow.ipqcHardTag,
page: 1,
limit: 1000
};
// proofRecord init
this.$refs.proofRecordModal.init(inData);
});
}, },
getFinalPartDesc(){ getFinalPartDesc(){
@ -5582,21 +5983,23 @@ import {updateColumnSize} from "../../../api/table";
this.refreshCurrentTabTable() this.refreshCurrentTabTable()
}, },
async refreshCurrentTabTable () { async refreshCurrentTabTable () {
if (this.activeName == 'proofRecord') {
if (this.activeName === 'proofRecord') {
this.getRowProjectInfo(); this.getRowProjectInfo();
} }
if (this.activeName == 'massProductionStage') {
if (this.activeName === 'massProductionStage' || this.activeModalTab === 'massProductionStage') {
this.getProjectOtherDocument(); this.getProjectOtherDocument();
} }
if (this.activeName == 'allDocument'){
if (this.activeName === 'allDocument' || this.activeModalTab === 'allDocument') {
this.searchProjectAllDocumentList() this.searchProjectAllDocumentList()
this.searchConfirmatorList() this.searchConfirmatorList()
} }
if (this.activeName === 'productionDocumentsConfirmProgress'){
if (this.activeName === 'productionDocumentsConfirmProgress' || this.activeModalTab === 'productionDocumentsConfirmProgress') {
this.getConfirmProgressDocumentList() this.getConfirmProgressDocumentList()
this.getConfirmProgressPusherList() this.getConfirmProgressPusherList()
} }
if (this.activeName === 'massProductionBOM' && this.proofingCurrentRow.finalPartNo !== '' && this.proofingCurrentRow.finalPartNo !== null){
if ((this.activeName === 'massProductionBOM' || this.activeModalTab === 'massProductionBOM') && this.proofingCurrentRow.finalPartNo
!== '' &&
this.proofingCurrentRow.finalPartNo !== null){
this.dataListLoading = true; this.dataListLoading = true;
try { try {
// //
@ -5611,7 +6014,9 @@ import {updateColumnSize} from "../../../api/table";
} else { } else {
this.projectPartBomList = [] this.projectPartBomList = []
} }
if (this.activeName === 'Routing' && this.proofingCurrentRow.finalPartNo !== '' && this.proofingCurrentRow.finalPartNo !== null){
if ((this.activeName === 'Routing' || this.activeModalTab === 'Routing') &&
this.proofingCurrentRow.finalPartNo !== '' &&
this.proofingCurrentRow.finalPartNo !== null){
this.dataListLoading = true; this.dataListLoading = true;
this.fetchRoutingList() this.fetchRoutingList()
} else { } else {

Loading…
Cancel
Save