From 111392f8ae1f27c4cde93bd7974a5f16c8188188 Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期四, 09 一月 2025 09:09:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
pages/order/after-sale/index.vue | 369 +++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 317 insertions(+), 52 deletions(-)
diff --git a/pages/order/after-sale/index.vue b/pages/order/after-sale/index.vue
index d9d5e89..b1b99cf 100644
--- a/pages/order/after-sale/index.vue
+++ b/pages/order/after-sale/index.vue
@@ -1,9 +1,29 @@
<template>
- <el-bus-crud ref="crud" v-bind="tableConfig"></el-bus-crud>
+ <el-bus-crud ref="crud" v-bind="tableConfig">
+ <template #table="{ list }">
+ <template v-if="list && list.length > 0">
+ <after-sale-table :list="list" @detail="onDetail" @handle="onHandle" />
+ </template>
+ <el-bus-empty v-else />
+ </template>
+ </el-bus-crud>
</template>
<script>
+import AfterSaleTable from '@/components/order/after-sale-table'
+const feeKeys = [
+ 'feeSupplier',
+ 'feePlatform',
+ 'feePartner',
+ 'feePlatformPack',
+ 'feePlatformCheck',
+ 'feePlatformTransport',
+ 'feePackingTransport',
+]
export default {
+ components: {
+ AfterSaleTable,
+ },
data() {
return {
tableConfig: {
@@ -11,48 +31,27 @@
hasNew: false,
hasEdit: false,
hasDelete: false,
- onResetView: (row) => {
- this.$router.push(`${this.$route.path}/view/${row.id}`)
- },
- operationAttrs: {
- width: 120,
- fixed: 'right',
- },
- extraButtons: [
- {
- text: '售后处理',
- show: (row) => row.status === 'PENDING',
- atClick: (row) => {
- this.$router.push(`${this.$route.path}/handle/${row.id}`)
- },
- },
- ],
- columns: [
- { label: '订单号', prop: 'orderNo', minWidth: 150, fixed: 'left' },
- { label: '售后单号', prop: 'salesNo', minWidth: 150 },
- { label: '收货人', prop: 'customer', minWidth: 120 },
- { label: '收货人电话', prop: 'customerTel', minWidth: 120 },
- {
- label: '收货地址',
- formatter: (row) =>
- `${row.customerProvince || ''}${row.customerCity || ''}${
- row.customerRegion || ''
- }${row.customerAddress || ''}`,
- minWidth: 250,
- },
- { label: '订单金额', prop: 'totalOrderAmount', minWidth: 150 },
- { label: '售后理由', prop: 'reason', minWidth: 200 },
- { label: '售后状态', prop: 'statusStr', minWidth: 120 },
- { label: '审核状态', prop: 'auditStatusStr', minWidth: 120 },
- { label: '申请时间', prop: 'createTime', minWidth: 180 },
- { label: '处理时间', prop: 'auditTime', minWidth: 180 },
- ],
+ hasExport: true,
+ exportUrl: 'flower/api/sales/list/export',
+ exportText: '售后导出',
searchFormAttrs: {
labelWidth: 'auto',
+ },
+ beforeRequest: (params) => {
+ const searchForm = this.$refs.crud?.$refs?.searchForm
+ if (searchForm) {
+ const statusComp = searchForm.getComponentById('status')
+ if (statusComp) {
+ // 组件内部不会修改这个prop直接修改可忽略警告
+ statusComp.extraQuery = { ...params, status: '' }
+ statusComp.getOtherOptions()
+ }
+ }
},
searchForm: [
{
type: 'row',
+ id: 'row',
items: [
{
label: '售后状态:',
@@ -60,29 +59,254 @@
type: 'bus-radio',
el: {
hasAll: true,
+ otherInterfaceUri: 'flower/api/sales/status/count',
childType: 'el-radio-button',
- code: 'SALES_STATUS',
+ filterOptions: (list) => {
+ return list.map((item) => {
+ return {
+ ...item,
+ label: `${item.label}(${item.orderCount})`,
+ }
+ })
+ },
+ // code: 'ORDER_SALES_STATUS',
},
- default: '',
+ default: this.$route.query.status || '',
span: 24,
searchImmediately: true,
- },
- {
- label: '审核状态:',
- id: 'auditStatus',
- type: 'bus-radio',
- el: {
- hasAll: true,
- childType: 'el-radio-button',
- code: 'SALES_AUDIT_STATUS',
+ on: {
+ optionsChange: (e, updateForm, { currentComp }) => {
+ if (Array.isArray(e[0]) && e[0].length > 0) {
+ const totalCount = e[0].reduce((total, current) => {
+ return (total += current.orderCount)
+ }, 0)
+ // 组件内部不会修改这个prop直接修改可忽略警告
+ currentComp.props = {
+ allLabel: `不限(${totalCount})`,
+ }
+ }
+ },
},
- default: '',
- span: 24,
- searchImmediately: true,
},
+ { label: '商品名称:', id: 'flowerName', type: 'input' },
{ label: '订单号:', id: 'orderNo', type: 'input' },
{ label: '售后单号:', id: 'salesNo', type: 'input' },
+ { label: '收货人姓名:', id: 'customer', type: 'input' },
+ { label: '收货人电话:', id: 'customerTel', type: 'input' },
+ { label: '供应商:', id: 'supplierName', type: 'input' },
+ {
+ label: '下单时间:',
+ id: 'orderStartDateStr',
+ component: 'el-bus-date-range',
+ commonFormat: true,
+ commonFormatProps: ['orderStartDateStr', 'orderEndDateStr'],
+ customClass: 'in-bus-form',
+ },
+ {
+ label: '售后时间:',
+ id: 'salesStartDateStr',
+ component: 'el-bus-date-range',
+ commonFormat: true,
+ commonFormatProps: ['salesStartDateStr', 'salesEndDateStr'],
+ customClass: 'in-bus-form',
+ },
+ {
+ label: '售后类别',
+ id: 'salesType',
+ type: 'bus-select-dict',
+ el: {
+ code: 'after_sale_type',
+ clearable: true,
+ style: 'width:100%',
+ },
+ },
],
+ },
+ ],
+ form: [
+ {
+ type: 'row',
+ items: [
+ { label: '商品名称:', id: 'flowerName', type: 'input' },
+ { label: '合伙人加价(元):', id: 'markupPartner', type: 'input' },
+ { label: '原价(元):', id: 'price', type: 'input' },
+ { label: '券后单价(元):', id: 'realPrice', type: 'input' },
+ { label: '券后总金额(元):', id: 'realTotal', type: 'input' },
+ { label: '供应商价格(元):', id: 'supplierPrice', type: 'input' },
+ { label: '商品数量:', id: 'flowerNum', type: 'input' },
+ { label: '申请售后数量:', id: 'num', type: 'input' },
+ ],
+ },
+ {
+ type: 'row',
+ items: [
+ {
+ label: '质检总扣款(元):',
+ id: 'checkTotalAmount',
+ type: 'input',
+ span: 24,
+ customClass: 'to-red to-bold',
+ },
+ {
+ label: '降级数量:',
+ id: 'reduceNum',
+ type: 'input',
+ },
+ {
+ label: '降级总金额(元):',
+ id: 'reduceAmount',
+ type: 'input',
+ },
+ {
+ label: '缺货数量:',
+ id: 'lackNum',
+ type: 'input',
+ span: 24,
+ },
+ {
+ label: '已退总金额(元):',
+ id: 'refundTotalAmount',
+ type: 'input',
+ span: 24,
+ customClass: 'to-red to-bold',
+ },
+ ],
+ },
+ ],
+ extraDialogs: [
+ {
+ title: '售后处理',
+ readonly: true,
+ confirmText: '通过',
+ cancelText: '不通过',
+ confirmButtonAttrs: {
+ type: 'success',
+ },
+ cancelButtonAttrs: {
+ type: 'danger',
+ },
+ dialogAttrs: {
+ width: '70%',
+ },
+ form: [
+ {
+ type: 'row',
+ items: [
+ {
+ label: '供应商(元):',
+ id: 'feeSupplier',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '平台(元):',
+ id: 'feePlatform',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '合伙人(元):',
+ id: 'feePartner',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '打包(元):',
+ id: 'feePlatformPack',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '质检(元):',
+ id: 'feePlatformCheck',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '物流(元):',
+ id: 'feePlatformTransport',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '打包运费(元)(散户):',
+ id: 'feePackingTransport',
+ type: 'input-number',
+ el: { min: 0, precision: 2, controls: false },
+ },
+ {
+ label: '实际总扣款(元):',
+ id: 'tempTotal',
+ component: 'simple-text',
+ readonly: true,
+ forceDisabled: true,
+ el: (row) => ({
+ text: feeKeys
+ .reduce((total, current) => {
+ total += row[current] ?? 0
+ return total
+ }, 0)
+ .toFixed(2),
+ }),
+ span: 24,
+ customClass: 'to-bold-label',
+ },
+ {
+ label: '申请理由:',
+ id: 'reason',
+ type: 'input',
+ el: {
+ type: 'textarea',
+ },
+ readonly: true,
+ span: 24,
+ },
+ {
+ label: '平台回复:',
+ id: 'remarks',
+ type: 'input',
+ el: {
+ type: 'textarea',
+ rows: 6,
+ },
+ rules: {
+ required: true,
+ message: '请输入平台回复',
+ trigger: 'blur',
+ },
+ span: 24,
+ },
+ ],
+ },
+ ],
+ atConfirm: async (val) => {
+ const { code } = await this.$elBusHttp.request(
+ 'flower/api/sales/audit/agree',
+ { method: 'post', data: val }
+ )
+ if (code === 0) {
+ this.$message.success('操作成功')
+ } else {
+ return false
+ }
+ },
+ atCancel: async (val) => {
+ const { code } = await this.$elBusHttp.request(
+ 'flower/api/sales/audit/reject',
+ {
+ method: 'post',
+ data: {
+ id: val.id,
+ remarks: val.remarks,
+ },
+ }
+ )
+ if (code === 0) {
+ this.$message.success('操作成功')
+ } else {
+ return false
+ }
+ },
},
],
},
@@ -93,7 +317,48 @@
title: '售后理赔',
}
},
+ methods: {
+ onDetail(item) {
+ this.$router.push(`${this.$route.path}/view/${item.id}`)
+ },
+ async onHandle(item) {
+ const { code, data } = await this.$elBusHttp.request(
+ 'flower/api/sales/list/view',
+ { params: { id: item.id } }
+ )
+ if (code === 0) {
+ feeKeys.forEach((key) => {
+ data[key] = data[key] ?? undefined
+ })
+ this.$refs.crud.$refs.extraDialog[0].show(data)
+ }
+ },
+ },
}
</script>
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+::v-deep {
+ .el-form-item {
+ &.to-bold {
+ .el-form-item__label,
+ .simple-text,
+ .el-bus-form-item__normal {
+ font-weight: bold;
+ }
+ }
+ &.to-red {
+ .el-form-item__label,
+ .simple-text,
+ .el-bus-form-item__normal {
+ color: $danger-color;
+ }
+ }
+ &.to-bold-label {
+ .el-form-item__label {
+ font-weight: bold;
+ }
+ }
+ }
+}
+</style>
--
Gitblit v1.9.3