中航光电热表web
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

623 lines
23 KiB

<template>
<div>
<!-- 待审核 -->
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page"
v-model:search="searchParams" ref="crud"
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange">
<template #menu-left>
<el-button type="primary" @click="settleConfirm" v-if="permission.underReview_settlementConfirm">结算确认</el-button>
<el-button type="primary" @click="initiateReview" v-if="permission.underReview_initiateCheck">发起审核</el-button>
</template>
</avue-crud>
<!-- 结算确认 -->
<el-dialog title="结算确认" :modelValue="isConfirm" append-to-body width="30%">
<el-form :model="settleForm" :rules="settleRules" ref="settleForm">
<el-form-item label="确认结果" prop="confirmResult">
<el-radio-group v-model="settleForm.confirmResult" @change="changeResult">
<el-radio label="1">结算正确</el-radio>
<el-radio label="0">结算异常</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="异常原因" prop="errorReason" v-if="settleForm.confirmResult == 0">
<el-select v-model="settleForm.errorReason">
<el-option label="订单数据错误" value="订单数据错误"></el-option>
<el-option label="无需结算" value="无需结算"></el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="isConfirm = false">取消</el-button>
<el-button type="primary" @click="summitSettle">确定</el-button>
</span>
</template>
</el-dialog>
<!-- 发起审核 -->
<el-dialog title="发起审核" :modelValue="isReview" append-to-body width="30%">
<el-form :model="reviewForm" :rules="reviewRules" ref="reviewForm">
<el-form-item label="结算说明" prop="reason">
<el-input v-model="reviewForm.reason" type="textarea" placeholder="请输入结算说明"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="isReview = false">取消</el-button>
<el-button type="primary" @click="summitReview">确定</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script>
import {getStatement,confirmSettlement,sendApproval} from "@/api/outsourcingManagement/oemOrderSettlement"
import { mapGetters } from 'vuex';
export default {
data(){
return{
loading:false,
data:[],
form:{},
searchParams:{
rosStatusList:2,
},
query:{},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
selectionList:[],
isConfirm:false,
settleForm:{},
settleRules:{
confirmResult:[{required: true, message: '请选择结算结果',trigger:'blur'}],
errorReason:[{required: false, message: '请填写异常原因',trigger:'blur'}],
},
isReview:false,
reviewForm:{},
reviewRules:{
reason:[{required: true, message: '请填写结算说明',trigger:'blur'}]
},
option:{
height: 'auto',
calcHeight: 32,
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: false,
selection: true,
rowKey: 'id',
editBtn: false,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtnText: '修改',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth:'auto',
menuWidth: 180,
dialogWidth: 640,
dialogClickModal: false,
searchEnter: true,
excelBtn: true,
filterBtn: true,
searchShowBtn: false,
columnSort: true,
showOverflowTooltip: true,
menu: false,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: 'right',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
align: 'center',
column: [
{
label: '计划单号',
prop: 'ypCode',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:4,
},
{
label: '车间订单单号',
prop: 'woCode',
sortable: true,
filter: true,
span: 24,
search: true,
width: 140,
searchOrder:3,
},
{
label: '零件号',
prop: 'partCode',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:7,
},
{
label: '零件名称',
prop: 'partName',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '批次号',
prop: 'batchNo',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '质量等级',
prop: 'productIdent',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
// type:'select',
searchOrder:5,
// dicUrl:"/api/blade-scheduling/qualityGrade/getGrades",
// props:{
// label:'qualityGrade',
// value:"id"
// }
},
{
label: '工序',
prop: 'ppsId',
sortable: true,
filterable: true,
span: 24,
search: true,
width: 120,
type:'select',
dicUrl:"/api/blade-desk/mesOemProcess/page?current=1&&size=99999",
props:{
label: 'paName',
value: 'oemProcessCode',
res: 'data.records',
},
searchOrder:9,
},
{
label: '工艺能力',
prop: 'caId',
sortable: true,
filterable: true,
span: 24,
search: false,
searchOrder:8,
width: 120,
type:'select',
dicUrl:"/api/blade-desk/BA/craftAbility/findList",
props:{
label:"caName",
value:"id"
},
},
{
label: '结算大类',
prop: 'statementCategory',
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:19,
},
{
label: '厂家代码',
prop: 'ocCode',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '厂家名称',
prop: 'ocName',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '结算数量',
prop: 'makeQty',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '单件面积(d㎡)',
prop: 'ypArea',
sortable: true,
filter: true,
span: 24,
search: false,
width: 140,
},
{
label: '总面积(d㎡)',
prop: 'totalArea',
sortable: true,
filter: true,
span: 24,
search: false,
width: 140,
},
{
label: '镀种',
prop: 'plate',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:6,
},
{
label: '镀层厚度',
prop: 'plateThickness',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '流程卡号',
prop: 'cardNo',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:1
},
{
label: '工序标准代码',
prop: 'standardProcessCode',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '涂色标个数',
prop: 'tsbNum',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '涂色带个数',
prop: 'tsdNum',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '涂箭头个数',
prop: 'tjtNum',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '计划部门编号',
prop: 'planDeptcode',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '使用部门编号',
prop: 'useDeptCode',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '镀后入库时间',
prop: 'putStoreTime',
sortable: true,
filter: true,
span: 24,
search: true,
width: 140,
type: "date",
searchRange: true,
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
searchOrder:20,
},
{
label: '报价单号',
prop: 'quotation',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '计量单位',
prop: 'unit',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '结算单价',
prop: 'unitPrice',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '结算金额',
prop: 'totalPrice',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
// {
// label: '异常原因',
// prop: 'abnormalReason',
// sortable: true,
// filter: true,
// span: 24,
// search: true,
// width: 120,
// searchOrder:14,
// },
{
label: '结算时间',
prop: 'settleDate',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '结算状态',
prop: 'rosStatusName',
sortable: true,
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '结算状态',
prop: 'rosStatusList',
sortable: true,
filterable: true,
span: 24,
hide: true,
search: true,
width: 120,
type:'select',
searchOrder:10,
clearable:false,
dicData:[
// 未结算:1,待确认:2,结算异常:3,结算完成:4,待审核:5,审核中:6,待推送:7
{
label:'待确认',
value:2
},
{
label:'待审核',
value:5
}
]
},
{
label: '外协厂商',
prop: 'ocIds',
sortable: true,
filterable: true,
span: 24,
hide: true,
search: true,
width: 120,
type:'select',
searchOrder:10,
dicUrl:"/api/blade-desk/BA/Oem/listForSelect",
props:{
label:'ocName',
value:"id"
}
},
]
}
}
},
computed: {
...mapGetters(['permission']),
},
mounted() {
},
methods:{
searchChange(params, done){
this.query = params;
this.page.currentPage = 1;
this.onLoad();
done()
},
searchReset(){
this.query = {
rosStatusList:2
}
this.searchParams = {
rosStatusList:2
}
this.onLoad()
},
selectionChange(list){
this.selectionList = list;
},
currentChange(currentPage){
this.page.currentPage = currentPage;
this.onLoad()
},
sizeChange(pageSize){
this.page.pageSize = pageSize;
this.onLoad()
},
refreshChange(){
this.onLoad();
},
settleConfirm(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据')
return
}
let tmp = this.selectionList.find(item => item.rosStatus != 2)
if(tmp){
this.$message.error('请选择状态为【待确认】的数据!')
return
}
this.isConfirm = true
},
initiateReview(){
if(this.data.length == 0){
this.$message.error('请先查询数据!')
return
}
let tmp = this.data.find(item => item.rosStatus != 5)
if(tmp){
this.$message.error('请先查询状态为【待审核】的数据!')
return
}
this.reviewForm = {}
this.isReview = true
},
summitReview(){
this.$refs.reviewForm.validate(valid => {
if(valid){
let params = {
settlementMemo:this.reviewForm.reason
}
sendApproval(params).then(res => {
if(res.data.code == 200){
this.$message.success('发送成功')
this.isReview = false
this.onLoad()
}
})
}
})
},
changeResult(val){
console.log('val-----------------',val)
if(val == 0){
this.settleRules.errorReason[0].required = true
}else{
this.settleRules.errorReason[0].required = false
}
},
summitSettle(){
this.$refs.settleForm.validate(valid => {
if(valid){
let params = {
ids:this.selectionList.map(item => item.id),
...this.settleForm,
confirmResult:this.settleForm.confirmResult == 1 ? true : false
}
console.log('params----------',params)
confirmSettlement(params).then(res =>{
if(res.data.code == 200){
this.$message.success('确认结算成功');
this.isConfirm = false
this.onLoad()
}
})
// this.$message.success('结算成功!')
// this.isConfirm = false
}
})
},
onLoad(){
this.loading = true
let params = {
current:this.page.currentPage,
size:this.page.pageSize,
...this.query,
postPlatingStorageTimeStart:this.query && this.query.putStoreTime && this.query.putStoreTime.length != 0 && this.query.putStoreTime[0],
postPlatingStorageTimeEnd:this.query && this.query.putStoreTime && this.query.putStoreTime.length != 0 && this.query.putStoreTime[1],
}
if(params.putStoreTime) delete params.putStoreTime
getStatement(params).then(res =>{
this.data = res.data.data.records
this.data.forEach(item =>{
item.ppsId = item.ppsId?item.ppsId+'':''
})
this.page.total = res.data.data.total
this.loading = false
})
},
}
}
</script>
<style>
</style>