中航光电热表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.
 
 
 
 

818 lines
32 KiB

<template>
<div>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @sort-change="sortChange">
<!-- @on-load="onLoad" -->
<template #menu-left>
<el-form ref="form" :model="form" label-width="100px" :inline="true">
<el-form-item label="现执行价格:">
<el-input v-model="form.price"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="settlementFn">预结算</el-button>
<el-button type="primary" @click="settlementFnNum">结算</el-button>
<el-button type="danger" @click="onSubmit">无需结算</el-button>
</el-form-item>
</el-form>
</template>
<template #menu-right>
<el-button type="primary" @click="handleSupplement">补充结算</el-button>
</template>
<template #menu></template>
</avue-crud>
<!-- 预结算弹窗 -->
<el-dialog title="预结算" append-to-body :modelValue="openSettle" width="30%">
<el-form :model="settleForm" :rules="settleRules" ref="settleForm">
<el-form-item label="镀后入库时间" prop="putStoreTime">
<el-date-picker
v-model="settleForm.putStoreTime"
type="daterange"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
<el-form-item label="结算数据状态" prop="settleStatus">
<el-checkbox-group v-model="settleForm.settleStatus">
<el-checkbox label="未结算" value="1"></el-checkbox>
<el-checkbox label="结算异常" value="2"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="openSettle = false">取消</el-button>
<el-button type="primary" @click="summitSettle">确定</el-button>
</span>
</template>
</el-dialog>
<!-- 补充结算弹窗 -->
<el-dialog title="预结算" append-to-body :modelValue="openSupplement" width="30%">
<el-form :model="supplementForm" :rules="supplementRules" ref="supplementForm" label-width="100px">
<el-form-item label="镀后入库时间" prop="putStoreTime">
<el-date-picker
v-model="supplementForm.putStoreTime"
type="daterange"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
<el-form-item label="工序" prop="ppsId">
<jhSelect
:value="supplementForm.ppsId"
@input="val => (supplementForm.ppsId = val)"
placeholder="请搜索选择"
api-url="/api/blade-desk/mesOemProcess/page"
echo-api="/api/blade-desk/mesOemProcess/page"
echoParamsKey="ids"
echo-method="get"
api-method="get"
list-key="records"
total-key="total"
label-key="paName"
value-key="id"
search-key="paName"
:debounce-time="200"
/>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="openSupplement = false">取消</el-button>
<el-button type="primary" @click="summitSupplement">确定</el-button>
</span>
</template>
</el-dialog>
<settlementDailog v-if="isOpen" :showDialog="isOpen" :type="settlementType" :statementList="selectionList" :settleResult="settleResult" @closeDialog="closeDialog" @refresh="refreshTable"></settlementDailog>
</div>
</template>
<script>
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { downloadXls } from '@/utils/util';
import settlementDailog from './SettlementDailog.vue'
import {getStatement,noSettlementItem,calculate,preSettlement,supplement} from "@/api/outsourcingManagement/oemOrderSettlement"
export default {
components: {
settlementDailog
},
data() {
return {
selectionList: [],
data:[],
loading:false,
query:{
rosStatusList:'1',
},
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: 'wpId',
editBtn: false,
viewBtn: false,
delBtn: false,
addBtn: false,
editBtnText: '修改',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth:90,
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: '外协单号',
label: '计划单号',
prop: 'ypCode',
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:3,
},
{
label: '车间订单单号',
prop: 'woCode',
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 140,
searchOrder:2,
},
{
label: '零件号',
prop: 'partCode',
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:7,
},
{
label: '零件名称',
prop: 'partName',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '批次号',
prop: 'batchNo',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '质量等级',
prop: 'prodIdent',
// sortable: 'custom',
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:"cardNo",
// sortable: 'custom',
span:24,
search:true,
width: 120,
searchOrder:1,
},
{
label: '工序',
prop: 'ppsId',
// sortable: 'custom',
filter: 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',
type:"select",
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 120,
dicUrl:"/api/blade-desk/BA/craftAbility/findList",
props:{
label:"caName",
value:"id"
},
searchOrder:8,
},
{
label: '厂家代码',
prop: 'ocCode',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '厂家名称',
prop: 'ocName',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '结算数量',
prop: 'makeQty',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '单位面积(d㎡)',
prop: 'ypArea',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 140,
},
{
label: '总面积(d㎡)',
prop: 'totalArea',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 140,
},
{
label: '镀种',
prop: 'plate',
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 120,
searchOrder:6,
},
{
label: '镀层厚度',
prop: 'plateThickness',
// sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '工序标准代码',
prop: 'standardProcessCode',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '涂色标个数',
prop: 'tsbNum',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '涂色带个数',
prop: 'tsdNum',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '涂箭头个数',
prop: 'tjtNum',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '计划部门编号',
prop: 'planDeptcode',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '使用部门编号',
prop: 'useDeptCode',
sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
{
label: '镀后入库时间',
prop: 'putStoreTime',
sortable: 'custom',
filter: true,
span: 24,
search: true,
width: 140,
type: "date",
searchRange: true,
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
searchOrder:11,
},
{
label: '结算状态',
prop: 'rosStatusName',
// sortable: 'custom',
filter: true,
span: 24,
search: false,
width: 120,
},
// {
// label: '生产数量',
// prop: 'makeQty',
// sortable: 'custom',
// filter: true,
// span: 24,
// search: false,
// width: 120,
// },
{
label: '外协厂商',
prop: 'ocId',
sortable: 'custom',
filter: 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"
}
},
]
},
form: {
name: '',
},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
isOpen: false,
settleResult: null,
openSettle:false,
openSupplement:false,
supplementForm:{},
supplementRules:{
putStoreTime:[{required: true, message: '请选择镀后入库时间', trigger: 'change'}],
ppsId:[{required: true, message: '请选择工序', trigger: ['change','blur']}]
},
settleForm:{},
settleRules:{
settleStatus:[{required: true, message: '请选择结算状态', trigger: 'change'}]
}
}
},
methods: {
// 表格排序
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);
},
searchChange(params, done) {
this.query = {
...params,
rosStatusList:'1',
};
this.page.currentPage = 1;
this.onLoad();
done && done();
},
searchReset() {
this.query = {
rosStatusList:'1',
};
this.page.currentPage = 1;
this.onLoad();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
this.onLoad();
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
this.onLoad();
},
refreshChange() {
this.onLoad();
},
//结算
settlementFnNum() {
// if (this.selectionList.length === 0) {
// this.$message.error('请选择至少一条数据');
// return;
// }
// if (!this.form.price) {
// this.$message.error('请输入现执行价格');
// return;
// }
if(this.data.length == 0){
this.$message.error('请先查询数据!');
return;
}
this.$confirm('确定要进行结算吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
// 调用结算接口
const params = {
...this.query,
price: this.form && this.form.price,
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;
console.log('params',params)
calculate(params).then(res => {
if(res.data.code == 200){
this.$message.success('结算成功');
this.onLoad();
}
}).catch(() => {
// this.$message.error('结算失败');
});
// oemSettleAccountsItem(params).then(res => {
// // 获取返回的数据
// if (res.data && res.data.data) {
// this.settleResult = res.data.data;
// // 打开settlementDailog并显示结果
// this.isOpen = true;
// } else {
// this.$message.success('结算成功');
// this.onLoad();
// }
// }).catch(() => {
// this.$message.error('结算失败');
// });
}).catch(() => {
// 用户点击取消
});
},
//预结算
settlementFn() {
this.settleForm = {}
this.openSettle = true
// if (this.selectionList.length === 0) {
// this.$message.error('请选择至少一条数据');
// return;
// }
// if (!this.form.price) {
// this.$message.error('请输入现执行价格');
// return;
// }
// this.$confirm('确定要进行预结算吗?', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'error',
// }).then(() => {
// // 调用预结算接口
// const params = {
// statementList: this.selectionList,
// price: this.form.price
// };
// preSettlementItem(params).then(() => {
// this.$message.success('预结算成功');
// this.onLoad();
// }).catch(() => {
// this.$message.error('预结算失败');
// });
// }).catch(() => {
// // 用户点击取消
// });
},
// 确定预结算
summitSettle(){
this.$refs.settleForm.validate(valid =>{
if(valid){
console.log('settleForm----------',this.settleForm)
let params = {
postPlatingStorageTimeStart:this.settleForm && this.settleForm.putStoreTime && this.settleForm.putStoreTime[0],
postPlatingStorageTimeEnd:this.settleForm && this.settleForm.putStoreTime && this.settleForm.putStoreTime[1],
rosStatusList:this.settleForm.settleStatus.join(','),
}
console.log('params----------',params)
preSettlement(params).then(res =>{
console.log('res----------',res)
if(res.data){
this.$message.success('预结算成功')
this.openSettle = false
NProgress.start();
downloadXls(res.data, `预结算数据表${this.$dayjs().format('YYYY-MM-DD')}.xlsx`);
NProgress.done();
}
})
}
})
},
closeDialog() {
this.isOpen = false;
},
refreshTable() {
this.onLoad();
},
// 补充结算
handleSupplement(){
this.supplementForm = {}
this.openSupplement = true
},
// 确定补充结算
summitSupplement(){
this.$refs.supplementForm.validate(valid =>{
if(valid){
let params = {
...this.supplementForm,
postPlatingStorageTimeStart:this.supplementForm && this.supplementForm.putStoreTime && this.supplementForm.putStoreTime[0],
postPlatingStorageTimeEnd:this.supplementForm && this.supplementForm.putStoreTime && this.supplementForm.putStoreTime[1],
}
if(params.putStoreTime) delete params.putStoreTime;
console.log('params----------',params)
supplement(params).then(res =>{
if(res.data.code == 200){
this.$message.success('补充结算成功');
this.onLoad()
}
})
}
})
},
onSubmit() {
// if (this.selectionList.length === 0) {
// this.$message.warning('请选择至少一条数据');
// return;
// }
this.$confirm('确认当前页面所有数据无需结算?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
noSettlementItem(this.selectionList).then(() => {
this.$message.success('无需结算成功');
this.onLoad();
}).catch(() => {
this.$message.error('无需结算失败');
});
}).catch(() => {
// 用户点击取消
});
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning('请选择至少一条数据');
return;
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
})
},
// 多选
selectionChange(list) {
console.log('selectionChange 被调用,选中的数据:', list);
console.log('当前表格数据:', this.data);
this.selectionList = list;
},
onLoad() {
this.loading = true
// 清空选择状态
this.selectionList = []
if (this.$refs.crud) {
this.$refs.crud.clearSelection()
}
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
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 = [
// {
// "bsTeamSet": null,
// "bsWorkCenter": {
// "area": 13000.0,
// "batchNo": null,
// "bigBatch": false,
// "bsJfCenter": {
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2024-12-09 00:00:00",
// "deleted": false,
// "jcCode": "RBZX",
// "jcId": 1,
// "jcName": "热表中心",
// "keyValue": 1,
// "updateTime": "2024-12-09 00:00:00"
// },
// "checkout": false,
// "craftAbility": "化学镀镍",
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2023-02-06 12:31:36",
// "deleted": false,
// "describe": null,
// "endPoint": null,
// "keyValue": 81,
// "leaderUser": {
// "userId": 541,
// "userName": "崔殿龙"
// },
// "limitType": 0,
// "processes": "上挂、下挂、交检、化学镀镍、喷砂",
// "quantity": null,
// "roundCycle": null,
// "saturation": 85.0,
// "sign": "4",
// "startPoint": null,
// "team": "化学镀镍一班崔胜伟、化学镀镍一班郭家梁",
// "updateTime": "2023-03-06 18:42:47",
// "wcCode": "001",
// "wcId": 81,
// "wcName": "化学镀镍作业中心",
// "whetherPlate": false
// },
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2025-04-09 11:27:09",
// "deEquipmentCard": {
// "bindQty": 4,
// "categorys": "产线设备",
// "deviceCode": "9652247",
// "deviceIp": "192.168.43.179",
// "deviceName": "化学镀镍",
// "docking": true,
// "ecId": 1,
// "keyValue": 1,
// "macCode": "9652247",
// "macSpec": null,
// "memo": null,
// "rfId": "SYM-HCP-L4",
// "status": true,
// "typeName": "9652247",
// "updateTime": null,
// "used": 1,
// "usedText": "正常服役",
// "virtualMac": false
// },
// "keyValue": 121,
// "pureWater": 1.0,
// "quotaArea": 0.0,
// "tapWater": 1.0,
// "updateTime": "2025-04-09 11:27:09",
// "uqDate": "2025-04-09",
// "uqId": 121,
// "uqType": 0,
// "useElectric": 0.0,
// "workCenterId": "[81]",
// "workCenterName": "[\"化学镀镍作业中心\"]",
// "workCenterNames": "化学镀镍作业中心"
// }
// ]
// this.page.total = this.data.length
// this.loading = false
// setTimeout(() => {
// this.selectionClear()
// }, 500)
}
}
}
</script>
<style lang="scss" scoped></style>