Bladeren bron

no message

develop
bovenliggende
commit
e93cb9bbf1
13 gewijzigde bestanden met toevoegingen van 116 en 2140 verwijderingen
  1. +1
    -1
      src/layouts/tabs/TabsView.vue
  2. +1
    -1
      src/pages/Common/search.vue
  3. +7
    -8
      src/pages/User/list.vue
  4. +2
    -0
      src/pages/agent/list.vue
  5. +0
    -106
      src/pages/order/OrderList.vue
  6. +0
    -531
      src/pages/order/bomOrder/BomDetail.vue
  7. +0
    -783
      src/pages/order/pcbOrder/PcbDetail.vue
  8. +0
    -644
      src/pages/order/smtOrder/SmtDetail.vue
  9. +9
    -5
      src/pages/roles/list.vue
  10. +57
    -35
      src/router/config.js
  11. +35
    -22
      src/services/Common.js
  12. +2
    -2
      src/services/Roles/roles.js
  13. +2
    -2
      src/utils/axios-interceptors.js

+ 1
- 1
src/layouts/tabs/TabsView.vue Bestand weergeven

@@ -332,7 +332,7 @@ a.link{font-size:16px; line-height:2em; display: inline-block}
.tabbn .ant-btn{padding:0 .5em; color:#f90}
.tabbn .ant-btn:hover{opacity:.4}
.boxMain{background-color:#fff; padding:30px}
.boxFilter{padding-bottom:1em}
.boxFilter,.boxFilter>*{margin-bottom:.5em}
.boxFilter.bn>*{margin:0 1em 0 0; display: inline-block}
.boxFilter.bn>.ant-btn-link{padding:0 .5em}
.ant-table-placeholder{background-color:#fff}


+ 1
- 1
src/pages/Common/search.vue Bestand weergeven

@@ -8,7 +8,7 @@
<a-select-option v-for="(op,oid) in e.option" :key="oid" :value="op.value">{{op.text}}</a-select-option>
</a-select>
</div>
<div><a-button :loading="loadSoBn" type="primary" @click="onSearch()">搜索</a-button></div>
<div><a-button :loading="loadSoBn" type="primary" @click="onSearch(1)">搜索</a-button></div>
<div><a-button @click="filterReset()">重置</a-button></div>
<template v-for="e in listInput">
<a-button :key="e.name" v-if="e.type=='button'" type="primary" @click="isFn(e,'fn')">{{e.title}}</a-button>


+ 7
- 8
src/pages/User/list.vue Bestand weergeven

@@ -268,22 +268,21 @@ export default {
filterOption(input, option) {return (option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0);},
//列表
filterSearch(page){
// console.log(page)
// console.log(this.listInput)
if(typeof(page)=='object'){
this.pagination.current = page.current;
}
let count = (this.pagination.current-1)*this.pagination.pageSize;
let params={
roleId:this.listInput[0].value,
userName:this.listInput[1].value,
emailAddress:this.listInput[2].value,
phoneNumber:this.listInput[3].value,
notActive:this.listInput[4].value===0?false:(this.listInput[4].value===1?true:''),
isLockedOut:this.listInput[5].value===0?false:(this.listInput[5].value===1?true:''),
skipCount:count,
maxResultCount:this.pagination.pageSize,
}
for (let i in this.listInput){
let ts = this.listInput[i];
if (ts.value!==''){
if (ts.name==='notActive' || ts.name==='isLockedOut') params[ts.name] = ts.value===0?false:(ts.value===1?true:'');
else params[ts.name] = ts.value;
}
}
// console.log(params)
this.fetch(params);
},


+ 2
- 0
src/pages/agent/list.vue Bestand weergeven

@@ -126,6 +126,8 @@ export default {
// console.log(this.listInput)
if(typeof(page)=='object'){
this.pagination.current = page.current;
}else if (typeof (page) == 'number'){
this.pagination.current = page;
}
let count = (this.pagination.current-1)*this.pagination.pageSize;
let params={


+ 0
- 106
src/pages/order/OrderList.vue Bestand weergeven

@@ -1,106 +0,0 @@
<template>
<div class="boxMain">
<inc-search :listInput="listInput" :loadSoBn="tableLoad" :onSearch="filterSearch" :orderType="orderType"></inc-search>
<a-table class="tablesa" :columns="tableColumns" :data-source="tableData" :rowKey="lists => lists.id" :pagination="pagination" :loading="tableLoad" @change="filterSearch">
<router-link slot="orderNo" slot-scope="text,record" :to="'detail?id='+record.orderId"><a-icon type="file-text" /> {{text}}</router-link>
<span class="amount" slot="amount" slot-scope="text,record">金额:<span>${{ text }}</span><br>已付:<span>${{record.paidAmount||0}}</span></span>
<span slot="creationTime" slot-scope="text">{{formatDateTime(text)}}</span>
<div class="files" slot="files" slot-scope="text">
<ul>
<li v-for="(file,fid) in text" :key="fid"><a :href="file.url" :title="file.name" target="_blank"><a-icon type="link" /> {{file.name}}</a></li>
</ul>
</div>
</a-table>
</div>
</template>

<script>
import IncSearch from "@/pages/Common/search";
import {formatDate, resOrderStatus, resProTypes} from "@/services/Common";
import {OrderList} from "@/services/order/Order";
export default {
name: 'OrderList',
components: {IncSearch},

data(){
return{
orderType:[],
listInput:[
{type:'input',name:'OrderNo',title:'订单编号',value:''},
{type:'select',name:'orderStatus',title:'订单状态',value:'', width:'120px',
option:resOrderStatus(),
},
],
pagination: {
pageSize: 10,
current: 1,
showQuickJumper: true,
showTotal: (total) => `总计 ${total} 条`,
},
tableLoad: false,
tableColumns:[
{title: '订单编号',dataIndex: 'orderNo',key: 'orderNo',width:'260px',scopedSlots: { customRender: 'orderNo' },},
{title: '状态',dataIndex: 'orderStatusValue',key: 'orderStatusValue',width:'100px'},
{title: '创建时间',dataIndex: 'creationTime',key: 'creationTime',width:'160px',scopedSlots: { customRender: 'creationTime' },},
{title: '下单时间',dataIndex: 'orderTime',key: 'orderTime',width:'160px'},
{title: '时效',dataIndex: 'deliveryTime',key: 'deliveryTime',width:'120px'},
{title: '数量',dataIndex: 'qty',key: 'qty',width:'80px'},
{title: '文件',dataIndex: 'files',key: 'files',width:'300px',scopedSlots: { customRender: 'files' },},
{title: '金额',dataIndex: 'amount',key: 'amount',scopedSlots: { customRender: 'amount' }},
],
tableData:[],
}
},
mounted() {
var reg = /\/order\/((\w|-|\s)+)\//ig;
let routePath = this.$route.path.replace(reg, function() {
return arguments[1];
});
this.orderType = resProTypes(routePath);
this.filterSearch()

},
methods:{
getOrderStatus(key){
return resOrderStatus(key);
},
filterSearch(page){
// console.log(page)
// console.log(this.listInput)
if(typeof(page)=='object'){
this.pagination.current = page.current;
}
let count = (this.pagination.current-1)*this.pagination.pageSize;
let params={
orderType:this.orderType.proType,
orderNo:this.listInput[0].value,
orderStatus:this.listInput[1].value,
// sorting:this.listInput[2].value,
skipCount:count,
maxResultCount:this.pagination.pageSize,
}
// console.log(params)
this.fetch(params);
},
fetch(params = {}) {
this.tableLoad = true;
OrderList(params).then(data=>{
const pagination = { ...this.pagination};
pagination.total = data.totalCount;
this.tableLoad = false;
this.tableData = data.items;
this.pagination = pagination;
}).catch(err=>{
this.tableLoad = false;
})
},
formatDateTime(time){
return formatDate(time,'yyyy-MM-dd hh:mm');
},
}
}
</script>

<style scoped>

</style>

+ 0
- 531
src/pages/order/bomOrder/BomDetail.vue Bestand weergeven

@@ -1,531 +0,0 @@
<template>
<div class="boxMain">
<a-spin :spinning="loadPage">
<div class="boxFilter bn">
<bnOrderLogList :order-id="orderId" />
<a-button type="primary" :loading="loadQB" @click="fnQuoteBom">BOM报价</a-button>
<!-- <a-button type="primary" :loading="loadBomCheck" @click="fnShowOrderCheck(1)">审核</a-button>-->
<a-button type="primary" :loading="loadRecheckBom" @click="fnShowOrderCheck(2)">提交复审</a-button>
<!-- <a-button type="primary" :loading="loadBomSure" @click="fnBomSure">确认订单</a-button>-->
<a-button type="primary" :loading="loadProduceBom" @click="fnProduceBom">BOM投产</a-button>
<a-button type="primary" @click="fnBeforeBomSmtNum">更改元器件套数</a-button>
<bn-set-purchase-status v-if="detail.orderBase" :order-id="orderId" :order-status="detail.orderBase.orderPurchaseStatus" :getList="getOrderDetail"/>
<bnOrderCancel :order-id="orderId" />
</div>
<template v-if="detail.orderBase">
<div class="titsc"><b>基础信息</b></div>
<table class="tablesc">
<tr>
<!-- <td class="t">订单id:</td>-->
<!-- <td class="n">{{detail.orderBase.id}}</td>-->
<!-- <td class="t">用户Id:</td>-->
<!-- <td class="n">{{detail.orderBase.memberId}}</td>-->
<td class="t">订单编号:</td>
<td class="n">{{detail.orderBase.orderNo}}</td>
<td class="t">订单类型:</td>
<td class="n">{{getProTypes(detail.orderBase.proType).title}}</td>
<td class="t">订单状态:</td>
<td class="n">{{detail.orderBase.orderPurchaseStatusValue}}</td>
<td class="t">包裹编号:</td>
<td class="n">{{detail.orderBase.packageNo}}</td>
</tr>
<tr>
<td class="t">套数:</td>
<td class="n">{{detail.orderBase.qty}}</td>
<td class="t">订单备注:</td>
<td class="n">{{detail.orderBase.note}}</td>
<td class="t">复制订单编号:</td>
<td class="n">{{detail.orderBase.copyOrderNo}}</td>
<td class="t">返单订单编号:</td>
<td class="n">{{detail.orderBase.reOrderNo}}</td>
</tr>
<tr>
<td class="t">币种:</td>
<td class="n">{{detail.orderBase.currency}}</td>
<td class="t">系统计价:</td>
<td class="n">{{detail.orderBase.boardBrand}}</td>
<td class="t">成本价:</td>
<td class="n">{{detail.orderBase.isReOrder}}</td>
<td class="t">产品费:</td>
<td class="n">{{detail.orderBase.reOrderNo}}</td>
</tr>
<tr>
<td class="t">调整金额:</td>
<td class="n">{{detail.orderBase.adjustmentAmount}}</td>
<td class="t">优惠券金额:</td>
<td class="n">{{detail.orderBase.couponAmount}}</td>
<td class="t">销售价:</td>
<td class="n">{{detail.orderBase.salePrice}}</td>
<td class="t">总重:</td>
<td class="n">{{detail.orderBase.weight}}</td>
</tr>
<tr>
<td class="t">物流方式:</td>
<td class="n">{{detail.orderBase.shipType}}</td>
<td class="t">运费:</td>
<td class="n">{{detail.orderBase.shipAmount}}</td>
<td class="t">手续费:</td>
<td class="n">{{detail.orderBase.serviceCharge}}</td>
<td class="t">总金额:</td>
<td class="n">{{detail.orderBase.totalAmount}}</td>
</tr>
<tr>
<td class="t">支付金额:</td>
<td class="n">{{detail.orderBase.payAmount}}</td>
<td class="t">支付时间:</td>
<td class="n">{{formatDateTime(detail.orderBase.payTime)}}</td>
<td class="t">交期天数:</td>
<td class="n">{{detail.orderBase.deliveryDays}}</td>
<td class="t">交期:</td>
<td class="n">{{formatDateTime(detail.orderBase.date)}}</td>
</tr>
<tr>
<td class="t">创建日期:</td>
<td class="n" colspan="7">{{formatDateTime(detail.orderBase.creationTime)}}</td>
</tr>
<!-- <tr>-->
<!-- <td class="t"></td>-->
<!-- <td class="n"></td>-->
<!-- <td class="t"></td>-->
<!-- <td class="n"></td>-->
<!-- </tr>-->
</table>
</template>
<template v-if="detail.bomOrder">
<div class="titsc"><b>BOM订单信息</b></div>
<table class="tablesc">
<tr>
<td class="t">Bom订单Id:</td>
<td class="n">{{detail.bomOrder.bomId}}</td>
<td class="t">Smt套数:</td>
<td class="n">{{detail.bomOrder.smtNum}}</td>
<td class="t">Smt订单编号:</td>
<td class="n">{{detail.bomOrder.smtOrderNo}}</td>
<td class="t">元器件种类数:</td>
<td class="n">{{detail.bomOrder.proNum}}</td>
</tr>
<tr>
<td class="t">Bom名称:</td>
<td class="n">{{detail.bomOrder.bomName}}</td>
<td class="t">文件地址:</td>
<td class="n"><a v-if="detail.bomOrder.saveFilePath" :href="detail.bomOrder.saveFilePath" :title="detail.bomOrder.saveFilePath" target="_blank">预览下载</a></td>
<td class="t">是否显示给客户:</td>
<td class="n">{{detail.bomOrder.isShowToCus}}</td>
<td class="t">客供代购比:</td>
<td class="n">{{detail.bomOrder.customerPurchase}}</td>
</tr>
<tr>
<td class="t">交期:</td>
<td class="n">{{formatDateTime(detail.bomOrder.customerDeliveryDate)}}</td>
<td class="t">代购物料交期:</td>
<td class="n">{{formatDateTime(detail.bomOrder.agentDeliveryDate)}}</td>
<td class="t">是否是补料:</td>
<td class="n">{{detail.bomOrder.isSupplement}}</td>
<td class="t">复审人员:</td>
<td class="n">{{detail.bomOrder.reCheckerName}}</td>
</tr>
<tr>
<td class="t">审核原因:</td>
<td class="n">{{detail.bomOrder.checkedReason}}</td>
<td class="t">内部调度费:</td>
<td class="n">{{detail.bomOrder.transportPrice}}</td>
<td class="t">元器件成本总价:</td>
<td class="n">{{detail.bomOrder.qrgTotalMoney}}</td>
<td class="t">结算总价:</td>
<td class="n">{{detail.bomOrder.settleTotalMoney}}</td>
</tr>
<tr>
<td class="t">代理商成本总价:</td>
<td class="n">{{detail.bomOrder.totalMoney}}</td>
<td class="t">代理商销售总价:</td>
<td class="n">{{detail.bomOrder.agentSaleTotalMoney}}</td>
<td class="t"></td>
<td class="n"></td>
<td class="t"></td>
<td class="n"></td>
</tr>
</table>
</template>
<template v-if="detail.bomRelaions">
<div class="titsc"><b>元器件信息</b>
<a-button style="margin-left:2em" type="primary" :loading="loadRelationsBom" @click="showRelationsBom=true">新增BOM元器件</a-button>
</div>
<a-table class="tablesa c" :columns="tableBRColumns" :data-source="detail.bomRelaions" :scroll="{x:5000,y:600}" :rowKey="lists => lists.id" :pagination="false">
<span class="tableEdit" slot="id" slot-scope="text,record,index">
<a-spin :spinning="record.loadEdit">
<em>{{index+1}}</em>
<a-button type="link" @click="showBDBR(text,index)">删除</a-button>
<a-button v-if="!record.edit" type="link" @click="showBEBR(text,index)">编辑</a-button>
<a-button v-if="record.edit" type="link" @click="fnEditBomRelatioin(text,index)">保存</a-button>
</a-spin>
</span>
<span slot="bitName" slot-scope="text,record"><span v-if="!record.edit">{{text}}</span><a-input v-else v-model="record.bitName" /></span>
<span slot="singleDosage" slot-scope="text,record"><span v-if="!record.edit">{{text}}</span><a-input v-else v-model="record.singleDosage" /></span>
<span slot="buyNum" slot-scope="text,record"><span v-if="!record.edit">{{text}}</span><a-input v-else v-model="record.buyNum" /></span>
<span slot="feedWay" slot-scope="text,record"><span v-if="!record.edit">{{resStatus(text,listArrCf.feedWay)}}</span>
<a-select v-else v-model="record.feedWay" style="min-width:80px">
<a-select-option v-for="(li,i) in listArrCf.feedWay" :disabled="i==0" :key="i" :title="li" :value="i">{{li}}</a-select-option>
</a-select>
</span>
<span slot="status" slot-scope="text,record"><span v-if="!record.edit">{{resStatus(text,listArrCf.status)}}</span>
<a-select v-else v-model="record.status" style="min-width:80px">
<a-select-option v-for="(li,i) in listArrCf.status" :key="i" :title="li" :value="i">{{li}}</a-select-option>
</a-select>
</span>
<span slot="adminRemark" slot-scope="text,record"><span v-if="!record.edit">{{text}}</span><a-input v-else v-model="record.adminRemark" /></span>
<span slot="updateStatus" slot-scope="text">{{resStatus(text,listArrCf.updateStatus)}}</span>
</a-table>
<div class="tableOFAT" style="display: none">
<table class="tablesc c" style="width:4600px">
<tr>
<td class="t" style="width:140px">操作:</td>
<td class="t">名称:</td>
<td class="t">元器件报价状态:</td>
<td class="t">重量:</td>
<td class="t">需求数:</td>
<td class="t">单片用量:</td>
<td class="t">实际到料数:</td>
<td class="t">备料数:</td>
<td class="t">供料方式:</td>
<td class="t">位号:</td>
<td class="t">型号:</td>
<td class="t">品牌:</td>
<td class="t">参数:</td>
<td class="t">批号:</td>
<td class="t">封装:</td>
<td class="t">料号类别:</td>
<td class="t">产品编号:</td>
<td class="t">修改状态:</td>
<td class="t">类目名称类型:</td>
<td class="t">报价有效期:</td>
<td class="t">交期天数:</td>
<td class="t">客户备注:</td>
<td class="t">业务员备注:</td>
<td class="t">报价员备注:</td>
<td class="t">最终供应商:</td>
<td class="t">最终供应商key:</td>
<td class="t">最终供应商备注:</td>
<td class="t">SMT套数:</td>
<td class="t">规格书地址:</td>
<td class="t">单价:</td>
<td class="t">报价成本:</td>
<td class="t">最终采购价:</td>
<td class="t">结算价格:</td>
<td class="t">指导销售价:</td>
<td class="t">代理商指导销售价:</td>
<td class="t">代理商实际销售价:</td>
<td class="t">元器件成本总价:</td>
<td class="t">结算总价:</td>
<td class="t">代理商指导销售价:</td>
<td class="t">代理商实际销售价:</td>
</tr>
<!-- <tr v-for="(br,bid) in detail.bomRelaions" :key="bid">-->
<!-- <td class="n">删除 编辑</td>-->
<!-- </tr>-->
</table>
</div>
<!-- <div class="boxBn">-->
<!-- <a-button type="danger" @click="fnBeforeDelBomRelation">删除选中元器件</a-button>-->
<!-- </div>-->
<a-modal title="新增BOM元器件" width="600px" :visible="showRelationsBom" :confirm-loading="confirmSubmit" @cancel="showRelationsBom=false" @ok="fnRelationsBom">
<a-spin :spinning="loadForm">
<a-form-model v-model="formRelationsBom" v-bind="layout">
<a-form-model-item label="上传文件地址">
<a-spin :spinning="loadUp">
<a-input-group compact>
<a-input style="width:60%" v-model="formRelationsBom.saveFilePath" />
<a-upload name="file" :showUploadList="false" :customRequest="(file)=>{fnToOssUpfile(file,'gerber')}" accept=".xls,.xlsx,.csv">
<a-button type="primary"><a-icon type="upload" /> 上传文件</a-button>
</a-upload>
</a-input-group>
</a-spin>
</a-form-model-item>
</a-form-model>
</a-spin>
</a-modal>
<a-modal title="删除元器件" :width="300" :visible="showDelBR" :confirm-loading="confirmLoading" @ok="fnDelBomRelation" @cancel="showDelBR = false">
<p>备注:<a-input style="width:200px" v-model="delBRRemark" /></p>
</a-modal>
</template>
</a-spin>
<a-modal title="更改元器件套数" :width="300" :visible="showBomSmtNum" :confirm-loading="confirmLoading" @ok="fnBomSmtNum" @cancel="showBomSmtNum = false">
<p>修改套数:<a-input style="width:100px" v-model="bomSmtNum" /></p>
</a-modal>
<a-modal :title="formOrderCheck.OCType===1?'审核订单':'复审订单'" :visible="showOrderCheck" :confirm-loading="confirmSubmit" @ok="fnBomCheck" @cancel="showOrderCheck=false">
<a-form-model v-model="formOrderCheck" v-bind="layout">
<a-form-model-item label="审核操作">
<a-radio-group v-model="formOrderCheck.isPass">
<a-radio :value="1">审核通过</a-radio>
<!-- <a-radio :value="0">审核不通过驳回</a-radio>-->
</a-radio-group>
</a-form-model-item>
<!-- <a-form-model-item label="备注"><a-textarea v-model="formOrderCheck.remark" placeholder="" :rows="3" /></a-form-model-item>-->
</a-form-model>
</a-modal>
</div>
</template>

<script>
import {
resOrderBomDetail,
OrderBomQuote,
OrderBomRelations,
OrderReadBomFile,
OrderBomProduce,
DelBomRelation,
putBomRelation,
putBomSmtNum,
OrderBomSure,
OrderBOMCheck
} from "@/services/order/Order";
import {formatDate,resProTypes,resOrderStatus} from "@/services/Common";
import bnOrderLogList from "@/pages/Common/bnOrderLogList";
import bnOrderCancel from "@/pages/Common/bnOrderCancel";
import {upFileToOSS} from "@/services/uploadFile";
import BnSetPurchaseStatus from "@/pages/Common/bnSetPurchaseStatus";

export default {
name: 'PcbDetail',
components: {bnOrderLogList,bnOrderCancel,BnSetPurchaseStatus},
data(){
return{
loadPage:true,orderId:'',detail: {},loadQB:false,loadRecheckBom:false,loadRelationsBom:false,loadProduceBom:false,loadUp:false,loadForm:false,confirmLoading:false,showDelBR:false,showRelationsBom:false,confirmSubmit:false,selBRID:'',delBRRemark:'',showBomSmtNum:false,loadBomCheck:false,loadBomSure:false,
formRelationsBom:{bomId:'',saveFilePath:''},bomSmtNum:0,
listArrCf:{
status:['未核价','报价中','已报价','需重新报价','作废','驳回'],
feedWay:['供料方式','代购','客供','代购不贴','客供不贴','其他'],
updateStatus:['无','无修改','修改过'],
},
layout: {
labelCol: { span:5 },
wrapperCol: { span:17 },
},
formOrderCheck:{orderId:'',isPass:1,remark:'',OCType:''},showOrderCheck:false,
tableBRColumns:[
{title:'操作',align:'center',dataIndex: 'id',key: 'id',fixed: 'left',width:'170px',scopedSlots: { customRender: 'id' }},
{title:'名称',align:'center',dataIndex: 'bomName',key: 'bomName',},
{title:'业务员备注',align:'center',dataIndex: 'adminRemark',key: 'adminRemark',scopedSlots: { customRender: 'adminRemark' }},
{title:'报价状态',align:'center',dataIndex: 'status',key: 'status',scopedSlots: { customRender: 'status' }},
{title:'位号',align:'center',dataIndex: 'bitName',key: 'bitName',scopedSlots: { customRender: 'bitName' }},
{title:'单片用量',align:'center',dataIndex: 'singleDosage',key: 'singleDosage',scopedSlots: { customRender: 'singleDosage' }},
{title:'需求数',align:'center',dataIndex: 'buyNum',key: 'buyNum',scopedSlots: { customRender: 'buyNum' }},
{title:'供料方式',align:'center',dataIndex: 'feedWay',key: 'feedWay',scopedSlots: { customRender: 'feedWay' }},
{title:'重量',align:'center',dataIndex: 'unitWeight',key: 'unitWeight',},
{title:'实际到料数',align:'center',dataIndex: 'realReceiveNum',key: 'realReceiveNum',},
{title:'备料数',align:'center',dataIndex: 'reBuyNum',key: 'reBuyNum',},
{title:'型号',align:'center',dataIndex: 'partNo',key: 'partNo',},
{title:'品牌',align:'center',dataIndex: 'mfg',key: 'mfg',},
{title:'参数',align:'center',dataIndex: 'parameter',key: 'parameter',},
{title:'批号',align:'center',dataIndex: 'batchNum',key: 'batchNum',},
{title:'封装',align:'center',dataIndex: 'pack',key: 'pack',},
{title:'料号类别',align:'center',dataIndex: 'bomClass',key: 'bomClass',},
{title:'产品编号',align:'center',dataIndex: 'productNo',key: 'productNo',},
{title:'修改状态',align:'center',dataIndex: 'updateStatus',key: 'updateStatus',scopedSlots: { customRender: 'updateStatus' }},
{title:'类目名称类型',align:'center',dataIndex: 'categoryName',key: 'categoryName',},
{title:'报价有效期',align:'center',dataIndex: 'validTime',key: 'validTime',},
{title:'交期天数',align:'center',dataIndex: 'deliveryDays',key: 'deliveryDays',},
{title:'客户备注',align:'center',dataIndex: 'cusRemark',key: 'cusRemark',},
{title:'报价员备注',align:'center',dataIndex: 'supplierRemark',key: 'supplierRemark',},
{title:'最终供应商',align:'center',dataIndex: 'finallySupplier',key: 'finallySupplier',},
{title:'供应商key',align:'center',dataIndex: 'finallySupplierKey',key: 'finallySupplierKey',},
{title:'供应商备注',align:'center',dataIndex: 'finallySupplierRemark',key: 'finallySupplierRemark',},
{title:'SMT套数',align:'center',dataIndex: 'smtNum',key: 'smtNum',},
{title:'规格书地址',align:'center',dataIndex: 'pdfPath',key: 'pdfPath',},
{title:'单价',align:'center',dataIndex: 'unitPrice',key: 'unitPrice',},
{title:'报价成本',align:'center',dataIndex: 'qrgUnitPrice',key: 'qrgUnitPrice',},
{title:'最终采购价',align:'center',dataIndex: 'finallyOrgPrice',key: 'finallyOrgPrice',},
{title:'结算价格',align:'center',dataIndex: 'settlePrice',key: 'settlePrice',},
{title:'指导销售价',align:'center',dataIndex: 'guidePrice',key: 'guidePrice',},
{title:'指导销售价',align:'center',dataIndex: 'agentGuidePrice',key: 'agentGuidePrice',},
{title:'实际销售价',align:'center',dataIndex: 'agentSalePrice',key: 'agentSalePrice',},
{title:'成本总价',align:'center',dataIndex: 'qrgTotalMoney',key: 'qrgTotalMoney',},
{title:'结算总价',align:'center',dataIndex: 'settleTotalMoney',key: 'settleTotalMoney',},
{title:'指导销售价',align:'center',dataIndex: 'totalMoney',key: 'totalMoney',},
{title:'实际销售价',align:'center',dataIndex: 'agentSaleTotalMoney',key: 'agentSaleTotalMoney',},
],
}
},
mounted() {
this.orderId = this.$route.query.id;
this.getOrderDetail();
},
methods:{
async getOrderDetail(){
this.loadPage = true;
let res = await resOrderBomDetail(this.orderId);
for (let i in res.bomRelaions){
res.bomRelaions[i].edit = false;
res.bomRelaions[i].loadEdit = false;
}
this.detail = res;
this.loadPage = false;
},
getProTypes(key){
return resProTypes(key);
},
getOrderStatus(key){
return resOrderStatus(key);
},
formatDateTime(time){
return formatDate(time,'yyyy-MM-dd hh:mm');
},
fnShowOrderCheck(key){
this.formOrderCheck.OCType = key;
this.showOrderCheck = true;
},
//BOM审核
fnBomCheck(){
this.confirmSubmit = true;
this.formOrderCheck.orderId = this.orderId;
OrderBOMCheck(this.formOrderCheck).then(res=>{
this.$message.success('审核成功!');
this.getOrderDetail();
this.showOrderCheck = false;
}).catch(err=>{
console.log(err)
}).finally(res=>{
this.confirmSubmit = false;
})
},
//BOM提交复审
// fnRecheckBom(){
// this.loadRecheckBom = true;
// OrderBomRecheck(this.orderId).then(res=>{
// this.$message.success('提交成功!');
// this.loadRecheckBom = false;
// }).catch(err=>{
// this.loadRecheckBom = false;
// });
// },
//Bom确认
fnBomSure(){
this.loadBomSure = true;
OrderBomSure(this.orderId).then(res=>{
this.$message.success('确认成功!');
this.getOrderDetail();
this.loadBomSure = false;
}).catch(err=>{
this.loadBomSure = false;
})
},
//BOM报价
fnQuoteBom(){
this.loadQB = true;
OrderBomQuote(this.orderId).then(res=>{
this.$message.success('报价成功!');
this.loadQB = false;
}).catch(err=>{
this.loadQB = false;
});
},
//新增BOM元器件
fnRelationsBom(){
this.loadRelationsBom = true;
this.formRelationsBom.bomId = this.detail.bomOrder.bomId;
OrderBomRelations(this.formRelationsBom).then(res=>{
this.$message.success('提交成功!');
this.loadRelationsBom = false;
this.showRelationsBom = false;
this.getOrderDetail();
}).catch(err=>{
this.loadRelationsBom = false;
this.showRelationsBom = false;
});
},
//上传OSS
async fnToOssUpfile(file,type){
this.loadUp = true;
let resUpInfo = await upFileToOSS(file);
// let resUpInfo = {url:'https://test-jpfile1.oss-cn-shenzhen.aliyuncs.com/allpcb/2022/7/30/1659151521423/NLmr2gve.xls'};
if(resUpInfo.url){
this.formRelationsBom.saveFilePath = resUpInfo.url;
let res = await OrderReadBomFile('filePath',resUpInfo.url)
this.$message.success('文件上传成功!');
// this.fnReadBomFile({filePath:resUpInfo.url})
}
this.loadUp = false;
},
//编辑BOM元器件
showBEBR(id,index){
this.detail.bomRelaions[index].edit=true;
},
fnEditBomRelatioin(id,index){
this.detail.bomRelaions[index].loadEdit=true;
let br = this.detail.bomRelaions[index];
let pm = {
bitNum:br.bitName,
singleDosage:br.singleDosage,
buyNum:br.buyNum,
feedWay:br.feedWay,
status:br.status,
remark:br.adminRemark
}
putBomRelation(id,pm).then(res=>{
this.$message.success('修改成功');
this.detail.bomRelaions[index].loadEdit=false;
this.getOrderDetail();
}).catch(err=>{
this.detail.bomRelaions[index].loadEdit=false;
this.detail.bomRelaions[index].edit=true;
})
// console.log(id,index)
},
//删除BOM元器件
showBDBR(id,index){
// this.detail.bomRelaions[index].edit=true;
this.selBRID = id;
this.showDelBR = true;
},
fnDelBomRelation(){
let pm = {
id:this.selBRID,
remark:this.delBRRemark,
}
this.confirmLoading = true;
DelBomRelation(pm).then(res=>{
this.$message.success('删除成功!');
this.confirmLoading = false;
this.showDelBR = false;
this.getOrderDetail();
}).catch(err=>{
this.confirmLoading = false;
this.showDelBR = false;
})
},
//BOM投产
fnProduceBom(){
this.loadProduceBom = true;
OrderBomProduce(this.orderId).then(res=>{
this.$message.success('投产成功!');
this.loadProduceBom = false;
}).catch(err=>{
this.loadProduceBom = false;
})
},
//更改元器件套数
fnBeforeBomSmtNum(){
this.bomSmtNum = this.detail.bomOrder.smtNum
this.showBomSmtNum=true
},
fnBomSmtNum(){
this.confirmLoading = true;
putBomSmtNum(this.orderId,this.bomSmtNum).then(res=>{
this.$message.success('修改成功');
this.showBomSmtNum = false;
this.confirmLoading = false;
this.getOrderDetail();
}).catch(err=>{
this.confirmLoading = false;
});

},
//返回状态
resStatus(key,list){
return list[key];
},
}
}
</script>

<style scoped>
</style>

+ 0
- 783
src/pages/order/pcbOrder/PcbDetail.vue Bestand weergeven

@@ -1,783 +0,0 @@
<template>
<div class="boxMain">
<a-spin :spinning="loadPage">
<div class="boxFilter bn">
<bnOrderLogList :order-id="orderId" />
<a-button type="primary" @click="fnShowOrderCheck(1)">审核订单</a-button>
<a-button v-if="isOutFactory == 1" type="primary" @click="fnShowOrderCheck(2)">复审</a-button>
<a-button v-if="!ifEdit" type="primary" :loading="loadOE" @click="BeforeOrderEdit">修改订单</a-button>
<a-button v-else @click="ifEdit=false">退出修改</a-button>
<a-button type="primary" @click="fnAdjustAmount">调整订单金额</a-button>
<a-button type="primary" v-if="orderStatus<70 && orderStatus>=0 && isOutFactory == 1" :loading="loadOffer" @click="fnPcbOffer">申请外发报价</a-button>
<bn-set-purchase-status :order-id="orderId" :order-status="orderDetail.orderPurchaseStatus" :getList="getOrderDetail"/>
<bnOrderCancel :order-id="orderId" />
</div>
<template v-if="ifEdit">
<div class="titsc"><b>修改PCB订单 No:{{orderDetail.orderNo}}</b></div>
<template v-if="orderDetail">
<table class="tablesc">
<tr>
<td class="t">板材品牌</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.coreType">
<a-radio-button v-for="(item,index) in typeList.CoreType" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">TG值</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.coreTg">
<a-radio-button v-for="(item,index) in typeList.CoreTg" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">宽x高</td><td class="n" colspan="3"><a-input v-model="formPQ.boardWidth" style="width:70px" /> x <a-input v-model="formPQ.boardHeight" style="width:70px" /> mm</td>
<td class="t">数量({{formPQ.boardType}})</td><td class="n" colspan="3"><a-input v-model="formPQ.num"/><span>(小于30必须5的倍数,大于30必须10的倍数)</span></td>
</tr>
<tr>
<td class="t">板层</td>
<td class="n" colspan="7">
<a-radio-group v-model="formPQ.boardLayers">
<a-radio-button v-for="(item,index) in typeList.BoardLayers" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">板厚</td>
<td class="n" colspan="7">
<a-radio-group v-model="formPQ.boardThickness">
<a-radio-button v-for="(item,index) in typeList.BoardThickness" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">阻焊颜色</td>
<td class="n" colspan="3">
<a-radio-group v-model="formPQ.solderColor">
<a-radio-button v-for="(item,index) in typeList.SolderColor" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">字符颜色</td>
<td class="n" colspan="3">
<a-radio-group v-model="formPQ.fontColor">
<a-radio-button v-for="(item,index) in typeList.FontColor" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">底层阻焊颜色</td>
<td class="n" colspan="3">
<a-radio-group v-model="formPQ.solderColorBottom">
<a-radio-button v-for="(item,index) in typeList.SolderColor" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">底层字符颜色</td>
<td class="n" colspan="3">
<a-radio-group v-model="formPQ.fontColorBottom">
<a-radio-button v-for="(item,index) in typeList.FontColor" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">阻焊覆盖</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.solderCover">
<a-radio-button v-for="(item,index) in typeList.SolderCover" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">拼板XY</td><td class="n">
<a-input v-model="formPQ.pinBanX" style="width:70px" /> x <a-input v-model="formPQ.pinBanY" style="width:70px" />
</td>
<td class="t">拼板数量</td><td class="n">
<a-input v-model="formPQ.pinBanNum" style="width:70px" />
</td>
</tr>
<tr>
<td class="t">工艺边</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.processEdges">
<a-radio-button v-for="(item,index) in typeList.ProcessEdges" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">工艺边宽</td><td class="n" colspan="3"><a-input v-model="formPQ.processEdgesWidth" style="width:70px" /></td>
</tr>
<tr>
<td class="t">V割方式</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.vCut">
<a-radio-button v-for="(item,index) in typeList.VCut" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">槽间距(高x宽)</td><td class="n" colspan="3"><a-input v-model="formPQ.grooveHeight" style="width:70px" /> x <a-input v-model="formPQ.grooveWidth" style="width:70px" /></td>
</tr>
<tr>
<td class="t">铜厚(外层)</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.copperThickness">
<a-radio-button v-for="(item,index) in typeList.CopperThickness" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">焊盘表面处理</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.surfaceFinish">
<a-radio-button v-for="(item,index) in typeList.SurfaceFinish" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">铜厚(内层)</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.innerCopperThickness">
<a-radio-button v-for="(item,index) in typeList.InnerCopperThickness" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">沉金厚度</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.imGoldThinckness">
<a-radio-button v-for="(item,index) in typeList.ImGoldThinckness" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">最小孔径</td><td class="n" colspan="7">
<a-radio-group v-model="formPQ.vias">
<a-radio-button v-for="(item,index) in typeList.Vias" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">最小线宽/线距</td><td class="n" colspan="7">
<a-radio-group v-model="formPQ.lineWeight">
<a-radio-button v-for="(item,index) in typeList.LineWeight" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">出货类型</td><td class="n">
<a-radio-group v-model="formPQ.boardType">
<a-radio-button v-for="(item,index) in typeList.BoardType" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">是否接受打叉版</td><td class="n">
<a-radio-group v-model="formPQ.acceptCrossed">
<a-radio-button v-for="(item,index) in typeList.AcceptCrossed" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">BGA数量</td><td class="n"><a-input v-model="formPQ.bgaNum" style="width:70px" /></td>
<td class="t">BGA尺寸</td><td class="n"><a-input v-model="formPQ.bgaSize" style="width:70px" /></td>
</tr>
<tr>
<td class="t">测试方式</td><td class="n" colspan="3">
<a-radio-group v-model="formPQ.flyingProbe">
<a-radio-button v-for="(item,index) in typeList.FlyingProbe" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">阻抗</td><td class="n">
<a-radio-group v-model="formPQ.isImpedance">
<a-radio-button v-for="(item,index) in typeList.IsImpedance" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">阻抗报告</td><td class="n">
<a-radio-group v-model="formPQ.impedanceReport">
<a-radio-button v-for="(item,index) in typeList.ImpedanceReport" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">孔密度</td><td class="n"><a-input v-model="formPQ.boardHoleNum" style="width:70px" /></td>
<td class="t">IPCLevel 出货标准</td><td class="n">
<a-radio-group v-model="formPQ.ipcLevel">
<a-radio-button v-for="(item,index) in typeList.IPCLevel" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">确认生产稿</td><td class="n">
<a-radio-group v-model="formPQ.productFileSure">
<a-radio-button v-for="(item,index) in typeList.ProductFileSure" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">成型方式</td><td class="n">
<a-radio-group v-model="formPQ.formingType">
<a-radio-button v-for="(item,index) in typeList.FormingType" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">出货报告</td><td class="n" colspan="5">
<a-checkbox-group v-model="formPQ.needReportList">
<a-checkbox v-for="(item,index) in typeList.NeedReportList" :key="index" :value="item.dataValue">{{item.caption}}</a-checkbox>
</a-checkbox-group></td>
<td class="t">CAM高端个性化</td><td class="n">
<a-radio-group v-model="formPQ.camEngineer">
<a-radio-button v-for="(item,index) in typeList.CamEngineer" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">锣程</td><td class="n"><a-input v-model="formPQ.routLength" style="width:70px" /></td>
<td class="t">电镀前工艺</td><td class="n">
<a-radio-group v-model="formPQ.beforePlating">
<a-radio-button v-for="(item,index) in typeList.BeforePlating" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">更改料号</td><td class="n"><a-input v-model="formPQ.changeItemNum" /></td>
<td class="t">更改周期标识</td><td class="n"><a-input v-model="formPQ.changePeriod" /></td>
</tr>
<tr>
<td class="t">线路工艺</td><td class="n">
<a-radio-group v-model="formPQ.imageTranster">
<a-radio-button v-for="(item,index) in typeList.ImageTranster" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">阻焊工艺</td><td class="n">
<a-radio-group v-model="formPQ.solderTransfer">
<a-radio-button v-for="(item,index) in typeList.SolderTransfer" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">出货报告材质</td><td class="n">
<a-radio-group v-model="formPQ.reportMaterial">
<a-radio-button v-for="(item,index) in typeList.ReportMaterial" :key="index" :value="Number(item.dataValue)">{{item.caption}}</a-radio-button>
</a-radio-group></td>
<td class="t">是否外发</td><td class="n">
<a-radio-group v-model="formPQ.isOutFactory">
<a-radio-button :value="0">否</a-radio-button>
<a-radio-button :value="1">是</a-radio-button>
</a-radio-group></td>
</tr>
<tr>
<td class="t">订单备注</td><td class="n" colspan="7"><a-input v-model="formPQ.Note"/></td>
</tr>
<tr>
<td class="t">特殊工艺</td>
<td class="n" colspan="7">
<template v-for="(item,index) in arrSpecialList">
<div class="boxListSpecials" :key="item.typeNo" v-if="item.valueType==1"><div class="t">{{item.caption}}<em>{{selSL[index].typeName}}</em></div><a-input v-model="selSL[index].typeValue" style="width:100px"/></div>
<div class="boxListSpecials" :key="item.typeNo" v-else><div class="t">{{item.caption}}<em>{{selSL[index].typeName}}</em></div>
<a-radio-group v-model="selSL[index].typeValue">
<a-radio-button v-for="(item,index) in item.processDataList" :key="index" :value="item.dataValue">{{item.caption}}</a-radio-button>
</a-radio-group>
</div>
</template>
</td>
</tr>
</table>
</template>
<!-- <a-spin :spinning="loadEdit">-->
<div class="boxBn" v-if="ifEdit"><a-button @click="ifEdit=false">退出修改</a-button><a-button :loading="loadEdit" type="danger" @click="upOrderEdit">保存修改</a-button></div>
<!-- </a-spin>-->
</template>
<template v-else>
<div class="titsc"><b>基本信息</b></div>
<table class="tablesc">
<template v-if="orderDetail">
<tr>
<td class="t">订单编号</td><td class="n">{{orderDetail.orderNo}}</td>
<td class="t">订单状态</td><td class="n">{{orderDetail.orderPurchaseStatusValue}}</td>
<td class="t">包裹单号</td><td class="n">{{orderDetail.packageNo}}</td>
<td class="t">产品类型</td><td class="n">{{orderDetail.proTypeValue}}</td>
</tr>
<tr>
<td class="t">客编</td><td class="n">{{orderDetail.memberCode}}</td>
<td class="t">业务员</td><td class="n">{{orderDetail.adminName}}</td>
<td class="t">订单备注</td><td class="n">{{orderDetail.note}}</td>
<td class="t">调整金额(浮动金额)</td><td class="n">{{orderDetail.adjustmentAmount}}</td>
</tr>
<tr>
<td class="t">销售价</td><td class="n">{{orderDetail.salePrice}}</td>
<td class="t">运费</td><td class="n">{{orderDetail.shipAmount}}</td>
<td class="t">物流方式</td><td class="n">{{orderDetail.shipType}}</td>
<td class="t">调整运费</td><td class="n">{{orderDetail.adjustmentShipAmount}}</td>
</tr>
<tr>
<td class="t">总金额</td><td class="n">{{orderDetail.totalAmount}}</td>
<td class="t">实际支付金额</td><td class="n">{{orderDetail.payAmount}}</td>
<td class="t">最后支付时间</td><td class="n">{{formatDateTime(orderDetail.payTime)}}</td>
<td class="t">PCBA关联单号</td><td class="n">{{orderDetail.pcbaNo}}</td>
</tr>
<tr>
<td class="t">返单号</td><td class="n">{{orderDetail.reOrderNo}}</td>
<td class="t">根单号</td><td class="n">{{orderDetail.rootOrderNo}}</td>
<td class="t">创建时间</td><td class="n">{{formatDateTime(orderDetail.creationTime)}}</td>
<td class="t">附件列表</td>
<td class="n">
<ul class="listFiles">
<li v-for="(file,fid) in orderDetail.files" :key="fid"><a :href="file.url" target="_blank"><a-icon type="link" /> {{file.name}}</a></li>
</ul>
</td>
</tr>
<tr>
<td class="t">是否外发</td><td class="n">{{isOutFactory===0?'非外发':(isOutFactory===1?'外发':'')}}</td>
</tr>
</template>
</table>
<div class="titsc"><b>PCB信息</b></div>
<table class="tablesc">
<template v-if="pcbDetail.pcbBaseData">
<tr>
<td class="t">租户Id:</td>
<td class="n">{{pcbDetail.pcbBaseData.tenantId}}</td>
<td class="t">订单id:</td>
<td class="n">{{pcbDetail.pcbBaseData.orderId}}</td>
<td class="t">订单编号:</td>
<td class="n">{{pcbDetail.pcbBaseData.orderNo}}</td>
<td class="t">板材大类:</td>
<td class="n">{{pcbDetail.pcbBaseData.proType}}</td>
</tr>
<tr>
<td class="t">板材:</td>
<td class="n">{{pcbDetail.pcbBaseData.coreType}}</td>
<td class="t">板材tg值:</td>
<td class="n">{{pcbDetail.pcbBaseData.coreTg}}</td>
<td class="t">板材code:</td>
<td class="n">{{pcbDetail.pcbBaseData.coreTypeCode}}</td>
<td class="t">重量:</td>
<td class="n">{{pcbDetail.pcbBaseData.totalWeight}}</td>
</tr>
<tr>
<td class="t">面积:</td>
<td class="n">{{pcbDetail.pcbBaseData.boardArea}}</td>
<td class="t">板材品牌:</td>
<td class="n">{{pcbDetail.pcbBaseData.boardBrand}}</td>
<td class="t">是否为返单:</td>
<td class="n">{{pcbDetail.pcbBaseData.isReOrder}}</td>
<td class="t">返单编号:</td>
<td class="n">{{pcbDetail.pcbBaseData.reOrderNo}}</td>
</tr>
<tr>
<td class="t">交期类别:</td>
<td class="n">{{pcbDetail.pcbBaseData.deliveryType}}</td>
<td class="t">交期天数:</td>
<td class="n">{{pcbDetail.pcbBaseData.deliveryDays}}</td>
<td class="t">交期:</td>
<td class="n">{{formatDateTime(pcbDetail.pcbBaseData.deliveryDate)}}</td>
<td class="t">生产单号:</td>
<td class="n">{{pcbDetail.pcbBaseData.proOrderNo}}</td>
</tr>
</template>
<template v-if="pcbDetail.areaProcessData">
<tr>
<td class="t">宽 x 高:</td>
<td class="n">{{pcbDetail.areaProcessData.boardWidth}} x {{pcbDetail.areaProcessData.boardHeight}}</td>
<td class="t">数量:</td>
<td class="n">{{pcbDetail.areaProcessData.num}}</td>
<td class="t">pcs数:</td>
<td class="n">{{pcbDetail.areaProcessData.pcsNum}}</td>
<td class="t">set数:</td>
<td class="n">{{pcbDetail.areaProcessData.setNum}}</td>
</tr>
<tr>
<td class="t">拼版类别:</td>
<td class="n">{{pcbDetail.areaProcessData.boardType}}</td>
<td class="t">是否接受打叉板:</td>
<td class="n">{{pcbDetail.areaProcessData.acceptCrossed}}</td>
<td class="t">拼版:</td>
<td class="n">{{pcbDetail.areaProcessData.pinBanX}} x {{pcbDetail.areaProcessData.pinBanY}}</td>
<td class="t">拼版数:</td>
<td class="n">{{pcbDetail.areaProcessData.pinBanNum}}</td>
</tr>
<tr>
<td class="t">工艺边:</td>
<td class="n">{{pcbDetail.areaProcessData.processEdges}}</td>
<td class="t">工艺边宽:</td>
<td class="n">{{pcbDetail.areaProcessData.processEdgesWidth}}</td>
<td class="t">v割方式:</td>
<td class="n">{{pcbDetail.areaProcessData.vCut}}</td>
<td class="t">槽间距-高x宽:</td>
<td class="n">{{pcbDetail.areaProcessData.grooveHeight}} x {{pcbDetail.areaProcessData.grooveWidth}}</td>
</tr>
<tr>
<td class="t">单Set出货尺寸宽x高:</td>
<td class="n" colspan="7">{{pcbDetail.areaProcessData.deliverWidth}} x {{pcbDetail.areaProcessData.deliverHeight}}</td>
</tr>
</template>
<template v-if="pcbDetail.areaProcessData">
<tr>
<td class="t">是否需要阻焊:</td>
<td class="n">{{pcbDetail.personalizedProcessData.isImpedance}}</td>
<td class="t">阻焊报告:</td>
<td class="n">{{pcbDetail.personalizedProcessData.impedanceReport}}</td>
<td class="t">确认文件信息:</td>
<td class="n">{{pcbDetail.personalizedProcessData.productFileSure}}</td>
<td class="t">CAM工程师等级:</td>
<td class="n">{{pcbDetail.personalizedProcessData.camEngineer}}</td>
</tr>
<tr>
<td class="t">IPC标准等级:</td>
<td class="n">{{pcbDetail.personalizedProcessData.ipcLevel}}</td>
<td class="t">出货报告:</td>
<td class="n">{{pcbDetail.personalizedProcessData.needReportList}}</td>
<td class="t">报告材质:</td>
<td class="n">{{pcbDetail.personalizedProcessData.reportMaterial}}</td>
<td class="t">BGA数量:</td>
<td class="n">{{pcbDetail.personalizedProcessData.bgaNum}}</td>
</tr>
<tr>
<td class="t">BGA尺寸:</td>
<td class="n" colspan="7">{{pcbDetail.areaProcessData.bgaSize}}</td>
</tr>
</template>
<template v-if="pcbDetail.pcbProductionProcessData">
<tr>
<td class="t">更改料号:</td>
<td class="n">{{pcbDetail.pcbProductionProcessData.changeItemNum}}</td>
<td class="t">更改周期标识:</td>
<td class="n">{{pcbDetail.pcbProductionProcessData.changePeriod}}</td>
<td class="t">拼板利用率:</td>
<td class="n">{{pcbDetail.pcbProductionProcessData.utilizationRate}}</td>
<td class="t">沉金面积:</td>
<td class="n">{{pcbDetail.pcbProductionProcessData.immersionGoldArea}}</td>
</tr>
<tr>
<td class="t">锣程:</td>
<td class="n">{{pcbDetail.pcbProductionProcessData.routLength}}</td>
<td class="t">孔密度:</td>
<td class="n" colspan="5">{{pcbDetail.pcbProductionProcessData.boardHoleNum}}</td>
</tr>
</template>
<template v-if="pcbDetail.pcbStandardProcessData">
<tr>
<td class="t">板厚:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.boardThickness}}</td>
<td class="t">板层:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.boardLayers}}</td>
<td class="t">铜厚:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.copperThickness}}</td>
<td class="t">内层铜厚:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.innerCopperThickness}}</td>
</tr>
<tr>
<td class="t">测试方式:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.flyingProbe}}</td>
<td class="t">最小孔径:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.vias}}</td>
<td class="t">线宽线距:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.lineWeight}}</td>
<td class="t">阻焊颜色:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.solderColor}}</td>
</tr>
<tr>
<td class="t">底层阻焊颜色:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.solderColorBottom}}</td>
<td class="t">字符颜色:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.fontColor}}</td>
<td class="t">底层字符颜色:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.fontColorBottom}}</td>
<td class="t">过孔处理:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.solderCover}}</td>
</tr>
<tr>
<td class="t">线路工艺:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.imageTranster}}</td>
<td class="t">阻焊工艺:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.solderTransfer}}</td>
<td class="t">表面处理:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.surfaceFinish}}</td>
<td class="t">沉金厚度:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.imGoldThinckness}}</td>
</tr>
<tr>
<td class="t">电镀前工艺:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.beforePlating}}</td>
<td class="t">板材耐压值:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.withstandVoltage}}</td>
<td class="t">成型方式:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.formingType}}</td>
<td class="t">耐压测试:</td>
<td class="n">{{pcbDetail.pcbStandardProcessData.wvTest}}</td>
</tr>
</template>
</table>
<div class="boxKH20"></div>
<div class="titsc"><b>特殊工艺信息</b></div>
<table class="tablesa">
<tr v-for="(item,index) in pcbDetail.pcbSpecialProcessData" :key="index">
<td class="t">{{item.typeName}}</td>
<td colspan="7">{{item.typeValue}}</td>
</tr>
</table>
</template>
</a-spin>
<a-modal :title="formOrderCheck.OCType===1?'审核订单':'复审订单'" :visible="showOrderCheck" :confirm-loading="confirmSubmit" @ok="fnOrderCheck" @cancel="showOrderCheck=false">
<a-form-model v-model="formOrderCheck" v-bind="layout">
<a-form-model-item label="审核操作">
<a-radio-group v-model="formOrderCheck.isPass">
<a-radio :value="1">审核通过</a-radio>
<a-radio :value="0">审核不通过驳回</a-radio>
</a-radio-group>
</a-form-model-item>
<!-- <a-form-model-item label="备注"><a-textarea v-model="formOrderCheck.remark" placeholder="" :rows="3" /></a-form-model-item>-->
</a-form-model>
</a-modal>
</div>
</template>

