Browse Source

Merge branch 'pre-production'

master
pref_mail@163.com 5 months ago
parent
commit
f2c2901bbc
  1. 4
      src/api/finance/SettlementInformation.js
  2. 212
      src/components/ArteryPrintTemplate/ArteryPrintTemplate.vue
  3. 113
      src/components/TripartiteTransferPrintTemplate/TripartiteTransferPrintTemplate.vue
  4. 11
      src/components/distributionDeliveryListmar/distributionDeliveryListmar.vue
  5. 3000
      src/option/aftersales/vueTvemp.js
  6. 8
      src/option/distribution/TripartiteTransfer.js
  7. 8
      src/option/distribution/VehicleArrivalManagement.js
  8. 8
      src/option/distribution/VehicleStowage.js
  9. 8
      src/option/finance/CustomerSettlement.js
  10. 2
      src/option/finance/MerchantDepositSlip.js
  11. 636
      src/option/finance/ReconciliationDepositSlip.js
  12. 2
      src/utils/print.js
  13. 529
      src/views/aftersales/aftersalesWorkOrderTemp.vue
  14. 112
      src/views/basicdata/brand/basicClient.vue
  15. 6
      src/views/distribution/artery/TripartiteTransfer.vue
  16. 6
      src/views/distribution/artery/VehicleArrivalManagement.vue
  17. 6
      src/views/distribution/artery/VehicleStowage.vue
  18. 14
      src/views/distribution/artery/VehicleStowageDetails.vue
  19. 34
      src/views/distribution/deliverylist/distributionDeliveryListmar.vue
  20. 6
      src/views/distribution/inventory/BookingNote.vue
  21. 2
      src/views/distribution/inventory/CreateOrder.vue
  22. 117
      src/views/finance/CustomerSettlement.vue
  23. 209
      src/views/finance/MerchantDepositSlip.vue
  24. 249
      src/views/finance/ReconciliationDepositSlip.vue
  25. 2
      src/views/waybill/CreateZeroOrder.vue
  26. 24
      src/views/waybill/WaybillOrderList.vue

4
src/api/finance/SettlementInformation.js

