Browse Source

Merge branch 'dev' into pre-production

fix_bug_pro20231227
pref_mail@163.com 1 year ago
parent
commit
435cdf592a
  1. 50
      src/api/aftersales/aftersalesAppeal.js
  2. 50
      src/api/aftersales/aftersalesAppealPeople.js
  3. 9
      src/api/aftersales/aftersalesWorkOrder.js
  4. 12
      src/api/distribution/BookingNote.js
  5. 12
      src/api/distribution/CreateOrder.js
  6. 12
      src/api/distribution/distributionSignfor.js
  7. 19
      src/api/waybill/WaybillOrderList.js
  8. 14
      src/components/SelectBox/SelectBox.vue
  9. 132
      src/option/aftersales/aftersalesAppeal.js
  10. 108
      src/option/aftersales/aftersalesAppealPeople.js
  11. 36
      src/option/aftersales/vueTvemp.js
  12. 186
      src/option/waybill/WaybillOrderList.js
  13. 12
      src/router/views/index.js
  14. 40
      src/utils/util.js
  15. 1614
      src/views/aftersales/VueTemp.vue
  16. 350
      src/views/aftersales/VueTempAdd.vue
  17. 853
      src/views/aftersales/VueTempend.vue
  18. 318
      src/views/aftersales/aftersalesAppeal.vue
  19. 300
      src/views/aftersales/aftersalesAppealPeople.vue
  20. 6
      src/views/aftersales/aftersalesWorkOrder.vue
  21. 14
      src/views/distribution/deliverylist/distributionDeliveryListdis.vue
  22. 14
      src/views/distribution/deliverylist/distributionDeliveryListmar.vue
  23. 723
      src/views/distribution/inventory/BookingNote.vue
  24. 1029
      src/views/distribution/inventory/CreateOrder.vue
  25. 155
      src/views/distribution/signfor/distributionSignforedt.vue
  26. 1154
      src/views/mail/signfor/list.vue
  27. 1723
      src/views/waybill/CreateZeroOrder.vue
  28. 2
      src/views/waybill/FreezeOrder.vue
  29. 46
      src/views/waybill/WaybillOrderList.vue
  30. 2
      vite.config.js

50
src/api/aftersales/aftersalesAppeal.js

@ -0,0 +1,50 @@
import request from '@/axios';
export const getList = (current, size, params) => {
return request({
url: '/api/logpm-aftersales/aftersalesAppeal/list',
method: 'get',
params: {
...params,
current,
size,
}
})
}
export const getDetail = (id) => {
return request({
url: '/api/logpm-aftersales/aftersalesAppeal/detail',
method: 'get',
params: {
id
}
})
}
export const remove = (ids) => {
return request({
url: '/api/logpm-aftersales/aftersalesAppeal/remove',
method: 'post',
params: {
ids,
}
})
}
export const add = (row) => {
return request({
url: '/api/logpm-aftersales/aftersalesAppeal/submit',
method: 'post',
data: row
})
}
export const update = (row) => {
return request({
url: '/api/logpm-aftersales/aftersalesAppeal/submit',
method: 'post',
data: row
})
}

50
src/api/aftersales/aftersalesAppealPeople.js

@ -0,0 +1,50 @@
import request from '@/axios';
export const getList = (current, size, params) => {
return request({
url: '/blade-aftersalesAppealPeople/aftersalesAppealPeople/list',
method: 'get',
params: {
...params,
current,
size,
}
})
}
export const getDetail = (id) => {
return request({
url: '/blade-aftersalesAppealPeople/aftersalesAppealPeople/detail',
method: 'get',
params: {
id
}
})
}
export const remove = (ids) => {
return request({
url: '/blade-aftersalesAppealPeople/aftersalesAppealPeople/remove',
method: 'post',
params: {
ids,
}
})
}
export const add = (row) => {
return request({
url: '/blade-aftersalesAppealPeople/aftersalesAppealPeople/submit',
method: 'post',
data: row
})
}
export const update = (row) => {
return request({
url: '/blade-aftersalesAppealPeople/aftersalesAppealPeople/submit',
method: 'post',
data: row
})
}

9
src/api/aftersales/aftersalesWorkOrder.js

@ -110,4 +110,13 @@ export const $_remove = (params) => {
method: 'post',
params
})
}
// 处理方数据
export const $_getProcessor = (params) => {
return request({
url: '/api/logpm-aftersales/aftersalesWorkOrder/pendingWorkOrder',
method: 'get',
params
})
}

12
src/api/distribution/BookingNote.js

@ -0,0 +1,12 @@
import request from '@/axios';
/**
* 暂存单转运单信息查询
*/
export const postWarehouseFindWaybillInfo = data => {
return request({
url: '/api/logpm-warehouse/warehouseWaybill/findWaybillInfo',
method: 'post',
data,
});
};

12
src/api/distribution/CreateOrder.js

@ -65,3 +65,15 @@ export const getOpenOrderAdvanceToWaybillInfo = data => {
data,
});
};
/**
* 暂存单转运单信息查询
*/
export const getOpenOrderAdvanceFindWarehouseList = data => {
return request({
url: '/api/logpm-trunkline/openOrder/findWarehouseList',
method: 'post',
data,
});
};

12
src/api/distribution/distributionSignfor.js

@ -23,6 +23,18 @@ export const getPage = (current, size, params) => {
})
}
export const getClientPage = (current, size, params) => {
return request({
url: '/api/logpm-distribution/signfor/clientPage',
method: 'get',
params: {
...params,
current,
size,
}
})
}
/**
* 导出
* @param row

19
src/api/waybill/WaybillOrderList.js

@ -0,0 +1,19 @@
import request from '@/axios';
/**
* 获取运单列表
* @param {number} current
* @param {number} size
* @param {*} params
* @returns
*/
export const postWarehouseWaybillPageWaybillList = (page, params) => {
return request({
url: '/api/logpm-warehouse/warehouseWaybill/pageWaybillList',
method: 'post',
data: {
...params,
...page,
},
});
};

14
src/components/SelectBox/SelectBox.vue

@ -3,12 +3,16 @@
<el-input
@focus="handleFocus"
v-model="_computed"
@input="handleInput"
:placeholder="props.placeholder"
@blur="handleBlur"
@change="handleChange"
></el-input>
<div class="selectContainer" v-if="isShowBox">
<!-- <el-scrollbar>
<p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p>
</el-scrollbar> -->
<div class="content">
<SelectComponent
:className="props.className"
@ -49,7 +53,6 @@ const _computed = computed({
},
set(val) {
$emit('update:modelValue', val);
props.input && props.input();
},
});
@ -83,7 +86,11 @@ const handleChange = (value: any) => {
props.change && props.change(value);
};
defineExpose({ handleShow });
const handleInput = () => {
props.input && props.input();
};
defineExpose({ handleShow, handleClose });
</script>
<style lang="scss" scoped>
@ -93,6 +100,7 @@ defineExpose({ handleShow });
text-align: center;
.selectContainer {
overflow: scroll;
position: absolute;
width: 100%;
box-sizing: border-box;
@ -123,7 +131,7 @@ defineExpose({ handleShow });
}
.content {
overflow: auto;
overflow-y: scroll;
}
}
}

132
src/option/aftersales/aftersalesAppeal.js

@ -0,0 +1,132 @@
export default {
expand: false,
index: true,
border: true,
selection: true,
column: [
{
label: "租户号",
prop: "tenantId",
display: false,
hide: true,
},
{
label: "主键",
prop: "id",
display: false,
hide: true,
},
{
label: "创建人",
prop: "createUser",
display: false,
hide: true,
},
{
label: "创建时间",
prop: "createTime",
display: false,
hide: true,
},
{
label: "更新人",
prop: "updateUser",
display: false,
hide: true,
},
{
label: "更新时间",
prop: "updateTime",
display: false,
hide: true,
},
{
label: "状态",
prop: "status",
display: false,
hide: true,
},
{
label: "是否已删除",
prop: "isDeleted",
display: false,
hide: true,
},
{
label: "创建部门",
prop: "createDept",
display: false,
hide: true,
},
{
label: "预留1",
prop: "reserve1",
display: false,
hide: true,
},
{
label: "预留2",
prop: "reserve2",
display: false,
hide: true,
},
{
label: "预留3",
prop: "reserve3",
display: false,
hide: true,
},
{
label: "预留4",
prop: "reserve4",
display: false,
hide: true,
},
{
label: "预留5",
prop: "reserve5",
display: false,
hide: true,
},
{
label: "异常工单ID",
prop: "workOrderId",
},
{
label: "仓库ID",
prop: "warehouseId",
},
{
label: "申述理由",
prop: "reason",
},
{
label: "申述人",
prop: "claimant",
},
{
label: "申述人ID",
prop: "claimantUserId",
},
{
label: "类型;0 待处理 1 成立 2 不成立",
prop: "typesOf",
},
{
label: "审核原因",
prop: "handlingReason",
},
{
label: "处理人",
prop: "processedByName",
},
{
label: "处理时间",
prop: "processedDate",
},
{
label: "处理人ID",
prop: "processedById",
},
]
}

108
src/option/aftersales/aftersalesAppealPeople.js