<script>
import {
OrderPcbDetail,
OrderPcbCheck,
QuotePcbProcessType,
OrderPcbEditDetail,
putOrderPcb,
OrderPcbOffer
} from "@/services/order/Order";
import {formatDate} from "@/services/Common";
import bnOrderLogList from "@/pages/Common/bnOrderLogList";
import bnOrderCancel from "@/pages/Common/bnOrderCancel";
import BnSetPurchaseStatus from "@/pages/Common/bnSetPurchaseStatus";

export default {
name: 'PcbDetail',
components: {bnOrderLogList,bnOrderCancel,BnSetPurchaseStatus},
data(){
return{
loadPage:true,showOrderCheck:false,confirmSubmit:false,loadOE:false,ifEdit:false,loadEdit:false,loadOffer:false,
orderId:'',orderStatus:0,orderDetail:{},pcbDetail:{},isOutFactory:'',
formOrderCheck:{orderId:'',isPass:1,remark:'',OCType:''},
layout: {
labelCol: { span:7 },
wrapperCol: { span:15 },
},
formPQ:{},typeList:{},arrSpecialList:[],selSL:[],
PcbProcessType:{},

// formPQ:{
// orderId:'',
// boardWidth:0,
// boardHeight:0,
// boardThickness:0,
// boardLayers:0,
// num:0,
// solderColor:'',
// solderColorBottom:'',
// fontColor:'',
// fontColorBottom:'',
// solderCover:'',
// pinBanX:0,
// pinBanY:0,
// pinBanNum:0,
// processEdges:'',
// processEdgesWidth:0,
// vCut:'',
// grooveHeight:0,
// grooveWidth:0,
// copperThickness:0,
// innerCopperThickness:0,
// surfaceFinish:'',
// flyingProbe:'',
// vias:0,
// lineWeight:'',
// coreType:'',
// coreTg:'',
// boardType:'',
// acceptCrossed:'',
// bgaNum:0,
// bgaSize:0,
// imGoldThinckness:0,
// impedanceReport:0,
// isImpedance:0,
// boardHoleNum:0,
// ipcLevel:0,
// needReportList:'',
// productFileSure:0,
// camEngineer:0,
// aluminumType:'',
// withstandVoltage:'',
// formingType:'',
// routLength:0,
// beforePlating:'',
// changeItemNum:0,
// changePeriod:0,
// imageTranster:'',
// utilizationRate:0,
// solderTransfer:'',
// wvTest:'',
// halfHole:0,
// reportMaterial:0,
// Note:'',
// SpecialProcess:[],
// }
}
},
mounted() {
this.orderId = this.$route.query.id;
this.getOrderDetail();
},
methods:{
async getOrderDetail(){
this.loadPage = true;
let res = await OrderPcbDetail(this.orderId);
this.pcbDetail = res.pcbDetail;
this.isOutFactory = res.pcbDetail.pcbBaseData.isOutFactory;
this.orderDetail = res.orderDetail;
this.orderStatus = res.orderDetail.orderPurchaseStatus;
this.loadPage = false;
},
formatDateTime(time){
return formatDate(time,'yyyy-MM-dd hh:mm');
},
fnShowOrderCheck(key){
this.formOrderCheck.OCType = key;
this.showOrderCheck = true;
},
//审核订单
fnOrderCheck(){
this.confirmSubmit = true;
this.formOrderCheck.orderId = this.orderId;
OrderPcbCheck(this.formOrderCheck).then(res=>{
this.$message.success('设置成功!');
this.showOrderCheck = false;
this.confirmSubmit = false;
this.getOrderDetail()
}).catch(err=>{
this.confirmSubmit = false;
});

},
//修改订单
async BeforeOrderEdit(){
this.loadOE = true;

this.PcbProcessType = await QuotePcbProcessType(this.orderDetail.tenantId);
let resOPED = await OrderPcbEditDetail(this.orderId);
this.typeList={
BoardLayers:this.resEditPP('BoardLayers'),
BoardThickness:this.resEditPP('BoardThickness'),
SolderColor:this.resEditPP('SolderColor'),
FontColor:this.resEditPP('FontColor'),
SolderCover:this.resEditPP('SolderCover'),
ProcessEdges:this.resEditPP('ProcessEdges'),
VCut:this.resEditPP('VCut'),
CopperThickness:this.resEditPP('CopperThickness'),
InnerCopperThickness:this.resEditPP('InnerCopperThickness'),
SurfaceFinish:this.resEditPP('SurfaceFinish'),
FlyingProbe:this.resEditPP('FlyingProbe'),
Vias:this.resEditPP('Vias'),
LineWeight:this.resEditPP('LineWeight'),
CoreType:this.resEditPP('CoreType'),
CoreTg:this.resEditPP('CoreTg'),
BoardType:this.resEditPP('BoardType'),
AcceptCrossed:this.resEditPP('AcceptCrossed'),
ImGoldThinckness:this.resEditPP('ImGoldThinckness'),
IsImpedance:this.resEditPP('IsImpedance'),
ImpedanceReport:this.resEditPP('ImpedanceReport'),
IPCLevel:this.resEditPP('IPCLevel'),
NeedReportList:this.resEditPP('NeedReportList'),
ProductFileSure:this.resEditPP('ProductFileSure'),
CamEngineer:this.resEditPP('CamEngineer'),
FormingType:this.resEditPP('FormingType'),
BeforePlating:this.resEditPP('BeforePlating'),
ImageTranster:this.resEditPP('ImageTranster'),
SolderTransfer:this.resEditPP('SolderTransfer'),
ReportMaterial:this.resEditPP('ReportMaterial'),
}
this.loadOE = false;
this.formPQ={
orderId:this.orderId,
boardWidth:resOPED.areaProcessData.boardWidth,
boardHeight:resOPED.areaProcessData.boardHeight,
boardThickness:resOPED.pcbStandardProcessData.boardThickness,
boardLayers:resOPED.pcbStandardProcessData.boardLayers,
num:resOPED.areaProcessData.num,
solderColor:resOPED.pcbStandardProcessData.solderColor,
solderColorBottom:resOPED.pcbStandardProcessData.solderColorBottom,
fontColor:resOPED.pcbStandardProcessData.fontColor,
fontColorBottom:resOPED.pcbStandardProcessData.fontColorBottom,
solderCover:resOPED.pcbStandardProcessData.solderCover,
pinBanX:resOPED.areaProcessData.pinBanX,
pinBanY:resOPED.areaProcessData.pinBanY,
pinBanNum:resOPED.areaProcessData.pinBanNum,
processEdges:resOPED.areaProcessData.processEdges,
processEdgesWidth:resOPED.areaProcessData.processEdgesWidth,
vCut:resOPED.areaProcessData.vCut,
grooveHeight:resOPED.areaProcessData.grooveHeight,
grooveWidth:resOPED.areaProcessData.grooveWidth,
copperThickness:resOPED.pcbStandardProcessData.copperThickness,
innerCopperThickness:resOPED.pcbStandardProcessData.innerCopperThickness,
surfaceFinish:resOPED.pcbStandardProcessData.surfaceFinish,
flyingProbe:resOPED.pcbStandardProcessData.flyingProbe,
vias:resOPED.pcbStandardProcessData.vias,
lineWeight:resOPED.pcbStandardProcessData.lineWeight,
coreType:resOPED.pcbBaseData.coreType,
coreTg:resOPED.pcbBaseData.coreTg,
boardType:resOPED.areaProcessData.boardType,
acceptCrossed:resOPED.areaProcessData.acceptCrossed,
bgaNum:resOPED.personalizedProcessData.bgaNum,
bgaSize:resOPED.personalizedProcessData.bgaSize,
imGoldThinckness:resOPED.pcbStandardProcessData.imGoldThinckness,
impedanceReport:resOPED.personalizedProcessData.impedanceReport,
// impedanceSize:resOPED.personalizedProcessData.impedanceSize,
isImpedance:resOPED.personalizedProcessData.isImpedance,
boardHoleNum:resOPED.pcbProductionProcessData.boardHoleNum,
ipcLevel:resOPED.personalizedProcessData.ipcLevel,
needReportList:resOPED.personalizedProcessData.needReportList.split(','),
productFileSure:resOPED.personalizedProcessData.productFileSure,
camEngineer:resOPED.personalizedProcessData.camEngineer,
// aluminumType:resOPED.areaProcessData.aluminumType,
withstandVoltage:resOPED.pcbStandardProcessData.withstandVoltage,
formingType:resOPED.pcbStandardProcessData.formingType,
routLength:resOPED.pcbProductionProcessData.routLength,
beforePlating:resOPED.pcbStandardProcessData.beforePlating,
changeItemNum:resOPED.pcbProductionProcessData.changeItemNum,
changePeriod:resOPED.pcbProductionProcessData.changePeriod,
imageTranster:resOPED.pcbStandardProcessData.imageTranster,
utilizationRate:resOPED.pcbProductionProcessData.utilizationRate,
solderTransfer:resOPED.pcbStandardProcessData.solderTransfer,
wvTest:resOPED.pcbStandardProcessData.wvTest,
// halfHole:resOPED.areaProcessData.halfHole,
reportMaterial:resOPED.personalizedProcessData.reportMaterial,
IsOutFactory:resOPED.pcbBaseData.isOutFactory,
// Note:resOPED.orderDetail.note,
Note:'',
SpecialProcess:[],
}
//特殊工艺取类
let arrSpecial = [];
for (let i in this.PcbProcessType){
let ppt = this.PcbProcessType[i];
if(ppt.isSpecial === 1){
arrSpecial.push(ppt);
}
}
this.arrSpecialList = arrSpecial;
let fmSP = [];
for (let i in arrSpecial){
fmSP.push({typeName:arrSpecial[i].typeName,typeValue:''});
}
for(let i in fmSP){
let rSP = resOPED.pcbSpecialProcessData;
for (let rid in rSP){
if(fmSP[i].typeName==rSP[rid].typeName){
fmSP[i].typeValue = rSP[rid].typeValue;
continue;
}
}
}
this.selSL = fmSP;
this.ifEdit = true;
},
upOrderEdit(){
let selSL = this.selSL;
let selSLDB = {};
for (let i in selSL){
let ts = selSL[i];
if (ts.typeValue!='' && ts.typeValue!='0'){
selSLDB[ts.typeName] = ts.typeValue.toString();
// selSLDB.push(obj);
}
}
this.formPQ.SpecialProcess = selSLDB;
this.loadEdit = true;
let params = {...this.formPQ}
params.needReportList = params.needReportList.toString();
putOrderPcb(params).then(res=>{
this.$message.success('修改成功!');
this.ifEdit = false;
this.loadEdit = false;
this.getOrderDetail()
}).catch(err=>{
this.loadEdit = false;
})
},
//申请外发报价
async fnPcbOffer(){
this.loadOffer = true;
try{
await OrderPcbOffer(this.orderId)
this.$message.success('提交成功!');
}catch (e) {
console.log(e);
}finally {
this.loadOffer = false;
}
},
//调整价格
fnAdjustAmount(){
this.$message.warning('emmm.. 暂不支持调价!');
},
//参数获取返回解析
resEditPP(key){
for (let i in this.PcbProcessType){
let ppt = this.PcbProcessType[i];
if(ppt.typeName==key){
let arr = ppt.processDataList.sort((a,b)=>a.dataValue - b.dataValue);
return arr;
}
}
}
}
}
</script>

