Browse Source

2024-04-02

master
zelian_wu 2 years ago
parent
commit
95be771514
  1. 1
      src/api/base/properties.js
  2. 2
      src/api/test/testInformation.js
  3. 36
      src/views/modules/base/propertiesItem/propertiesModel.vue
  4. 117
      src/views/modules/common/uploadFileList.vue
  5. 366
      src/views/modules/quotation/requestForQuote.vue
  6. 2
      src/views/modules/quotation/sellForQuotation/quotationDetail/billOfMateriel.vue
  7. 10
      src/views/modules/quotation/sellForQuotation/quotationDetail/quoteRouting.vue
  8. 138
      src/views/modules/test/file/testFile.vue
  9. 59
      src/views/modules/test/requestForTest.vue
  10. 4
      src/views/modules/test/testSoBom/testTable.vue
  11. 2
      src/views/modules/test/test_upload_file.vue

1
src/api/base/properties.js

@ -45,5 +45,6 @@ export const goDownItem= data => createAPI(`/properties/goDownItem`,'post',data)
export const updateBMModal= data => createAPI(`/technicalSpecification/updateBMModal`,'post',data)
export const searchMenuAllListId= (data) => createAPI(`/properties/menu/list`,'post',data)
export const searchBUList= (data) => createAPI(`/properties/bu/list`,'post',data)
export const searchPropertiesGroup= (data) => createAPI(`/properties/group/list`,'post',data)

2
src/api/test/testInformation.js