@ -0,0 +1,108 @@
export default {
expand: false,
index: true,
border: true,
selection: true,
column: [
{
label: "租户号",
prop: "tenantId",
display: false,
hide: true,
},
{
label: "创建人",
prop: "createUser",
display: false,
hide: true,
},
{
label: "创建时间",
prop: "createTime",
display: false,
hide: true,
},
{
label: "更新人",
prop: "updateUser",
display: false,
hide: true,
},
{
label: "更新时间",
prop: "updateTime",
display: false,
hide: true,
},
{
label: "状态",
prop: "status",
display: false,
hide: true,
},
{
label: "是否已删除",
prop: "isDeleted",
display: false,
hide: true,
},
{
label: "创建部门",
prop: "createDept",
display: false,
hide: true,
},
{
label: "主键",
prop: "id",
display: false,
hide: true,
},
{
label: "预留1",
prop: "reserve1",
display: false,
hide: true,
},
{
label: "预留2",
prop: "reserve2",
display: false,
hide: true,
},
{
label: "预留3",
prop: "reserve3",
display: false,
hide: true,
},
{
label: "预留4",
prop: "reserve4",
display: false,
hide: true,
},
{
label: "预留5",
prop: "reserve5",
display: false,
hide: true,
},
{
label: "异常工单ID",
prop: "workOrderId",
},
{
label: "实际责任人名称",
prop: "actualPersonName",
},
{
label: "实际责任人ID",
prop: "actualPersonId",
},
{
label: "仓库ID",
prop: "warehouseId",
},
]
}

36
src/option/aftersales/vueTvemp.js