<style scoped>
td.t{color:#000}
.ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background-color:#f90; color:#fff}
.ant-radio-button-wrapper{padding:0 10px;}
</style>

+ 0
- 644
src/pages/order/smtOrder/SmtDetail.vue Bestand weergeven

@@ -1,644 +0,0 @@
<template>
<div class="boxMain">
<a-spin :spinning="loadPage">
<div class="boxFilter bn">
<bnOrderLogList :order-id="orderId" />
<a-button type="primary" :loading="loadBindList" @click="fnBeforeBindList">关联订单PCB/BOM</a-button>
<a-button type="primary" v-if="ifEdit==false" @click="ifEdit=true">编辑</a-button>
<a-button v-else @click="ifEdit=false">取消编辑</a-button>
<a-button type="primary" :loading="loadSmtCheck" @click="fnShowOrderCheck(1)">审核</a-button>
<a-button type="primary" :loading="loadSmtCheck2" @click="fnShowOrderCheck(2)">复审</a-button>
<!-- <a-button type="primary" :loading="loadSmtSure" @click="fnSmtSure">确认订单</a-button>-->
<a-button type="primary" :loading="loadSmtProduction" @click="fnSmtProduction">投产</a-button>
<a-button type="primary" @click="showSmtApplyBack=true">申请打回</a-button>
<bn-set-purchase-status :order-id="orderId" :order-status="orderStatus" :getList="getOrderDetail"/>
<bnOrderCancel :order-id="orderId" />
</div>
<template v-if="ifEdit">
<div class="titsc"><b>编辑SMT订单 ID:{{formEdit.orderId}}</b></div>
<table class="tablesc">
<tr>
<td class="t">生产数量</td><td class="n"><a-input v-model="formEdit.productNum" style="width:70px" /></td>
<td class="t">单双面</td><td class="n"><a-input v-model="formEdit.layer" style="width:70px" /></td>
<td class="t">物料种类</td><td class="n"><a-input v-model="formEdit.patchElementType" style="width:70px" /></td>
<td class="t">贴片点数</td><td class="n"><a-input v-model="formEdit.patchElementPointNum" style="width:70px" /></td>
</tr>
<tr>
<td class="t">插件点数</td><td class="n"><a-input v-model="formEdit.dipPointNum" style="width:70px" /></td>
<td class="t">PCB高x长</td><td class="n"><a-input v-model="formEdit.pcbSizeX" style="width:70px" /> x <a-input v-model="formEdit.pcbSizeY" style="width:70px" /></td>
<td class="t">Set中Pcs数</td><td class="n"><a-input v-model="formEdit.setPcsNum" style="width:70px" /></td>
<td class="t">PCB供料方式</td>
<td class="n">
<a-radio-group v-model="formEdit.productPCBType" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.productPCBType" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">BOM供料方式</td>
<td class="n">
<a-radio-group v-model="formEdit.purchaseGoodsType" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.purchaseGoodsType" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">工艺要求</td>
<td class="n">
<a-radio-group v-model="formEdit.hasLead" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.hasLead" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">锡膏</td>
<td class="n">
<a-radio-group v-model="formEdit.solderPaste" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.solderPaste" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">PCBA出货品质</td>
<td class="n">
<a-radio-group v-model="formEdit.isHighQuality" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.isHighQuality" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">一体化装配服务</td>
<td class="n">
<a-radio-group v-model="formEdit.assemblyService" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.need" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">PCBA出货包装</td>
<td class="n">
<a-radio-group v-model="formEdit.pcbaPackageType" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.pcbaPackageType" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">PCB拼版方式</td>
<td class="n">
<a-radio-group v-model="formEdit.pcbIsPinban" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.pcbIsPinban" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
<td class="t">PCBA确认</td>
<td class="n">
<a-radio-group v-model="formEdit.firstSure" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.need" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">项目名称</td><td class="n"><a-input v-model="formEdit.projectName"/></td>
<td class="t">应用领域</td><td class="n"><a-input v-model="formEdit.applicationArea"/></td>
<td class="t">PCB产品类别</td>
<td class="n" colspan="3">
<a-radio-group v-model="formEdit.pcbProductType" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.pcbProductType" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
</tr>
<tr>
<td class="t">自定义编号1</td><td class="n"><a-input v-model="formEdit.autoField1"/></td>
<td class="t">自定义编号2</td><td class="n"><a-input v-model="formEdit.autoField2"/></td>
<td class="t">钢网随货发货</td>
<td class="n" colspan="3">
<a-radio-group v-model="formEdit.isMergeDelivery" button-style="solid">
<a-radio-button v-for="(item,index) in arrDB.yesNo" :key="index" :value="item.v">{{item.t}}</a-radio-button>
</a-radio-group>
</td>
</tr>
</table>
<div class="boxBn"><a-button @click="ifEdit=false">退出修改</a-button><a-button :loading="loadEdit" type="danger" @click="upOrderEdit">保存修改</a-button></div>
</template>
<template v-else>
<div class="titsc"><b>基础信息</b></div>
<table class="tablesc">
<tbody>
<tr>
<td class="t">订单号:</td><td class="n">{{detail.orderNo}}</td>
<td class="t">订单状态:</td><td class="n">{{detail.orderPurchaseStatusValue}}</td>
<td class="t">订单包:</td><td class="n">{{detail.packageNo}}</td>
<td class="t">订单类型:</td><td class="n">{{detail.proType}}</td>
</tr>
<tr>
<td class="t">订单类型名称:</td><td class="n">{{detail.proTypeValue}}</td>
<td class="t">客编:</td><td class="n">{{detail.memberCode}}</td>
<td class="t">业务员:</td><td class="n">{{detail.adminName}}</td>
<td class="t">生产数量:</td><td class="n">{{detail.qty}}</td>
</tr>
<tr>
<td class="t">浮动金额:</td><td class="n">{{detail.adjustmentAmount}}</td>
<td class="t">折扣:</td><td class="n">{{detail.discount}}</td>
<td class="t">优惠券金额:</td><td class="n">{{detail.couponAmount}}</td>
<td class="t">销售价:</td><td class="n">{{detail.salePrice}}</td>
</tr>
<tr>
<td class="t">运费:</td><td class="n">{{detail.shipAmount}}</td>
<td class="t">调整运费:</td><td class="n">{{detail.adjustmentShipAmount}}</td>
<td class="t">手续费:</td><td class="n">{{detail.serviceCharge}}</td>
<td class="t">总金额:</td><td class="n">{{detail.totalAmount}}</td>
</tr>
<tr>
<td class="t">实际支付金额:</td><td class="n">{{detail.payAmount}}</td>
<td class="t">重量:</td><td class="n">{{detail.weight}}</td>
<td class="t">物流方式:</td><td class="n">{{detail.shipType}}</td>
<td class="t">交期天数:</td><td class="n">{{detail.deliveryDays}}</td>
</tr>
<tr>
<td class="t">创建时间:</td><td class="n">{{formatDateTime(detail.creationTime)}}</td>
<td class="t">下单时间:</td><td class="n">{{formatDateTime(detail.orderTime)}}</td>
<td class="t">最后支付时间:</td><td class="n">{{formatDateTime(detail.payTime)}}</td>
<td class="t">预计交货时间:</td><td class="n">{{formatDateTime(detail.deliveryDate)}}</td>
</tr>
<tr>
<td class="t">发货时间:</td><td class="n">{{formatDateTime(detail.shipTime)}}</td>
<td class="t">PCBA关联单号:</td><td class="n">{{detail.pcbaNo}}</td>
<td class="t">复制单号:</td><td class="n">{{detail.copyOrderNo}}</td>
<td class="t">返单号:</td><td class="n">{{detail.reOrderNo}}</td>
</tr>
<tr>
<td class="t">原始单号:</td><td class="n">{{detail.rootOrderNo}}</td>
<td class="t">订单备注:</td><td class="n" colspan="3">{{detail.note}}</td>
<td class="t">附件列表:</td>
<td class="n">
<ul class="listFiles">
<li v-for="(file,fid) in detail.files" :key="fid"><a :href="file.url" target="_blank"><a-icon type="link" /> {{file.name}}</a></li>
</ul>
</td>
</tr>
</tbody>
</table>
<div class="titsc"><b>贴片参数</b></div>
<table class="tablesc">
<tbody>
<tr>
<td class="t">创建人:</td>
<td class="n">{{smtDto.creatorId}}</td>
<td class="t">租户:</td>
<td class="n" colspan="5">{{smtDto.tenantId}}</td>
</tr>
<tr>
<td class="t">套数:</td>
<td class="n">{{smtDto.productNum}}</td>
<td class="t">单双面:</td>
<td class="n">{{smtDto.layer}}</td>
<td class="t">物料种类:</td>
<td class="n">{{smtDto.patchElementType}}</td>
<td class="t">贴片点数:</td>
<td class="n">{{smtDto.patchElementPointNum}}</td>
</tr>
<tr>
<td class="t">插件点数:</td>
<td class="n">{{smtDto.dipPointNum}}</td>
<td class="t">宽x长:</td>
<td class="n">{{smtDto.pcbSizeX}} x {{smtDto.pcbSizeY}}</td>
<td class="t">Set中Pcs数:</td>
<td class="n">{{smtDto.setPcsNum}}</td>
<td class="t">PCB物料供料方式:</td>
<td class="n">{{resArrays('productPCBType',smtDto.productPCBType)}}</td>
</tr>
<tr>
<td class="t">BOM物料供料方式:</td>
<td class="n">{{resArrays('purchaseGoodsType',smtDto.purchaseGoodsType)}}</td>
<td class="t">工艺要求:</td>
<td class="n">{{resArrays('hasLead',smtDto.hasLead)}}</td>
<td class="t">锡膏:</td>
<td class="n">{{resArrays('solderPaste',smtDto.solderPaste)}}</td>
<td class="t">PCBA出货品质:</td>
<td class="n">{{resArrays('isHighQuality',smtDto.isHighQuality)}}</td>
</tr>
<tr>
<td class="t">一体化装配服务:</td>
<td class="n">{{resArrays('need',smtDto.isHighQuality)}}</td>
<td class="t">PCBA板出货包装:</td>
<td class="n">{{resArrays('pcbaPackageType',smtDto.pcbaPackageType)}}</td>
<td class="t">PCB拼版方式:</td>
<td class="n">{{resArrays('pcbIsPinban',smtDto.pcbIsPinban)}}</td>
<td class="t">PCBA确认:</td>
<td class="n">{{resArrays('need',smtDto.isHighQuality)}}</td>
</tr>
<tr>
<td class="t">项目名称:</td>
<td class="n">{{smtDto.projectName}}</td>
<td class="t">应用领域:</td>
<td class="n">{{smtDto.applicationArea}}</td>
<td class="t">PCB产品类别:</td>
<td class="n">{{resArrays('pcbProductType',smtDto.pcbProductType)}}</td>
<td class="t">自定义编号1 # 2:</td>
<td class="n">{{smtDto.autoField1}} # {{smtDto.autoField2}}</td>
</tr>
<tr>
<td class="t">供应商ID:</td>
<td class="n">{{smtDto.supplyId}}</td>
<td class="t">PCBA生产端客服:</td>
<td class="n">{{smtDto.smtServiceName}}</td>
<td class="t">修改贴片订单标识:</td>
<td class="n">{{resArrays('hasUpdateSMT',smtDto.hasUpdateSMT)}}</td>
<td class="t">修改贴片具体信息:</td>
<td class="n">{{smtDto.updateSMTStr}}</td>
</tr>
<tr>
<td class="t">钢网随货发货:</td>
<td class="n">{{resArrays('yesNo',smtDto.isMergeDelivery)}}</td>
<td class="t">样品图片:</td>
<td class="n">{{smtDto.sampleImagePath}}</td>
<td class="t">PCBA审核不通过原因:</td>
<td class="n" colspan="3">{{smtDto.unPassReason}}</td>
</tr>
</tbody>
</table>
<div class="boxKH20"></div>
<div class="titsc"><b>金额</b></div>
<table class="tablesc" v-if="smtDto.orderSmtPriceDto">
<tbody>
<tr>
<td class="t">销售价:</td>
<td class="n">{{detail.systemPrice}}</td>
<td class="t">成本价:</td>
<td class="n">{{detail.systemPrice}}</td>
<td class="t">工程费:</td>
<td class="n">{{smtDto.orderSmtPriceDto.layerMoney}}</td>
<td class="t">BOM物料种类费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.patchElementTypeMoney}}</td>
</tr>
<tr>
<td class="t">PCBA贴片元件个数费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.patchElementNumMoney}}</td>
<td class="t">BGA数量费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.bgaNumMoney}}</td>
<td class="t">PCB拼版费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.pcbPinbanMoney}}</td>
<td class="t">其他费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.otherMoney}}</td>
</tr>
<tr>
<td class="t">插件费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.dipMoney}}</td>
<td class="t">测试费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.testMoney}}</td>
<td class="t">包装费用:</td>
<td class="n">{{smtDto.orderSmtPriceDto.packageMoney}}</td>
<td class="t">特殊工艺费:</td>
<td class="n">{{smtDto.orderSmtPriceDto.specialCraftMoney}}</td>
</tr>
</tbody></table>
<div class="boxKH20"></div>
<div class="titsc"><b>特殊工艺信息</b></div>
<a-table class="tablesa" :columns="tableSmtCraftDto" :data-source="smtDto.orderSmtCraftDto" :pagination="false" :rowKey="(record,index)=>{return index}">
<span slot="createTime" slot-scope="text">{{ formatDateTime(text) }}</span>
</a-table>
<div class="boxKH20"></div>
<div class="titsc"><b>关联订单</b></div>
<a-table class="tablesa" :columns="tableBindList" :data-source="smtDto.bindList" :rowKey="lists => lists.orderId" :pagination="false">
<span slot="proType" slot-scope="text">{{ getProTypes(text,'title') }}</span>
<span slot="orderNo" slot-scope="text,record">
<router-link v-if="record.proType==1" :to="'/order/pcb/detail?id='+record.orderId"><a-icon type="link" /> {{text}}</router-link>
<router-link v-if="record.proType==2" :to="'/order/bom/detail?id='+record.orderId"><a-icon type="link" /> {{text}}</router-link>
</span>
<span slot="createTime" slot-scope="text">{{formatDateTime(text)}}</span>
</a-table>
</template>
<a-modal v-model="showBindList" title="添加 PCB/BOM" :confirm-loading="confirmLoading" :width="800" @ok="setBindSMT()">
<div class="boxShowSmtBindList">
<template v-for="(item,index) in listBindSmt">
<div :key="index" v-if="item.list.length>=1">
<p class="title"><b>{{ item.title }}</b></p>
<a-table :columns="smtBindHead" :data-source="item.list" :scroll="{y:180}" :rowKey="(record,index)=>{return index}" :pagination="false" :rowSelection="{type:'radio',onChange:onSelectChange}" :locale="{emptyText:'No data'}">
<span slot="orderNo" slot-scope="text">{{ text }}</span>
<span slot="qty" slot-scope="text,record">{{ text }} {{ record.proType==2?'line':'pcs' }}</span>
<span slot="deliveryDays" slot-scope="text">Lead Time: {{ text }} days</span>
<span slot="creationTime" slot-scope="text">{{ text }}</span>
</a-table>
</div>
</template>
</div>
</a-modal>
<a-modal title="申请打回" :width="800" :visible="showSmtApplyBack" :confirm-loading="confirmLoading" @ok="fnSmtApplyBack" @cancel="showSmtApplyBack = false">
<a-form-model v-model="formAB" v-bind="layout">
<a-form-model-item label="申请原因">
<a-radio-group v-model="formAB.applyType" button-style="solid">
<a-radio-button :value="1">补料打回</a-radio-button>
<a-radio-button :value="2">订单打回</a-radio-button>
</a-radio-group>
</a-form-model-item>
<a-form-model-item label="申请原因">
<a-textarea v-model="formAB.applyReason" placeholder="申请原因" :auto-size="{ minRows: 3, maxRows: 5 }" />
</a-form-model-item>
<a-form-model-item label="上传文件地址">
<a-spin :spinning="loadUp">
<a-input-group compact>
<a-upload name="file" :showUploadList="false" :customRequest="(file)=>{fnToOssUpfile(file,'gerber')}" accept=".zip,.rar,.jpg,.png,.gif">
<a-button type="primary"><a-icon type="upload" /> 上传文件</a-button>
</a-upload>
</a-input-group>
</a-spin>
<ul class="listFiles">
<li v-for="(file,fid) in upFilesAB" :key="fid"><a-icon type="delete" @click="delUpFiles(fid)" /> <a :href="file" target="_blank"><a-icon type="link" /> {{file}}</a></li>
</ul>
</a-form-model-item>
</a-form-model>
</a-modal>
</a-spin>
<a-modal :title="formOrderCheck.OCType===1?'审核订单':'复审订单'" :visible="showOrderCheck" :confirm-loading="confirmSubmit" @ok="fnSmtCheck" @cancel="showOrderCheck=false">
<a-form-model v-model="formOrderCheck" v-bind="layout">
<a-form-model-item label="审核操作">
<a-radio-group v-model="formOrderCheck.isPass">
<a-radio :value="1">审核通过</a-radio>
<!-- <a-radio :value="0">审核不通过驳回</a-radio>-->
</a-radio-group>
</a-form-model-item>
<!-- <a-form-model-item label="备注"><a-textarea v-model="formOrderCheck.remark" placeholder="" :rows="3" /></a-form-model-item>-->
</a-form-model>
</a-modal>
</div>
</template>