@ -46,7 +46,7 @@ export const postAddBalanceRecord = data => {
*/ */
export const postFindAbnormalList = data => { export const postFindAbnormalList = data => {
return request({ return request({
url: '/api/logpm-statisticsdata-zhy/merchantBalance/findAbnormalList', url: '/api/logpm-statisticsdata/merchantBalance/findAbnormalList',
method: 'post', method: 'post',
data, data,
}); });
@ -59,7 +59,7 @@ export const postFindAbnormalList = data => {
*/ */
export const postAddAbnormal = data => { export const postAddAbnormal = data => {
return request({ return request({
url: '/api/logpm-statisticsdata-zhy/merchantBalance/addAbnormal', url: '/api/logpm-statisticsdata/merchantBalance/addAbnormal',
method: 'post', method: 'post',
data, data,
}); });

212
src/components/ArteryPrintTemplate/ArteryPrintTemplate.vue

@ -129,74 +129,116 @@
<th style="border-bottom: 1px solid #000; border-left: 1px solid #000">小计</th> <th style="border-bottom: 1px solid #000; border-left: 1px solid #000">小计</th>
</tr> </tr>
<!-- --> <!-- -->
<tr v-for="(value, index) in renderInfo.mainList" style="word-break: break-all"> <template v-if="renderInfo.mainList">
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000">{{ index + 1 }}</td> <tr v-for="(value, index) in renderInfo.mainList" style="word-break: break-all">
<!-- 发货单位 --> <td style="border-bottom: 1px solid #000; border-left: 1px solid #000">
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> {{ index + 1 }}
{{ value.shipper || '' }} </td>
</td> <!-- 发货单位 -->
<!-- 开单时间 --> <td
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> v-if="value.mergeColumnIndex"
{{ value.createTime || '' }} style="border-bottom: 1px solid #000; border-left: 1px solid #000"
</td> :rowspan="value.mergeColumnIndex"
<!-- 始发仓 --> contenteditable
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> >
{{ value.departureWarehouseName || '' }} {{ value.shipper || '' }}
</td> </td>
<!-- 目的仓 --> <!-- 开单时间 -->
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> <td
{{ value.destinationWarehouseName || '' }} v-if="value.mergeColumnIndex"
</td> style="border-bottom: 1px solid #000; border-left: 1px solid #000"
<!-- 收货单位 --> :rowspan="value.mergeColumnIndex"
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> contenteditable
{{ value.consignee }} >
</td> {{ value.createTime || '' }}
<!-- 收货人 --> </td>
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> <!-- 始发仓 -->
{{ value.consigneeName }} <td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable>
</td> {{ value.departureWarehouseName || '' }}
<!-- 收货电话 --> </td>
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> <!-- 目的仓 -->
{{ value.consigneeMobile }} <td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable>
</td> {{ value.destinationWarehouseName || '' }}
<!-- 物流单号 --> </td>
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000"> <!-- 收货单位 -->
{{ value.waybillNo }} <td
</td> v-if="value.mergeColumnIndex"
<!-- 合同号 --> style="border-bottom: 1px solid #000; border-left: 1px solid #000"
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000"> :rowspan="value.mergeColumnIndex"
{{ value.orderCode }} contenteditable
</td> >
<!-- 计划件数 --> {{ value.consignee }}
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> </td>
{{ value.planNum }} <!-- 收货人 -->
</td> <td
<!-- 货位 --> v-if="value.mergeColumnIndex"
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000"></td> style="border-bottom: 1px solid #000; border-left: 1px solid #000"
<td :rowspan="value.mergeColumnIndex"
style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable
contenteditable >
v-for="item in goodsTitleList" {{ value.consigneeName }}
> </td>
{{ (value.goodsList.find(val => val.goodsName === item) || {}).num || '' }} <!-- 收货电话 -->
</td> <td
<!-- 小计 --> v-if="value.mergeColumnIndex"
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> style="border-bottom: 1px solid #000; border-left: 1px solid #000"
{{ value.smallTotal }} :rowspan="value.mergeColumnIndex"
</td> contenteditable
<!-- 合计件数 --> >
<!-- <td style="border-bottom: 1px solid #000; border-left: 1px solid #000;" contenteditable>{{ value.smallTotal }}</td> --> {{ value.consigneeMobile }}
<!-- 卸车件数 --> </td>
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable> <!-- 物流单号 -->
{{ value.unloadNum }} <td
</td> v-if="value.mergeColumnIndex"
<!-- 卸车网点 --> style="border-bottom: 1px solid #000; border-left: 1px solid #000"
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable></td> :rowspan="value.mergeColumnIndex"
<!-- 卸车时间 --> >
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable></td> {{ value.waybillNo }}
<!-- 异常备注 --> </td>
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable></td> <!-- 合同号 -->
</tr> <td style="border-bottom: 1px solid #000; border-left: 1px solid #000">
{{ value.orderCode }}
</td>
<!-- 计划件数 -->
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable>
{{ value.planNum }}
</td>
<!-- 货位 -->
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000"></td>
<td
style="border-bottom: 1px solid #000; border-left: 1px solid #000"
contenteditable
v-for="item in goodsTitleList"
>
{{ (value.goodsList.find(val => val.goodsName === item) || {}).num || '' }}
</td>
<!-- 小计 -->
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable>
{{ value.smallTotal }}
</td>
<!-- 合计件数 -->
<!-- <td style="border-bottom: 1px solid #000; border-left: 1px solid #000;" contenteditable>{{ value.smallTotal }}</td> -->
<!-- 卸车件数 -->
<td style="border-bottom: 1px solid #000; border-left: 1px solid #000" contenteditable>
{{ value.unloadNum }}
</td>
<!-- 卸车网点 -->
<td
style="border-bottom: 1px solid #000; border-left: 1px solid #000"
contenteditable
></td>
<!-- 卸车时间 -->
<td
style="border-bottom: 1px solid #000; border-left: 1px solid #000"
contenteditable
></td>
<!-- 异常备注 -->
<td
style="border-bottom: 1px solid #000; border-left: 1px solid #000"
contenteditable
></td>
</tr>
</template>
<!-- 合计行 --> <!-- 合计行 -->
<tr> <tr>
@ -262,13 +304,47 @@ renderInfo.value = waybillInfo;
const isShowTotal = ref(false); const isShowTotal = ref(false);
renderInfo.value.endWarehouseNames = renderInfo.value.endWarehouseNames.split(','); renderInfo.value.endWarehouseNames = renderInfo.value.endWarehouseNames.split(',');
//
let mergeStartIndex = 0;
//
let comparisonValue = '';
const handleMerge = (startIndex: number, endIndex: number, data: {}) => {
for (let index = startIndex; index < endIndex; index++) {
const value = data[index];
if (index === startIndex) value.mergeColumnIndex = endIndex - startIndex;
else {
value.mergeColumnIndex = 0;
}
}
};
for (let index = 0; index < renderInfo.value.mainList.length; index++) { for (let index = 0; index < renderInfo.value.mainList.length; index++) {
const element = renderInfo.value.mainList[index]; const element = renderInfo.value.mainList[index];
if (index === 0) {
comparisonValue = element.waybillNo;
element.mergeColumnIndex = 1;
}
totalNum.value += element.smallTotal || 0; totalNum.value += element.smallTotal || 0;
totalUnLoadNum.value += element.unloadNum || 0; totalUnLoadNum.value += element.unloadNum || 0;
totalPlanNum.value += element.planNum || 0; totalPlanNum.value += element.planNum || 0;
if (element.waybillNo !== comparisonValue) {
// if (index === 1) mergeStartIndex = 1;
comparisonValue = element.waybillNo;
handleMerge(mergeStartIndex, index, renderInfo.value.mainList);
mergeStartIndex = index;
if (index === renderInfo.value.mainList.length - 1) {
handleMerge(mergeStartIndex, index + 1, renderInfo.value.mainList);
}
//
} else if (index === renderInfo.value.mainList.length - 1) {
handleMerge(mergeStartIndex, index + 1, renderInfo.value.mainList);
}
if (element.goodsList && element.goodsList.length > 0) { if (element.goodsList && element.goodsList.length > 0) {
for (let i = 0; i < element.goodsList.length; i++) { for (let i = 0; i < element.goodsList.length; i++) {
const item = element.goodsList[i]; const item = element.goodsList[i];

113
src/components/TripartiteTransferPrintTemplate/TripartiteTransferPrintTemplate.vue

@ -58,38 +58,52 @@
</thead> </thead>
<tbody> <tbody>
<!-- --> <!-- -->
<tr v-for="(value, index) in renderInfo.mainList" style="word-break: break-all"> <template v-if="renderInfo.mainList">
<td>{{ index + 1 }}</td> <tr v-for="(value, index) in renderInfo.mainList" style="word-break: break-all">
<!-- 发货单位 --> <td>{{ index + 1 }}</td>
<td contenteditable>{{ value.shipper || '' }}</td> <!-- 发货单位 -->
<!-- 开单时间 --> <td v-if="value.mergeColumnIndex" :rowspan="value.mergeColumnIndex" contenteditable>
<td contenteditable>{{ value.createTime || '' }}</td> {{ value.shipper || '' }}
<!-- 收货单位 --> </td>
<td contenteditable>{{ value.consignee }}</td> <!-- 开单时间 -->
<!-- 收货人 --> <td v-if="value.mergeColumnIndex" :rowspan="value.mergeColumnIndex" contenteditable>
<td contenteditable>{{ value.consigneeName }}</td> {{ value.createTime || '' }}
<!-- 收货电话 --> </td>
<td contenteditable>{{ value.consigneeMobile }}</td> <!-- 收货单位 -->
<!-- 物流单号 --> <td v-if="value.mergeColumnIndex" :rowspan="value.mergeColumnIndex" contenteditable>
<td>{{ value.waybillNo }}</td> {{ value.consignee }}
<!-- 合同号 --> </td>
<td>{{ value.orderCode }}</td> <!-- 收货人 -->
<!-- 计划件数 --> <td v-if="value.mergeColumnIndex" :rowspan="value.mergeColumnIndex" contenteditable>
<td contenteditable>{{ value.planNum }}</td> {{ value.consigneeName }}
<!-- 货位 --> </td>
<td></td> <!-- 收货电话 -->
<td contenteditable v-for="item in goodsTitleList"> <td v-if="value.mergeColumnIndex" :rowspan="value.mergeColumnIndex" contenteditable>
{{ (value.goodsList.find(val => val.goodsName === item) || {}).num || '' }} {{ value.consigneeMobile }}
</td> </td>
<!-- 小计 --> <!-- 物流单号 -->
<td contenteditable>{{ value.smallTotal }}</td> <td v-if="value.mergeColumnIndex" :rowspan="value.mergeColumnIndex">
<!-- 合计件数 --> {{ value.waybillNo }}
<td contenteditable>{{ value.smallTotal }}</td> </td>
<!-- 卸车件数 --> <!-- 合同号 -->
<td contenteditable>{{ value.unloadNum }}</td> <td>{{ value.orderCode }}</td>
<!-- 异常备注 --> <!-- 计划件数 -->
<td contenteditable></td> <td contenteditable>{{ value.planNum }}</td>
</tr> <!-- 货位 -->
<td></td>
<td contenteditable v-for="item in goodsTitleList">
{{ (value.goodsList.find(val => val.goodsName === item) || {}).num || '' }}
</td>
<!-- 小计 -->
<td contenteditable>{{ value.smallTotal }}</td>
<!-- 合计件数 -->
<td contenteditable>{{ value.smallTotal }}</td>
<!-- 卸车件数 -->
<td contenteditable>{{ value.unloadNum }}</td>
<!-- 异常备注 -->
<td contenteditable></td>
</tr>
</template>
<!-- 合计行 --> <!-- 合计行 -->
<tr> <tr>
@ -141,14 +155,49 @@ renderInfo.value = waybillInfo;
/** 是否显示金额统计 */ /** 是否显示金额统计 */
const isShowTotal = ref(false); const isShowTotal = ref(false);
//
let mergeStartIndex = 0;
//
let comparisonValue = '';
const handleMerge = (startIndex: number, endIndex: number, data: {}) => {
for (let index = startIndex; index < endIndex; index++) {
const value = data[index];
if (index === startIndex) value.mergeColumnIndex = endIndex - startIndex;
else {
value.mergeColumnIndex = 0;
}
}
};
renderInfo.value.endWarehouseNames = renderInfo.value.endWarehouseNames.split(','); renderInfo.value.endWarehouseNames = renderInfo.value.endWarehouseNames.split(',');
for (let index = 0; index < renderInfo.value.mainList.length; index++) { for (let index = 0; index < renderInfo.value.mainList.length; index++) {
const element = renderInfo.value.mainList[index]; const element = renderInfo.value.mainList[index];
if (index === 0) {
comparisonValue = element.waybillNo;
element.mergeColumnIndex = 1;
}
totalNum.value += element.smallTotal || 0; totalNum.value += element.smallTotal || 0;
totalUnLoadNum.value += element.unloadNum || 0; totalUnLoadNum.value += element.unloadNum || 0;
totalPlanNum.value += element.planNum || 0; totalPlanNum.value += element.planNum || 0;
if (element.waybillNo !== comparisonValue) {
// if (index === 1) mergeStartIndex = 1;
comparisonValue = element.waybillNo;
handleMerge(mergeStartIndex, index, renderInfo.value.mainList);
mergeStartIndex = index;
if (index === renderInfo.value.mainList.length - 1) {
handleMerge(mergeStartIndex, index + 1, renderInfo.value.mainList);
}
//
} else if (index === renderInfo.value.mainList.length - 1) {
handleMerge(mergeStartIndex, index + 1, renderInfo.value.mainList);
}
if (element.goodsList && element.goodsList.length > 0) { if (element.goodsList && element.goodsList.length > 0) {
for (let i = 0; i < element.goodsList.length; i++) { for (let i = 0; i < element.goodsList.length; i++) {
const item = element.goodsList[i]; const item = element.goodsList[i];

11
src/components/distributionDeliveryListmar/distributionDeliveryListmar.vue

@ -0,0 +1,11 @@
<template>
</template>
<script setup>
</script>
<style scoped lang='scss'>
</style>

3000
src/option/aftersales/vueTvemp.js

File diff suppressed because it is too large Load Diff

8
src/option/distribution/TripartiteTransfer.js

@ -471,7 +471,7 @@ export const detailsColumnList = [
{ {
prop: 'firsts', prop: 'firsts',
label: '一级品', label: '一级品',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -481,7 +481,7 @@ export const detailsColumnList = [
{ {
prop: 'senconds', prop: 'senconds',
label: '二级品', label: '二级品',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -491,7 +491,7 @@ export const detailsColumnList = [
{ {
prop: 'thirds', prop: 'thirds',
label: '三级品', label: '三级品',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -501,7 +501,7 @@ export const detailsColumnList = [
{ {
prop: 'materialName', prop: 'materialName',
label: '物料名称', label: '物料名称',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],

8
src/option/distribution/VehicleArrivalManagement.js

@ -145,7 +145,7 @@ export const columnList = [
{ {
prop: 'driverName', prop: 'driverName',
label: '主驾司机', label: '主驾司机',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -165,7 +165,7 @@ export const columnList = [
{ {
prop: 'carNumber', prop: 'carNumber',
label: '车牌号', label: '车牌号',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -175,7 +175,7 @@ export const columnList = [
{ {
prop: 'startWarehouseName', prop: 'startWarehouseName',
label: '起点仓库', label: '起点仓库',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -185,7 +185,7 @@ export const columnList = [
{ {
prop: 'endWarehouseNames', prop: 'endWarehouseNames',
label: '终点仓库', label: '终点仓库',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],

8
src/option/distribution/VehicleStowage.js

@ -145,7 +145,7 @@ export const columnList = [
{ {
prop: 'driverName', prop: 'driverName',
label: '主驾司机', label: '主驾司机',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -165,7 +165,7 @@ export const columnList = [
{ {
prop: 'carNumber', prop: 'carNumber',
label: '车牌号', label: '车牌号',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -175,7 +175,7 @@ export const columnList = [
{ {
prop: 'startWarehouseName', prop: 'startWarehouseName',
label: '起点仓库', label: '起点仓库',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],
@ -185,7 +185,7 @@ export const columnList = [
{ {
prop: 'endWarehouseNames', prop: 'endWarehouseNames',
label: '终点仓库', label: '终点仓库',
type: 1, type: 2,
values: '', values: '',
width: '130', width: '130',
checkarr: [], checkarr: [],

8
src/option/finance/CustomerSettlement.js

@ -17,7 +17,7 @@ export const columnList = [
{ {
prop: 'balanceOrderNo', prop: 'balanceOrderNo',
label: '结算单号', label: '结算单号',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -28,7 +28,7 @@ export const columnList = [
{ {
prop: 'brand', prop: 'brand',
label: '品牌', label: '品牌',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -39,7 +39,7 @@ export const columnList = [
{ {
prop: 'waybillNo', prop: 'waybillNo',
label: '运单号', label: '运单号',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -50,7 +50,7 @@ export const columnList = [
{ {
prop: 'orderCode', prop: 'orderCode',
label: '订单编号', label: '订单编号',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],

2
src/option/finance/MerchantDepositSlip.js

@ -17,7 +17,7 @@ export const columnList = [
{ {
prop: 'brand', prop: 'brand',
label: '品牌', label: '品牌',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],

636
src/option/finance/ReconciliationDepositSlip.js

@ -27,8 +27,8 @@ export const columnList = [
}, },
{ {
prop: 'orderCode', prop: 'orderCode',
label: '订单编号', label: '订单编号',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -50,7 +50,7 @@ export const columnList = [
{ {
prop: 'shipper', prop: 'shipper',
label: '发货单位', label: '发货单位',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -72,7 +72,7 @@ export const columnList = [
{ {
prop: 'destinationWarehouseName', prop: 'destinationWarehouseName',
label: '目的仓', label: '目的仓',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -83,7 +83,7 @@ export const columnList = [
{ {
prop: 'departureWarehouseName', prop: 'departureWarehouseName',
label: '发站仓', label: '发站仓',
type: 1, type: 2,
values: '', values: '',
width: '150', width: '150',
checkarr: [], checkarr: [],
@ -109,6 +109,261 @@ export const columnList = [
{ {
prop: 'typeServiceName', prop: 'typeServiceName',
label: '订单类型', label: '订单类型',
type: 3,
values: '',
width: '150',
checkarr: [
{
label:'商配',
value:1
},
{
label:'市配',
value:2
},
{
label:'自提',
value:3
},
],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'openTime',
label: '开单时间',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'goodsName',
label: '货物品类',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'totalNum',
label: '总件数',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'totalWeight',
label: '总重量',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'totalVolume',
label: '总体积',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'sysTotalFee',
label: '订单开单价',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'totalFee',
label: '实际费用',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'systemFreightPrice',
label: '开单运费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'freightPrice',
label: '实际运费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'systemPickupPrice',
label: '开单提货费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'pickupPrice',
label: '实际提货费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'warehouseServiceFee',
label: '仓储服务费合计',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'warehouseFee',
label: '仓储费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'warehouseManageFee',
label: '仓储管理费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'warehouseSortingFee',
label: '仓储分拣费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'warehouseOperatingFee',
label: '仓储操作费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliveryServiceFee',
label: '配送费服务费合计',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'systemDeliveryFee',
label: '开单配送费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliveryFee',
label: '实际配送费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliveryLoadingFee',
label: '配送装卸费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliverySortingFee',
label: '配送分货费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliveryUpfloorFee',
label: '配送上楼费',
type: 1, type: 1,
values: '', values: '',
width: '150', width: '150',
@ -117,6 +372,376 @@ export const columnList = [
sortable: true, sortable: true,
head: false, head: false,
}, },
{
prop: 'deliveryMoveFee',
label: '配送平移费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliveryOtherFee',
label: '配送其它费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'deliveryCrossingFee',
label: '超区公里费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'installFee',
label: '安装费',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'otherFee',
label: '其他费用',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'shipperPerson',
label: '发货人',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'shipperMobile',
label: '发货人手机号',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'shipperAddress',
label: '发货地址',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'destination',
label: '到站',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'consigneePerson',
label: '收货人',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'consigneeMobile',
label: '收货人手机号',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'consigneeAddress',
label: '收货地址',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'customerTrain',
label: '客户车次',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'cleanObjTypeName',
label: '结算方',
type: 3,
values: '',
width: '150',
checkarr: [
{ label: '工厂', value: 1 },
{ label: '商场', value: 2 },
{ label: '商家个人', value: 3 },
],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'payTypeName',
label: '支付方式',
type: 3,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'payWayName',
label: '付款方式',
type: 3,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'signNum',
label: '已签收件数',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'signTime',
label: '签收时间',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'syncFeeStatus',
label: '是否计算价格',
type: 1,
values: '',
width: '150',
checkarr: [
{ label: '是', value: 1 },
{ label: '否', value: 0 },
],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'syncFeeDate',
label: '计算价格时间',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: '',
label: '操作',
type: 6,
values: '',
width: '120',
checkarr: [],
fixed: 'right',
sortable: false,
},
];
export const columnListB = [
{
prop: '',
label: '复选框',
type: 0,
width: 55,
fixed: true,
},
{
prop: '',
label: '序号',
type: 12,
values: '',
width: 55,
fixed: true,
},
{
prop: 'brand',
label: '品牌',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: true,
sortable: true,
head: false,
},
{
prop: 'orderCode',
label: '订单自编号',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: true,
sortable: true,
head: false,
},
{
prop: 'waybillNo',
label: '运单号',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: true,
sortable: true,
head: false,
},
{
prop: 'shipper',
label: '发货单位',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'consignee',
label: '收货单位',
type: 1,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'destinationWarehouseName',
label: '目的仓',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'departureWarehouseName',
label: '发站仓',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'signStatusName',
label: '签收状态',
type: 3,
values: '',
width: '150',
checkarr: [
{ label: '未签收', value: 0 },
{ label: '部分签收', value: 1 },
{ label: '已签收', value: 2 },
],
fixed: false,
sortable: true,
head: false,
},
{
prop: 'typeServiceName',
label: '订单类型',
type: 3,
values: '',
width: '150',
checkarr: [
{
label:'商配1',
value:1
},
{
label:'市配',
value:2
},
{
label:'自提',
value:3
},
],
fixed: false,
sortable: true,
head: false,
},
{ {
prop: 'openTime', prop: 'openTime',
label: '开单时间', label: '开单时间',
@ -597,7 +1222,6 @@ export const columnList = [
sortable: false, sortable: false,
}, },
]; ];
/** 生成对账单 */ /** 生成对账单 */
export const confirmColumnList = [ export const confirmColumnList = [
{ {

2
src/utils/print.js

@ -25,7 +25,7 @@ const handleDeliveryPrint = (LODOP, templateData) => {
// LODOP.SET_PRINT_STYLE('FontColor', '#000000'); // LODOP.SET_PRINT_STYLE('FontColor', '#000000');
// // 设置打印整宽且不变形 // // 设置打印整宽且不变形
LODOP.SET_PRINT_MODE('PRINT_PAGE_PERCENT', '100%'); LODOP.SET_PRINT_MODE('PRINT_PAGE_PERCENT', '100%');
LODOP.SET_PRINT_PAGESIZE(1, 2160, 1396, ''); LODOP.SET_PRINT_PAGESIZE(1, 2160, 1396.5, '');
// // 设置打印后自动关闭 // // 设置打印后自动关闭
LODOP.SET_PRINT_MODE('AUTO_CLOSE_PREWINDOW', 1); LODOP.SET_PRINT_MODE('AUTO_CLOSE_PREWINDOW', 1);

529
src/views/aftersales/aftersalesWorkOrderTemp.vue

@ -1,5 +1,5 @@
<template> <template>
<basic-container v-loading="PageLoading" element-loading-text="数据正在加载中..." > <basic-container v-loading="PageLoading" element-loading-text="数据正在加载中...">
<!-- 首页表格 --> <!-- 首页表格 -->
<div class="avue-crud"> <div class="avue-crud">
<!-- 搜索模块 --> <!-- 搜索模块 -->
@ -37,19 +37,46 @@
<div class="avue-crud__header"> <div class="avue-crud__header">
<!-- 头部左侧按钮模块 --> <!-- 头部左侧按钮模块 -->
<div class="avue-crud__left"> <div class="avue-crud__left">
<el-button type="primary" icon="Edit">创建工单</el-button> <el-button type="primary" icon="Edit" v-if="ButtonPermissions.add">创建工单</el-button>
<el-button type="primary" icon="Download">Excel导出</el-button> <el-button type="primary" icon="Download" v-if="ButtonPermissions.export_Report"
<el-button type="primary" icon="Download">Excel超时导出</el-button> >Excel导出</el-button
<el-button type="primary" icon="Avatar">默认指派</el-button> >
<el-button type="primary" icon="CloseBold">批量打回</el-button> <el-button type="primary" icon="Download" v-if="ButtonPermissions.Timed_outexport"
<el-button type="primary" icon="Select">批量确定</el-button> >Excel超时导出</el-button
<el-button type="primary" icon="FolderChecked">批量审核</el-button> >
<el-button type="primary" icon="Pointer">工单指派</el-button> <el-button type="primary" icon="Avatar" v-if="ButtonPermissions.defaultassignments"
<el-button type="primary" icon="User">客服介入</el-button> >默认指派</el-button
<el-button type="primary" icon="EditPen">钉钉号填写</el-button> >
<el-button type="primary" icon="Stamp">批量完结</el-button> <el-button type="primary" icon="CloseBold" v-if="ButtonPermissions.batchReject"
<el-button type="primary" icon="Stamp">批量完结审核</el-button> >结果批量打回</el-button
<el-button type="primary" icon="Coin">财务入账</el-button> >
<el-button type="primary" icon="FolderChecked" v-if="ButtonPermissions.ManagerConfirmed"
>完结批量审核</el-button
>
<el-button type="primary" icon="Select" v-if="ButtonPermissions.Batchdetermination"
>批量确定</el-button
>
<el-button type="primary" icon="Stamp" v-if="ButtonPermissions.Result_review"
>结果批量审核</el-button
>
<el-button type="primary" icon="Pointer" v-if="ButtonPermissions.assignment"
>工单指派</el-button
>
<el-button type="primary" icon="User" v-if="ButtonPermissions.applyArbitration"
>客服介入</el-button
>
<el-button type="primary" icon="EditPen" v-if="ButtonPermissions.DingTalkNumber"
>钉钉号填写</el-button
>
<el-button type="primary" icon="Stamp" v-if="ButtonPermissions.batchFinish"
>批量完结</el-button
>
<el-button type="primary" icon="Stamp" v-if="ButtonPermissions.ArbitrationDetermination"
>批量完结审核</el-button
>
<el-button type="primary" icon="Coin" v-if="ButtonPermissions.Financial_accounting"
>财务入账</el-button
>
</div> </div>
<!-- 头部右侧按钮模块 --> <!-- 头部右侧按钮模块 -->
<div class="avue-crud__right"> <div class="avue-crud__right">
@ -65,7 +92,7 @@
<!-- 列表模块 --> <!-- 列表模块 -->
<tablecmt <tablecmt
class="tableNode" class="tableNode"
:columnList="details.columnList" :columnList="details.columnListPublic"
:tableData="data" :tableData="data"
:loading="loadingObj.list" :loading="loadingObj.list"
@inputTxt="inputsc" @inputTxt="inputsc"
@ -74,6 +101,16 @@
@selection="selectionChange" @selection="selectionChange"
> >
<template #default="slotProps"> <template #default="slotProps">
<template v-if="slotProps.scope.column.label === '异常工单号'">
<el-text class="el_textBtn" @click="InformationViewing(slotProps.scope)">
{{
slotProps.scope.column.label === '异常工单号'
? slotProps.scope.row.workOrderNumber
: ''
}}
</el-text>
</template>
<template v-if="slotProps.scope.column.label === '操作'"> <template v-if="slotProps.scope.column.label === '操作'">
<el-text>查看</el-text> <el-text>查看</el-text>
</template> </template>
@ -103,11 +140,11 @@
</basic-container> </basic-container>
<!-- 列表配置显示 --> <!-- 列表配置显示 -->
<edittablehead <edittablehead
@setcolum="setnewcolum"
@closce="showdrawer" @closce="showdrawer"
:drawerShow="drawerShow" :drawerShow="drawerShow"
:columnList="details.columnList" :columnList="details.columnListPublic"
v-model="details.columnList" v-model="details.columnListPublic"
:columnListName="columnListName"
></edittablehead> ></edittablehead>
</template> </template>
@ -119,6 +156,7 @@ import {
setNodeHeight, setNodeHeight,
downloadXls, downloadXls,
handleClearTableQuery, handleClearTableQuery,
deepClone,
} from '@/utils/util'; } from '@/utils/util';
import { ElMessageBox, ElMessage } from 'element-plus'; import { ElMessageBox, ElMessage } from 'element-plus';
import { getDictionaryBiz } from '@/api/system/dict'; import { getDictionaryBiz } from '@/api/system/dict';
@ -162,6 +200,16 @@ import {
} from '@/api/aftersales/aftersalesWorkOrder'; } from '@/api/aftersales/aftersalesWorkOrder';
import { import {
columnList, columnList,
columnList1,
columnList2,
columnList3,
columnList4,
columnList5,
columnList6,
columnList7,
columnList8,
columnList9,
columnList10,
recordList, recordList,
Claimsfield, Claimsfield,
AppealList, AppealList,
@ -170,17 +218,38 @@ import {
MallassignmentColumnList, MallassignmentColumnList,
customerserviceColumnList, customerserviceColumnList,
} from '@/option/aftersales/vueTvemp.js'; } from '@/option/aftersales/vueTvemp.js';
// (0, ''),
// (8, ''),
// (3, '()'),
// (1, ''),
// (4, ''),
// (2, ''),
// (5, ''),
// (9, ''),
// (6, ''),
// (10, ''),
// (7, ''),
const $router = useRouter(); // const $router = useRouter(); //
const $useStore = useStore(); // const $useStore = useStore(); //
const $route = useRoute(); // const $route = useRoute(); //
const tabValue = ref(0); // const tabValue = ref(0); //
const UserPermissions = ref(''); // const UserPermissions = ref(''); //
const PageLoading = ref(true); //loading const workOrderStatus = ref(30); //
const PageLoading = ref(false); //loading
const columnListName = ref('columnList');
/**
* 人身份
* Warehouse_customer_service 仓库客服
* Headquarters_customer_service 总部客服
* Headquarters_Manager 总部客服经理
*/
const Useridentity = { const Useridentity = {
Warehouse_customer_service: '仓库客服', Warehouse_customer_service: '仓库客服',
Headquarters_customer_service: '总部客服', Headquarters_customer_service: '总部客服',
Headquarters_Manager: '总部客服经理', Headquarters_Manager: '总部客服经理',
}; };
const TabPermissions = ref(0); //
const TopQuery = ref({ const TopQuery = ref({
time: [], time: [],
}); });
@ -192,13 +261,13 @@ const dictionaries = {
after_sales_visits: ref([]), // after_sales_visits: ref([]), //
}; };
// //
const createTabItem = (name, label, state = true) => ({ const createTabItem = (name, label) => ({
name, name,
label, label,
state, state: true,
request: true,
DataList: [], DataList: [],
total: 0, total: 0,
request: true, //
currentPage: 1, currentPage: 1,
pageSize: 50, pageSize: 50,
}); });
@ -213,10 +282,10 @@ const TabList = ref([
createTabItem(5, '客服介入'), createTabItem(5, '客服介入'),
createTabItem(9, '待审核'), createTabItem(9, '待审核'),
createTabItem(6, '完结'), createTabItem(6, '完结'),
createTabItem(7, '超时未处理'),
createTabItem(10, '申诉列表'), createTabItem(10, '申诉列表'),
createTabItem(7, '超时未处理'),
]); ]);
//
const ButtonPermissions = computed(() => { const ButtonPermissions = computed(() => {
// TabPermissions // TabPermissions
switch (TabPermissions.value) { switch (TabPermissions.value) {
@ -228,11 +297,12 @@ const ButtonPermissions = computed(() => {
applyArbitration: false, // applyArbitration: false, //
DingTalkNumber: false, // DingTalkNumber: false, //
batchFinish: false, // batchFinish: false, //
appeal: false, // Batchdetermination: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Result_review: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: UserPermissions.value != '仓库客服', // defaultassignments: UserPermissions.value != Useridentity.Warehouse_customer_service, //
export_Report: true, // export_Report: true, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
@ -240,34 +310,34 @@ const ButtonPermissions = computed(() => {
return { return {
add: false, // add: false, //
batchReject: false, // batchReject: false, //
assignment: UserPermissions.value != '仓库客服', // assignment: UserPermissions.value != Useridentity.Warehouse_customer_service, //
applyArbitration: UserPermissions.value == '仓库客服', // applyArbitration: UserPermissions.value == Useridentity.Warehouse_customer_service, //
DingTalkNumber: false, // DingTalkNumber: false, //
batchFinish: false, // batchFinish: false, //
Batchdetermination: UserPermissions.value != '仓库客服', // Batchdetermination: false, //
appeal: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: false, // Financial_accounting: false, //
Result_review: UserPermissions.value == Useridentity.Headquarters_customer_service, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // export_Report: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 2: // case 2: //
return { return {
add: false, // add: false, //
batchReject: UserPermissions.value == '总部客服', // batchReject: UserPermissions.value == Useridentity.Headquarters_customer_service, //
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
DingTalkNumber: false, // DingTalkNumber: false, //
batchFinish: false, // batchFinish: UserPermissions.value != Useridentity.Warehouse_customer_service, //
appeal: UserPermissions.value == '仓库客服' && AppealStatusT.value, // Batchdetermination: false, //
Batchdetermination: UserPermissions.value == '仓库客服', //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Result_review: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // export_Report: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 3: // case 3: //
@ -277,14 +347,14 @@ const ButtonPermissions = computed(() => {
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
batchFinish: false, // batchFinish: false, //
appeal: false, //
Batchdetermination: false, // Batchdetermination: false, //
DingTalkNumber: false, // DingTalkNumber: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Result_review: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // export_Report: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 4: // case 4: //
@ -294,14 +364,14 @@ const ButtonPermissions = computed(() => {
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
batchFinish: false, // batchFinish: false, //
appeal: false, //
DingTalkNumber: false, // DingTalkNumber: false, //
Batchdetermination: false, // Batchdetermination: UserPermissions.value == Useridentity.Warehouse_customer_service, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: false, // Financial_accounting: false, //
Result_review: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // export_Report: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 5: // case 5: //
@ -311,14 +381,14 @@ const ButtonPermissions = computed(() => {
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
batchFinish: false, // batchFinish: false, //
appeal: false, //
DingTalkNumber: false, // DingTalkNumber: false, //
Batchdetermination: false, // Batchdetermination: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: UserPermissions.value != '仓库客服', // ArbitrationDetermination: UserPermissions.value != Useridentity.Warehouse_customer_service, //
Financial_accounting: false, // Financial_accounting: false, //
Result_review: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // export_Report: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 6: // case 6: //
@ -328,14 +398,14 @@ const ButtonPermissions = computed(() => {
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
batchFinish: false, // batchFinish: false, //
DingTalkNumber: UserPermissions.value == '总部客服经理' && !AppealStatusT.value, //, // DingTalkNumber: UserPermissions.value != Useridentity.Warehouse_customer_service, //, //
appeal: UserPermissions.value == '仓库客服', //
Batchdetermination: false, // Batchdetermination: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: UserPermissions.value != '仓库客服' && !AppealStatusT.value, // Financial_accounting: UserPermissions.value != Useridentity.Warehouse_customer_service, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // Result_review: false, //
export_Report: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 7: // case 7: //
@ -345,13 +415,13 @@ const ButtonPermissions = computed(() => {
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
batchFinish: false, // batchFinish: false, //
appeal: false, //
Batchdetermination: false, // Batchdetermination: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: false, // export_Report: false, //
Result_review: false, //
Timed_outexport: true, // Timed_outexport: true, //
}; };
case 8: // case 8: //
@ -361,13 +431,13 @@ const ButtonPermissions = computed(() => {
assignment: false, // assignment: false, //
applyArbitration: true, // applyArbitration: true, //
batchFinish: false, // batchFinish: false, //
appeal: false, //
Batchdetermination: false, // Batchdetermination: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: false, // export_Report: false, //
Result_review: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
case 9: // case 9: //
@ -376,30 +446,14 @@ const ButtonPermissions = computed(() => {
batchReject: false, // batchReject: false, //
assignment: false, // assignment: false, //
applyArbitration: false, // applyArbitration: false, //
batchFinish: UserPermissions.value != '仓库客服', // batchFinish: false, //
appeal: false, //
Batchdetermination: false, //
ManagerConfirmed: UserPermissions.value == '总部客服经理', //
ArbitrationDetermination: false, //
Financial_accounting: false, //
defaultassignments: false, //
export_Report: true, //
Timed_outexport: false, //
};
case 10: //
return {
add: false, //
batchReject: false, //
assignment: false, //
applyArbitration: false, //
batchFinish: UserPermissions.value != '仓库客服', //
appeal: false, //
Batchdetermination: false, // Batchdetermination: false, //
ManagerConfirmed: UserPermissions.value == '总部客服经理', // ManagerConfirmed: UserPermissions.value == Useridentity.Headquarters_Manager, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: true, // export_Report: false, //
Result_review: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
// //
@ -410,18 +464,17 @@ const ButtonPermissions = computed(() => {
assignment: false, assignment: false,
applyArbitration: false, applyArbitration: false,
batchFinish: false, batchFinish: false,
appeal: false,
Batchdetermination: false, // Batchdetermination: false, //
ManagerConfirmed: false, // ManagerConfirmed: false, //
ArbitrationDetermination: false, // ArbitrationDetermination: false, //
Financial_accounting: false, // Financial_accounting: false, //
defaultassignments: false, // defaultassignments: false, //
export_Report: false, // export_Report: false, //
Result_review: false, //
Timed_outexport: false, // Timed_outexport: false, //
}; };
} }
}); });
const details = reactive({ const details = reactive({
/** 是否开启搜索 */ /** 是否开启搜索 */
search: false, search: false,
@ -461,10 +514,9 @@ const details = reactive({
/** 时间选择器数据 */ /** 时间选择器数据 */
stockupDate: [], stockupDate: [],
/** 列表 */ /** 列表 */
columnList, columnListPublic: deepClone(columnList), //
/** 列表数据 */ /** 列表数据 */
data: [{}], data: [],
/** 页面loading */ /** 页面loading */
loadingObj: { loadingObj: {
/** 列表加载loading */ /** 列表加载loading */
@ -568,7 +620,7 @@ const currentChange = val => {
// //
const searchChangeS = () => { const searchChangeS = () => {
details.search = false; // details.search = false; //
onLoad(); Publicaccessdata();
}; };
// //
const searchReset = () => { const searchReset = () => {
@ -623,7 +675,6 @@ const Roleverification = () => {
console.error('用户信息未找到'); console.error('用户信息未找到');
return; return;
} }
let roleNames = []; let roleNames = [];
try { try {
roleNames = JSON.parse(userInfo).content.role_name.split(','); roleNames = JSON.parse(userInfo).content.role_name.split(',');
@ -631,17 +682,14 @@ const Roleverification = () => {
console.error('解析用户角色信息出错:', error); console.error('解析用户角色信息出错:', error);
return; return;
} }
// //
const matchingItem = dictionaries.after_sales_visits.value.find(item => const matchingItem = dictionaries.after_sales_visits.value.find(item =>
roleNames.includes(item.label) roleNames.includes(item.label)
); );
// //
if (matchingItem) { if (matchingItem) {
UserPermissions.value = matchingItem.label; UserPermissions.value = matchingItem.label;
} }
// TabList // TabList
const updateTabState = (tabName, condition) => { const updateTabState = (tabName, condition) => {
const tab = TabList.value.find(res => res.name == tabName); const tab = TabList.value.find(res => res.name == tabName);
@ -649,7 +697,6 @@ const Roleverification = () => {
tab.state = condition; tab.state = condition;
} }
}; };
if (UserPermissions.value) { if (UserPermissions.value) {
updateTabState('8', UserPermissions.value == Useridentity.Warehouse_customer_service); updateTabState('8', UserPermissions.value == Useridentity.Warehouse_customer_service);
updateTabState('9', UserPermissions.value == Useridentity.Headquarters_Manager); updateTabState('9', UserPermissions.value == Useridentity.Headquarters_Manager);
@ -657,6 +704,7 @@ const Roleverification = () => {
// () // ()
updateTabState('9', false); updateTabState('9', false);
} }
console.log('内部执行完毕');
console.log(matchingItem, '匹配出来的角色'); console.log(matchingItem, '匹配出来的角色');
}; };
@ -666,13 +714,326 @@ const onLoad = () => {};
*页面初始化函数包含字典等必要请求 *页面初始化函数包含字典等必要请求
*/ */
const PageOnlaod = async () => { const PageOnlaod = async () => {
await Dictionaryrequest(); PageLoading.value = true;
Roleverification(); try {
console.log(Useridentity, 'Useridentity'); await Dictionaryrequest(); //
await Roleverification(); //
tabChenge(TabPermissions.value); //
} catch (error) {
console.log(error);
}
PageLoading.value = false;
console.log(Useridentity, 'Useridentity');
console.log('外部执行完毕');
console.log(dictionaries); console.log(dictionaries);
}; };
//
PageOnlaod(); PageOnlaod();
/**
* @description: 点击tabBar时记录当前点击的tab
* @param {number} value 当前点击的tab的value
* @return {void} 无返回值
*/
const tabChenge = async value => {
try {
PageLoading.value = true; // loading
TabPermissions.value = value; //
console.log(tabValue.value, 'tabValue');
await Processingworkorderstatus(value); //
await MenuHeaderProcessing(value); //
//
const dataProcessingMap = {
0: Publicaccessdata,
1: Publicaccessdata,
2: Publicaccessdata,
3: Publicaccessdata,
4: ClaimAmountData,
5: Publicaccessdata,
6: Publicaccessdata,
7: OverdueUnprocessedData,
8: DataAwaitingReplyData,
9: Publicaccessdata,
10: AppealData,
};
//
const processDataFn = dataProcessingMap[value] || Publicaccessdata;
await processDataFn(); // 使await
} catch (error) {
console.error('An error occurred:', error);
} finally {
PageLoading.value = false; // loading
}
};
/**
* @description: 菜单状态处理
* @param {number} value 当前点击的tab的value
* @return {void} 无返回值
*/
const Processingworkorderstatus = value => {
switch (value) {
case 0: //
workOrderStatus.value = UserPermissions.value === Useridentity.Warehouse_customer_service ? 1000 : null;
break;
case 1: //
workOrderStatus.value = UserPermissions.value === Useridentity.Warehouse_customer_service ? 20 : 40;
break;
case 2: //
workOrderStatus.value = 30;
break;
case 3: //
workOrderStatus.value = 10;
break;
case 5: //
workOrderStatus.value = 70;
break;
case 6: //
workOrderStatus.value = 90;
break;
case 9: //
workOrderStatus.value = UserPermissions.value === Useridentity.Headquarters_Manager? 500 : null;
break;
default:
workOrderStatus.value = null;
break;
}
};
//
const PublicDataProcessing = data => {
details.data = data.records;
console.log(TabList.value, 'TabList');
let _Obj = {};
_Obj = TabList.value.find(res => res.name == TabPermissions.value);
console.log(_Obj, '匹配出来的公共菜单');
_Obj.DataList = data.records; //
_Obj.total = data.total; //
_Obj.currentPage = data.current; //
_Obj.pageSize = data.size; //
if (_Obj.DataList?.length) {
_Obj.request = true;
} else {
_Obj.request = false;
}
};
/**
* @description: 菜单表头处理
* @param {number} value 当前点击的tab的value
* @return {void} 无返回值
*/
const MenuHeaderProcessing = value => {
const columnLists = {
columnList, // 0:
columnList1, // 1:
columnList2, // 2:
columnList3, // 3:
columnList4, // 4:
columnList5, // 5:
columnList6, // 6:
columnList7, // 7:
columnList8, // 8:
columnList9, // 9:
columnList10, // 10:
};
const keys = Object.keys(columnLists);
const selectedKey = value >= 0 && value < keys.length ? keys[value] : 'columnList';
// 使
details.columnListPublic = deepClone(columnLists[selectedKey]);
// columnListName.value
columnListName.value = selectedKey;
console.log(details.columnListPublic, 'details.columnListPublic');
console.log(columnListName.value, 'columnListName.value');
};
//
const DataStateProcessing = data => {
console.log(data, '状态处理');
console.log(dictionaries, 'dictionaries.pc_work_order.value');
//
const findLabelByValue = (collection, value) => {
const entry = collection.find(res => res.value === value);
return entry ? entry.label : '/';
};
//
if (data.records?.length) {
data.records.forEach(item => {
//
item.workOrderTypeNameS = findLabelByValue(
dictionaries.pc_work_order.value,
item.workOrderType
);
//
item.discoveryNodeNameS = findLabelByValue(
dictionaries.pc_discovery_node.value,
item.discoveryNode
);
//
item.workOrderStatusNameS = findLabelByValue(
dictionaries.work_order_status.value,
item.workOrderStatus
);
});
}
};
/**
* @description: 对数据进行处理
* @return {void} 无返回值
*/
const DataAndStateProcessing = data => {
PublicDataProcessing(data); //
DataStateProcessing(data); //
};
/**
* @description: 待回复菜单数据请求
* @return {Object} 包含待回复菜单数据的对象
*/
const DataAwaitingReplyData = async () => {
try {
let _submitData = {
current: details.page.currentPage, //
size: details.page.pageSize, //
};
let _res = await $_getProcessor(_submitData);
console.log(_res, '待回复菜单数据请求');
const { code, data } = _res.data;
console.log(data, 'data');
console.log(code, 'code');
if (code !== 200) {
return;
}
DataAndStateProcessing(data); //
} catch (error) {
console.log(error);
} finally {
}
};
/**
* @description: 理赔金额未出菜单数据请求
* @return {Object} 包含待回复菜单数据的对象
*/
const ClaimAmountData = async () => {
try {
let _submitData = {
current: details.page.currentPage, //
size: details.page.pageSize, //
};
let _res = await $_listSettlement(_submitData);
console.log(_res, '理赔金额未出菜单数据请求');
const { code, data } = _res.data;
console.log(data, 'data');
console.log(code, 'code');
if (code !== 200) {
return;
}
DataAndStateProcessing(data); //
} catch (error) {
console.log(error);
} finally {
}
};
/**
* @description: 申诉菜单数据请求
* @return {Object} 包含申诉菜单数据的对象
*/
const AppealData = async () => {
try {
let _submitData = {
current: details.page.currentPage, //
size: details.page.pageSize, //
};
let _res = await $_listAppeal(_submitData);
console.log(_res, '申诉列表菜单数据请求');
const { code, data } = _res.data;
console.log(data, 'data');
console.log(code, 'code');
if (code !== 200) {
return;
}
DataAndStateProcessing(data); //
} catch (error) {
console.log(error);
} finally {
}
};
/**
* @description: 超时未处理菜单数据请求
* @return {Object} 包含超时未处理菜单数据的对象
*/
const OverdueUnprocessedData = async () => {
try {
let _submitData = {
current: details.page.currentPage, //
size: details.page.pageSize, //
};
let _res = await $_listOwn(_submitData);
console.log(_res, '超时未处理表菜单数据请求');
const { code, data } = _res.data;
console.log(data, 'data');
console.log(code, 'code');
if (code !== 200) {
return;
}
DataAndStateProcessing(data); //
} catch (error) {
console.log(error);
} finally {
}
};
/**
* @description: 公共数据请求包含全部待处理处理中处理完毕客服介入待审核完结
*/
const Publicaccessdata = async () => {
try {
let _submitData = {
workOrderStatus: workOrderStatus.value, //
current: details.page.currentPage, //
size: details.page.pageSize, //
};
let _res = await $_getList(_submitData);
const { code, data } = _res.data;
console.log(data, 'data');
console.log(code, 'code');
if (code !== 200) {
return;
}
DataAndStateProcessing(data); //
console.log(_res, '公共数据菜单=:' + TabPermissions.value);
} catch (error) {
console.log(error);
} finally {
}
};
//
const InformationViewing = val => {
console.log(val, '当前行数据');
const workOrderInfoPath = '/aftersales/aftersalesWorkOrderInfo';
const queryParams = {
id: val.row.workOrderId,
name: `${val.row.workOrderNumber}-信息查看`,
warehouseId: val.row.warehouseId,
workOrderNumber: val.row.workOrderNumber,
businessId: val.row.businessId,
RouteIndexs: TabPermissions.value,
workOrderStatus: val.row.workOrderStatus,
};
$router.push({ path: workOrderInfoPath, query: { ...queryParams, id: val.row.id } });
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

112
src/views/basicdata/brand/basicClient.vue

@ -306,6 +306,21 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="结算对象类型" prop="cleanObjType">
<el-select
v-model="form.cleanObjType"
class="m-2"
placeholder="请选择客户端类型"
style="width: 100%"
>
<el-option
v-for="item in Settlementobjecttype"
:key="item.dictKey"
:label="item.dictValue"
:value="item.dictKey"
/>
</el-select>
</el-form-item>
<el-form-item label="服务类型" prop="typeServiceList"> <el-form-item label="服务类型" prop="typeServiceList">
<el-select <el-select
v-model="form.typeServiceList" v-model="form.typeServiceList"
@ -595,6 +610,20 @@ export default {
excelBox: false, excelBox: false,
Fileverification: false, Fileverification: false,
FileverificationLoadong: false, FileverificationLoadong: false,
Settlementobjecttype: [
{
dictValue: '工厂',
dictKey: '1',
},
{
dictValue: '商场',
dictKey: '2',
},
{
dictValue: '个人',
dictKey: '3',
},
],
excelOption: { excelOption: {
submitBtn: false, submitBtn: false,
emptyBtn: false, emptyBtn: false,
@ -663,6 +692,30 @@ export default {
sortable: true, sortable: true,
head: false, head: false,
}, },
{
prop: 'cleanObjTypeName',
label: '结算对象类型',
type: 3,
values: '',
width: '130',
checkarr: [
{
label: '工厂',
value: '1',
},
{
label: '商场',
value: '2',
},
{
label: '个人',
value: '3',
},
],
fixed: false,
sortable: true,
head: false,
},
{ {
prop: 'brandName', prop: 'brandName',
label: '品牌', label: '品牌',
@ -748,7 +801,7 @@ export default {
{ {
prop: 'bladeRegionProvinceId', prop: 'bladeRegionProvinceId',
label: '地址', label: '地址',
type:1, type: 1,
values: '', values: '',
width: '200', width: '200',
checkarr: [], checkarr: [],
@ -912,6 +965,7 @@ export default {
// { min: 3, max: 5, message: ' 3 5 ', trigger: ['blur', 'change'] } // { min: 3, max: 5, message: ' 3 5 ', trigger: ['blur', 'change'] }
], ],
clientType: [{ required: true, message: '请选择客户类型', trigger: 'change' }], clientType: [{ required: true, message: '请选择客户类型', trigger: 'change' }],
cleanObjType: [{ required: true, message: '请选择结算对象类型', trigger: 'change' }],
typeServiceList: [{ required: true, message: '请选择服务类型', trigger: 'change' }], typeServiceList: [{ required: true, message: '请选择服务类型', trigger: 'change' }],
linkman: [{ required: true, message: '请填写联系人', trigger: ['blur', 'change'] }], linkman: [{ required: true, message: '请填写联系人', trigger: ['blur', 'change'] }],
detailedly: [{ required: true, message: '请填写详细地址', trigger: ['blur', 'change'] }], detailedly: [{ required: true, message: '请填写详细地址', trigger: ['blur', 'change'] }],
@ -1067,14 +1121,19 @@ export default {
console.log(index, row); console.log(index, row);
}, },
selectsc(index, row) { selectsc(index, row) {
console.log('123123123', index, row); console.log('123123123', index, row);
if (row.prop === 'clientTypeName') { // 'Name' row.prop
this.query['clientType'] = index; const nameIndex = row.prop.indexOf('Name');
} else { if (nameIndex !== -1) {
this.query[row.prop] = index; // 'Name'
} const key = row.prop.substring(0, nameIndex);
this.onLoad(this.page); this.query[key] = index;
}, } else {
// 'Name'使 prop
this.query[row.prop] = index;
}
this.onLoad(this.page);
},
timesc(index, row) { timesc(index, row) {
console.log(index, row); console.log(index, row);
if (!!index) { if (!!index) {
@ -1394,9 +1453,19 @@ export default {
handleClearTableQuery(this.columnList); handleClearTableQuery(this.columnList);
this.onLoad(this.page); this.onLoad(this.page);
}, },
handleSubmit(from) { async handleSubmit(from) {
if(!this.form.typeServiceList.includes('3')){ try {
delete this.form.businessType //
let isValid = await this.$refs[formRef].validate();
if (!isValid) {
//
return;
}
} catch (error) {
}
if (!this.form.typeServiceList.includes('3')) {
delete this.form.businessType;
} }
console.log('上传的集合。。', JSON.parse(JSON.stringify(this.fileList))); console.log('上传的集合。。', JSON.parse(JSON.stringify(this.fileList)));
if (this.title == '编辑' && this.bianji == false) { if (this.title == '编辑' && this.bianji == false) {
@ -1422,7 +1491,6 @@ export default {
// return this.$message.warning(''); // return this.$message.warning('');
} }
} }
if (!this.form.id) { if (!this.form.id) {
console.log('添加提交的数据:', this.form); console.log('添加提交的数据:', this.form);
this.$refs[from].validate(async valid => { this.$refs[from].validate(async valid => {
@ -1470,10 +1538,9 @@ export default {
this.$refs[from].validate(async valid => { this.$refs[from].validate(async valid => {
if (valid) { if (valid) {
try { try {
this.loadingObj.submitLoading = true; this.loadingObj.submitLoading = true;
console.log('修改提交的数据:', this.form); console.log('修改提交的数据:', this.form);
// this.form.typeService = !!this.form.typeService ? parseInt(this.form.typeService) : undefined; // this.form.typeService = !!this.form.typeService ? parseInt(this.form.typeService) : undefined;
this.form.bladeRegionCityId = this.form.bladeRegionProvinceId[1]; this.form.bladeRegionCityId = this.form.bladeRegionProvinceId[1];
this.form.bladeRegionAreaId = this.form.bladeRegionProvinceId[2]; this.form.bladeRegionAreaId = this.form.bladeRegionProvinceId[2];
@ -1547,7 +1614,7 @@ export default {
this.viewClientEntd = true; this.viewClientEntd = true;
this.CustomerEntd = true; this.CustomerEntd = true;
getDetail(row.id).then(res => { getDetail(row.id).then(res => {
console.log(res.data.data,'res.data.data'); console.log(res.data.data, 'res.data.data');
this.form = res.data.data; this.form = res.data.data;
if (this.form.detailedly == '0' || this.form.detailedly == '-1') { if (this.form.detailedly == '0' || this.form.detailedly == '-1') {
@ -1564,7 +1631,7 @@ export default {
if (!!bus) { if (!!bus) {
this.form.typeServiceList = bus; this.form.typeServiceList = bus;
} }
let a = []; let a = [];
if (!!this.form.bladeRegionProvinceId) { if (!!this.form.bladeRegionProvinceId) {
if (res.data.data?.bladeRegionProvinceId) { if (res.data.data?.bladeRegionProvinceId) {
@ -1599,7 +1666,6 @@ export default {
]; ];
} }
} }
}); });
}, },
handleView(row) { handleView(row) {
@ -1772,8 +1838,14 @@ export default {
.then(res => { .then(res => {
const data = res.data.data; const data = res.data.data;
console.log(data); console.log(data);
data.records.forEach(i => { data.records.forEach(i => {
if(i.cleanObjType =='1'){
i.cleanObjTypeName = '工厂';
}else if(i.cleanObjType =='2'){
i.cleanObjTypeName = '商场';
}else if(i.cleanObjType =='3'){
i.cleanObjTypeName = '个人';
}
let ke = this.clientType.find(kh => parseInt(kh.dictKey) == parseInt(i.clientType)); let ke = this.clientType.find(kh => parseInt(kh.dictKey) == parseInt(i.clientType));
// console.log("<><><>",ke); // console.log("<><><>",ke);
if (!!ke) { if (!!ke) {

6
src/views/distribution/artery/TripartiteTransfer.vue

@ -499,6 +499,12 @@
></edittablehead> ></edittablehead>
</template> </template>
<script lang="ts">
export default {
name: '/distribution/artery/TripartiteTransfer',
};
</script>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue';
import functions from '@/utils/functions'; import functions from '@/utils/functions';

6
src/views/distribution/artery/VehicleArrivalManagement.vue

@ -639,6 +639,12 @@
></edittablehead> ></edittablehead>
</template> </template>
<script lang="ts">
export default {
name: '/distribution/artery/VehicleArrivalManagement',
};
</script>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue';
import dayjs from 'dayjs'; import dayjs from 'dayjs';

6
src/views/distribution/artery/VehicleStowage.vue

@ -599,6 +599,12 @@
></edittablehead> ></edittablehead>
</template> </template>
<script lang="ts">
export default {
name: '/distribution/artery/VehicleStowage',
};
</script>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue';
import functions from '@/utils/functions'; import functions from '@/utils/functions';

14
src/views/distribution/artery/VehicleStowageDetails.vue

@ -181,9 +181,6 @@
> >
成本分摊确认 成本分摊确认
</el-button> </el-button>
<!-- <el-button type="primary" icon="Download" @click="tcTableexport = true">
导出
</el-button> -->
<el-button type="primary" icon="Download" @click="handleExport"> 导出 </el-button> <el-button type="primary" icon="Download" @click="handleExport"> 导出 </el-button>
</div> </div>
@ -423,13 +420,6 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog v-model="tcTableexport" title="导出" width="40%">
<Tableexportcomponent
:menuData="details.detailsColumnList"
:data="detailsRenderData"
></Tableexportcomponent>
</el-dialog>
<edittablehead <edittablehead
@closce="showdrawer" @closce="showdrawer"
:drawerShow="drawerShow" :drawerShow="drawerShow"
@ -473,9 +463,6 @@ import { detailsColumnList, nodeInfoColumnList } from '@/option/distribution/add
import { detailsColumnList as abnormalColumn } from '@/option/distribution/TripartiteTransfer'; import { detailsColumnList as abnormalColumn } from '@/option/distribution/TripartiteTransfer';
import { compressImageBlob } from '@/components/IMGcompressor/imgcompressor.js'; import { compressImageBlob } from '@/components/IMGcompressor/imgcompressor.js';
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
const Tableexportcomponent = defineAsyncComponent(
() => import('@/components/Tableexportcomponent/Tableexportcomponent.vue')
);
import { import {
postCarsLoadDetailInfo, postCarsLoadDetailInfo,
postFindCarsLoadLogs, postFindCarsLoadLogs,
@ -515,7 +502,6 @@ const ruleFormRef = ref();
const oldColumnListNode = ref(); const oldColumnListNode = ref();
const abnormalTableRef = ref(); const abnormalTableRef = ref();
const tcTableexport = ref(false);
const exportColumnListNode = ref(); const exportColumnListNode = ref();
// //
const nodeInfoRef = ref(); const nodeInfoRef = ref();

34
src/views/distribution/deliverylist/distributionDeliveryListmar.vue

@ -124,6 +124,9 @@
<el-button type="primary" icon="el-icon-plus" @click="printBatchOrder" <el-button type="primary" icon="el-icon-plus" @click="printBatchOrder"
>批量打印</el-button >批量打印</el-button
> >
<!-- <el-button type="primary" icon="el-icon-plus" @click="printBatchOrderA"
>批量打印测试</el-button
> -->
<!-- <el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>--> <!-- <el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>-->
<el-button type="danger" icon="el-icon-download" @click="handleExportInfo" plain <el-button type="danger" icon="el-icon-download" @click="handleExportInfo" plain
>导出 >导出
@ -193,6 +196,10 @@
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
<!-- <el-dialog v-model="dydialogVisible" title="二维码" width="50%">
<distributionDeliveryListmar></distributionDeliveryListmar>
</el-dialog> -->
<!-- 打印模块 --> <!-- 打印模块 -->
<!-- <el-dialog title="二维码" :visible.sync="isShow" width="70%" v-model="isShow"> <!-- <el-dialog title="二维码" :visible.sync="isShow" width="70%" v-model="isShow">
<div> <div>
@ -232,6 +239,7 @@ import {
getDeliveryListExport, getDeliveryListExport,
} from '@/api/distribution/distributionDeliveryList'; } from '@/api/distribution/distributionDeliveryList';
import option from '@/option/distribution/distributionDeliveryList'; import option from '@/option/distribution/distributionDeliveryList';
// import distributionDeliveryListmar from '@/components/distributionDeliveryListmar/distributionDeliveryListmar.vue';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { getDictionaryBiz } from '@/api/system/dict'; import { getDictionaryBiz } from '@/api/system/dict';
import { addIncrement } from '@/api/distribution/distributionStockArticle'; import { addIncrement } from '@/api/distribution/distributionStockArticle';
@ -249,9 +257,13 @@ import {
} from '@/utils/util'; } from '@/utils/util';
export default { export default {
// components: {
// distributionDeliveryListmar, //
// },
data() { data() {
return { return {
height: 0, height: 0,
dydialogVisible: false,
// //
title: '', title: '',
// //
@ -697,18 +709,16 @@ export default {
this.title = '查看'; this.title = '查看';
this.view = true; this.view = true;
this.box = true; this.box = true;
if(row.id){ if (row.id) {
getDetail(row.id).then(res => { getDetail(row.id).then(res => {
this.form = res.data.data; this.form = res.data.data;
}); });
}else{ } else {
ElMessage({ ElMessage({
message: '数据错误,刷新页面重新尝试', message: '数据错误,刷新页面重新尝试',
type: 'warning', type: 'warning',
}) });
} }
}, },
// handleViewBlank (row) { // handleViewBlank (row) {
// this.$router.push({ // this.$router.push({
@ -829,7 +839,9 @@ export default {
// this.form = res.data.data; // this.form = res.data.data;
// }); // });
}, },
printBatchOrderA() {
this.dydialogVisible = true;
},
/** /**
* 批量打印 * 批量打印
*/ */

6
src/views/distribution/inventory/BookingNote.vue

@ -545,7 +545,7 @@
<div> <div>
<el-form label-width="fit-content"> <el-form label-width="fit-content">
<el-row> <el-row>
<el-form-item label="运费12414:"> <el-form-item label="运费:">
<el-input readonly v-model="query.totalFreight" disabled></el-input> <el-input readonly v-model="query.totalFreight" disabled></el-input>
</el-form-item> </el-form-item>
@ -685,7 +685,7 @@
<el-form-item label-width="fit-content" label="支付方式:"> <el-form-item label-width="fit-content" label="支付方式:">
<el-select disabled v-model="query.payType" :teleported="false"> <el-select disabled v-model="query.payType" :teleported="false">
<el-option <el-option
v-for="item in details.info.payTypeList" v-for="item in query.payTypeList"
:key="item.dictValue" :key="item.dictValue"
:label="item.dictValue" :label="item.dictValue"
:value="item.dictKey" :value="item.dictKey"
@ -696,7 +696,7 @@
<el-form-item label="付款方式:" label-width="fit-content" prop="payWay"> <el-form-item label="付款方式:" label-width="fit-content" prop="payWay">
<el-select disabled v-model="query.payWay" :teleported="false"> <el-select disabled v-model="query.payWay" :teleported="false">
<el-option <el-option
v-for="item in details.info.payWayList" v-for="item in query.payWayList"
:key="item.dictValue" :key="item.dictValue"
:label="item.dictValue" :label="item.dictValue"
:value="item.dictKey" :value="item.dictKey"

2
src/views/distribution/inventory/CreateOrder.vue

@ -2332,7 +2332,7 @@ const onEditLoad = async () => {
val.freightPrice = isNumber(val.freightPrice) ? Number(val.freightPrice) : 0; val.freightPrice = isNumber(val.freightPrice) ? Number(val.freightPrice) : 0;
val.deliveryPrice = isNumber(val.deliveryPrice) ? Number(val.deliveryPrice) : 0; val.deliveryPrice = isNumber(val.deliveryPrice) ? Number(val.deliveryPrice) : 0;
val.pickupPrice = isNumber(val.pickupPrice) ? Number(val.pickupPrice) : 0; val.pickupPrice = isNumber(val.pickupPrice) ? Number(val.pickupPrice) : 0;
val.subtotalFreight = isNumber(val.subtotalFreight) ? Number(val.pickupPrice) : 0; val.subtotalFreight = isNumber(val.subtotalFreight) ? Number(val.subtotalFreight) : 0;
/** 系统维护 -- 干线计价方式 */ /** 系统维护 -- 干线计价方式 */
val.systemChargeType = 1; val.systemChargeType = 1;
/** 系统维护 -- 配送计价方式 */ /** 系统维护 -- 配送计价方式 */

117
src/views/finance/CustomerSettlement.vue

@ -4,8 +4,82 @@
<!-- 搜索模块 --> <!-- 搜索模块 -->
<div v-h5uShow="!search"> <div v-h5uShow="!search">
<!-- 查询模块 --> <!-- 查询模块 -->
<el-form :inline="true" :model="query" class="header_search"> <el-form :inline="true" :model="details.query" class="header_search">
<!-- 查询按钮 --> <!-- 查询按钮 -->
<el-form-item label="收货单位">
<el-input v-model="details.query.consignee" clearable placeholder="请输入收货单位" />
</el-form-item>
<el-form-item label="目的仓">
<el-select
v-model="details.query.destinationWarehouseName"
filterable
clearable
placeholder="请选择目的仓"
style="width: 240px"
>
<el-option
v-for="item in warehouseList"
:key="item.value"
:label="item.label"
:value="item.label"
/>
</el-select>
</el-form-item>
<el-form-item label="结算状态">
<el-select
v-model="details.query.balanceStatus"
placeholder="请选择"
style="width: 240px"
clearable
>
<el-option label="未结算" value="0" />
<el-option label="部分结算" value="1" />
<el-option label="已结算" value="2" />
</el-select>
</el-form-item>
<el-form-item label="对账确认时间">
<el-date-picker
v-model="details.query.ReconciliationconfirmationTime"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
:shortcuts="shortcuts"
:default-time="defaultTime2"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="结算时间">
<el-date-picker
v-model="details.query.SettlementTime"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
:shortcuts="shortcuts"
:default-time="defaultTime2"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="异常时间">
<el-date-picker
v-model="query.abnormalTime"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
:shortcuts="shortcuts"
:default-time="defaultTime2"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> </el-button> <el-button type="primary" icon="el-icon-search" @click="searchChange"> </el-button>
<el-button icon="el-icon-delete" @click="searchReset"> </el-button> <el-button icon="el-icon-delete" @click="searchReset"> </el-button>
@ -76,7 +150,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue';
import functions from '@/utils/functions.js';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
/** 获取字典 */ /** 获取字典 */
@ -99,16 +172,27 @@ import { columnList } from '@/option/finance/CustomerSettlement';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { deepClone } from '@/utils/util'; import { deepClone } from '@/utils/util';
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
import { $_getMyWarehouseList } from '@/api/reportforms/index.js';
// //
const $router = useRouter(); const $router = useRouter();
const warehouseList = ref([]);
$_getMyWarehouseList().then(res => {
console.log(res, '仓库列表');
if (res.data.data.length)
res.data.data.forEach(item => {
warehouseList.value.push({
value: item.name,
label: item.name,
});
});
});
const details = reactive<any>({ const details = reactive<any>({
/** 是否开启搜索 */ /** 是否开启搜索 */
search: true, search: true,
/** 表格搜索条件 */ /** 表格搜索条件 */
query: {}, query: {},
/** 时间快捷选择设置 */ /** 时间快捷选择设置 */
defaultTime2: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)], // '12:00:00', '08:00:00'
shortcuts: [ shortcuts: [
{ {
text: '最近一周', text: '最近一周',
@ -165,7 +249,7 @@ const details = reactive<any>({
const tableNodeRef = ref(); const tableNodeRef = ref();
const { search, query, shortcuts, selectionList, drawerShow, page } = toRefs(details); const { search, query, shortcuts, selectionList, drawerShow, page, defaultTime2 } = toRefs(details);
/** vuex */ /** vuex */
const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList'])); const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList']));
@ -184,9 +268,9 @@ const onLoad = async (params = {}) => {
try { try {
// loading // loading
details.loadingObj.list = true; details.loadingObj.list = true;
const queryCopy = { ...details.query };
const submitData = { ...details.query, ...params, ...details.page }; await TimeProcessing(queryCopy);
const submitData = { ...queryCopy, ...params, ...details.page };
// //
const res = await postPageList(submitData); const res = await postPageList(submitData);
console.log('res :>> ', res); console.log('res :>> ', res);
@ -204,6 +288,23 @@ const onLoad = async (params = {}) => {
} }
}; };
const processTimeSection = (query, sectionKey, startKey, endKey) => {
if (query[sectionKey]?.length) {
query[startKey] = query[sectionKey][0];
query[endKey] = query[sectionKey][1];
delete query[sectionKey];
} else {
delete query[startKey];
delete query[endKey];
}
};
const TimeProcessing = query => {
console.log(query, 'query');
processTimeSection(query, 'ReconciliationconfirmationTime', 'createTimeStart', 'createTimeEnd');
processTimeSection(query, 'SettlementTime', 'balanceTimeStart', 'balanceTimeEnd');
processTimeSection(query, 'abnormalTime', 'abnormalTimeStart', 'abnormalTimeEnd');
};
const initOnLoad = (params = {}) => { const initOnLoad = (params = {}) => {
details.page.pageNum = 1; details.page.pageNum = 1;
details.page.total = 0; details.page.total = 0;

209
src/views/finance/MerchantDepositSlip.vue

@ -4,7 +4,51 @@
<!-- 搜索模块 --> <!-- 搜索模块 -->
<div v-h5uShow="!search"> <div v-h5uShow="!search">
<!-- 查询模块 --> <!-- 查询模块 -->
<el-form :inline="true" :model="details.query1" class="header_search"> <el-form :inline="true" :model="details.query" class="header_search">
<el-form-item label="收货单位">
<el-input v-model="details.query.consignee" clearable placeholder="请输入收货单位" />
</el-form-item>
<el-form-item label="收货仓库">
<el-select
v-model="details.query.destinationWarehouseName"
filterable
clearable
placeholder="请选择仓库搜索"
style="width: 240px"
>
<el-option
v-for="item in warehouseList"
:key="item.value"
:label="item.label"
:value="item.label"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="是否关联售后">
<el-select
v-model="details.query.syncFeeSstatus"
placeholder="请选择"
style="width: 240px"
clearable
>
<el-option label="是" value="1" />
<el-option label="否" value="0" />
</el-select>
</el-form-item> -->
<el-form-item label="对账单创建时间">
<el-date-picker
v-model="details.query.calculateTimeSection"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
:shortcuts="shortcuts"
:default-time="defaultTime2"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-form-item>
<!-- 查询按钮 --> <!-- 查询按钮 -->
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> <el-button type="primary" icon="el-icon-search" @click="searchChange">
@ -45,14 +89,9 @@
> >
<template #default="slotProps"> <template #default="slotProps">
<template v-if="slotProps.scope.column.label === '操作'"> <template v-if="slotProps.scope.column.label === '操作'">
<el-text @click="() => ViewTransactionInformation(slotProps.scope)"> 异动信息 </el-text>
<el-text @click="() => ViewTransactionInformation(slotProps.scope)"> <el-text @click="() => ViewOrderList(slotProps.scope)"> 订单详情 </el-text>
异动信息
</el-text>
<el-text @click="() => ViewOrderList(slotProps.scope)">
订单详情
</el-text>
</template> </template>
</template> </template>
</tablecmt> </tablecmt>
@ -86,9 +125,7 @@
:loading="details.loadingObj.orderList" :loading="details.loadingObj.orderList"
> >
<template #default="slotProps"> <template #default="slotProps">
<el-text @click="()=> handleRemoveOrder(slotProps.scope)"> <el-text @click="() => handleRemoveOrder(slotProps.scope)"> </el-text>
</el-text>
</template> </template>
</tablecmt> </tablecmt>
</el-dialog> </el-dialog>
@ -103,18 +140,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue';
import functions from '@/utils/functions.js';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
/** 获取字典 */ /** 获取字典 */
import { getDictionaryBiz } from '@/api/system/dict'; import { getDictionaryBiz } from '@/api/system/dict';
import { import {
postPageReconciliationList, postPageReconciliationList,
postCheckBalance, postCheckBalance,
postFindOrderDetail, postFindOrderDetail,
postCancleOrderInfoBindReconcilitionOrder, postCancleOrderInfoBindReconcilitionOrder,
postReconciliationListExport postReconciliationListExport,
} from '@/api/finance/MerchantDepositSlip'; } from '@/api/finance/MerchantDepositSlip';
import { import {
downloadXls, downloadXls,
setNodeHeight, setNodeHeight,
@ -128,16 +164,27 @@ import { columnList, orderColumnList } from '@/option/finance/MerchantDepositSli
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { deepClone } from '@/utils/util'; import { deepClone } from '@/utils/util';
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
import { $_getMyWarehouseList } from '@/api/reportforms/index.js';
// //
const $router = useRouter(); const $router = useRouter();
const warehouseList=ref([])
$_getMyWarehouseList().then(res => {
console.log(res, '仓库列表');
if (res.data.data.length)
res.data.data.forEach(item => {
warehouseList.value.push({
value: item.name,
label: item.name,
});
});
});
const details = reactive<any>({ const details = reactive<any>({
/** 是否开启搜索 */ /** 是否开启搜索 */
search: true, search: true,
/** 表格搜索条件 */ /** 表格搜索条件 */
query: {}, query: {},
/** 时间快捷选择设置 */ /** 时间快捷选择设置 */
defaultTime2: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)], // '12:00:00', '08:00:00'
shortcuts: [ shortcuts: [
{ {
text: '最近一周', text: '最近一周',
@ -176,7 +223,7 @@ const details = reactive<any>({
/** 列表加载loading */ /** 列表加载loading */
list: false, list: false,
pageLoading: false, pageLoading: false,
orderList: false orderList: false,
}, },
/** 列表复选框选中的数据 */ /** 列表复选框选中的数据 */
selectionList: [], selectionList: [],
@ -190,20 +237,20 @@ const details = reactive<any>({
}, },
form: {}, form: {},
popUpShow: { popUpShow: {
orderVisted: false orderVisted: false,
}, },
orderInfo: { orderInfo: {
reconciliationOrderId: '', reconciliationOrderId: '',
data: [], data: [],
query: {}, query: {},
columnList: deepClone(orderColumnList) columnList: deepClone(orderColumnList),
} },
}); });
const tableNodeRef1 = ref(); const tableNodeRef1 = ref();
const orderTableNodeRef = ref(); const orderTableNodeRef = ref();
const { search, shortcuts, selectionList, drawerShow, page } = toRefs(details); const { search, shortcuts, selectionList, drawerShow, page, defaultTime2 } = toRefs(details);
/** vuex */ /** vuex */
const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList'])); const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList']));
@ -212,7 +259,7 @@ console.log('permission :>> ', permission);
onMounted(async () => { onMounted(async () => {
await nextTick(); await nextTick();
setNodeHeight(tableNodeRef1.value.$el , '', true); setNodeHeight(tableNodeRef1.value.$el, '', true);
}); });
/** 请求页面数据 */ /** 请求页面数据 */
@ -220,9 +267,9 @@ const onLoad = async (params = {}) => {
try { try {
// loading // loading
details.loadingObj.list = true; details.loadingObj.list = true;
const queryCopy = { ...details.query };
const submitData = { ...details.query, ...params, ...details.page }; await TimeProcessing(queryCopy);
const submitData = { ...queryCopy, ...params, ...details.page };
// //
const res = await postPageReconciliationList(submitData); const res = await postPageReconciliationList(submitData);
console.log('res :>> ', res); console.log('res :>> ', res);
@ -230,10 +277,7 @@ const onLoad = async (params = {}) => {
if (code !== 200) return; if (code !== 200) return;
details.data = data.records; details.data = data.records;
details.page.total = data.total; details.page.total = data.total;
handleTranslationDataSeclect( handleTranslationDataSeclect(details.data, details.columnList);
details.data,
details.columnList
);
return res.data; return res.data;
} catch (error) { } catch (error) {
@ -243,6 +287,21 @@ const onLoad = async (params = {}) => {
} }
}; };
const processTimeSection = (query, sectionKey, startKey, endKey) => {
if (query[sectionKey]?.length) {
query[startKey] = query[sectionKey][0];
query[endKey] = query[sectionKey][1];
delete query[sectionKey];
} else {
delete query[startKey];
delete query[endKey];
}
};
const TimeProcessing = query => {
console.log(query,'query');
processTimeSection(query, 'calculateTimeSection', 'openTimeStart', 'openTimeEnd');
};
const initOnLoad = (params = {}) => { const initOnLoad = (params = {}) => {
details.page.pageNum = 1; details.page.pageNum = 1;
details.page.total = 0; details.page.total = 0;
@ -274,7 +333,7 @@ const showdrawer = (_flag?: boolean) => {
const searchHide = () => { const searchHide = () => {
details.search = !details.search; details.search = !details.search;
const node = tableNodeRef1.value.$el; const node = tableNodeRef1.value.$el;
setNodeHeight(node, '', true); setNodeHeight(node, '', true);
}; };
@ -369,23 +428,23 @@ const handleExport = () => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(async() => { }).then(async () => {
try { try {
details.loadingObj.pageLoading = true details.loadingObj.pageLoading = true;
const submitData= {...details.query} const submitData = { ...details.query };
const res = await postReconciliationListExport(submitData) const res = await postReconciliationListExport(submitData);
const {status, data} = res const { status, data } = res;
if (status !== 200) return if (status !== 200) return;
downloadXls(data, '对账单数据.xlsx') downloadXls(data, '对账单数据.xlsx');
ElMessage.success('导出成功!'); ElMessage.success('导出成功!');
} catch (error) { } catch (error) {
console.log('error :>> ', error); console.log('error :>> ', error);
}finally{ } finally {
details.loadingObj.pageLoading = false details.loadingObj.pageLoading = false;
} }
}); });
}; };
@ -401,61 +460,63 @@ const ViewTransactionInformation = ({ row }) => {
}; };
/** 查看订单列表 */ /** 查看订单列表 */
const ViewOrderList =async ({row})=>{ const ViewOrderList = async ({ row }) => {
try { try {
details.loadingObj.pageLoading = true details.loadingObj.pageLoading = true;
const res = await postFindOrderDetail({ reconciliationOrderId: row.id }) const res = await postFindOrderDetail({ reconciliationOrderId: row.id });
const {code, data} = res.data const { code, data } = res.data;
if (code !== 200) return if (code !== 200) return;
details.orderInfo.reconciliationOrderId = row.id details.orderInfo.reconciliationOrderId = row.id;
details.orderInfo.data = data || [] details.orderInfo.data = data || [];
details.popUpShow.orderVisted = true details.popUpShow.orderVisted = true;
await nextTick() await nextTick();
setNodeHeight(orderTableNodeRef.value.$el, '60vh') setNodeHeight(orderTableNodeRef.value.$el, '60vh');
} catch (error) { } catch (error) {
console.log('error :>> ', error); console.log('error :>> ', error);
}finally{ } finally {
details.loadingObj.pageLoading = false details.loadingObj.pageLoading = false;
} }
} };
/** 移除订单 */ /** 移除订单 */
const handleRemoveOrder = ({row}) => { const handleRemoveOrder = ({ row }) => {
ElMessageBox.confirm('是否确认移除?', '提示', { ElMessageBox.confirm('是否确认移除?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(async() => { }).then(async () => {
try { try {
details.loadingObj.orderList = true details.loadingObj.orderList = true;
const submitData= {reconciliationOrderId: details.orderInfo.reconciliationOrderId, orderInfoIds: [row.orderInfoId]} const submitData = {
reconciliationOrderId: details.orderInfo.reconciliationOrderId,
const res = await postCancleOrderInfoBindReconcilitionOrder(submitData) orderInfoIds: [row.orderInfoId],
};
const {code, msg} = res.data
if (code !== 200) return
ElMessage.success(msg)
onLoad()
const resp = await postFindOrderDetail({ reconciliationOrderId: details.orderInfo.reconciliationOrderId })
const {code: code1,data: data1} = resp.data const res = await postCancleOrderInfoBindReconcilitionOrder(submitData);
if (code1 !== 200) return
details.orderInfo.data = data1 || []
if (details.orderInfo.data.length === 0) details.popUpShow.orderVisted = false
const { code, msg } = res.data;
if (code !== 200) return;
ElMessage.success(msg);
onLoad();
const resp = await postFindOrderDetail({
reconciliationOrderId: details.orderInfo.reconciliationOrderId,
});
const { code: code1, data: data1 } = resp.data;
if (code1 !== 200) return;
details.orderInfo.data = data1 || [];
if (details.orderInfo.data.length === 0) details.popUpShow.orderVisted = false;
} catch (error) { } catch (error) {
console.log('error :>> ', error); console.log('error :>> ', error);
} finally { } finally {
details.loadingObj.orderList = false details.loadingObj.orderList = false;
} }
}); });
} };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

249
src/views/finance/ReconciliationDepositSlip.vue

@ -5,12 +5,82 @@
<!-- toB --> <!-- toB -->
<el-tab-pane <el-tab-pane
v-for="(item, index) in details.pageInfo" v-for="(item, index) in details.pageInfo"
:name="item.name" :label="item.title"> :name="item.name"
:label="item.title"
>
<!-- 搜索模块 --> <!-- 搜索模块 -->
<div v-h5uShow="!search"> <div v-h5uShow="!search">
<!-- 查询模块 --> <!-- 查询模块 -->
<el-form :inline="true" :model="item.query" class="header_search"> <el-form :inline="true" :model="item.query" class="header_search">
<!-- 查询按钮 --> <!-- 查询按钮 -->
<el-form-item label="收货单位">
<el-input v-model="item.query.consignee" clearable placeholder="请输入客户名称" />
</el-form-item>
<el-form-item label="是否计算价格">
<el-select
v-model="item.query.syncFeeSstatus"
placeholder="请选择"
style="width: 240px"
clearable
>
<el-option label="未计算" value="0" />
<el-option label="已计算" value="1" />
</el-select>
</el-form-item>
<el-form-item label="签收状态">
<el-select
v-model="item.query.signStatus"
placeholder="请选择"
style="width: 240px"
clearable
>
<el-option label="已签收" value="2" />
<el-option label="未签收" value="0" />
<el-option label="部分签收" value="1" />
</el-select>
</el-form-item>
<el-form-item label="计算时间">
<el-date-picker
v-model="item.query.calculateTimeSection"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
:shortcuts="shortcuts"
:default-time="defaultTime2"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="签收时间">
<el-date-picker
v-model="item.query.signTimeSection"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:shortcuts="shortcuts"
:default-time="defaultTime2"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="计算价格时间">
<el-date-picker
v-model="item.query.calculatePriceTimeSection"
type="datetimerange"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="defaultTime2"
:shortcuts="shortcuts"
value-format="YYYY-MM-DD HH:mm:ss"
format="YYYY/MM/DD HH:mm:ss"
/></el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> <el-button type="primary" icon="el-icon-search" @click="searchChange">
@ -43,9 +113,9 @@
:columnList="item.columnList" :columnList="item.columnList"
:tableData="details.data" :tableData="details.data"
:loading="details.loadingObj.list" :loading="details.loadingObj.list"
@inputTxt="(val, col)=> inputsc(val, col, item)" @inputTxt="(val, col) => inputsc(val, col, item)"
@timeCheck="timesc" @timeCheck="timesc"
@selectCheck="(val, col)=> selectsc(val, col, item)" @selectCheck="(val, col) => selectsc(val, col, item)"
@selection="selectionChange" @selection="selectionChange"
> >
<template #default="slotProps"> <template #default="slotProps">
@ -74,7 +144,7 @@
</div> </div>
<!-- 列表配置显示 --> <!-- 列表配置显示 -->
<edittablehead <edittablehead
@closce="(flag)=> showdrawer(item, flag)" @closce="flag => showdrawer(item, flag)"
:drawerShow="item.drawerShow" :drawerShow="item.drawerShow"
v-model="item.columnList" v-model="item.columnList"
></edittablehead> ></edittablehead>
@ -118,10 +188,7 @@
</div> </div>
</template> </template>
<tablecmt <tablecmt :columnList="details.confirmColumnList" :tableData="details.selectionList">
:columnList="details.confirmColumnList"
:tableData="details.selectionList"
>
</tablecmt> </tablecmt>
<div class="flex-c-c dialog-footer"> <div class="flex-c-c dialog-footer">
@ -142,7 +209,6 @@
</el-dialog> </el-dialog>
</div> </div>
</basic-container> </basic-container>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -152,7 +218,13 @@ import dayjs from 'dayjs';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
/** 获取字典 */ /** 获取字典 */
import { getDictionaryBiz } from '@/api/system/dict'; import { getDictionaryBiz } from '@/api/system/dict';
import { postPageList, postCheckBalance, postReal,postOrderInfoListExport, postCreateReconciliationOrder } from '@/api/finance/ReconciliationDepositSlip'; import {
postPageList,
postCheckBalance,
postReal,
postOrderInfoListExport,
postCreateReconciliationOrder,
} from '@/api/finance/ReconciliationDepositSlip';
import { import {
downloadXls, downloadXls,
setNodeHeight, setNodeHeight,
@ -161,9 +233,9 @@ import {
handleInputQuery, handleInputQuery,
handleSelectQuery, handleSelectQuery,
handleTranslationDataSeclect, handleTranslationDataSeclect,
getObjType getObjType,
} from '@/utils/util'; } from '@/utils/util';
import { columnList, confirmColumnList } from '@/option/finance/ReconciliationDepositSlip'; import { columnList, confirmColumnList,columnListB } from '@/option/finance/ReconciliationDepositSlip';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { deepClone } from '@/utils/util'; import { deepClone } from '@/utils/util';
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
@ -182,15 +254,16 @@ const details = reactive<any>({
columnList: deepClone(columnList), columnList: deepClone(columnList),
// //
query: {}, query: {},
name: 1 name: 1,
}, },
{ {
title: 'toC订单对账', title: 'toC订单对账',
columnList: deepClone(columnList), columnList: deepClone(columnListB),
query: {}, query: {},
name: 2 name: 2,
} },
], ],
defaultTime2: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)], // '12:00:00', '08:00:00'
/** 时间快捷选择设置 */ /** 时间快捷选择设置 */
shortcuts: [ shortcuts: [
{ {
@ -234,7 +307,7 @@ const details = reactive<any>({
/** 开标签 */ /** 开标签 */
confirmVisited: false, confirmVisited: false,
}, },
/** 弹出层显示 */ /** 弹出层显示 */
popUpShow: { popUpShow: {
/** 新增标签 */ /** 新增标签 */
confirmVisited: false, confirmVisited: false,
@ -256,7 +329,7 @@ const details = reactive<any>({
const tableNodeRef = ref(); const tableNodeRef = ref();
const { search, shortcuts, selectionList, drawerShow, page } = toRefs(details); const { search, shortcuts, selectionList, drawerShow, page, defaultTime2 } = toRefs(details);
/** vuex */ /** vuex */
const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList'])); const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList']));
@ -276,9 +349,15 @@ const onLoad = async () => {
// loading // loading
details.loadingObj.list = true; details.loadingObj.list = true;
const {query, columnList} = ( details.pageStatus === 1 ?details.pageInfo[0]: details.pageInfo[1]) const { query, columnList } =
details.pageStatus === 1 ? details.pageInfo[0] : details.pageInfo[1];
// query
const queryCopy = { ...query };
await TimeProcessing(queryCopy);
const submitData = { ...queryCopy, ...details.page };
const submitData = { query, ...details.page }; // const submitData = { ...query, ...details.page };
// listType 1 -- toB ; 2 -- toC // listType 1 -- toB ; 2 -- toC
submitData.listType = details.pageStatus; submitData.listType = details.pageStatus;
@ -290,10 +369,7 @@ const onLoad = async () => {
details.data = data.records; details.data = data.records;
details.page.total = data.total; details.page.total = data.total;
console.log('columnList :>> ', columnList); console.log('columnList :>> ', columnList);
handleTranslationDataSeclect( handleTranslationDataSeclect(details.data, columnList);
details.data,
columnList
);
return res.data; return res.data;
} catch (error) { } catch (error) {
@ -303,6 +379,22 @@ const onLoad = async () => {
} }
}; };
const processTimeSection = (query, sectionKey, startKey, endKey) => {
if (query[sectionKey]?.length) {
query[startKey] = query[sectionKey][0];
query[endKey] = query[sectionKey][1];
delete query[sectionKey];
} else {
delete query[startKey];
delete query[endKey];
}
};
const TimeProcessing = query => {
processTimeSection(query, 'calculateTimeSection', 'syncFeeDateStart', 'syncFeeDateEnd');
processTimeSection(query, 'signTimeSection', 'signTimeStart', 'signTimeEnd');
processTimeSection(query, 'calculatePriceTimeSection', 'openTimeStart', 'openTimeEnd');
};
const handleData = (key, res) => { const handleData = (key, res) => {
const { code, data } = res.data; const { code, data } = res.data;
if (code !== 200) return; if (code !== 200) return;
@ -334,31 +426,28 @@ const handleData = (key, res) => {
} }
}; };
const initData = async ()=>{ const initData = async () => {
await Promise.all([ await Promise.all([
// //
getDictionaryBiz('distribution_type').then(res => handleData('订单类型', res)), // getDictionaryBiz('distribution_type').then(res => handleData('', res)),
// //
getDictionaryBiz('open_order_pay_type').then(res => handleData('支付方式', res)), getDictionaryBiz('open_order_pay_type').then(res => handleData('支付方式', res)),
// //
getDictionaryBiz('open_order_pay_way').then(res => handleData('付款方式', res)), getDictionaryBiz('open_order_pay_way').then(res => handleData('付款方式', res)),
initOnLoad() initOnLoad(),
]) ]);
await nextTick(); await nextTick();
const {columnList} = ( details.pageStatus === 1 ?details.pageInfo[0]: details.pageInfo[1]) const { columnList } = details.pageStatus === 1 ? details.pageInfo[0] : details.pageInfo[1];
handleTranslationDataSeclect( handleTranslationDataSeclect(details.data, columnList);
details.data, };
columnList
);
}
/** 初始化请求 */ /** 初始化请求 */
const initOnLoad = () => { const initOnLoad = () => {
details.page.pageNum = 1; details.page.pageNum = 1;
details.page.total = 0; details.page.total = 0;
return onLoad() return onLoad();
}; };
initData(); initData();
@ -371,14 +460,16 @@ const searchChange = () => {
/** 清空表单 */ /** 清空表单 */
const searchReset = () => { const searchReset = () => {
// details.query = {}; // details.query = {};
details.pageStatus === 1 ? (details.query1 = {}) : (details.query2 = {}); console.log(details,'details');
details.pageStatus == 1 ? (details.pageInfo[0].query={}) : (details.pageInfo[1].query={});
details.page.pageNum = 1; details.page.pageNum = 1;
handleClearTableQuery(details.pageStatus === 1 ? details.columnList1 : details.columnList2); handleClearTableQuery(details.pageStatus === 1 ? details.columnList1 : details.columnList2);
initOnLoad(); initOnLoad();
}; };
/** 展开列表控件 */ /** 展开列表控件 */
const showdrawer = ( item:any, _flag?: boolean) => { const showdrawer = (item: any, _flag?: boolean) => {
item.drawerShow = _flag; item.drawerShow = _flag;
}; };
@ -455,13 +546,12 @@ const handleFullScrean = (_type: 'open' | 'close', _name: string) => {
switch (_name) { switch (_name) {
case 'confirmVisited': case 'confirmVisited':
details.fullscreenObj.confirmVisited = details.fullscreenObj.confirmVisited = !details.fullscreenObj.confirmVisited;
!details.fullscreenObj.confirmVisited;
if (_type === 'close') { if (_type === 'close') {
if (_node) setNodeHeight(_node, '500px', true); if (_node) setNodeHeight(_node, '500px', true);
} else { } else {
if (_node) setNodeHeight(_node,'', true); if (_node) setNodeHeight(_node, '', true);
} }
break; break;
@ -478,35 +568,37 @@ const handleConfirm = async () => {
const _errorArr = []; const _errorArr = [];
// //
let _destinationWarehouseName = '' let _destinationWarehouseName = '';
// //
let _consignee = '' let _consignee = '';
for (let index = 0; index < details.selectionList.length; index++) { for (let index = 0; index < details.selectionList.length; index++) {
const value = details.selectionList[index]; const value = details.selectionList[index];
if (index === 0) { if (index === 0) {
_destinationWarehouseName = value.destinationWarehouseName _destinationWarehouseName = value.destinationWarehouseName;
_consignee = value.consignee _consignee = value.consignee;
} }
if (value.consignee !== _consignee) return ElMessage.warning(`收货单位不一致,请移除不一致数据`) if (value.consignee !== _consignee)
if (value.destinationWarehouseName !== _destinationWarehouseName) return ElMessage.warning(`目的仓不一致,请移除不一致数据`) return ElMessage.warning(`收货单位不一致,请移除不一致数据`);
if (Number(value.signStatus) !== 2) return ElMessage.warning(`存在未签收完成的数据`) if (value.destinationWarehouseName !== _destinationWarehouseName)
return ElMessage.warning(`目的仓不一致,请移除不一致数据`);
if (Number(value.signStatus) !== 2) return ElMessage.warning(`存在未签收完成的数据`);
} }
details.popUpShow.confirmVisited = true details.popUpShow.confirmVisited = true;
await nextTick() await nextTick();
const _node = document.querySelector(`.confirmVisited .maboxhi`); const _node = document.querySelector(`.confirmVisited .maboxhi`);
setNodeHeight(_node, details.popUpShow.confirmVisited ? '' : '500px', true); setNodeHeight(_node, details.popUpShow.confirmVisited ? '' : '500px', true);
}; };
const handleSubmitConfrim= ()=>{ const handleSubmitConfrim = () => {
ElMessageBox.confirm('是否确认对账单?', '提示', { ElMessageBox.confirm('是否确认对账单?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(async () => { }).then(async () => {
details.popUpShow.confirmVisited = false details.popUpShow.confirmVisited = false;
try { try {
details.loadingObj.pageLoading = true; details.loadingObj.pageLoading = true;
@ -526,7 +618,7 @@ const handleSubmitConfrim= ()=>{
details.loadingObj.pageLoading = false; details.loadingObj.pageLoading = false;
} }
}); });
} };
/** 计算仓储&配送费用 */ /** 计算仓储&配送费用 */
const handleComputedPrice = ({ row }) => { const handleComputedPrice = ({ row }) => {
@ -558,43 +650,42 @@ const handleExport = () => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(async() => { }).then(async () => {
try { try {
details.loadingObj.pageLoading = true details.loadingObj.pageLoading = true;
const submitData =
details.pageStatus === 1
? { ...details.pageInfo[0].query }
: { ...details.pageInfo[1].query };
const submitData=details.pageStatus === 1 ?
{ ...details.pageInfo[0].query } :
{ ...details.pageInfo[1].query }
submitData.listType = details.pageStatus; submitData.listType = details.pageStatus;
if (getObjType(submitData.createTimeArr) === 'array' && submitData.createTimeArr.length > 0){ if (getObjType(submitData.createTimeArr) === 'array' && submitData.createTimeArr.length > 0) {
submitData.createTimeStartStr = submitData.createTimeArr[0] submitData.createTimeStartStr = submitData.createTimeArr[0];
submitData.createTimeEndStr = submitData.createTimeArr[1] submitData.createTimeEndStr = submitData.createTimeArr[1];
} }
if (getObjType(submitData.checkTimeArr) === 'array' && submitData.checkTimeArr.length > 0){ if (getObjType(submitData.checkTimeArr) === 'array' && submitData.checkTimeArr.length > 0) {
submitData.checkTimeStartStr = submitData.checkTimeArr[0] submitData.checkTimeStartStr = submitData.checkTimeArr[0];
submitData.checkTimeEndStr = submitData.checkTimeArr[1] submitData.checkTimeEndStr = submitData.checkTimeArr[1];
} }
delete submitData.createTimeArr delete submitData.createTimeArr;
delete submitData.checkTimeArr delete submitData.checkTimeArr;
const res = await postOrderInfoListExport(submitData);
const res = await postOrderInfoListExport(submitData) const { status, data } = res;
if (status !== 200) return;
const {status, data} = res downloadXls(data, details.pageStatus === 1 ? '对账预存单toB.xlsx' : '对账预存单toC.xlsx');
if (status !== 200) return
downloadXls(data, details.pageStatus === 1 ? '对账预存单toB.xlsx': '对账预存单toC.xlsx')
ElMessage.success('导出成功!'); ElMessage.success('导出成功!');
} catch (error) { } catch (error) {
console.log('error :>> ', error); console.log('error :>> ', error);
}finally{ } finally {
details.loadingObj.pageLoading = false details.loadingObj.pageLoading = false;
} }
}); });
}; };
</script> </script>

2
src/views/waybill/CreateZeroOrder.vue

@ -1839,7 +1839,7 @@ const initPageInfo = async () => {
val.freightPrice = isNumber(val.freightPrice) ? Number(val.freightPrice) : 0; val.freightPrice = isNumber(val.freightPrice) ? Number(val.freightPrice) : 0;
val.deliveryPrice = isNumber(val.deliveryPrice) ? Number(val.deliveryPrice) : 0; val.deliveryPrice = isNumber(val.deliveryPrice) ? Number(val.deliveryPrice) : 0;
val.pickupPrice = isNumber(val.pickupPrice) ? Number(val.pickupPrice) : 0; val.pickupPrice = isNumber(val.pickupPrice) ? Number(val.pickupPrice) : 0;
val.subtotalFreight = Number(val.subtotalFreight); val.subtotalFreight = isNumber(val.subtotalFreight) ? Number(val.subtotalFreight) : 0;
val.goodsName = val.productName; val.goodsName = val.productName;
val.goodsId = val.productId; val.goodsId = val.productId;

24
src/views/waybill/WaybillOrderList.vue

@ -109,13 +109,14 @@
@click="handleBatchRecover" @click="handleBatchRecover"
> </el-button > </el-button
> >
<!-- 导出 -->
<el-button <el-button
type="primary" type="primary"
icon="Download" icon="Download"
v-if="permissionObj.WaybillOrderList_export" v-if="permissionObj.WaybillOrderList_export"
@click="handleExport" @click="handleExport"
> </el-button >
> </el-button>
</div> </div>
<!-- 头部右侧按钮模块 --> <!-- 头部右侧按钮模块 -->
<div class="avue-crud__right"> <div class="avue-crud__right">
@ -127,6 +128,7 @@
<!-- 列表模块 --> <!-- 列表模块 -->
<tablecmt <tablecmt
ref="tableNodeRef"
:columnList="details.columnList" :columnList="details.columnList"
:tableData="data" :tableData="data"
:loading="loadingObj.list" :loading="loadingObj.list"
@ -416,6 +418,8 @@ const details = reactive<any>({
warehouseOption: [], warehouseOption: [],
}); });
const tableNodeRef = ref();
const { search, query, shortcuts, data, loadingObj, selectionList, drawerShow, page, popUpShow } = const { search, query, shortcuts, data, loadingObj, selectionList, drawerShow, page, popUpShow } =
toRefs(details); toRefs(details);
@ -455,14 +459,6 @@ const permissionObj = reactive({
}), }),
}); });
onMounted(() => {
const timer = setTimeout(() => {
details.listNode = document.querySelector('.maboxhi');
details.listNode.style.transition = 'all .5s ease-out';
clearTimeout(timer);
}, 100);
});
/** 请求页面数据 */ /** 请求页面数据 */
const onLoad = async (page?: any, params = {}) => { const onLoad = async (page?: any, params = {}) => {
try { try {
@ -559,10 +555,10 @@ const showdrawer = (_flag?: boolean) => {
}; };
/** 是否开启搜索区 */ /** 是否开启搜索区 */
const searchHide = () => { const searchHide = async () => {
details.search = !details.search; details.search = !details.search;
await nextTick();
setNodeHeight(details.listNode, '', true); setNodeHeight(tableNodeRef.value.$el, '', true);
}; };
/** 表格表头输入框搜索 */ /** 表格表头输入框搜索 */
@ -982,6 +978,8 @@ const handleExport = () => {
delete submitData.createTime; delete submitData.createTime;
delete submitData.documentMakingTime; delete submitData.documentMakingTime;
if (details.selectionList.length > 0)
submitData.ids = details.selectionList.map(val => val.id).join(',');
const res = await postExport(submitData); const res = await postExport(submitData);

Loading…
Cancel
Save