@ -236,17 +236,17 @@ export const columnList = [
sortable: true,
head: false,
},
{
prop: 'processNumber',
label: '钉钉流程号',
type: 2,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
head: false,
},
// {
// prop: 'processNumber',
// label: '钉钉流程号',
// type: 2,
// values: '',
// width: '150',
// checkarr: [],
// fixed: false,
// sortable: true,
// head: false,
// },
{
prop: 'reviewedBy',
label: '审核人',
@ -313,7 +313,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
{
@ -324,7 +324,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
{
@ -335,7 +335,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
{
@ -346,7 +346,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
{
@ -357,7 +357,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
{
@ -368,7 +368,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
{
@ -379,7 +379,7 @@ export const recordList = [
width: '150',
checkarr: [],
fixed: false,
sortable: true,
sortable: false,
head: false,
},
]

186
src/option/waybill/WaybillOrderList.js

@ -15,7 +15,7 @@ export const columnList = [
fixed: true,
},
{
prop: 'billladingCode',
prop: 'waybillNo',
label: '运单号',
type: 13,
values: '',
@ -26,7 +26,7 @@ export const columnList = [
head: false,
},
{
prop: 'carNumber',
prop: 'orderNo',
label: '订单自编号',
type: 2,
values: '',
@ -36,7 +36,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'driverName',
prop: 'destinationWarehouseName',
label: '目的仓',
type: 3,
values: '',
@ -46,7 +46,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'driverPhone',
prop: 'departureWarehouseName',
label: '发站仓',
type: 3,
values: '',
@ -56,7 +56,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'warehouseName',
prop: 'customerTrain',
label: '客户车次',
type: 2,
values: '',
@ -66,17 +66,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'lineNameTitle',
label: '状态',
type: 3,
values: '',
width: '150',
checkarr: [],
fixed: false,
sortable: true,
},
{
prop: 'nodeNub',
prop: 'brand',
label: '品牌',
type: 2,
values: '',
@ -86,7 +76,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'startTime',
prop: 'shipper',
label: '发货单位',
type: 2,
values: '',
@ -96,7 +86,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'endTime',
prop: 'shipperName',
label: '发货人',
type: 2,
values: '',
@ -106,7 +96,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'planVolume',
prop: 'shipperMobile',
label: '发货方手机号',
type: 2,
values: '',
@ -116,7 +106,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'billladingStatus',
prop: 'shipperAddress',
label: '发货方地址',
type: 2,
values: '',
@ -126,7 +116,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'chargeType',
prop: 'consignee',
label: '收货单位',
type: 2,
values: '',
@ -136,7 +126,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'totalFee',
prop: 'consigneeName',
label: '收货人',
type: 1,
values: '',
@ -146,7 +136,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'remark',
prop: 'consigneeMobile',
label: '收货方手机号',
type: 2,
values: '',
@ -156,7 +146,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'consigneeAddress',
label: '收货方地址',
type: 2,
values: '',
@ -166,7 +156,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'destination',
label: '到站',
type: 2,
values: '',
@ -176,7 +166,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'goodsName',
label: '货物名称',
type: 2,
values: '',
@ -185,17 +175,7 @@ export const columnList = [
fixed: false,
sortable: true,
},
{
prop: 'carrierName',
label: '参考一口价',
type: 1,
values: '',
width: '130',
checkarr: [],
fixed: false,
sortable: true,
},
{
/* {
prop: 'carrierName',
label: '单价',
type: 1,
@ -214,9 +194,9 @@ export const columnList = [
checkarr: [],
fixed: false,
sortable: true,
},
}, */
{
prop: 'carrierName',
prop: 'totalCount',
label: '总数',
type: 2,
values: '',
@ -227,7 +207,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'totalWeight',
label: '总重量',
type: 1,
values: '',
@ -238,7 +218,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'totalVolume',
label: '总体积',
type: 1,
values: '',
@ -249,7 +229,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'totalFreight',
label: '运费',
type: 1,
values: '',
@ -260,7 +240,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'deliveryFee',
label: '送货费',
type: 1,
values: '',
@ -271,7 +251,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'pickupFee',
label: '提货费',
type: 1,
values: '',
@ -282,7 +262,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'warehouseManagementFee',
label: '仓库管理费',
type: 1,
values: '',
@ -293,7 +273,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'storageFee',
label: '仓储费',
type: 1,
values: '',
@ -304,7 +284,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'remark',
prop: 'handlingFee',
label: '装卸费',
type: 1,
values: '',
@ -314,7 +294,7 @@ export const columnList = [
isshowSummary: true,
sortable: true,
},
{
/* {
prop: 'carrierName',
label: '其它费用',
type: 1,
@ -324,8 +304,8 @@ export const columnList = [
fixed: false,
isshowSummary: true,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '报价费',
type: 1,
@ -335,8 +315,8 @@ export const columnList = [
fixed: false,
isshowSummary: true,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '总费用',
type: 1,
@ -346,9 +326,9 @@ export const columnList = [
fixed: false,
isshowSummary: true,
sortable: true,
},
}, */
{
prop: 'carrierName',
prop: 'claimingValue',
label: '申明价值',
type: 1,
values: '',
@ -359,7 +339,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'remark',
prop: 'rebate',
label: '回扣',
type: 1,
values: '',
@ -370,7 +350,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'payWay',
label: '付款方式',
type: 3,
values: '',
@ -380,7 +360,7 @@ export const columnList = [
sortable: false,
},
{
prop: 'carrierName',
prop: 'xPay',
label: '现付',
type: 1,
values: '',
@ -391,7 +371,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'dPay',
label: '到付',
type: 1,
values: '',
@ -402,7 +382,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'yPay',
label: '月付',
type: 1,
values: '',
@ -413,7 +393,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'remark',
prop: 'hPay',
label: '回付',
type: 1,
values: '',
@ -424,7 +404,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'deliveryWay',
label: '送货方式',
type: 3,
values: '',
@ -434,7 +414,7 @@ export const columnList = [
sortable: false,
},
{
prop: 'carrierName',
prop: 'urgency',
label: '紧急度',
type: 3,
values: '',
@ -445,7 +425,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'receiptNum',
label: '回单数',
type: 1,
values: '',
@ -456,7 +436,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'receipt',
label: '回单要求',
type: 1,
values: '',
@ -467,7 +447,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'remark',
prop: 'transportType',
label: '运输方式',
type: 3,
values: '',
@ -476,7 +456,7 @@ export const columnList = [
fixed: false,
sortable: true,
},
{
/* {
prop: 'carrierName',
label: '运单标识',
type: 3,
@ -485,9 +465,9 @@ export const columnList = [
checkarr: [],
fixed: false,
sortable: true,
},
}, */
{
prop: 'carrierName',
prop: 'thirdOperationFee',
label: '三方操作费',
type: 1,
values: '',
@ -498,7 +478,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'carrierName',
prop: 'agent',
label: '经办人',
type: 2,
values: '',
@ -520,7 +500,7 @@ export const columnList = [
sortable: true,
},
{
prop: 'remark',
prop: 'documentMakingTime',
label: '创建时间',
type: 1,
values: '',
@ -529,7 +509,7 @@ export const columnList = [
fixed: false,
sortable: true,
},
{
/* {
prop: 'carrierName',
label: '审核状态',
type: 3,
@ -538,8 +518,8 @@ export const columnList = [
checkarr: [],
fixed: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '结算状态',
type: 3,
@ -549,9 +529,9 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
}, */
{
prop: 'carrierName',
prop: 'remark',
label: '备注',
type: 2,
values: '',
@ -561,7 +541,7 @@ export const columnList = [
isshowSummary: false,
sortable: true,
},
{
/* {
prop: 'carrierName',
label: '批次号',
type: 2,
@ -571,8 +551,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'remark',
label: '送货司机',
type: 2,
@ -581,8 +561,8 @@ export const columnList = [
checkarr: [],
fixed: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '送货时间',
type: 1,
@ -591,8 +571,8 @@ export const columnList = [
checkarr: [],
fixed: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '送货件数',
type: 1,
@ -602,8 +582,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '签收时间',
type: 1,
@ -613,8 +593,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '文员确认签收时间',
type: 1,
@ -624,8 +604,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '服务类型',
type: 1,
@ -635,8 +615,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '服务号',
type: 2,
@ -646,8 +626,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '冻结状态',
type: 3,
@ -657,8 +637,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '审核人',
type: 2,
@ -668,8 +648,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '审核时间',
type: 1,
@ -679,8 +659,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '承运单号',
type: 2,
@ -690,8 +670,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '中转物流',
type: 2,
@ -701,8 +681,8 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
{
}, */
/* {
prop: 'carrierName',
label: '运单中转费用',
type: 1,
@ -712,7 +692,7 @@ export const columnList = [
fixed: false,
isshowSummary: false,
sortable: true,
},
}, */
{
prop: 'createUserName',
label: '操作',

12
src/router/views/index.js

@ -1172,6 +1172,18 @@ export default [
},
],
},
{
path: '/aftersales/VueTempend',
component: Layout,
redirect: '/aftersales/VueTempend',
children: [
{
path: '/aftersales/VueTempend',
name: '工单完结',
component: () => import('@/views/aftersales/VueTempend.vue'),
},
],
},
// {
// path: '/distribution/turndelivery/devtmp',
// component: Layout,

40
src/utils/util.js

@ -490,11 +490,11 @@ export const setNodeHeight = (_node, _height = '') => {
/**
* 下拉框搜索公共函数processRowProperty(index, row, details);
* @param {string} index index参数
* @param {object} row row (表头参数)
* @param {object} details details (搜索参数)
* @param {string} index index参数
* @param {object} row row (表头参数)
* @param {object} details details (搜索参数)
*/
//
//
const updateDetailQuery = (index, propName, obj) => {
// 更新或删除查询参数
if (index) {
@ -503,10 +503,10 @@ const updateDetailQuery = (index, propName, obj) => {
delete obj[propName];
}
};
export const processRowProperty = (index, row, details) => {
export const processRowProperty = (index, row, details) => {
const nameRegex = /(\w+)Name$/; // 捕获以'Name'结尾的属性名
const match = row.prop.match(nameRegex);
// 如果属性以'Name'结尾,则更新相应的查询参数
if (match) {
const basePropName = match[1]; // 获取不包含'Name'的属性名
@ -520,14 +520,13 @@ export const processRowProperty = (index, row, details) => {
}
};
/**
* 数字运算主要用于小数点精度问题
* [see](https://juejin.im/post/6844904066418491406#heading-12)
* @param {number} a 前面的值
* @param {"+"|"-"|"*"|"/"} type 计算方式
* @param {number} b 后面的值
* @example
* @example
* ```js
* // 可链式调用
* const res = computeNumber(1.3, "-", 1.2).next("+", 1.5).next("*", 2.3).next("/", 0.2).result;
@ -540,7 +539,7 @@ export function computeNumber(a, type, b) {
* @param {number} n 数字
*/
function getDecimalLength(n) {
const decimal = n.toString().split(".")[1];
const decimal = n.toString().split('.')[1];
return decimal ? decimal.length : 0;
}
/**
@ -556,16 +555,16 @@ export function computeNumber(a, type, b) {
b = amend(b * power);
switch (type) {
case "+":
case '+':
result = (a + b) / power;
break;
case "-":
case '-':
result = (a - b) / power;
break;
case "*":
case '*':
result = (a * b) / (power * power);
break;
case "/":
case '/':
result = a / b;
break;
}
@ -582,6 +581,15 @@ export function computeNumber(a, type, b) {
*/
next(nextType, nextValue) {
return computeNumber(result, nextType, nextValue);
}
}
}
},
};
}
/**
* @param {any} value 传入值, 判断该值是否为数字
*/
export const isNumer = value => {
const _value = Number(value);
if (_value !== _value) return false;
return true;
};

1614
src/views/aftersales/VueTemp.vue

File diff suppressed because it is too large Load Diff

350
src/views/aftersales/VueTempAdd.vue

@ -1,6 +1,5 @@
<template>
<el-divider content-position="left"> <span>工单新增</span>
</el-divider>
<el-divider content-position="left"> <span>工单新增</span> </el-divider>
<el-form :model="Indexform" label-width="100px" class="IndexFrom" ref="IndexForm">
<el-form-item label="异常类型">
@ -44,11 +43,27 @@
</el-form-item>
<el-form-item label="少货件数" v-if="StateType || SelectType == 2">
<el-input @input="ShortageTtems" v-model="Indexform.number" placeholder="请输入少货件数" clearable />
<div class="moneyNum">
<el-input
@change="ShortageTtems"
v-model="Indexform.number"
placeholder="请输入少货件数"
clearable
/>
<div class="el_btn" @click="moneyBtnA"><span>编辑</span></div>
</div>
</el-form-item>
<el-form-item label="窜货件数" v-if="StateType || SelectType == 3">
<el-input v-model="Indexform.number" placeholder="请输入窜货件数" clearable />
<el-form-item label="窜货件数" v-if="StateType || SelectType == 3">
<div class="moneyNum">
<el-input
@change="fleeingTtems"
v-model="Indexform.number"
placeholder="请输入窜货件数"
clearable
/>
<div class="el_btn" @click="moneyBtnB"><span>编辑</span></div>
</div>
</el-form-item>
<el-form-item
@ -69,7 +84,13 @@
<el-form-item
label="车次号"
v-if="groundlineSet || groundlineType == 1 || groundlineType == 3 || groundlineType == 4"
v-if="
groundlineSet ||
groundlineType == 1 ||
groundlineType == 3 ||
groundlineType == 4 ||
groundlineType == 8
"
>
<el-input
v-model="Indexform.trainNumber"
@ -106,7 +127,13 @@
<el-form-item
label="发现时间"
v-if="groundlineSet || groundlineType == 2 || groundlineType == 3 || groundlineType == 4"
v-if="
groundlineSet ||
groundlineType == 2 ||
groundlineType == 3 ||
groundlineType == 4 ||
groundlineType == 8
"
>
<el-date-picker
v-model="Indexform.discoveryTime"
@ -119,7 +146,7 @@
<el-form-item
label="配送时间"
v-if="groundlineSet || groundlineType == 3 || groundlineType == 4"
v-if="groundlineSet || groundlineType == 3 || groundlineType == 4 || groundlineType == 8"
>
<el-date-picker
v-model="Indexform.deliveryTime"
@ -146,7 +173,7 @@
<el-form-item
label="配送司机"
v-if="groundlineSet || groundlineType == 3 || groundlineType == 4"
v-if="groundlineSet || groundlineType == 3 || groundlineType == 4 || groundlineType == 8"
>
<el-select
v-model="Indexform.deliveryDriver"
@ -169,7 +196,13 @@
</el-form-item>
<el-form-item
label="责任人"
v-if="groundlineSet || groundlineType == 2 || groundlineType == 3 || groundlineType == 4"
v-if="
groundlineSet ||
groundlineType == 2 ||
groundlineType == 3 ||
groundlineType == 4 ||
groundlineType == 8
"
>
<el-input
v-model="Indexform.personResponsible"
@ -182,20 +215,27 @@
<el-form-item label="备注信息">
<el-input v-model="Indexform.remarks" placeholder="请输入备注" clearable />
</el-form-item>
</el-form>
<!-- 必填 -->
<div class="el_clzr">
<el-form-item class="investigate" label="调查经过">
<el-input v-model="Indexform.remarks" placeholder="请输入调查经过" clearable :rows="2"
type="textarea"/>
<el-input
v-model="Indexform.remarks"
placeholder="请输入调查经过"
clearable
:rows="2"
type="textarea"
/>
</el-form-item>
<el-form-item label="处理方">
<el-select v-model="Indexform.processor" clearable filterable multiple placeholder="请选择处理方">
<el-select
v-model="Indexform.processor"
clearable
filterable
multiple
placeholder="请选择处理方"
>
<el-option
v-for="item in warehouseData"
:key="item.value"
@ -203,10 +243,10 @@
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form-item>
<!-- 必填 -->
<el-form-item label="责任方">
<el-form-item label="责任方" >
<el-select v-model="Indexform.duty" clearable filterable multiple placeholder="请选择责任方">
<el-option
v-for="item in warehouseData"
@ -216,11 +256,23 @@
/>
</el-select>
</el-form-item>
<!-- 提货环节 -->
<el-form-item label="提货责任方" v-if="groundlineSet || groundlineType==1">
<el-select v-model="Indexform.duty" clearable placeholder="请选提货择责任方">
<el-option
v-for="item in responsible"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</div>
<div class="Transport_damage_photos" v-if="SelectType == 1 || SelectType == 3 || StateType">
<span class="title">运损照片</span>
<el-upload
v-model="Indexform.packageImage"
v-model="Indexform.packageImage"
list-type="picture-card"
:on-preview="pictureList"
:on-remove="ImgListRemove"
@ -228,8 +280,8 @@
:on-success="ImgSuccess"
:before-upload="beforeAvatarUpload"
:headers="headers"
multiple
drag
multiple
drag
>
<el-icon><Plus /></el-icon>
</el-upload>
@ -244,8 +296,51 @@
<el-button type="primary" @click="ConfirmForm"> 提交 </el-button>
</div>
<!-- 少货件数大于3 -->
<el-dialog
:show-close="false"
v-model="ShortageState"
title="少货件数"
width="40%"
@close="ShortageStateFun"
lock-scroll
draggable
>
<div class="ShortageStatenum" v-for="item in ShortageList">
<span class="title">件数{{ item.number }}</span
><el-input v-model="item.packageCode" placeholder="请输入包条码" />
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="ShortageCancellation">取消</el-button>
<el-button type="primary" @click="ShortageState = false"> 确认信息 </el-button>
</span>
</template>
</el-dialog>
<!-- 窜货件数大于3 -->
<el-dialog
:show-close="false"
v-model="fleeingState"
title="窜货件数"
width="40%"
@close="fleeingFun"
lock-scroll
draggable
>
<div class="ShortageStatenum" v-for="item in fleeingList">
<span class="title">件数{{ item.number }}</span
><el-input v-model="item.packageCode" placeholder="请输入包条码" />
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="fleeingCancellation">取消</el-button>
<el-button type="primary" @click="ShortageState = false"> 确认信息 </el-button>
</span>
</template>
</el-dialog>
</template>
<script setup>
@ -267,6 +362,28 @@ const dialogImageUrl = ref(null); //图片
const dialogVisible = ref(null); //
const groundlineSet = ref(true); //线
const groundlineType = ref(null); //线
const ShortageState = ref(false); //
const fleeingState = ref(false); //
const ShortageList = ref([]); //
const fleeingList = ref([]); //
const valueStrictly = ref();
//
const responsible = ref([
{
value: '0',
label: '工厂',
},
{
value: '1',
label: '外包搬运',
},
{
value: '2',
label: '物流',
},
]);
const DeliveryDriver = ref([
{
value: '0',
@ -304,14 +421,14 @@ const doubledCount = computed(() => {
return '/api/blade-resource/oss/endpoint/put-file';
});
//
const ImgSuccess= (response, uploadFile) => {
const ImgSuccess = (response, uploadFile) => {
if (response.success === true) {
console.log(response);
fileList.value.push({
name: response.data.originalName,
url: response.data.link,
})
console.log(fileList.value,'图片列表');
});
console.log(fileList.value, '图片列表');
}
};
@ -327,18 +444,17 @@ const beforeAvatarUpload = rawFile => {
return true;
};
//
const pictureList=(val)=>{
console.log(val,'图片列表');
}
const pictureList = val => {
console.log(val, '图片列表');
};
//
const ImgListRemove=(val)=>{
console.log(val,'移除图片');
}
const ImgListRemove = val => {
console.log(val, '移除图片');
};
//
const handle = () => {
getDeptWarehouse().then(res => {
res.data.data.forEach(item => {
console.log(item);
warehouseData.value.push({
value: item.id,
label: item.name,
@ -354,7 +470,7 @@ const onLoad = () => {
onLoad(); //
//
const abnormalChange = val => {
console.log(val,'异常事件类型');
console.log(val, '异常事件类型');
console.log(StateType.value);
StateType.value = false;
if (val == 1 || val == 2 || val == 3) {
@ -362,12 +478,18 @@ const abnormalChange = val => {
} else {
StateType.value = true;
}
// 0
if (val == 1) {
Indexform.value.packageCode = 0;
} else {
Indexform.value.packageCode = null;
}
};
//
const DiscoveringNodesChange = val => {
groundlineSet.value = false; //线b
if (val == 1 || val == 2 || val == 3 || val == 4 || val == 5) {
groundlineSet.value = false; //线
if (val == 1 || val == 2 || val == 3 || val == 4 || val == 5 || val == 8) {
groundlineType.value = val; //线
} else {
groundlineSet.value = true; //
@ -414,7 +536,6 @@ const ConfirmForm = () => {
});
});
let DataSubmit = { ...Indexform.value }; //
DataSubmit.processorEntityList = processorEntityList;
delete DataSubmit.duty, //
@ -432,13 +553,91 @@ const ConfirmForm = () => {
// }
// });
};
//
const ShortageTtems=(val)=>{
const pattern = /\s+/g;
const result = val.replace(pattern, '');
console.log(result); // "33"
Indexform.value.number=result
}
const ShortageTtems = val => {
ShortageList.value = []; //
const pattern = /\s+/g;
const result = val.replace(pattern, '');
console.log(result); // "33"
Indexform.value.number = result;
if (Indexform.value.number > 1) {
ShortageState.value = true; //1
}
for (let i = 0; i < val; i++) {
ShortageList.value.push({
number: i + 1, //
packageCode: null, //
});
}
};
//
const ShortageStateFun = () => {
ShortageList.value.forEach(item => {
if (item.packageCode == null) {
Indexform.value.number = null;
}
});
};
//
const ShortageCancellation = () => {
Indexform.value.number = null; //
ShortageList.value = []; //
ShortageState.value = false; //
};
//
const fleeingFun = () => {
fleeingList.value.forEach(item => {
if (item.packageCode == null) {
Indexform.value.number = null;
}
});
};
//
const fleeingCancellation = () => {
Indexform.value.number = null; //
fleeingList.value = []; //
fleeingState.value = false; //
};
//
const fleeingTtems = val => {
fleeingList.value = []; //
const pattern = /\s+/g;
const result = val.replace(pattern, '');
console.log(result); // "33"
Indexform.value.number = result;
if (Indexform.value.number > 1) {
fleeingState.value = true; //1
}
for (let i = 0; i < val; i++) {
fleeingList.value.push({
number: i + 1, //
packageCode: null, //
});
}
};
//
const moneyBtnA = () => {
if (!Indexform.value.number) {
ElMessage({
message: '请输入少货数量',
type: 'warning',
});
return;
}
ShortageState.value = true; //
};
//
const moneyBtnB = () => {
if (!Indexform.value.number) {
ElMessage({
message: '请输入窜货数量',
type: 'warning',
});
return;
}
fleeingState.value = true; //
};
</script>
<style scoped lang="scss">
@ -454,8 +653,8 @@ Indexform.value.number=result
margin: 0;
margin-bottom: 18px;
flex: 1 0 30%;
:deep(.el-form-item__label){
width: 100px !important;
:deep(.el-form-item__label) {
width: 100px !important;
}
}
:deep(.el-form-item__content) {
@ -497,15 +696,14 @@ Indexform.value.number=result
margin-left: 20px;
font-size: 14px;
width: 100px !important;
}
.el-form-item {
margin: 0;
margin-bottom: 34px;
}
:deep(.el-input__wrapper){
height: 35px !important;
}
:deep(.el-input__wrapper) {
height: 35px !important;
}
:deep(.el-form-item__content) {
height: 100%;
width: 90% !important;
@ -516,27 +714,57 @@ Indexform.value.number=result
align-items: center;
}
}
}
.Transport_damage_photos{
}
.Transport_damage_photos {
padding: 0 15px;
.title{
.title {
display: block;
margin-bottom: 10px;
font-size: 14px;
}
}
.dialog-footer{
width: 100%;
display: flex;
justify-content: flex-end;
padding: 0 10px;
box-sizing: border-box;
padding-right: 36px;
.dialog-footer {
width: 100%;
display: flex;
justify-content: flex-end;
padding: 0 10px;
box-sizing: border-box;
padding-right: 36px;
}
.investigate{
:deep(.el-form-item__content){
.investigate {
:deep(.el-form-item__content) {
width: 90% !important;
box-sizing: border-box;
}
}
.ShortageStatenum {
display: flex;
align-items: center;
margin-bottom: 10px;
.title {
width: 80px;
}
.remove {
width: 47px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #ff0000;
}
}
.moneyNum {
display: flex;
flex: 1;
.el_btn {
width: 50px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #ccc;
margin-left: 3px;
border-radius: 4px;
cursor: pointer;
}
}
</style>

853
src/views/aftersales/VueTempend.vue

@ -0,0 +1,853 @@
<template>
<el-card class="box-card">
<template #header>
<div class="card-header">
<span>异常工单完结</span>
<el-button class="button">提交</el-button>
</div>
</template>
<el-form :model="endFrom" label-width="120px">
<el-form-item label="运单商场">
<el-input v-model="endFrom.name" placeholder="请输入运单商场" />
</el-form-item>
<el-form-item label="运单号">
<el-input v-model="endFrom.name" placeholder="请输入运单号" />
</el-form-item>
<el-form-item label="订单自编号">
<el-input v-model="endFrom.name" placeholder="请输入订单自自编号" />
</el-form-item>
<el-form-item label="包条码">
<el-input v-model="endFrom.name" placeholder="请输入包条码" />
</el-form-item>
<el-form-item label="品类">
<el-input v-model="endFrom.name" placeholder="请输入品类" />
</el-form-item>
<el-form-item label="异常状态">
<el-input v-model="endFrom.name" placeholder="异常状态" />
</el-form-item>
<div class="el_Transport">
<el-form-item label="运损发现节点">
<el-radio-group v-model="endFrom.transportloss" @change="TransportChange">
<el-radio v-for="item in TransportlossList" :label="item.label">{{
item.txt
}}</el-radio>
</el-radio-group>
</el-form-item>
</div>
<el-form-item label="车次号">
<el-input v-model="endFrom.name" placeholder="请输入车次号" />
</el-form-item>
<el-form-item label="运损发现时间">
<el-date-picker
v-model="endFrom.warehousingTime"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择运损发现时间"
:disabled="FromDisabled"
/>
</el-form-item>
<el-form-item label="送货时间">
<el-date-picker
v-model="endFrom.warehousingTime"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择送货时间"
:disabled="FromDisabled"
/>
</el-form-item>
<div class="DingTalk">
<el-form-item label="钉钉流程号">
<el-input v-model="endFrom.name" placeholder="请输入钉钉流程号" />
</el-form-item>
</div>
<div class="selector">
<div class="el-form-item">
<span class="el-form-item__label">处理方</span>
<el-select
v-model="endFrom.processor"
multiple
filterable
default-first-option
:reserve-keyword="false"
placeholder="请选择处理方"
>
<el-option
v-for="item in warehouseData"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</div>
<div class="selector">
<div class="el-form-item selector">
<span class="el-form-item__label">责任方</span>
<el-select
v-model="endFrom.duty"
multiple
filterable
default-first-option
:reserve-keyword="false"
placeholder="请选择责任方"
>
<el-option
v-for="item in warehouseData"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</div>
<div class="selector">
<div class="el-form-item selector">
<span class="el-form-item__label">请选择</span>
<el-select
v-model="endFrom.result"
multiple
filterable
default-first-option
:reserve-keyword="false"
placeholder="请选择处理方"
@change="changeProcessingResults"
>
<el-option
v-for="item in ProcessingResults"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</div>
<div class="ProcessingResults" v-if="ProcessingList.length">
<div class="title">处理结果-理赔金额</div>
<div class="Listadmiration">
<div class="name" v-for="(item, index) in ProcessingList" :key="index">
<span>{{ item.name }}:</span>
<el-input-number
v-model="item.input"
:min="item.min"
:max="item.max"
@change="handleChange"
/>
</div>
</div>
<div class="lptime">
<span class="name">理赔支付时间</span>
<el-date-picker
v-model="endFrom.Claimtime"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择运理赔支付时间"
:disabled="FromDisabled"
/>
</div>
</div>
<!-- 备注信息 -->
<div class="notes">
<el-form-item label="备注">
<el-input
v-model="endFrom.name"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请输入备注"
/>
</el-form-item>
</div>
<!-- 图片 -->
<div class="Transport_damage_photos">
<span class="title">图片</span>
<el-upload
v-model:file-list="endFrom.packageImage"
list-type="picture-card"
:on-preview="pictureList"
:on-remove="ImgListRemove"
:action="doubledCount"
:on-success="ImgSuccess"
:before-upload="beforeAvatarUpload"
:headers="headers"
multiple
drag
>
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisible">
<img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>
</div>
<!-- 视频 -->
<div class="Transport_damage_photos void">
<span class="title">视频</span>
<el-upload
class="upload-demo"
drag
:action="doubledCount"
:headers="headers"
:on-success="ViodSuccess"
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
点击上传
<span v-if="endFrom['videoUrl'].url" class="PreviewVoid" @click.stop="Clickviod"
>点击预览</span
>
</div>
</el-upload>
</div>
<!-- 视频预览弹窗 -->
<el-dialog v-model="VideoPreviewStatus" title="视频预览" width="40%">
<video height="360" controls class="video-player">
<source
src="http://192.168.10.100:9000/627683-logpm/upload/20231204/1af505c923d87d827c2dc408832af5c9.mp4"
type="video/mp4"
/>
</video>
</el-dialog>
<!-- 处理记录 -->
<div class="ProcessingRecords">
<el-tabs type="border-card" class="demo-tabs">
<el-tab-pane>
<template #label>
<span class="custom-tabs-label">
<el-icon><calendar /></el-icon>
<span>处理记录</span>
</span>
</template>
<el-row>
<!-- 列表模块 -->
<tablecmt
:columnList="recordList"
:tableData="recorddata"
:loading="loadingObj.list"
@inputTxt="recordinputsc"
@timeCheck="recordtimesc"
@btnCheck="recordbtnsc"
@selectCheck="recordselectsc"
@selection="recordselectionChange"
>
</tablecmt>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
<!-- 完善信息 -->
<div class="Improveinformation">
<el-tabs type="border-card" class="demo-tabs">
<el-tab-pane>
<template #label>
<span class="custom-tabs-label">
<el-icon><calendar /></el-icon>
<span>完结信息</span>
</span>
</template>
<div class="el-ckbtn">
<el-button type="primary" @click="AddCompensation">添加赔款方</el-button>
<el-button type="primary" @click="AddPayee">添加收款方</el-button>
</div>
<div class="payanindemnity" v-for="(item, index) in CompensationParty" :key="index">
<span class="title">{{ item.state == 0 ? '赔款方' : '收款方' }}{{ item.cld }}</span>
<div class="sk_input"><el-input v-model="item.name" placeholder="赔款方" /></div>
<div class="sk_input"><el-input v-model="item.reason" placeholder="原因" /></div>
<div class="sk_input"><el-input v-model="item.nunm" placeholder="金额" /></div>
<el-button type="danger" round @click="payremove(item.state, index)">移除</el-button>
</div>
</el-tab-pane>
</el-tabs>
</div>
<!-- 仲裁原因 -->
<div class="arbitrate">
<el-tabs type="border-card" class="demo-tabs">
<el-tab-pane>
<template #label>
<span class="custom-tabs-label">
<el-icon><calendar /></el-icon>
<span>仲裁原因</span>
</span>
</template>
<el-input
v-model="endFrom.arbitrate"
type="textarea"
:autosize="{ minRows: 5, maxRows: 4 }"
placeholder="请输入仲裁原因"
/>
</el-tab-pane>
</el-tabs>
</div>
</el-form>
</el-card>
</template>
<script setup>
import { ElMessage } from 'element-plus';
import { ElMessageBox } from 'element-plus';
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue';
import { columnList, recordList } from '@/option/aftersales/vueTvemp.js';
import { getToken } from '@/utils/auth';
const endFrom = ref({
packageImage: [
//
{
name: 'food.jpeg',
url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
},
{
name: 'plant-1.png',
url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100',
},
],
videoUrl: {}, //
});
const videoUrl = ref(null); //
const VideoPreviewStatus = ref(true); //
const warehouseData = ref([]); //
import { getDetailWarehouse, getDeptWarehouse } from '@/api/basicdata/basicdataWarehouse'; //
const CompensationParty = ref([{ name: '', state: 0, num: 0, reason: '', cld: 1 }]); ///
const ProcessingList = ref([]); //
const TransportlossList = ref([
//
{
label: 1,
txt: '无',
},
{
label: 2,
txt: '在库操作环节',
},
{
label: 3,
txt: '入库环节',
},
{
label: 4,
txt: '配送环节',
},
{
label: 5,
txt: '中转卸车环节',
},
{
label: 6,
txt: '安装环节',
},
]); //
const ProcessingResults = ref([
{
value: '0',
label: '维修',
},
{
value: '1',
label: '补漆',
},
{
value: '2',
label: '下补单',
},
{
value: '3',
label: '赔付运费',
},
{
value: '4',
label: '用库存',
},
{
value: '5',
label: '赔商家',
},
{
value: '6',
label: '赔客户',
},
]);
//
const details = reactive({
/** 是否开启搜索 */
search: false,
/** 表格搜索条件 */
query: {},
/** 时间快捷选择设置 */
shortcuts: [
{
text: '最近一周',
value: () => {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
return [start, end];
},
},
{
text: '最近一个月',
value: () => {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
return [start, end];
},
},
{
text: '最近三个月',
value: () => {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
return [start, end];
},
},
],
/** 时间选择器数据 */
stockupDate: [],
/** 列表 */
columnList,
/** 列表数据 */
data: [{}],
//
recordList,
//
recorddata: [
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
{ entryTime: '测试' },
],
/** 页面loading */
loadingObj: {
/** 列表加载loading */
list: false,
packageListLoading: false,
},
/** 列表复选框选中的数据 */
selectionList: [],
/** 是否显示设置表格 */
drawerShow: false,
/** 分页参数 */
page: {
currentPage: 1,
pageSize: 5,
total: 0,
},
/** 弹出层显示 */
popUpShow: {
/** 包件明细 */
packageOrderListlVisited: false,
/** 二维码 */
QRCodeVisible: false,
/** 修改客户信息 */
editClientInfoVisible: false,
},
/** 列表Dom节点 */
listNode: '',
form: {},
/** 全屏 */
fullscreenObj: {
/** 包明细 */
packageOrderListlVisited: false,
},
});
const {
search,
query,
shortcuts,
stockupDate,
data,
loadingObj,
selectionList,
drawerShow,
page,
trickleLoadingPage,
zeroAdditionalRecordingInfo,
popUpShow,
recorddata,
} = toRefs(details);
const TransportChange = val => {
console.log(val, '运损触发事件');
};
//
const onLoad = () => {
getDeptWarehouse({}).then(res => {
console.log(res, '处理方');
res.data.data.forEach(item => {
warehouseData.value.push({
value: item.id,
label: item.name,
});
});
});
};
onLoad();
const changeProcessingResults = val => {
//
ProcessingList.value = ProcessingList.value.filter(item => val.includes(item.state - 1));
//
val.forEach(num => {
let newItem = { input: 0, min: 0, max: 1000, state: num + 1 };
// numnewItemname
switch (num) {
case '0':
newItem.name = '维修';
break;
case '1':
newItem.name = '补漆';
break;
case '2':
newItem.name = '下补单';
break;
case '3':
newItem.name = '赔付运费';
break;
case '4':
newItem.name = '用库存';
break;
case '5':
newItem.name = '赔商家';
break;
case '6':
newItem.name = '赔客户';
break;
default:
console.log('未知的编号:', num);
return; // num
}
//
if (!ProcessingList.value.some(item => item.state === newItem.state)) {
ProcessingList.value.push(newItem);
console.log(`添加:${newItem.name}`);
}
});
};
// TOKEN
const headers = computed(() => {
return { 'Blade-Auth': 'Bearer ' + getToken() };
});
//
const doubledCount = computed(() => {
return '/api/blade-resource/oss/endpoint/put-file';
});
//
const ImgSuccess = (response, uploadFile) => {
if (response.success == true) {
console.log(response);
endFrom.value['packageImage'].push({
name: response.data.originalName,
url: response.data.link,
});
console.log(endFrom.value['packageImage'], '图片列表');
}
};
//
const ViodSuccess = response => {
if (response.success == true) {
console.log(response);
endFrom.value['videoUrl'].name = response.data.originalName;
endFrom.value['videoUrl'].url = response.data.link;
console.log(endFrom.value['videoUrl']);
}
};
//
const beforeAvatarUpload = rawFile => {
if (!/^image\/(png|jpeg|gif)$|^video\/mp4$/.test(rawFile.type)) {
ElMessage.error('上传格式只支持 png、jpeg、gif 和 mp4 类型!');
return false;
} else if (rawFile.size / 1024 / 1024 > 40) {
ElMessage.error('上传大小不能超过 40MB!');
return false;
}
return true;
};
//
const pictureList = val => {
console.log(val, '图片列表');
};
//
const ImgListRemove = val => {
console.log(val, '移除图片');
};
//
const Clickviod = () => {
console.log('点击了预览');
VideoPreviewStatus.value = true; //
};
//
const AddCompensation = () => {
console.log('添加赔款方');
let som = 1;
CompensationParty.value.forEach(item => {
if (item.state == 0) {
som++;
}
});
CompensationParty.value.push({ name: '', state: 0, num: 0, reason: '', cld: som });
};
//
const AddPayee = () => {
let som = 1;
CompensationParty.value.forEach(item => {
if (item.state == 1) {
som++;
}
});
CompensationParty.value.push({ name: '', state: 1, num: 0, reason: '', cld: som });
};
//
const payremove = (state, val) => {
//
let som = 0;
if (state == 0) {
CompensationParty.value.forEach(item => {
if (item.state == 0) {
som++;
}
});
if (som == 1) {
ElMessage({
message: '赔款必填最少一条',
type: 'warning',
});
return;
}
}
CompensationParty.value.splice(val, 1);
};
</script>
<style scoped lang="scss">
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
}
.text {
font-size: 14px;
}
.item {
margin-bottom: 18px;
}
.box-card {
width: 100%;
height: 100%;
}
.el-form {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
:deep(.el-form-item) {
height: 2.39583vw;
display: flex;
align-items: center;
margin: 0;
margin-bottom: 0.9375vw;
flex: 1 0 30%;
}
:deep(.el-form-item__label) {
width: 100px !important;
margin-left: 26px;
}
:deep(.el-input--prefix) {
width: 100%;
height: 28.68px !important;
}
}
.el_Transport {
width: 100%;
}
.DingTalk {
width: 100%;
}
.selector {
width: 100%;
:deep(.el-select) {
width: 100%;
}
}
.ProcessingResults {
width: 100%;
height: 260px;
border: 1px solid #ccc;
position: relative;
padding: 26px;
box-sizing: border-box;
margin-top: 20px;
color: #606266;
display: flex;
flex-direction: column;
justify-content: space-between;
.title {
position: absolute;
top: -20px;
left: 20px;
font-size: 26px;
background-color: #fff;
}
.Listadmiration {
display: flex;
flex-wrap: wrap;
.name {
display: flex;
margin: 10px 5%;
span {
display: block;
width: 90px;
color: #606266;
font-size: 16px;
}
}
}
.lptime {
display: flex;
.name {
width: 126px;
color: #606266;
}
.el-input {
width: auto;
}
:deep(.el-input--prefix) {
width: 200px;
}
}
}
.notes {
width: 100%;
}
.Transport_damage_photos {
width: 100%;
display: flex;
margin-left: 26px;
.title {
width: 100px;
color: #606266;
font-size: 14px;
margin-bottom: 9px;
display: block;
}
:deep(.el-upload-dragger) {
display: flex;
align-items: center;
justify-content: center;
}
}
.upload-demo {
width: 100%;
}
.box-card {
overflow-y: scroll;
}
.void {
:deep(.el-upload-list) {
display: none;
}
}
.PreviewVoid {
font-weight: bold;
color: #172e60;
}
.video-player {
width: 100%;
}
.ProcessingRecords {
margin-left: 26px;
width: 100%;
margin-top: 20px;
.title {
font-size: 16px;
color: #606266;
width: 100px;
}
:deep(.custom-tabs-label) {
display: flex;
align-items: center;
}
}
.el-row {
height: 300px;
}
:deep(.maboxhi) {
height: 300px !important;
}
.Improveinformation {
margin-top: 20px;
margin-left: 26px;
width: 100%;
:deep(.custom-tabs-label) {
display: flex;
align-items: center;
}
}
.payanindemnity {
display: flex;
align-items: center;
margin-top: 20px;
.title {
width: 76px;
height: 100%;
display: flex;
display: block;
align-items: center;
}
.sk_input {
margin: 0 5px;
width: 300px;
}
.el-button {
background-color: #ff0000;
border: none;
}
}
.arbitrate {
width: 100%;
margin-top: 20px;
margin-left: 26px;
}
</style>

318
src/views/aftersales/aftersalesAppeal.vue

@ -0,0 +1,318 @@
<template>
<basic-container>
<div class="avue-crud">
<el-row :hidden="!search" style="padding:6px 18px">
<!-- 查询模块 -->
<el-form :inline="true" :model="query">
<!-- 查询按钮 -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> </el-button>
<el-button icon="el-icon-delete" @click="searchReset()"> </el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="avue-crud__header">
<!-- 头部左侧按钮模块 -->
<div class="avue-crud__left">
<el-button v-if="this.permissionList.addBtn" type="primary" icon="el-icon-plus" @click="handleAdd"> </el-button>
<el-button v-if="this.permissionList.delBtn" type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>
</div>
<!-- 头部右侧按钮模块 -->
<div class="avue-crud__right">
<el-button icon="el-icon-refresh" @click="searchChange" circle></el-button>
<el-button icon="el-icon-search" @click="searchHide" circle></el-button>
</div>
</div>
</el-row>
<el-row>
<!-- 列表模块 -->
<el-table ref="table" v-loading="loading"
@selection-change="selectionChange"
:data="data"
:height="height"
style="width: 100%"
:border="option.border">
<el-table-column type="selection" v-if="option.selection" width="55" align="center"></el-table-column>
<el-table-column type="expand" v-if="option.expand" align="center"></el-table-column>
<el-table-column v-if="option.index" label="#" type="index" width="50" align="center">
</el-table-column>
<template v-for="(item,index) in option.column">
<!-- table字段 -->
<el-table-column v-if="item.hide!==true"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="index">
</el-table-column>
</template>
<!-- 操作栏模块 -->
<el-table-column prop="menu" label="操作" :width="220" align="center">
<template #="{row}">
<el-button v-if="this.permissionList.viewBtn" type="primary" text icon="el-icon-view" @click="handleView(row)">查看</el-button>
<el-button v-if="this.permissionList.editBtn" type="primary" text icon="el-icon-edit" @click="handleEdit(row)">编辑</el-button>
<el-button v-if="this.permissionList.delBtn" type="primary" text icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<div class="avue-crud__pagination" style="width:100%">
<!-- 分页模块 -->
<el-pagination align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
</el-pagination>
</div>
</el-row>
<!-- 表单模块 -->
<el-dialog :title="title"
v-model="box"
width="50%"
:before-close="beforeClose"
append-to-body>
<el-form :disabled="view" ref="form" :model="form" label-width="80px">
<!-- 表单字段 -->
<el-form-item label="异常工单ID" prop="workOrderId">
<el-input v-model="form.workOrderId" placeholder="请输入异常工单ID"/>
</el-form-item>
<el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID"/>
</el-form-item>
<el-form-item label="申述理由" prop="reason">
<el-input v-model="form.reason" placeholder="请输入申述理由"/>
</el-form-item>
<el-form-item label="申述人" prop="claimant">
<el-input v-model="form.claimant" placeholder="请输入申述人"/>
</el-form-item>
<el-form-item label="申述人ID" prop="claimantUserId">
<el-input v-model="form.claimantUserId" placeholder="请输入申述人ID"/>
</el-form-item>
<el-form-item label="类型;0 待处理 1 成立 2 不成立" prop="typesOf">
<el-input v-model="form.typesOf" placeholder="请输入类型;0 待处理 1 成立 2 不成立"/>
</el-form-item>
<el-form-item label="审核原因" prop="handlingReason">
<el-input v-model="form.handlingReason" placeholder="请输入审核原因"/>
</el-form-item>
<el-form-item label="处理人" prop="processedByName">
<el-input v-model="form.processedByName" placeholder="请输入处理人"/>
</el-form-item>
<el-form-item label="处理时间" prop="processedDate">
<el-input v-model="form.processedDate" placeholder="请输入处理时间"/>
</el-form-item>
<el-form-item label="处理人ID" prop="processedById">
<el-input v-model="form.processedById" placeholder="请输入处理人ID"/>
</el-form-item>
</el-form>
<!-- 表单按钮 -->
<template #footer>
<span v-if="!view" class="dialog-footer">
<el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit"> </el-button>
<el-button icon="el-icon-circle-close" @click="box = false"> </el-button>
</span>
</template>
</el-dialog>
</div>
</basic-container>
</template>
<script>
import { getList, getDetail, add, update, remove } from "@/api/aftersales/aftersalesAppeal";
import option from "@/option/aftersales/aftersalesAppeal";
import { mapGetters } from "vuex";
export default {
data () {
return {
height: 0,
//
title: '',
//
box: false,
//
search: true,
//
loading: true,
//
view: false,
//
query: {},
//
page: {
currentPage: 1,
pageSize: 10,
total: 40
},
//
form: {},
//
selectionList: [],
//
option: option,
//
data: [],
}
},
mounted() {
this.init();
this.onLoad(this.page);
},
computed: {
...mapGetters(["permission"]),
permissionList() {
return {
addBtn: this.validData(this.permission.param_add, false),
viewBtn: this.validData(this.permission.param_view, false),
delBtn: this.validData(this.permission.param_delete, false),
editBtn: this.validData(this.permission.param_edit, false),
};
},
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
}
},
methods: {
init() {
this.height = this.setPx(document.body.clientHeight - 340);
},
searchHide() {
this.search = !this.search;
},
searchChange() {
this.onLoad(this.page);
},
searchReset() {
this.query = {};
this.page.currentPage = 1;
this.onLoad(this.page);
},
handleSubmit() {
if (!this.form.id) {
add(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
} else {
update(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
})
}
},
handleAdd(){
this.title = '新增'
this.form = {}
this.box = true
},
handleEdit(row) {
this.title = '编辑'
this.box = true
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleView(row) {
this.title = '查看'
this.view = true;
this.box = true;
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.selectionClear();
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
beforeClose (done) {
done()
this.form = {};
this.view = false;
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.table.clearSelection();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
this.onLoad(this.page);
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
this.onLoad(this.page);
},
onLoad(page, params = {}) {
this.loading = true;
const {
} = this.query;
let values = {
};
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
this.selectionClear();
});
}
}
};
</script>

300
src/views/aftersales/aftersalesAppealPeople.vue

@ -0,0 +1,300 @@
<template>
<basic-container>
<div class="avue-crud">
<el-row :hidden="!search" style="padding:6px 18px">
<!-- 查询模块 -->
<el-form :inline="true" :model="query">
<!-- 查询按钮 -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="searchChange"> </el-button>
<el-button icon="el-icon-delete" @click="searchReset()"> </el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="avue-crud__header">
<!-- 头部左侧按钮模块 -->
<div class="avue-crud__left">
<el-button v-if="this.permissionList.addBtn" type="primary" icon="el-icon-plus" @click="handleAdd"> </el-button>
<el-button v-if="this.permissionList.delBtn" type="danger" icon="el-icon-delete" @click="handleDelete" plain> </el-button>
</div>
<!-- 头部右侧按钮模块 -->
<div class="avue-crud__right">
<el-button icon="el-icon-refresh" @click="searchChange" circle></el-button>
<el-button icon="el-icon-search" @click="searchHide" circle></el-button>
</div>
</div>
</el-row>
<el-row>
<!-- 列表模块 -->
<el-table ref="table" v-loading="loading"
@selection-change="selectionChange"
:data="data"
:height="height"
style="width: 100%"
:border="option.border">
<el-table-column type="selection" v-if="option.selection" width="55" align="center"></el-table-column>
<el-table-column type="expand" v-if="option.expand" align="center"></el-table-column>
<el-table-column v-if="option.index" label="#" type="index" width="50" align="center">
</el-table-column>
<template v-for="(item,index) in option.column">
<!-- table字段 -->
<el-table-column v-if="item.hide!==true"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="index">
</el-table-column>
</template>
<!-- 操作栏模块 -->
<el-table-column prop="menu" label="操作" :width="220" align="center">
<template #="{row}">
<el-button v-if="this.permissionList.viewBtn" type="primary" text icon="el-icon-view" @click="handleView(row)">查看</el-button>
<el-button v-if="this.permissionList.editBtn" type="primary" text icon="el-icon-edit" @click="handleEdit(row)">编辑</el-button>
<el-button v-if="this.permissionList.delBtn" type="primary" text icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<div class="avue-crud__pagination" style="width:100%">
<!-- 分页模块 -->
<el-pagination align="right"
background
@size-change="sizeChange"
@current-change="currentChange"
:current-page="page.currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
</el-pagination>
</div>
</el-row>
<!-- 表单模块 -->
<el-dialog :title="title"
v-model="box"
width="50%"
:before-close="beforeClose"
append-to-body>
<el-form :disabled="view" ref="form" :model="form" label-width="80px">
<!-- 表单字段 -->
<el-form-item label="异常工单ID" prop="workOrderId">
<el-input v-model="form.workOrderId" placeholder="请输入异常工单ID"/>
</el-form-item>
<el-form-item label="实际责任人名称" prop="actualPersonName">
<el-input v-model="form.actualPersonName" placeholder="请输入实际责任人名称"/>
</el-form-item>
<el-form-item label="实际责任人ID" prop="actualPersonId">
<el-input v-model="form.actualPersonId" placeholder="请输入实际责任人ID"/>
</el-form-item>
<el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID"/>
</el-form-item>
</el-form>
<!-- 表单按钮 -->
<template #footer>
<span v-if="!view" class="dialog-footer">
<el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit"> </el-button>
<el-button icon="el-icon-circle-close" @click="box = false"> </el-button>
</span>
</template>
</el-dialog>
</div>
</basic-container>
</template>
<script>
import { getList, getDetail, add, update, remove } from "@/api/aftersales/aftersalesAppealPeople";
import option from "@/option/aftersales/aftersalesAppealPeople";
import { mapGetters } from "vuex";
export default {
data () {
return {
height: 0,
//
title: '',
//
box: false,
//
search: true,
//
loading: true,
//
view: false,
//
query: {},
//
page: {
currentPage: 1,
pageSize: 10,
total: 40
},
//
form: {},
//
selectionList: [],
//
option: option,
//
data: [],
}
},
mounted() {
this.init();
this.onLoad(this.page);
},
computed: {
...mapGetters(["permission"]),
permissionList() {
return {
addBtn: this.validData(this.permission.param_add, false),
viewBtn: this.validData(this.permission.param_view, false),
delBtn: this.validData(this.permission.param_delete, false),
editBtn: this.validData(this.permission.param_edit, false),
};
},
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(",");
}
},
methods: {
init() {
this.height = this.setPx(document.body.clientHeight - 340);
},
searchHide() {
this.search = !this.search;
},
searchChange() {
this.onLoad(this.page);
},
searchReset() {
this.query = {};
this.page.currentPage = 1;
this.onLoad(this.page);
},
handleSubmit() {
if (!this.form.id) {
add(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
} else {
update(this.form).then(() => {
this.box = false;
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
})
}
},
handleAdd(){
this.title = '新增'
this.form = {}
this.box = true
},
handleEdit(row) {
this.title = '编辑'
this.box = true
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleView(row) {
this.title = '查看'
this.view = true;
this.box = true;
getDetail(row.id).then(res => {
this.form = res.data.data;
});
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.selectionClear();
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
return remove(row.id);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!"
});
});
},
beforeClose (done) {
done()
this.form = {};
this.view = false;
},
selectionChange(list) {
this.selectionList = list;
},
selectionClear() {
this.selectionList = [];
this.$refs.table.clearSelection();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
this.onLoad(this.page);
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
this.onLoad(this.page);
},
onLoad(page, params = {}) {
this.loading = true;
const {
} = this.query;
let values = {
};
getList(page.currentPage, page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
this.selectionClear();
});
}
}
};
</script>

6
src/views/aftersales/aftersalesWorkOrder.vue

@ -504,7 +504,7 @@ export default {
},
//
handleProcessor() {
console.log(this.query);
const {
workOrderType,
discoveryNode,
@ -518,7 +518,7 @@ export default {
workOrderNumber_: workOrderNumber,
orderCode_: orderCode,
};
console.log("查询条件>>>>",values);
getProcessor(this.page.currentPage, this.page.pageSize, values).then(res => {
const data = res.data.data;
this.page.total = data.total;
@ -529,7 +529,7 @@ export default {
});
},
handle(row) {
handleEdit(row) {
this.title = '编辑'
this.box = true
getDetail(row.id).then(res => {

14
src/views/distribution/deliverylist/distributionDeliveryListdis.vue

@ -34,6 +34,7 @@
<el-select
v-model="query.driverName"
filterable
clearable
placeholder="请输入司机名称"
:loading="loading"
>
@ -50,6 +51,7 @@
<el-select
v-model="query.vehicleName"
filterable
clearable
placeholder="请输入司机名称"
:loading="loading"
>
@ -752,10 +754,10 @@ export default {
},
getvehicleData() {
return new Promise((rv, rev) => {
getVehicleList(1, 10, '').then(res => {
getVehicleList().then(res => {
const data = res.data.data;
let po = [];
data.records.forEach(item => {
data.forEach(item => {
let a = {
dictKey: item.id,
dictValue: item.vehicleNub,
@ -764,16 +766,16 @@ export default {
});
this.vehicleData = po;
console.log('^^^^^^^^^^^^^^^^', res.data.data);
rv(res.data.data.records);
rv(res.data.data);
});
});
},
getDriverData() {
return new Promise((rv, rev) => {
getDriverList(1, 10, '').then(res => {
getDriverList().then(res => {
const data = res.data.data;
let po = [];
data.records.forEach(item => {
data.forEach(item => {
let a = {
dictKey: item.id,
dictValue: item.name,
@ -782,7 +784,7 @@ export default {
});
this.driverData = po;
console.log('===============>', res.data.data);
rv(res.data.data.records);
rv(res.data.data);
});
});
},

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

@ -645,11 +645,11 @@ export default {
},
getvehicleData() {
return new Promise((rv, rev) => {
getVehicleList(1, 10, '').then(res => {
getVehicleList().then(res => {
const data = res.data.data;
if (!data.records) return
if (!data) return
let po = [];
data.records.forEach(item => {
data.forEach(item => {
let a = {
dictKey: item.id,
dictValue: item.vehicleNub,
@ -658,16 +658,16 @@ export default {
});
this.vehicleData = po;
console.log('^^^^^^^^^^^^^^^^', res.data.data);
rv(res.data.data.records);
rv(res.data.data);
});
});
},
getDriverData() {
return new Promise((rv, rev) => {
getDriverList(1, 10, '').then(res => {
getDriverList().then(res => {
const data = res.data.data;
let po = [];
data.records.forEach(item => {
data.forEach(item => {
let a = {
dictKey: item.id,
dictValue: item.name,
@ -676,7 +676,7 @@ export default {
});
this.driverData = po;
console.log('===============>', res.data.data);
rv(res.data.data.records);
rv(res.data.data);
});
});
},

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

File diff suppressed because it is too large Load Diff

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

File diff suppressed because it is too large Load Diff

155
src/views/distribution/signfor/distributionSignforedt.vue

@ -218,7 +218,17 @@
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisibleA">
<img w-full :src="dialogImageUrlA" alt="IMG" />
<!-- <img w-full :src="dialogImageUrlA" alt="IMG" /> -->
<el-image
style="width: 100px; height: 100px"
:src="dialogImageUrlA"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="srcListA"
:initial-index="1"
fit="cover"
/>
</el-dialog>
</div>
@ -241,7 +251,17 @@
</el-upload>
<el-dialog v-model="dialogVisibleB">
<div class="tc-img">
<img w-full :src="dialogImageUrlB" alt="IMG" />
<!-- <img w-full :src="dialogImageUrlB" alt="IMG" /> -->
<el-image
style="width: 100px; height: 100px"
:src="dialogImageUrlB"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="srcListB"
:initial-index="1"
fit="cover"
/>
</div>
</el-dialog>
</div>
@ -264,7 +284,17 @@
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisibleC">
<img w-full :src="dialogImageUrlC" alt="IMG" />
<!-- <img w-full :src="dialogImageUrlC" alt="IMG" /> -->
<el-image
style="width: 100px; height: 100px"
:src="dialogImageUrlC"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="srcListC"
:initial-index="1"
fit="cover"
/>
</el-dialog>
</div>
@ -286,8 +316,20 @@
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisibleD">
<img w-full :src="dialogImageUrlD" alt="IMG" />
</el-dialog>
<!-- <img w-full :src="dialogImageUrlD" alt="IMG" />
<el-dialog v-model="dialogVisibleC"> -->
<el-image
style="width: 100px; height: 100px"
:src="dialogImageUrlD"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="srcListD"
:initial-index="1"
fit="cover"
/>
</el-dialog>
</div>
<div class="imgName">
@ -308,7 +350,17 @@
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisibleE">
<img w-full :src="dialogImageUrlE" alt="IMG" />
<!-- <img w-full :src="dialogImageUrlE" alt="IMG" /> -->
<el-image
style="width: 100px; height: 100px"
:src="dialogImageUrlE"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="srcListE"
:initial-index="1"
fit="cover"
/>
</el-dialog>
</div>
</div>
@ -367,7 +419,9 @@
<template #default="props">
<img :src="props.row[item.prop]" class="el-Img" v-if="item.type === 2" />
<span v-else>{{ props.row[item.prop]!=null ? props.row[item.prop] : '/' }}</span>
<span v-else>{{
props.row[item.prop] != null ? props.row[item.prop] : '/'
}}</span>
</template>
</el-table-column>
@ -426,8 +480,7 @@
>
批量移除
</el-button>
<!-- :disabled="ZcBtnDis"-->
<!-- :disabled="ZcBtnDis"-->
</div>
<template v-for="(item, index) in TabTitle" :key="index">
<span>
@ -477,19 +530,19 @@
:key="item.label"
>
<template #default="props">
<!-- <div :class="ElBtnClass" v-if="item.type === 3">-->
<!--&lt;!&ndash; <span>aaa</span>&ndash;&gt;-->
<!-- <el-button-->
<!-- :disabled="props.row.checkbox"-->
<!-- :link="ElButtonS[0].link"-->
<!-- :class="ElButtonS[0].class"-->
<!-- :auto-insert-space="ElButtonS[0].space"-->
<!-- :size="ElButtonS[0].size"-->
<!-- :icon="ElButtonS[0].icon"-->
<!-- @click="DeleteEvent(props.row)"-->
<!-- >移除</el-button-->
<!-- >-->
<!-- </div>-->
<!-- <div :class="ElBtnClass" v-if="item.type === 3">-->
<!--&lt;!&ndash; <span>aaa</span>&ndash;&gt;-->
<!-- <el-button-->
<!-- :disabled="props.row.checkbox"-->
<!-- :link="ElButtonS[0].link"-->
<!-- :class="ElButtonS[0].class"-->
<!-- :auto-insert-space="ElButtonS[0].space"-->
<!-- :size="ElButtonS[0].size"-->
<!-- :icon="ElButtonS[0].icon"-->
<!-- @click="DeleteEvent(props.row)"-->
<!-- >移除</el-button-->
<!-- >-->
<!-- </div>-->
<span v-if="item.type == 6">{{
props.row[item.prop] == 1
? '定制品'
@ -500,7 +553,6 @@
: '/'
}}</span>
<span v-if="item.type == 4">{{
props.row[item.prop] ? props.row[item.prop] : '/'
}}</span>
@ -646,16 +698,26 @@
<el-input v-model="TcTemp.length" disabled placeholder="已选择包件总数" />
</el-form-item>
<el-form-item :label="TcServices == '上楼' ? TcServices : '距离'" >
<el-form-item :label="TcServices == '上楼' ? TcServices : '距离'">
<el-input
v-if="TcServices == '上楼'"
v-model="TcZcInput.floolNum"
placeholder="请输入楼层"
style="width: 200px"
/>
<el-input v-if="TcServices == '超区' " v-model="TcZcInput.distance" placeholder="请输入距离&emsp;单位:公里" style="width: 200px"/>
<el-input
v-if="TcServices == '超区'"
v-model="TcZcInput.distance"
placeholder="请输入距离&emsp;单位:公里"
style="width: 200px"
/>
<el-input v-if=" TcServices == '平移'" v-model="TcZcInput.distance" placeholder="请输入距离&emsp;单位:米" style="width: 200px"/>
<el-input
v-if="TcServices == '平移'"
v-model="TcZcInput.distance"
placeholder="请输入距离&emsp;单位:米"
style="width: 200px"
/>
</el-form-item>
<el-form-item label="费用:" width="200px">
@ -755,7 +817,20 @@ const EnlargeTheTmageB = enlargeImage(dialogImageUrlB, dialogVisibleB);
const EnlargeTheTmageC = enlargeImage(dialogImageUrlC, dialogVisibleC);
const EnlargeTheTmageD = enlargeImage(dialogImageUrlD, dialogVisibleD);
const EnlargeTheTmageE = enlargeImage(dialogImageUrlE, dialogVisibleE);
const srcListA=ref([])
const srcListB=ref([])
const srcListC=ref([])
const srcListD=ref([])
const srcListE=ref([])
const srcList = [
'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg',
'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg',
'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg',
'https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg',
'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg',
'https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg',
'https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg',
]
const Tabs = ref([
{
label: '订单列表',
@ -1638,7 +1713,6 @@ const btnClass = type => {
};
//
const onLoad = () => {
menuData.value = menuData1.value; //
data.value = InitializeTable.value; //
};
@ -1949,14 +2023,29 @@ getDetail(RouterId.value).then(res => {
photo_5: SignForPhotos.value,
};
const photoTypesList = {
photo_1: srcListA.value,
photo_2: srcListB.value,
photo_3: srcListC.value,
photo_4: srcListD.value,
photo_5: srcListE.value,
};
if (res.data.data.printVOList) {
res.data.data.printVOList.forEach(item => {
const { type, name, urlRoute } = item;
if (type in photoTypes) {
photoTypes[type].push({ name, url: urlRoute });
}
//
if (type in photoTypesList) {
photoTypesList[type].push(urlRoute);
}
});
}
console.log(srcListC.value,'srcListC');
});
const handleRemove = () => {
console.log('图片移除事件');
@ -2240,6 +2329,7 @@ const ImgSuccessE = (response, uploadFile) => {
}
}
:deep(.el-dialog__body) {
img {
width: 100%;
}
@ -2280,7 +2370,10 @@ const ImgSuccessE = (response, uploadFile) => {
margin-bottom: 10px;
}
:deep(.el-dialog__body) {
padding-top: 0px;
width: 100%;
height: 100%;
box-sizing: border-box;
}
.demo-pagination-block {
display: flex;
@ -2295,4 +2388,8 @@ const ImgSuccessE = (response, uploadFile) => {
width: 120px;
}
}
:deep(.el-image){
width: 100% !important;
height: 100% !important;
}
</style>

1154
src/views/mail/signfor/list.vue

File diff suppressed because it is too large Load Diff

1723
src/views/waybill/CreateZeroOrder.vue

File diff suppressed because it is too large Load Diff

2
src/views/waybill/FreezeOrder.vue

@ -367,6 +367,8 @@ const currentChange = () => {};
* 固定搭配只需要更换 columnList
* */
const setnewcolum = (newarr, headarr, type) => {
console.log(type,'type');
if (type == 1) {
details.columnList = newarr;
functions.setStorage(window.location.pathname + 'checkList', headarr);

46
src/views/waybill/WaybillOrderList.vue

@ -111,9 +111,9 @@
>
<template #default="slotProps">
<template v-if="slotProps.scope.column.label === '运单号'">
<el-button type="text" @click="handleShowPackageOrderList(slotProps.scope)">
查看
</el-button>
<el-text @click="handleGoWaybillDetails(slotProps.scope)">
{{ slotProps.scope.row.waybillNo }}
</el-text>
</template>
<template v-else-if="slotProps.scope.column.label === '操作'">
@ -205,7 +205,7 @@ import dayjs from 'dayjs';
import { mapGetters } from 'vuex';
/** 获取字典 */
import { getDictionaryBiz } from '@/api/system/dict';
import { getopenOrderAdvancePageList } from '@/api/waybill/ChangeOrder';
import { postWarehouseWaybillPageWaybillList } from '@/api/waybill/WaybillOrderList.js';
import { showOrderPackgeCode } from '@/api/distribution/distributionStockArticle';
import { downloadXls, setNodeHeight, getHtmls } from '@/utils/util';
import { columnList, viewColumnList } from '@/option/waybill/WaybillOrderList';
@ -271,7 +271,7 @@ const details = reactive<any>({
drawerShow: false,
/** 分页参数 */
page: {
currentPage: 1,
pageNum: 1,
pageSize: 30,
total: 0,
},
@ -319,11 +319,27 @@ onMounted(() => {
/** 请求页面数据 */
const onLoad = async (page: any, params = {}) => {
//
// details.data = await getopenOrderAdvancePageList(page, { ...details.query, ...params });
try {
details.loadingObj.list = true;
let _page = details.page;
if (page) _page = page;
//
const res = await postWarehouseWaybillPageWaybillList(details.page, {
...details.query,
...params,
});
console.log('res :>> ', res);
const { code, data } = res.data;
if (code !== 200) return;
details.data = data.records;
details.page.total = data.total;
} catch (error) {
} finally {
details.loadingObj.list = false;
}
};
onLoad(details.page);
onLoad();
/** 搜索 */
const searchChange = () => {
@ -409,7 +425,10 @@ const sizeChange = (pageSize: number) => {
};
/** 页码改变执行的回调 */
const currentChange = () => {};
const currentChange = current => {
details.page.pageNum = current;
onLoad();
};
/**
* 设置列表 -- 固定函数
@ -518,6 +537,15 @@ const handleBatchRecover = () => {
});
}
};
/** 查看运单 */
const handleGoWaybillDetails = ({ row }) => {
console.log('row :>> ', row);
$router.push({
path: '/distribution/inventory/BookingNote',
query: { name: `查看 -- 【${row.waybillNo}`, waybillNo: row.waybillNo },
});
};
</script>
<style scoped lang="scss">

2
vite.config.js

@ -14,7 +14,7 @@ export default ({ mode, command }) => {
'/api': {
// target: 'http://192.168.10.126:8889',
// hy
// target: 'http://192.168.10.48:13000',
// target: 'http://192.168.10.48:8888',
// lmy
// target: 'http://192.168.10.123:8889',
// target: 'http://192.168.10.101:8888',

Loading…
Cancel
Save