<script>
import {
OrderSmtBind,
OrderSmtBindList,
OrderSmtDetail,
OrderSmtSure,
OrderSmtCheck,
OrderSmtProduction,
OrderSmtApplyBack, OrderSmtEdit,
} from '@/services/order/Order';
import {formatDate, resProTypes} from '@/services/Common';
import bnOrderLogList from "@/pages/Common/bnOrderLogList";
import bnOrderCancel from "@/pages/Common/bnOrderCancel";
import bnSetPurchaseStatus from "@/pages/Common/bnSetPurchaseStatus";
import {upFileToOSS} from "@/services/uploadFile";
import BnSetPurchaseStatus from "@/pages/Common/bnSetPurchaseStatus";
export default {
name: 'SmtDetail',
components: {BnSetPurchaseStatus, bnOrderLogList,bnOrderCancel},
data(){
return{
loadPage:true,loadBindList:false,showBindList:false,loadSmtSure:false,loadSmtCheck:false,loadSmtCheck2:false,loadSmtProduction:false,confirmLoading:false,showSmtApplyBack:false,loadUp:false,ifEdit:false,loadEdit:false,
orderId:'',detail: {},smtDto:{},listBindSmt:[],listProType:resProTypes(),
tableSmtCraftDto:[
{title: '特殊工艺类别',dataIndex: 'craftType',key: 'craftType',},
{title: '特殊工艺项目名称',dataIndex: 'craftName',key: 'craftName',},
{title: '特殊工艺对应值',dataIndex: 'quantity',key: 'quantity',},
{title: '特殊工艺对应金额',dataIndex: 'amount',key: 'amount',},
{title: '创建时间',dataIndex: 'createTime',key: 'createTime',scopedSlots: { customRender: 'createTime' }},
{title: '是否客选',dataIndex: 'isUserSelect',key: 'isUserSelect',},
],
formOrderCheck:{orderId:'',isPass:1,remark:'',OCType:''},showOrderCheck:false,confirmSubmit:false,
upFilesAB:[],orderStatus:0,orderStatusValue:'',
formAB:{orderId:'',applyType:1,applyReason:'',businessImages:''},
arrDB:{
productPCBType:[{v:1,t:'代工'},{v:2,t:'客供'}],
purchaseGoodsType:[{v:1,t:'代购'},{v:2,t:'客供'},{v:3,t:'部分代购'}],
hasLead:[{v:0,t:'无铅'},{v:1,t:'有铅'}],
solderPaste:[{v:0,t:'国产千住'},{v:1,t:'日本千住'}],
isHighQuality:[{v:1,t:'标品'},{v:2,t:'优品'}],
need:[{v:0,t:'不需要'},{v:1,t:'需要'}],
yesNo:[{v:0,t:'否'},{v:1,t:'是'}],
pcbaPackageType:[{v:1,t:'泡泡袋包装'},{v:2,t:'屏蔽袋包装'}],
pcbIsPinban:[{v:0,t:'无拼版'},{v:1,t:'有拼版'}],
pcbProductType:[{v:0,t:'PCB硬板'},{v:1,t:'PCB软板'},{v:2,t:'软硬'}],
hasUpdateSMT: [{v:0,t:'无'},{v:1,t:'无修改'},{v:2,t:'修改过'}],
},
formEdit:{
// id:'',orderId:'',
// productNum:'',
// layer:'',
// patchElementType:'',
// patchElementPointNum:'',
// dipPointNum:'',
// pcbSizeX:'',
// pcbSizeY:'',
// setPcsNum:'',
// productPCBType:'',
// purchaseGoodsType:'',
// hasLead:'',
// solderPaste:'',
// isHighQuality:'',
// assemblyService:'',
// pcbaPackageType:'',
// pcbIsPinban:'',
// firstSure:'',
// projectName:'',
// applicationArea:'',
// pcbProductType:'',
// autoField1:'',
// autoField2:'',
// isMergeDelivery:'',
},
tableBindList:[
{title: '订单类型',width:'100px',dataIndex: 'proType',key: 'proType',scopedSlots: { customRender: 'proType' }},
{title: '订单编号',width:'260px',dataIndex: 'orderNo',key: 'orderNo',scopedSlots: { customRender: 'orderNo' }},
{title: '套数',dataIndex: 'qty',key: 'qty',},
{title: '创建时间',dataIndex: 'creationTime',key: 'creationTime',scopedSlots: { customRender: 'createTime' }},
{title: '交期天数',dataIndex: 'deliveryDays',key: 'deliveryDays'},
],
smtBindHead:[
{title:'订单编号',width:'35%',dataIndex:'orderNo',key:'orderNo',scopedSlots: { customRender: 'orderNo' },},
{title:'套数',width:'15%',dataIndex:'qty',key:'qty',scopedSlots: { customRender: 'qty' },},
{title:'交期天数',dataIndex:'deliveryDays',key:'deliveryDays',scopedSlots: { customRender: 'deliveryDays' },},
{title:'创建时间',dataIndex:'creationTime2',key:'creationTime2'},
],
layout: {
labelCol: { span:5 },
wrapperCol: { span:17 },
},
}
},
mounted() {
this.orderId = this.$route.query.id;
this.getOrderDetail();
},
methods:{
async getOrderDetail(){
this.loadPage = true;
let res = await OrderSmtDetail(this.orderId);
this.orderStatus = res.orderDetailDto.orderPurchaseStatus;
this.orderStatusValue = res.orderDetailDto.orderPurchaseStatusValue;
this.detail = res.orderDetailDto;
this.smtDto = res.orderSmtDto;
this.loadPage = false;
this.formEdit={
id:res.orderSmtDto.id,
orderId:res.orderSmtDto.orderId,
productNum:res.orderSmtDto.productNum,
layer:res.orderSmtDto.layer,
patchElementType:res.orderSmtDto.patchElementType,
patchElementPointNum:res.orderSmtDto.patchElementPointNum,
dipPointNum:res.orderSmtDto.dipPointNum,
pcbSizeX:res.orderSmtDto.pcbSizeX,
pcbSizeY:res.orderSmtDto.pcbSizeY,
setPcsNum:res.orderSmtDto.setPcsNum,
productPCBType:res.orderSmtDto.productPCBType,
purchaseGoodsType:res.orderSmtDto.purchaseGoodsType,
hasLead:res.orderSmtDto.hasLead,
solderPaste:res.orderSmtDto.solderPaste,
isHighQuality:res.orderSmtDto.isHighQuality,
assemblyService:res.orderSmtDto.assemblyService,
pcbaPackageType:res.orderSmtDto.pcbaPackageType,
pcbIsPinban:res.orderSmtDto.pcbIsPinban,
firstSure:res.orderSmtDto.firstSure,
projectName:res.orderSmtDto.projectName,
applicationArea:res.orderSmtDto.applicationArea,
pcbProductType:res.orderSmtDto.pcbProductType,
autoField1:res.orderSmtDto.autoField1,
autoField2:res.orderSmtDto.autoField2,
isMergeDelivery:res.orderSmtDto.isMergeDelivery,
}
},
//SMT确认
fnSmtSure(){
this.loadSmtSure = true;
OrderSmtSure(this.orderId).then(res=>{
this.$message.success('确认成功!');
this.getOrderDetail();
this.loadSmtSure = false;
}).catch(err=>{
this.loadSmtSure = false;
})
},
//SMT投产
fnSmtProduction(){
this.loadSmtProduction = true;
OrderSmtProduction(this.orderId).then(res=>{
this.$message.success('确认成功!');
this.getOrderDetail();
this.showSmtApplyBack = false;
this.loadSmtProduction = false;
}).catch(err=>{
this.loadSmtProduction = false;
})
},
//SMT申请打回
fnSmtApplyBack(){
this.confirmLoading = true;
this.formAB.orderId = this.orderId;
this.formAB.businessImages = this.upFilesAB.toString()
OrderSmtApplyBack(this.formAB).then(res=>{
this.$message.success('申请成功!');
this.getOrderDetail();
this.confirmLoading = false;
}).catch(err=>{
this.confirmLoading = false;
})
},
//SMT编辑
upOrderEdit(){
this.loadEdit = true;
OrderSmtEdit(this.formEdit).then(res=>{
this.$message.success('修改成功!');
this.ifEdit = false;
this.loadEdit = false;
this.getOrderDetail();
}).catch(err=>{
this.loadEdit = false;
})
},
fnShowOrderCheck(key){
this.formOrderCheck.OCType = key;
this.showOrderCheck = true;
},
//SMT审核
fnSmtCheck(){
this.formOrderCheck.OCType===1?this.loadSmtCheck = true:this.loadSmtCheck2 = true;
this.formOrderCheck.orderId = this.orderId;
OrderSmtCheck(this.formOrderCheck).then(res=>{
this.$message.success('审核成功!');
this.getOrderDetail();
}).catch(err=>{
console.log(err)
}).finally(res=>{
this.loadSmtCheck = false;
this.loadSmtCheck2 = false;
this.showOrderCheck = false;
})
},
//获取关联订单
async fnBeforeBindList(){
this.loadBindList = true;
let res = await OrderSmtBindList({orderId:this.orderId});
for (let i in this.listProType){
let type = this.listProType[i];
let resli = [];
for (let bid in res){
if(type.proType == res[bid].proType){
resli.push(res[bid]);
}
}
this.listBindSmt[i] ={title:type.title,list:resli,bindOrderId:'',proType:type.proType};
}
this.showBindList = true;
this.loadBindList = false;
},
//勾选绑定赋值
onSelectChange(index,arr) {
arr = arr[0];
for (let i in this.listBindSmt){
let liBS = this.listBindSmt[i];
if(liBS.proType == arr.proType){
liBS.bindOrderId = arr.orderId;
}
}
},
//提交SMT绑定
setBindSMT(){
let bindID = [];
for (let i in this.listBindSmt){
if(this.listBindSmt[i].bindOrderId){
bindID = bindID.concat(this.listBindSmt[i].bindOrderId);
}
}
if(bindID.length<=0){
this.$message.warning('Please Choose PCB/BOM Order');
return false;
}
this.confirmLoading = true;
let params = {
SmtOrderId:this.orderId,
bindOrderIds:bindID.toString()
}
console.log(params)
OrderSmtBind(params).then(res=>{
this.getOrderDetail();
this.showBindSMT = false;
this.confirmLoading = false;
}).catch(err=>{
this.confirmLoading = false;
})
},
//上传OSS
async fnToOssUpfile(file){
this.loadUp = true;
let resUpInfo = await upFileToOSS(file);
if(resUpInfo.url){
this.upFilesAB.push(resUpInfo.url);
this.$message.success('文件上传成功!');
}
this.loadUp = false;
},
delUpFiles(i){
this.upFilesAB.splice(i,1);
},
formatDateTime(time){
return formatDate(time,'yyyy-MM-dd hh:mm');
},
getProTypes(id,key){
return resProTypes(id)[key];
},
resArrays(arrName,key){
let arr = this.arrDB[arrName];
for (let i in arr){
let ts = arr[i];
if (ts.v==key) return ts.t;
}
},
}
}
</script>