@ -49,6 +49,8 @@ export const checkTestStatus = data => createAPI(`/plm/testInformation/checkTest
* @returns {*}
*/
export const getFileContentList = data => createAPI(`/plm/testInformation/getFileContentList`,'post',data)
export const removeFile = data => createAPI(`/upload/remove`,'post',data)
export const uploadFileList = (url,data) => createAPI(url,'post',data)
/**
* 文件删除
* @param data

36
src/views/modules/base/propertiesItem/propertiesModel.vue

@ -23,6 +23,11 @@
<el-option :value="i.menuId" :label="i.name" v-for="i in menuList" :key="i.menuId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="BU类别">
<el-select v-model="searchData.bu" @change="getDataList">
<el-option :value="i.buNo" :label="i.buDesc" v-for="i in BUList" :key="i.buNo"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="'状态'">
<!-- <el-select filterable v-model="searchData.active" style="width: 130px">-->
<!-- <el-option label="全部" value=""></el-option>-->
@ -408,7 +413,7 @@
import Chooselist from '@/views/modules/common/Chooselist'
import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
import DictDataSelect from "../../sys/dict-data-select.vue";
import {searchMenuAllListId, searchPropertiesGroup} from "../../../../api/base/properties";
import {searchBUList, searchMenuAllListId, searchPropertiesGroup} from "../../../../api/base/properties";
export default {
components: {
DictDataSelect,
@ -444,6 +449,7 @@
},
data () {
return {
BUList:[],
menuList:[],
//
favorite: false,
@ -458,6 +464,7 @@
searchData: {
site: this.$store.state.user.site,
group:'',
bu:'',
codeNo: '',
codeDesc: '',
active:'Y',
@ -816,9 +823,9 @@
this.height = window.innerHeight - 210
})
},
created () {
this.getDataList();
this.searchMenuList();
async created () {
await this.searchBUList();
await this.searchMenuList();
},
methods: {
searchMenuList(){
@ -831,6 +838,24 @@
if (this.menuList.length > 0){
this.searchData.group = this.menuList[0].menuId
}
this.getDataList();
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
searchBUList(){
let params = {
site:this.$store.state.user.site
}
searchBUList(params).then(({data})=>{
if (data && data.code === 0){
this.BUList = data.rows;
if (this.BUList.length > 0){
this.searchData.bu = this.BUList[0].buNo
}
}else {
this.$message.warning(data.msg)
}
@ -1056,9 +1081,6 @@
})
this.detailModelFlag = true;
},
deleteModalDetails(row){
this.$confirm(`是否删除这个属性项目?`, '提示', {
confirmButtonText: '确定',

117
src/views/modules/common/uploadFileList.vue

@ -0,0 +1,117 @@
<script>
import {uploadFileList} from "../../../api/test/testInformation";
export default {
name: "uploadFileList",
props:{
uploadDialog:{
type:Boolean,
default:false,
},
label:{
type:String,
default: '',
},
no:{
type:[String,Number],
default:''
},
path:{
type:String,
request:true,
},
uploadStatus:{
type:Boolean,
default:false,
},
fileList:{
type: Array,
default:()=>[],
}
},
data(){
return{
fileRemark:'',
}
},
methods:{
closeFileUpdate(){
if (this.uploadStatus){
return
}
this.$refs.uploadFile.clearFiles();
this.$emit("update:fileList",[])
},
onRemove(file,fileList){
this.$emit("update:fileList",fileList)
},
onChange(file,fileList){
this.$emit("update:fileList",fileList)
},
upload(){
if (this.fileList.length === 0){
this.$message.warning("未选择需要上传的文件")
return;
}
if (this.uploadStatus){
this.$emit('update:uploadDialog',false)
this.$message.success("操作成功")
return
}
let data = new FormData();
for (let i = 0; i < this.fileList.length; i++) {
data.append("file",this.fileList[i].raw)
}
data.append("orderRef1",this.$store.state.user.site)
data.append("orderRef2",this.no)
data.append("createBy",this.$store.state.user.name)
data.append("fileRemark",this.fileRemark)
uploadFileList(this.path,data).then(({data})=>{
if (data && data.code === 0){
this.$emit('update:uploadDialog',false)
this.$message.success(data.msg)
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
}
}
}
</script>
<template>
<div>
<el-dialog title="测试文件" v-drag @close="closeFileUpdate" :visible.sync="uploadDialog" width="22vw" append-to-body >
<el-form label-position="top" label-width="80px">
<el-form-item :label="label" >
<el-input v-model="no" readonly style="width: 120px"></el-input>
</el-form-item>
<el-form-item label=" ">
<el-upload drag :file-list="fileList"
action="/test/file" ref="uploadFile"
:on-remove="onRemove" :on-change="onChange"
multiple :auto-upload="false"
style="text-align: left;">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
</el-upload>
</el-form-item>
<el-form-item label="备注:">
<el-input type="textarea" placeholder="请输入内容" v-model="fileRemark"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="upload">保存</el-button>
<el-button type="primary" @click="$emit('update:uploadDialog',false)">关闭</el-button>
</span>
</el-dialog>
</div>
</template>
<style scoped>
/deep/ .el-form-item--medium .el-form-item__content{
height: auto;
}
</style>

366
src/views/modules/quotation/requestForQuote.vue

@ -283,54 +283,150 @@
<span slot="label" @click="getProjectPartList()"><a>项目物料</a></span>
<el-input v-model="modalData.partName" style="display: none"></el-input>
</el-form-item>
<div class="rq">
<el-form :inline="true" label-position="top" :model="projectPartData">
<el-form-item label="产品编码">
<el-input v-model="projectPartData.testPartNo" clearable style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="产品名称">
<el-input v-model="projectPartData.partName" clearable style="width: 120px"></el-input>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" @click="getProjectPartList()">查询</el-button>
</el-form-item>
</el-form>
<el-table
:height="223"
:data="projectPartList"
ref="projectPartTable"
@row-click="projectPartClickRow"
@selection-change="selectionProjectPart"
:row-key="getRowKeys"
:row-style="partRowStyle"
border
v-loading="dataListLoading"
style="width: 100%;">
<el-table-column
type="selection"
header-align="center"
align="center"
:selectable="checkSelectable"
width="50" class-name="disabledCheckbox">
</el-table-column>
<el-table-column
v-for="(item,index) in projectPartDetailList" :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>
</div>
<el-tabs v-model="activeTab">
<el-tab-pane label="物料信息" name="part">
<div class="rq">
<el-form :inline="true" label-position="top" :model="projectPartData">
<el-form-item label="产品编码">
<el-input v-model="projectPartData.testPartNo" clearable style="width: 120px"></el-input>
</el-form-item>
<el-form-item label="产品名称">
<el-input v-model="projectPartData.partName" clearable style="width: 120px"></el-input>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" @click="getProjectPartList()">查询</el-button>
</el-form-item>
</el-form>
<el-table
:height="223"
:data="projectPartList"
ref="projectPartTable"
@row-click="projectPartClickRow"
@selection-change="selectionProjectPart"
:row-key="getRowKeys"
:row-style="partRowStyle"
border
v-loading="dataListLoading"
style="width: 100%;">
<el-table-column
type="selection"
header-align="center"
align="center"
:selectable="checkSelectable"
width="50" class-name="disabledCheckbox">
</el-table-column>
<el-table-column
v-for="(item,index) in projectPartDetailList" :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>
</div>
</el-tab-pane>
<el-tab-pane label="采购详细信息" name="materialSourcing">
<div style="height: 260px;overflow-y: auto;overflow-x: hidden">
<el-form ref="editDetailForm" :model="priceCheckDetail" v-if="modalData.flag !== '1'">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="关联零件号:" prop="associatedPartNo">
<el-input
type="textarea"
v-model="priceCheckDetail.associatedPartNo"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所需材料:" prop="materialRequired">
<el-input
type="textarea"
v-model="priceCheckDetail.materialRequired"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度/月度需求:" prop="yearlyOrMonthlyRequirement">
<el-input
type="textarea"
v-model="priceCheckDetail.yearlyOrMonthlyRequirement"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运行宽度:" prop="runningWidth">
<el-input
type="textarea"
v-model="priceCheckDetail.runningWidth"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form ref="saveDetailForm" :model="savePriceDetail" v-else>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="关联零件号:" prop="associatedPartNo">
<el-input
type="textarea"
v-model="savePriceDetail.associatedPartNo"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所需材料:" prop="materialRequired">
<el-input
type="textarea"
v-model="savePriceDetail.materialRequired"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度/月度需求:" prop="yearlyOrMonthlyRequirement">
<el-input
type="textarea"
v-model="savePriceDetail.yearlyOrMonthlyRequirement"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运行宽度:" prop="runningWidth">
<el-input
type="textarea"
v-model="savePriceDetail.runningWidth"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</el-tab-pane>
</el-tabs>
</el-form>
<el-footer style="height:35px;margin-top: 10px;padding-bottom:5px;text-align:center">
<el-button type="primary" @click="saveData()">保存</el-button>
@ -666,6 +762,52 @@
<price-check-properties ref="tabProperties" v-model:data-list="priceCheckPropertiesList"
:quotation-no="quotationCurrentRow.quotationNo" :height="500"></price-check-properties>
</el-tab-pane>
<el-tab-pane label="采购详细信息" name="tabMaterialSourcing">
<el-form :model="priceCheckDetail">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="关联零件号:" prop="associatedPartNo">
<el-input
type="textarea"
v-model="priceCheckDetail.associatedPartNo"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所需材料:" prop="materialRequired">
<el-input
type="textarea"
v-model="priceCheckDetail.materialRequired"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度/月度需求:" prop="yearlyOrMonthlyRequirement">
<el-input
type="textarea"
v-model="priceCheckDetail.yearlyOrMonthlyRequirement"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运行宽度:" prop="runningWidth">
<el-input
type="textarea"
v-model="priceCheckDetail.runningWidth"
:autosize="{minRows: 3, maxRows: 3}"
resize='none'>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<!-- 项目信息页签 -->
<el-tab-pane label="项目信息" name="project_information">
<el-form label-position="top" :model="projectInformationData"
@ -1038,6 +1180,29 @@ export default {
},
data() {
return {
priceCheckRule: {
associatedPartNo:[{required: true, message: ' ', trigger: 'change'},],
materialRequired:[{required: true, message: ' ', trigger: 'change'},],
yearlyOrMonthlyRequirement:[{required: true, message: ' ', trigger: 'change'},],
runningWidth:[{required: true, message: ' ', trigger: 'change'},],
},
savePriceDetail:{
site:'',
quotationNo:'',
associatedPartNo:'',
materialRequired:'',
yearlyOrMonthlyRequirement:'',
runningWidth:'',
},
priceCheckDetail:{
site:'',
quotationNo:'',
associatedPartNo:'',
materialRequired:'',
yearlyOrMonthlyRequirement:'',
runningWidth:'',
},
activeTab:'part',
priceCheckPropertiesList: [],
//
exportData: [],
@ -2188,6 +2353,7 @@ export default {
quotationResultStatus: row.quotationResultStatus,
updateBy: this.$store.state.user.name
}
this.priceCheckDetail = row.priceCheckDetail
this.modalDisableFlag = true
this.modalFlag = true
},
@ -2283,10 +2449,6 @@ export default {
this.$message.warning('请选择询价专员名称!')
return
}
if (this.projectPartListSelections.length === 0) {
this.$message.warning('请选择询价专员名称!')
return
}
if (this.modalData.testPartNo === '' || this.modalData.testPartNo == null) {
this.$message.warning('请选择产品编码!')
return
@ -2312,44 +2474,72 @@ export default {
return
}
} else {
if (this.projectPartListSelections.length === 0) {
this.$message.warning('请选择物料信息!')
return
}
this.confirmProjectPart();
if (this.modalData.flag === '1') {
quotationInformationSave(this.modalData).then(({data}) => {
if (data && data.code === 0) {
this.getDataList()
this.modalFlag = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定'
})
//
this.$refs[this.modalData.flag === '1'?'saveDetailForm':'editDetailForm'].validate((valid) => {
if (!valid){
if (this.priceCheckDetail.associatedPartNo === ''|| this.savePriceDetail.associatedPartNo === ''){
this.$message.warning('请输入关联零件号信息!')
return
}
})
} else {
quotationInformationEdit(this.modalData).then(({data}) => {
if (data && data.code === 0) {
this.getDataList()
this.modalFlag = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
if (this.priceCheckDetail.materialRequired === '' || this.savePriceDetail.materialRequired === ''){
this.$message.warning('请输入所需材料!')
return
}
if (this.priceCheckDetail.yearlyOrMonthlyRequirement === '' || this.savePriceDetail.yearlyOrMonthlyRequirement === ''){
this.$message.warning('请输入年度/月度需求!')
return
}
if (this.priceCheckDetail.runningWidth === '' || this.savePriceDetail.yearlyOrMonthlyRequirement === ''){
this.$message.warning('请输入运行宽度!')
return
}
}else {
if (this.modalData.flag === '1') {
this.modalData.priceCheckDetail = this.savePriceDetail
quotationInformationSave(this.modalData).then(({data}) => {
if (data && data.code === 0) {
this.getDataList()
this.modalFlag = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定'
})
}
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定'
this.modalData.priceCheckDetail = this.priceCheckDetail
quotationInformationEdit(this.modalData).then(({data}) => {
if (data && data.code === 0) {
this.getDataList()
this.modalFlag = false
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
}
})
} else {
this.$alert(data.msg, '错误', {
confirmButtonText: '确定'
})
}
})
}
})
}
}
})
}
})
},
@ -2396,9 +2586,10 @@ export default {
* @param row
*/
quotationClickRow(row) {
this.$refs.quotationTable.toggleRowSelection(row)
// this.$refs.quotationTable.toggleRowSelection(row)
this.quotationCurrentRow = JSON.parse(JSON.stringify(row))
this.quotationDetailData = row;
this.priceCheckDetail = row.priceCheckDetail
this.getPriceCheckProperties(row)
},
getPriceCheckProperties(row) {
@ -3017,6 +3208,7 @@ export default {
},
//
closeSaveDataDialog() {
this.activeTab='part';
this.$refs.saveDataForm.resetFields(); //
this.$nextTick(() => this.$refs.projectPartTable.clearSelection())
//
@ -3028,6 +3220,9 @@ export default {
partName: '',
projectId: '',
}
if (this.modalData.flag === '1'){
this.$refs.saveDetailForm.resetFields();
}
},
//
openSaveDataDialog() {
@ -3116,5 +3311,8 @@ export default {
/deep/ .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after {
border-color: #FFF
}
/deep/ .el-form-item--medium .el-form-item__content{
height: auto;
}
</style>

2
src/views/modules/quotation/sellForQuotation/quotationDetail/billOfMateriel.vue

@ -187,7 +187,7 @@ export default {
serialNumber: '102003Table4PrintUnitName',
tableId: "102003Table4",
tableName: "报价材料信息",
columnProp: 'printUnitName',
columnProp: 'printUnit',
headerAlign: "center",
align: "center",
columnLabel: '单位',

10
src/views/modules/quotation/sellForQuotation/quotationDetail/quoteRouting.vue

@ -265,7 +265,7 @@ export default {
columnProp: 'machRunFactor',
headerAlign: "center",
align: "right",
columnLabel: '机器运行速度',
columnLabel: '机器单位产出',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -282,7 +282,7 @@ export default {
columnProp: 'machSetupTime',
headerAlign: "center",
align: "right",
columnLabel: '调机时',
columnLabel: '调机时',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -316,7 +316,7 @@ export default {
columnProp: 'laborRunFactor',
headerAlign: "center",
align: "right",
columnLabel: '人工生产速度',
columnLabel: '人工单位产出',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -333,7 +333,7 @@ export default {
columnProp: 'laborSetupTime',
headerAlign: "center",
align: "right",
columnLabel: '人工调机时',
columnLabel: '人工调机时',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -401,7 +401,7 @@ export default {
columnProp: 'setupLaborClassNo',
headerAlign: "center",
align: "left",
columnLabel: '调机人员等级',
columnLabel: '调机过程中人员等级',
columnHidden: false,
columnImage: false,
columnSortable: false,

138
src/views/modules/test/file/testFile.vue

@ -0,0 +1,138 @@
<script>
import UploadFileList from "../../common/uploadFileList.vue";
import {getFileContentList, removeFile} from "../../../../api/test/testInformation";
import {downLoadQuotationFile} from "../../../../api/quotation/quotationInformation";
export default {
name: "testFile",
components: {UploadFileList},
props:{
dataList:{
type: Array,
default: ()=>[],
},
testNo:{
type:String,
},
columnList:{
type: Array,
default: ()=>[],
},
height:{
type:Number,
default:300
},
},
model:{
prop:"dataList",
event:"change"
},
data(){
return{
uploadDialog:false,
fileRemark:'',
token:'',
fileList:[],
}
},
methods:{
getFileContentList(){
let params = {
orderRef1:this.$store.state.user.site,
orderRef2:this.testNo
}
getFileContentList(params).then(({data})=>{
if (data && data.code === 0){
this.$emit("change",data.rows)
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
downloadFile (row) {
downLoadQuotationFile(row).then(({data}) => {
//
const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
//
const fileName = row.fileName
// a
const linkNode = document.createElement('a')
linkNode.download = fileName // adownload
linkNode.style.display = 'none'
linkNode.href = URL.createObjectURL(blob) // Blob URL
document.body.appendChild(linkNode)
linkNode.click() //
URL.revokeObjectURL(linkNode.href) // URL
document.body.removeChild(linkNode)
})
},
removeFile(row){
removeFile(row).then(({data})=>{
if (data && data.code === 0){
this.getFileContentList()
this.$message.success(data.msg)
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
}
},
watch:{
uploadDialog(newValue,oldValue){
if (newValue === false){
this.getFileContentList();
}
},
}
}
</script>
<template>
<div>
<div style="margin: 5px 0px">
<el-button type="primary" @click="uploadDialog = true">上传文件</el-button>
</div>
<el-table
:height="height"
:data="dataList"
border
style="width: 100%">
<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
fixed="right"
header-align="center"
align="center"
width="120"
label="操作">
<template slot-scope="{row,$index}">
<el-link style="cursor:pointer;" @click="downloadFile(row)">下载</el-link>
<el-link style="cursor:pointer;" @click="removeFile(row)">删除</el-link>
<!-- <el-link>预览</el-link>-->
</template>
</el-table-column>
</el-table>
<upload-file-list :label="'测试单号:'" :file-list.sync="fileList" :no="testNo" :upload-dialog.sync="uploadDialog" path="/upload/test"></upload-file-list>
</div>
</template>
<style scoped>
</style>

59
src/views/modules/test/requestForTest.vue

@ -262,6 +262,21 @@
</el-col>
</el-row>
</el-col>
<el-col :span="4">
<el-form-item label=" ">
<el-checkbox v-model="modalData.doesNeedArtwork" true-label="Y">是否需要Artwork</el-checkbox>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label=" ">
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label=" ">
<el-checkbox v-model="modalData.doesNeedPlanner" true-label="Y">是否需要计划</el-checkbox>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="15">
<el-col :span="12">
@ -356,9 +371,12 @@
<el-tab-pane label="制程信息" :disabled="!activeTabList.includes('process')" name="process">
<test-routing-table v-if="clickTestRow" ref="dialogSoRouting" v-model:data-list="testSoRoutingList" :test-no="modalData.testNo"></test-routing-table>
</el-tab-pane>
<el-tab-pane label="属性" :disabled="!activeTabList.includes('attribute')" name="attribute">
<el-tab-pane label="基本信息" :disabled="!activeTabList.includes('attribute')" name="attribute">
<test-properties v-if="modalFlag" v-model:data-list="testPropertiesList" ref="dialogTestAttribute" :test-no="modalData.testNo"></test-properties>
</el-tab-pane>
<el-tab-pane label="附件" :disabled="!activeTabList.includes('file')" name="file">
<test-file v-if="modalFlag" :column-list="fileColumnList" v-model:data-list="testFileList" ref="dialogTestFile" :test-no="modalData.testNo"></test-file>
</el-tab-pane>
</el-tabs>
</div>
<el-footer style="height:30px;text-align:center;margin-top: 8px">
@ -687,9 +705,13 @@
<el-tab-pane label="制程信息" name="test_so_routing" style="padding: 5px">
<test-routing-table ref="tabSoBom" :test-no="testCurrentRow.testNo" v-model:data-list="testSoRoutingList" :height="500" ></test-routing-table>
</el-tab-pane>
<el-tab-pane label="属性" name="attribute">
<el-tab-pane label="基本信息" name="attribute">
<test-properties ref="tabProperties" v-model:data-list="testPropertiesList" :test-no="testCurrentRow.testNo" :height="500"></test-properties>
</el-tab-pane>
<el-tab-pane label="附件" name="file">
<test-file ref="tabFile" :column-list="fileColumnList" v-model:data-list="testFileList" :test-no="testCurrentRow.testNo" :height="500"></test-file>
</el-tab-pane>
<!-- 项目信息页签 -->
<el-tab-pane label="项目信息" name="project_information">
<el-form label-position="top" :model="projectInformationData" style="margin-left: 10px;margin-top: 5px;margin-right: 10px">
@ -1072,9 +1094,11 @@
import {partPropertiesList} from "../../../api/base/properties";
import TestProperties from "./testAttribute/testProperties.vue";
import {getTestPropertiesList} from "../../../api/test/testProperties";
import TestFile from "./file/testFile.vue";
export default {
name:"test",
components: {
TestFile,
TestProperties,
TestAttribute,
TestRoutingTable,
@ -1129,6 +1153,7 @@
},
data () {
return {
testFileList:[],
dialogProperties:[],
attributeList:[],
testSoRoutingList:[],
@ -1191,6 +1216,8 @@
engineerName: '',
priorityLevel: '一般',
testNumber: 1,
doesNeedArtwork:'',
doesNeedPlanner:'',
requiredDeliveryDate: '',
remark: '',
technicalConsiderations: '',
@ -1700,7 +1727,7 @@
serialNumber: '103001Table2CreatedBy',
tableId: '103001Table2',
tableName: '文件信息表',
columnProp: 'createdBy',
columnProp: 'createBy',
headerAlign: 'center',
align: 'center',
columnLabel: '上传人',
@ -2162,6 +2189,21 @@
this.refreshCurrentTabTable()
}
},
getFileContentList(){
let params = {
orderRef1:this.$store.state.user.site,
orderRef2:this.testCurrentRow.testNo
}
getFileContentList(params).then(({data})=>{
if (data && data.code === 0){
this.testFileList = data.rows;
}else {
this.$message.warning(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
/**
* 刷新页签的table数据
*/
@ -2284,6 +2326,8 @@
projectId: row.projectId,
projectName: row.projectName,
tracker: row.tracker,
doesNeedArtwork:row.doesNeedArtwork,
doesNeedPlanner:row.doesNeedPlanner,
trackerName: row.trackerName,
testPartNo: row.testPartNo,
partName: row.partName,
@ -2313,7 +2357,7 @@
nextToDo: row.nextToDo,
updateBy: this.$store.state.user.name
}
this.activeTabList = ['product','process','attribute','partAttribute']
this.activeTabList = ['product','process','attribute','partAttribute','file']
this.$nextTick(()=>{
this.$refs.dialogSoBom.clearTable();
})
@ -2383,6 +2427,8 @@
if (this.modalData.flag === '1'){
this.testSoRoutingList = []
this.testSoBomList = []
this.testFileList = [];
this.testPropertiesList = [];
this.saveTest()
}else {
this.updateTest()
@ -2448,7 +2494,7 @@
testInformationSave(this.modalData).then(({data}) => {
if (data && data.code === 0) {
this.getDataList();
this.activeTabList = ['product','process','attribute','partAttribute']
this.activeTabList = ['product','process','attribute','partAttribute','file']
this.activeTab = 'product'
this.modalData.testNo = data.row
// this.modalFlag = false
@ -2531,6 +2577,7 @@
this.selectTestSoRoutingList()
this.getPartPropertiesList();
this.getTestProperties();
this.getFileContentList()
}
},
/**
@ -2969,6 +3016,8 @@
customerNo: '',
customerDesc: '',
projectId: '',
doesNeedArtwork:'',
doesNeedPlanner:'',
projectName: '',
tracker: '',
trackerName: '',

4
src/views/modules/test/testSoBom/testTable.vue

@ -200,7 +200,7 @@ export default {
serialNumber: '102001Table3UmName',
tableId: '102001Table3',
tableName: '测试产品结构',
columnProp: 'umName',
columnProp: 'umId',
headerAlign: 'center',
align: 'left',
columnLabel: '计量单位',
@ -640,7 +640,7 @@ export default {
<el-col :span="5">
<el-form-item label="单位" prop="umId">
<el-select disabled v-model="testSoBom.umId">
<el-option v-for="v in umList" :value="v.umId" :label="v.umName" :key="v.umId"></el-option>
<el-option v-for="v in umList" :value="v.umId" :label="v.umId" :key="v.umId"></el-option>
</el-select>
</el-form-item>
</el-col>

2
src/views/modules/test/test_upload_file.vue

@ -36,8 +36,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveUploadFile()">保存</el-button>

Loading…
Cancel
Save