<template>
|
<div ref="container" class="page-list-container">
|
<!--数据Table-->
|
<yrt-data-list :ref="dataListRef" :editor-ref="editorRef" :data-options="dataOptions" :fields.sync="dataListOptions.fields" :buttons="dataListOptions.buttons" :button-click="buttonClick" :data-list-selections.sync="dataListSelections" :auth-nodes="authNodes">
|
<template slot="common-column-slot" slot-scope="{ row, col }">
|
<template v-if="col.prop=='statusText'">
|
<template>
|
<el-tag v-if="row[col.prop]=='新建'" color="#ffff33" style="color:black;border:0">
|
{{ row[col.prop] }}
|
</el-tag>
|
<el-tag v-else-if="row[col.prop]=='审核成功'" color="#00cc00" style="color:white;border:0">
|
{{ row[col.prop] }}
|
</el-tag>
|
<el-tag v-else-if="row[col.prop]=='已取消'" color="#a2a2a2" style="color:white;border:0">
|
{{ row[col.prop] }}
|
</el-tag>
|
<span v-else>
|
{{ row[col.prop] }}
|
</span>
|
</template>
|
</template>
|
<!--审核字段-->
|
<template v-else-if="col.prop=='auditing'">
|
<template>
|
<el-tag v-if="row[col.prop]==0" color="#ffff33" style="color:black;border:0">
|
{{ $refs[dataListRef].translateText(col.prop, row[col.prop], col.dropdown_Id) }}
|
</el-tag>
|
<el-tag v-else-if="row[col.prop]==1" color="#ff0033" style="color:white;border:0">
|
{{ $refs[dataListRef].translateText(col.prop, row[col.prop], col.dropdown_Id) }}
|
</el-tag>
|
<el-tag v-else-if="row[col.prop]==2" color="#33cc33" style="color:black;border:0;color:#fff;">
|
{{ $refs[dataListRef].translateText(col.prop, row[col.prop], col.dropdown_Id) }}
|
</el-tag>
|
<span v-else>
|
{{ row[col.prop] }}
|
</span>
|
</template>
|
</template>
|
</template>
|
</yrt-data-list>
|
|
<!--数据编辑器Editor-->
|
<yrt-editor :ref="editorRef" :data-list-ref="dataListRef" v-bind="editorOptions" :data-options="dataOptions" :action.sync="editorOptions.action" :top.sync="editorOptions.top" :visible.sync="editorOptions.config.visible" :detail-button-click="detailButtonClick" :auth-nodes="authNodes" :btn-read-only="btnReadOnly" :use-detail-slot="['sortingStatus', 'lackStorage']" @on-change="onChange" @on-detail-change="onDetailChange" @on-row-change="onRowChange">
|
</yrt-editor>
|
|
<!--出库单选择器-->
|
<yrt-selector ref="selector-dialog" :config="selectorConfig" :visible.sync="selectorConfig.visible" @on-selected="onSelected"></yrt-selector>
|
</div>
|
</template>
|
|
<script>
|
import baseLayout from "@/components/common/base-layout.vue";
|
import yrtSelector from "@/components/common/yrtSelector.vue";
|
export default {
|
name: "finance-receive-finance-receive",
|
components: { yrtSelector },
|
mixins: [baseLayout],
|
data() {
|
return {
|
// 选择器配置参数
|
selectorConfig: {
|
title: "出库单选择器",
|
width: "1000px",
|
visible: false,
|
// 配置路由
|
router: "/selector/sale-order-selector"
|
}
|
};
|
},
|
methods: {
|
// 明细按钮点击事件
|
detailButtonClick(authNode) {
|
switch (authNode) {
|
case "detailAdd":
|
// 物料明细添加
|
this.detailAdd();
|
return true;
|
}
|
},
|
// 明细添加
|
detailAdd() {
|
if (!this.masterData.consignorName) {
|
this.$message({
|
message: "请选择货主!",
|
type: "warning"
|
});
|
return;
|
} else if (!this.masterData.storageName) {
|
this.$message({
|
message: "请选择仓库!",
|
type: "warning"
|
});
|
return;
|
}
|
const selector = this.$refs["selector-dialog"];
|
selector.setSearchValue("consignor_Id", [this.masterData.consignor_Id]);
|
selector.setReadOnly("consignor_Id", true); // 设为只读
|
selector.setSearchValue("storage_Id", [this.masterData.storage_Id]);
|
selector.setReadOnly("storage_Id", true); // 设为只读
|
selector.loadData();
|
|
this.selectorConfig.visible = true;
|
},
|
onSelected(rows) {
|
rows.forEach(element => {
|
// 自定义字段赋值
|
element.billType = "出库单";
|
element.bill_Id = element.order_Id;
|
element.billCode = element.orderCode;
|
element.billDate = element.createDate;
|
element.grandTotal = element.subTotal; // 单据金额
|
element.totalPaid = element.totalPaid || 0; // 已付
|
element.unpaid = element.grandTotal - element.totalPaid; // 未付
|
element.totalUnSettle = element.unpaid; // 剩余未结
|
});
|
this.editor.addDetailDataRow(rows);
|
this.selectorConfig.visible = false;
|
},
|
onDetailChange(ref, val, row, field) {
|
if (field.prop === "favourTotal") {
|
this.setTotal();
|
}
|
},
|
onChange(ref, val, field, formData) {
|
if (field && field.options.prop === "totalSettle") {
|
this.setTotal();
|
}
|
},
|
// 求和
|
setTotal() {
|
var detailRows = this.detailRows; // 获得明细行数据集合
|
let totalSettle = this.masterData.totalSettle; // 本次结算
|
// 对明细进行本次结算分配
|
for (const row of detailRows) {
|
if (totalSettle <= 0) break;
|
|
const favourTotal = Number(row.favourTotal) || 0;
|
if (row.unpaid - favourTotal > totalSettle) {
|
row.totalSettle = totalSettle;
|
totalSettle = 0;
|
} else {
|
row.totalSettle = row.unpaid - favourTotal;
|
totalSettle = totalSettle - row.totalSettle;
|
}
|
// 剩余未结 = 未结算 - 本次结算
|
row.totalUnSettle = Math.Round(row.unpaid - row.totalSettle - (favourTotal || 0), 2);
|
}
|
|
// 主表求和字段计算
|
const total = detailRows.reduce(
|
(totalItem, currItem) => {
|
totalItem.grandTotal += currItem.grandTotal;
|
totalItem.totalPaid += currItem.totalPaid;
|
totalItem.unpaid += currItem.unpaid;
|
totalItem.favourTotal += Number(currItem.favourTotal) || 0;
|
totalItem.totalUnSettle += currItem.totalUnSettle;
|
return totalItem;
|
},
|
// 初始值
|
{ grandTotal: 0, totalPaid: 0, unpaid: 0, favourTotal: 0, totalUnSettle: 0 }
|
);
|
this.masterData.grandTotal = total.grandTotal;
|
this.masterData.totalPaid = total.totalPaid;
|
this.masterData.unpaid = total.unpaid;
|
this.masterData.favourTotal = total.favourTotal;
|
this.masterData.totalUnSettle = total.totalUnSettle;
|
},
|
onRowChange(ref, val, field, formData) {
|
if (["consignorName"].indexOf(field.options.prop) >= 0) {
|
window.setTimeout(() => {
|
this.getbankAccountNametems();
|
}, 200);
|
}
|
},
|
getbankAccountNametems() {
|
const formData = this.editor.formData;
|
const url = "/api/finance/payout/getShortName";
|
const params = {
|
consignorCode: formData.consignorCode
|
};
|
var callback = res => {
|
if (res.result) {
|
if (res.result) {
|
this.$set(formData, "bankAccount_Id", res.data.bankAccount_Id);
|
this.$set(formData, "bankAccountCode", res.data.bankAccountCode);
|
this.$set(formData, "bankAccountName", res.data.bankAccountName);
|
}
|
}
|
};
|
this.common.ajax(url, params, callback, true);
|
}
|
}
|
};
|
</script>
|