<style scoped>
/deep/ .ant-table-header{background-color:#f5f5f5}
/deep/ .ant-table-thead>tr>th{background-color:#f5f5f5; padding:5px}
/deep/ .ant-table-tbody>tr>td{padding:5px}
/deep/ .ant-radio-inner::after{display: inline-block}
.ant-form .listFiles li{padding:1em 0 0}
</style>

+ 9
- 5
src/pages/roles/list.vue Bestand weergeven

@@ -108,14 +108,13 @@ export default {
newRoles(this.formNA).then(res=>{
if(res.id) {
this.$message.success(this.altTitNE?'角色添加成功!':'编辑修改成功!');
this.filterSearch();
// this.$refs['formNA'].resetFields();
this.formNA={name:'',isDefault:false,isPublic:false};
// this.formNA={name:'',isDefault:false,isPublic:false};
}
this.showNA = false;
}).finally(()=>{
this.confirmLoad = false;
}).catch(err=>{
this.confirmLoad = false;
this.filterSearch();
});
},
//权限分配
@@ -230,13 +229,18 @@ export default {
// console.log(this.listInput)
if(typeof(page)=='object'){
this.pagination.current = page.current;
}else if (typeof (page) == 'number'){
this.pagination.current = page;
}
let count = (this.pagination.current-1)*this.pagination.pageSize;
let params={
filter:this.listInput[0].value,
skipCount:count,
maxResultCount:this.pagination.pageSize,
}
for (let i in this.listInput){
let ts = this.listInput[i];
if (ts.value!=='') params[ts.name] = ts.value;
}
// console.log(params)
this.fetch(params);
},


+ 57
- 35
src/router/config.js Bestand weergeven

@@ -57,49 +57,71 @@ const options = {
},
{
path: 'order',
name: '订单',
meta: {icon: 'icon-xiangmu'},
name: '订单管理',
meta: {icon: 'icon-xiangmu',type: 'link',},
redirect: '/order/list',
component: BlankView,
// component: () => import('@/pages/agent/list'),
children: [
{
path: 'pcb/',
name: 'PCB订单管理',
meta: {icon: 'profile'},
component: () => import('@/pages/order/OrderList'),
},
{
path: 'pcb/detail',
name: 'Pcb订单详情',
meta: {invisible: true},
component: () => import('@/pages/order/pcbOrder/PcbDetail'),
},
{
path: 'smt/',
name: 'SMT订单管理',
meta: {icon: 'profile'},
component: () => import('@/pages/order/OrderList'),
},
{
path: 'smt/detail',
name: 'SMT订单详情',
meta: {invisible: true},
component: () => import('@/pages/order/smtOrder/SmtDetail'),
},
{
path: 'bom/',
name: 'BOM订单管理',
meta: {icon: 'profile'},
component: () => import('@/pages/order/OrderList'),
path: 'list',
name: '订单列表',
// meta: {invisible: true},
component: () => import('@/pages/order/list'),
},
{
path: 'bom/detail',
name: 'BOM订单详情',
meta: {invisible: true},
component: () => import('@/pages/order/bomOrder/BomDetail'),
path: 'detail',
name: '订单详情',
// meta: {invisible: true},
component: () => import('@/pages/order/detail'),
},
],
]
},
// {
// path: 'order',
// name: '订单',
// meta: {icon: 'icon-xiangmu'},
// component: BlankView,
// children: [
// {
// path: 'pcb/',
// name: 'PCB订单管理',
// meta: {icon: 'profile'},
// component: () => import('@/pages/order/OrderList'),
// },
// {
// path: 'pcb/detail',
// name: 'Pcb订单详情',
// meta: {invisible: true},
// component: () => import('@/pages/order/pcbOrder/PcbDetail'),
// },
// {
// path: 'smt/',
// name: 'SMT订单管理',
// meta: {icon: 'profile'},
// component: () => import('@/pages/order/OrderList'),
// },
// {
// path: 'smt/detail',
// name: 'SMT订单详情',
// meta: {invisible: true},
// component: () => import('@/pages/order/smtOrder/SmtDetail'),
// },
// {
// path: 'bom/',
// name: 'BOM订单管理',
// meta: {icon: 'profile'},
// component: () => import('@/pages/order/OrderList'),
// },
// {
// path: 'bom/detail',
// name: 'BOM订单详情',
// meta: {invisible: true},
// component: () => import('@/pages/order/bomOrder/BomDetail'),
// },
// ],
// },
// {
// path: 'delivery',
// name: '单证物流',
// meta: {icon: 'icon-DCC'},


+ 35
- 22
src/services/Common.js Bestand weergeven

@@ -58,31 +58,44 @@ function padLeftZero (str) {
return ('00' + str).substr(str.length);
}

//返回订单状态
export function resOrderStatus(status,key){
let list = [
{value:'-10',text:'取消',en:'Cancelled'},
{value:'0',text:'待审核',en:'Audit'},
{value:'10',text:'审核中',en:'Auditing'},
{value:'20',text:'审核不通过',en:'Audit Failed'},
{value:'30',text:'审核通过',en:'Pass'},
{value:'35',text:'复审中',en:'Auditing'},
{value:'40',text:'复审不通过',en:'Audit Failed'},
{value:'50',text:'复审通过',en:'Pass'},
{value:'60',text:'待付款',en:'Pending Payment'},
{value:'65',text:'待投产',en:'Pending Production'},
{value:'70',text:'生产中',en:'In Production'},
{value:'80',text:'待发货',en:'Pending Delivery'},
{value:'90',text:'已发货',en:'Shipped'},
{value:'100',text:'交易完成',en:'Completed'},
]
if(typeof status=='number'){
//返回选择/解析
//订单类型:orderType
//订单状态:orderStatus
//解析状态:parseStatue
export function resSelects(type='',val=''){
// console.log(type,val)
let list = [];
if (type==='orderType'){
list = [
{value:'1',text:'打样'},
{value:'2',text:'批量'},
]
}
else if (type==='orderStatus'){
list = [
{value:'0',text:'待审核'},
{value:'1',text:'审核中'},
{value:'2',text:'审核通过'},
{value:'3',text:'审核不通过'},
{value:'4',text:'订单取消'},
]
}
else if (type==='parseStatue'){
list = [
{value:'0',text:'带解析'},
{value:'1',text:'锁定中'},
{value:'2',text:'解析成功'},
{value:'3',text:'解析失败'},
]
}
else return false;
//返回内容
if(val!=='' && typeof val=='number'){
for(let i in list){
if (status== list[i].value) return list[i];
if (val.toString() === list[i].value) return list[i].text;
}
}else{
return list;
}
else return list;
}

//邮箱地址


+ 2
- 2
src/services/Roles/roles.js Bestand weergeven

@@ -19,8 +19,8 @@ export function delRoles(id) {
//新增角色
export function newRoles(params) {
return new Promise((resolve, reject) => {
if(params.id){
requestApi('/api/identity/roles/'+params.id, METHOD.PUT, params).then(res => {resolve(res);}).catch(err=>{reject(err);})
if(params.Id){
requestApi('/api/identity/roles/'+params.Id, METHOD.PUT, params).then(res => {resolve(res);}).catch(err=>{reject(err);})
}else {
requestApi('/api/identity/roles/', METHOD.POST, params).then(res => {resolve(res);}).catch(err=>{reject(err);})
}


+ 2
- 2
src/utils/axios-interceptors.js Bestand weergeven

@@ -26,8 +26,8 @@ const resp401 = {
if (error.response && error.response.status == 401) {
message.error('认证 token 已过期,请重新登录');
Cookie.remove(xsrfHeaderName);
//router.push('/login');
router.push('/loginOA');
router.push('/loginjmp');
// router.push('/loginOA');
return Promise.reject(error);
}
let msg = '';


Laden…
Annuleren
Opslaan