外协结算页面添加

dev-scheduling
jinna 3 weeks ago
parent e791bd0402
commit 72bf7a44a0
  1. 18
      src/api/oem/settleCategories.js
  2. 198
      src/views/oem/oemOrderSettlement/components/inReview.vue
  3. 151
      src/views/oem/oemOrderSettlement/components/proofreadingAndReview.vue
  4. 7
      src/views/oem/oemOrderSettlement/components/underReview.vue
  5. 14
      src/views/oem/oemOrderSettlement/components/unsettled.vue
  6. 27
      src/views/oem/oemProcess/index.vue
  7. 211
      src/views/oem/settleCategories/index.vue

@ -0,0 +1,18 @@
// 结算大类
import request from '@/axios';
// 列表
export const getList = (params) =>
request({
url: '/api/blade-desk/mesOemStatementCategory/page',
method: 'get',
params,
});
// 删除
export const deleteData = (params) =>
request({
url: '/api/blade-desk/mesOemStatementCategory/remove',
method: 'post',
params,
});

@ -6,23 +6,37 @@
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange">
<template #menu="scope">
<el-button type="primary" text @click="handleProofread(scope.row)">校对</el-button>
<el-button type="primary" text @click="handleCheck(scope.row)">审核</el-button>
</template>
</avue-crud>
<proofreadingAndReview v-if="showDialog" :showDialog="showDialog" @closeDialog="closeDialog"></proofreadingAndReview>
</div>
</template>
<script>
import proofreadingAndReview from './proofreadingAndReview.vue';
import {getStatement} from "@/api/outsourcingManagement/oemOrderSettlement"
export default {
components:{
proofreadingAndReview
},
data(){
return{
loading:false,
data:[],
form:{},
query:{},
query:{
rosStatusList:'6',
},
selectionList:[],
page:{
pageSize: 10,
currentPage: 1,
total: 0,
},
showDialog:false,
searchParams:{},
selectionList:[],
option:{
@ -31,7 +45,7 @@ export default {
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchMenuSpan: 18,
searchIcon: true,
searchIndex: 3,
tree: false,
@ -50,7 +64,7 @@ export default {
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth:90,
menuWidth: 180,
menuWidth: 100,
dialogWidth: 640,
dialogClickModal: false,
searchEnter: true,
@ -59,7 +73,7 @@ export default {
searchShowBtn: false,
columnSort: true,
showOverflowTooltip: true,
menu: false,
menu: true,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
@ -88,12 +102,188 @@ export default {
span: 24,
width: 120,
},
{
label: '结算总面积(dm²)',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 150,
},
{
label: '结算总金额(元)',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 150,
},
{
label: '结算说明',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '审核状态',
prop: 'checkStatus',
sortable: true,
filter: true,
span: 24,
width: 120,
search:true,
type:'select',
dicData:[
{
label:"待校对",
value:'1'
},
{
label:"校对中",
value:'2'
},
{
label:"待审核",
value:'3'
},
{
label:"审核通过",
value:'4'
},
]
},
{
label: '提交人',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '提交时间',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '校对人1',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '校对时间1',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '校对人2',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '校对时间2',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '审核人',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
{
label: '审核时间',
prop: 'area',
sortable: true,
filter: true,
span: 24,
width: 120,
},
]
}
}
},
mounted() {
},
methods:{
searchChange(params, done){
this.query = {
...params,
rosStatusList:'6',
};
this.page.currentPage = 1;
this.onLoad()
done()
},
searchReset(){
this.query = {
rosStatusList:'6',
}
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()
},
handleProofread(row){
this.showDialog = true
},
handleCheck(row){
this.showDialog = true
},
closeDialog(val){
this.showDialog = false
if(val){
this.onLoad()
}
},
onLoad(){
this.loading = true
console.log('query---------',this.query)
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.page.total = res.data.data.total
this.loading = false
})
},
}
}
</script>

@ -0,0 +1,151 @@
<template>
<el-dialog title="校对/审核" append-to-body :modelValue="openShow" fullscreen @close="closeDialog()">
<div class="check_box">
<div class="radio_box">
<div style="margin-right: 10px;">校对/审核结果</div>
<div>
<el-radio-group v-model="formData.result">
<el-radio label="1">通过</el-radio>
<el-radio label="0">不通过</el-radio>
</el-radio-group>
</div>
</div>
<div class="btn_box">
<div>统计维度</div>
<div style="display: flex;align-items: center;margin-left: 10px;">
<div class="btn left" :class="checkBtn == '1' ? 'active_btn' : ''" @click="changeView('1')">厂家</div>
<div class="btn right" :class="checkBtn == '2' ? 'active_btn' : ''" @click="changeView('2')">厂家+结算大类</div>
</div>
</div>
</div>
<div class="tip_box">
<div style="margin-left:10px;margin-right:30px;">结算总批数{{totalCount}}</div>
<div style="margin-right:30px;">结算总面积(dm²){{totalArea}}</div>
<div>结算总金额(){{totalMoney}}</div>
</div>
<el-table :data="factoryData" v-if="checkBtn == '1'">
<el-table-column label="#" type="index" width="55px" align="center"></el-table-column>
<el-table-column label="厂家代码" prop="ocCode" align="center"></el-table-column>
<el-table-column label="厂家名称" prop="ocName" align="center"></el-table-column>
<el-table-column label="结算批数" prop="ocName" align="center"></el-table-column>
<el-table-column label="结算金额(元)" prop="money" align="center"></el-table-column>
</el-table>
<el-table :data="factoryTypeData" v-if="checkBtn == '2'">
<el-table-column label="#" type="index" width="55px" align="center"></el-table-column>
<el-table-column label="厂家代码" prop="ocCode" align="center"></el-table-column>
<el-table-column label="厂家名称" prop="ocName" align="center"></el-table-column>
<el-table-column label="结算批数" prop="ocName" align="center"></el-table-column>
<el-table-column label="结算金额(元)" prop="money" align="center"></el-table-column>
<el-table-column label="总面积(dm²)" prop="area" align="center"></el-table-column>
<el-table-column label="面积月占比(%)" prop="area" align="center"></el-table-column>
<el-table-column label="月结算金额(元)" prop="area" align="center"></el-table-column>
<el-table-column label="金额月占比(%)" prop="area" align="center"></el-table-column>
</el-table>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog()"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
export default {
props:{
showDialog:{
type: Boolean,
default: false
}
},
data(){
return{
openShow: false,
formData:{
result:'1'
},
checkBtn:'1',
totalCount:90,
totalArea:90.111,
totalMoney:352,
factoryData:[],
factoryTypeData:[],
}
},
mounted(){
this.openShow = this.showDialog
},
methods:{
closeDialog(val){
this.openShow = false
this.$emit('closeDialog',val);
},
changeView(val){
this.checkBtn = val
},
submit(){
this.closeDialog()
},
}
}
</script>
<style lang="scss" scoped>
.check_box{
display: flex;
align-items: center;
justify-content: space-between;
.radio_box{
display: flex;
align-items: center;
}
.btn_box{
display: flex;
align-items: center;
.btn{
width: 120px;
height: 30px;
border: 1px solid #dcdfe6;
display: flex;
align-items: center;
justify-content: center;
margin-left:0px;
cursor: pointer;
&.left{
border-right: 0px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
border-top-left-radius:5px;
border-bottom-left-radius: 5px;
}
&.right{
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
border-top-right-radius:5px;
border-bottom-right-radius: 5px;
}
&.active_btn{
color:#1890ff;
border: 1px solid #1890ff;
}
}
}
}
.tip_box{
width: 100%;
height: 30px;
background: #284c894d;
color: #284c89;
margin-top: 10px;
margin-bottom: 10px;
display: flex;
align-items: center;
border-radius: 5px;
}
</style>

@ -457,7 +457,7 @@ export default {
},
{
label: '外协厂商',
prop: 'ocId',
prop: 'ocIds',
sortable: true,
filter: true,
span: 24,
@ -489,6 +489,9 @@ export default {
this.query = {
rosStatusList:2
}
this.searchParams = {
rosStatusList:2
}
this.onLoad()
},
selectionChange(list){
@ -522,7 +525,7 @@ export default {
this.$message.error('请先查询数据!')
return
}
this.re
this.reviewForm = {}
this.isReview = true
},
changeResult(val){

@ -207,7 +207,7 @@ export default {
},
{
label: '质量等级',
prop: 'prodIdent',
prop: 'productIdent',
// sortable: 'custom',
filter: true,
span: 24,
@ -447,7 +447,7 @@ export default {
{
label: '外协厂商',
prop: 'ocId',
prop: 'ocIds',
sortable: 'custom',
filter: true,
span: 24,
@ -514,9 +514,11 @@ export default {
},
searchReset() {
this.query = {
rosStatusList:'1',
rosStatusList:1,
};
this.page.currentPage = 1;
this.searchParams = {
rosStatusList:1,
}
this.onLoad();
},
currentChange(currentPage) {
@ -746,10 +748,6 @@ export default {
getStatement(params).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
console.log('返回的数据:', this.data)
if (this.data && this.data.length > 0) {
console.log('第一条数据:', JSON.stringify(this.data[0], null, 2))
}
this.loading = false
})
// this.data = [

@ -89,6 +89,7 @@ export default {
searchSpan: 6,
menuAlign: "center",
gridBtn: false,
labelWidth: 110,
searchMenuPosition: "right",
addBtnIcon: " ",
viewBtnIcon: " ",
@ -133,7 +134,7 @@ export default {
}
},
{
label: "工艺能力",
label: "需结算工艺能力",
prop: "craftIds",
search: false,
sortable: 'custom',
@ -150,7 +151,29 @@ export default {
rules: [
{
required: true,
message: "请输入工艺能力",
message: "请输入需结算工艺能力",
trigger: "blur",
},
],
},
{
label: "工序大类",
prop: "statementCategoryId",
search: false,
sortable: 'custom',
filter: true,
span: 24,
type: "select",
filterable: true,
dicUrl:"/api/blade-desk/mesOemStatementCategory/listForSelect",
props:{
label:'statementCategory',
value:"id"
},
rules: [
{
required: true,
message: "请选择工序大类",
trigger: "blur",
},
],

@ -0,0 +1,211 @@
<template>
<basic-container>
<!-- 结算大类 -->
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@selection-change="selectionChange"
@on-load="onLoad"
@sort-change="sortChange"
>
<template #menu-left>
<el-button type="danger" @click="handleDelete">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport">导入</el-button>
</template>
</avue-crud>
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/mesOemStatementCategory/download-excel-template"
templateName="结算大类.xls"
importUrl="/blade-desk/mesOemStatementCategory/import-excel"
@closeDialog="closeDialog">
</basic-import>
</basic-container>
</template>
<script>
import basicImport from '@/components/basic-import/main.vue'
import {getList,deleteData} from "@/api/oem/settleCategories"
export default {
components:{
basicImport
},
data(){
return{
loading:false,
data:[],
form:{},
query:{},
page:{
pageSize: 10,
currentPage: 1,
total: 0,
},
selectionList:[],
isShowImport:false,
option:{
height: 'auto',
align: 'center',
calcHeight: 32,
rowKey: 'id',
rowParentKey: 'parentId',
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: false,
selection: true,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
// labelWidth: 120,
searchLabelWidth: 'auto',
menu: false,
menuWidth: 120,
dialogWidth: 1200,
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
columnSort: true,
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: 'right',
column: [
{
label: '结算大类',
prop:'statementCategory',
search:false,
sortable:'custom',
searchOrder:4
},
{
label: '维护人',
prop:'updateUserName',
search:false,
sortable:'custom',
searchOrder:4
},
{
label: '维护时间',
prop:'updateTime',
search:false,
// sortable:'custom',
searchOrder:4
},
]
}
}
},
methods:{
selectionChange(list){
this.selectionList = list
},
searchChange(params, done){
this.query = params;
this.page.currentPage = 1
this.onLoad()
done()
},
searchReset(){
this.query = {}
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage
},
sizeChange(pageSize){
this.page.pageSize = pageSize
},
refreshChange(){
this.onLoad()
},
//
sortChange({ prop, order }) {
console.log('prop----------', prop);
console.log('order----------', order);
this.query.ascs = undefined;
this.query.descs = undefined;
const orderByFieldKey = order === 'ascending' ? 'ascs' : 'descs';
const orderByField = prop.replace(/([a-z])([A-Z0-9])/g, '$1_$2').toUpperCase();
this.query[orderByFieldKey] = orderByField;
// //
this.onLoad(this.page, this.query);
},
handleDelete(){
if(this.selectionList.length == 0){
this.$message.error('请选择至少一条数据');
return
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deleteData({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
handleImport(){
this.isShowImport = true
},
closeDialog(val){
this.isShowImport = false
if(val){
this.onLoad()
}
},
onLoad(){
this.loading = true;
getList({
current:this.page.currentPage,
size:this.page.pageSize,
...this.query
}).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
}
}
}
</script>
<style>
</style>
Loading…
Cancel
Save