订单接口联调

This commit is contained in:
cuiyouliang 2025-06-16 15:00:20 +08:00
parent 3c680825a3
commit a853cbe51d
6 changed files with 188 additions and 59 deletions

View File

@ -68,10 +68,10 @@ export function saveMerchantNote(data) {
});
}
// 发货
// 核销
export function deliverProduct(data) {
return request({
url: '/oms/order/deliverProduct',
url: '/oms/verification/verify',
method: 'post',
data: data
});

View File

@ -5,7 +5,7 @@ import cache from './cache';
import auth from './auth';
// 预设动画
import animate from '@/animate';
import { getEmulistLabelById } from '@/utils';
import { download as dl } from '@/utils/request';
import { useDict, getDictionaryByKey } from '@/utils/dict';
import { getConfigKey, updateConfigByKey } from '@/api/system/config';
@ -57,4 +57,5 @@ export default function installPlugin(app: App) {
app.config.globalProperties.getHiddenName = getHiddenName;
app.config.globalProperties.getHiddenDetailAddress = getHiddenDetailAddress;
app.config.globalProperties.getDictionaryByKey = getDictionaryByKey;
app.config.globalProperties.getEmulistLabelById = getEmulistLabelById; // 根据枚举key和枚举获取枚举中文label
}

View File

@ -327,9 +327,10 @@ export const getEmulistLabelById = (id: string, emuList: any) => {
return '--';
}
if (emuList && emuList.length) {
const { label } = emuList.find((item: any) => {
const { label } =
emuList.find((item: any) => {
return item.value == id;
});
}) || {};
return label || '--';
} else {
return '--';

View File

@ -29,6 +29,15 @@
<el-descriptions-item label="订单状态">{{ getOrderStatus(orderDetail) }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt10">
<el-descriptions title="人员信息" :column="2" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="推广人信息">{{ orderDetail.orderSn }}</el-descriptions-item>
<el-descriptions-item label="买家信息">{{ orderDetail.userName }}</el-descriptions-item>
<el-descriptions-item label="卖家信息">{{ orderDetail.userPhone }}</el-descriptions-item>
<el-descriptions-item label="代理信息">{{ parseTime(orderDetail.createTime, '') }}</el-descriptions-item>
<el-descriptions-item label="分佣信息">{{ getPayType(orderDetail) }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt10">
<el-descriptions title="收货信息" :column="2" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="收货人姓名">{{ getHiddenName(addressInfo.name) }}</el-descriptions-item>
@ -111,7 +120,7 @@ export default {
computed: {},
methods: {
queryDetail(id) {
this.loading = true;
// this.loading = true;
return new Promise((resolve) =>
getOmsOrder(id).then((res) => {
const { productInfo, addressInfo } = res.data;

View File

@ -36,7 +36,7 @@
>
</DictRadio>
</el-form-item>
<el-form-item label="退款状态" prop="orderType">
<el-form-item label="退款状态" prop="aftersaleStatus">
<DictRadio
v-if="orderAftersaleMap.length > 0"
v-model="queryParams.status"
@ -48,7 +48,7 @@
>
</DictRadio>
</el-form-item>
<el-form-item label="订单编号" prop="orderSn">
<el-form-item label="订单编号" prop="id">
<el-input v-model.trim="queryParams.orderSn" placeholder="请输入订单编号" clearable size="small" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="交易流水号" prop="userPhone">
@ -84,36 +84,38 @@
</el-form>
<el-table v-loading="loading" :data="omsOrderList" border cell-class-name="my-cell">
<el-table-column label="达人信息" prop="couponAmount">
<el-table-column label="推广人信息" width="116">
<template v-slot="scope">
<div>达人姓名{{ scope.row.deliverySn }}</div>
<div>达人手机号{{ scope.row.deliverySn }}</div>
<div>{{ scope.row.tenantContactName }}</div>
<div>{{ scope.row.tenantContactPhone }}</div>
</template>
</el-table-column>
<el-table-column label="买家信息" prop="couponAmount">
<el-table-column label="买家信息" width="116">
<template v-slot="scope">
<div>买家姓名{{ scope.row.deliverySn }}</div>
<div>买家手机号{{ scope.row.deliverySn }}</div>
<div>{{ scope.row.memberUsername }}</div>
<div>{{ scope.row.memberPhoneEncrypted }}</div>
</template>
</el-table-column>
<el-table-column label="卖家信息" prop="couponAmount">
<el-table-column label="卖家信息" width="116">
<template v-slot="scope">
<div>卖家姓名{{ scope.row.deliverySn }}</div>
<div>卖家手机号{{ scope.row.deliverySn }}</div>
<div>{{ scope.row.tenantContactName }}</div>
<div>{{ scope.row.tenantContactPhone }}</div>
</template>
</el-table-column>
<el-table-column label="代理信息" prop="couponAmount">
<el-table-column label="代理信息" width="116">
<template v-slot="scope">
<div>代理人姓名{{ scope.row.deliverySn }}</div>
<div>代理区域{{ scope.row.deliverySn }}</div>
<div>代理手机号{{ scope.row.deliverySn }}</div>
</template>
</el-table-column>
<el-table-column label="代理信息" prop="couponAmount">
<!-- <el-table-column label="商品信息">
<template v-slot="scope">
<div>达人姓名{{ scope.row.deliverySn }}</div>
<div>达人手机号{{ scope.row.deliverySn }}</div>
<div>{{ scope.row.productName }}</div>
</template>
</el-table-column>-->
<el-table-column label="核销码" width="130">
<el-image src="" style="width: 100px; height: 100px" />
</el-table-column>
<el-table-column label="商品规格" prop="productList" width="280">
<template v-slot="scope">
@ -137,22 +139,27 @@
</template>
</el-table-column>
<el-table-column label="分佣信息" prop="couponAmount" width="80"> </el-table-column>
<el-table-column label="订单类型" prop="couponAmount" width="80"> </el-table-column>
<el-table-column label="订单编号" prop="orderSn" width="120">
<el-table-column label="订单类型" prop="couponAmount" width="100">
<template v-slot="scope">
<el-link type="text" icon="Copy" link @click="copy(scope.row.orderSn)" :underline="false">
<el-tag type="primary">
{{ getEmulistLabelById(scope.row.status, orderTypeMap) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="交易编号" prop="orderSn" width="120">
<template v-slot="scope">
<el-link type="primary" icon="Copy" link @click="copy(scope.row.orderSn)" :underline="false">
{{ scope.row.orderSn }}
<el-icon><CopyDocument /></el-icon>
</el-link>
</template>
</el-table-column>
<el-table-column label="交易编号" prop="couponAmount" width="80"> </el-table-column>
<el-table-column label="金额" prop="couponAmount" width="80"> </el-table-column>
<el-table-column label="订单编号" prop="id" width="80"> </el-table-column>
<el-table-column label="订单状态" prop="status" width="160">
<template v-slot="scope">
<div>
<el-tag :type="getOrderStatusTag(scope.row.status)" style="margin-right: 10px">
{{ getOrderStatusText(scope.row.status) }}
<el-tag style="margin-right: 10px">
{{ getEmulistLabelById(scope.row.status, orderStatusMap) }}
</el-tag>
</div>
<div v-if="scope.row.deliverySn">
@ -162,14 +169,26 @@
<div v-if="scope.row.deliveryTime">发货时间{{ parseTime(scope.row.deliveryTime, '') }}</div>
</template>
</el-table-column>
<el-table-column label="退款状态" prop="couponAmount" width="80"> </el-table-column>
<el-table-column label="提现状态" prop="couponAmount" width="80"> </el-table-column>
<el-table-column label="退款状态" prop="aftersaleStatus" width="100">
<template v-slot="scope">
<el-tag type="primary">
{{ getEmulistLabelById(scope.row.aftersaleStatus, orderAftersaleMap) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="提现状态" prop="aftersaleStatus" width="100">
<template v-slot="scope">
<el-tag type="primary">
{{ getEmulistLabelById(scope.row.aftersaleStatus, orderAftersaleMap) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="收件信息" prop="receiverName" width="280">
<template v-slot="scope">
<div>
<span>{{ scope.row.decrypt ? scope.row.receiverName : getHiddenName(scope.row.receiverName) }} {{ scope.row.receiverPhone }}</span>
<el-button size="small" type="text" @click="handleWatch(scope.row)" style="margin-left: 10px">查看 </el-button>
<el-button size="small" type="text" @click="handleUpdate(scope.row)">修改 </el-button>
<el-button size="small" text type="primary" @click="handleWatch(scope.row)" style="margin-left: 10px">查看 </el-button>
<el-button size="small" text type="primary" @click="handleUpdate(scope.row)">修改 </el-button>
</div>
<div>
<span>{{ scope.row.receiverProvince }}{{ scope.row.receiverCity }}{{ scope.row.receiverDistrict }}</span>
@ -181,7 +200,9 @@
<template v-slot="scope">
<div>
<span v-if="scope.row.merchantNote" class="note-title" style="margin-right: 10px">平台备注</span>
<el-button size="small" type="text" @click="handleSaveNote(scope.row)">{{ scope.row.merchantNote ? '修改' : '添加平台备注' }} </el-button>
<el-button size="small" text type="primary" @click="handleSaveNote(scope.row)"
>{{ scope.row.merchantNote ? '修改' : '添加平台备注' }}
</el-button>
</div>
<div v-if="scope.row.merchantNote">{{ scope.row.merchantNote }}</div>
<div v-if="scope.row.note" class="note-title">买家备注</div>
@ -209,17 +230,11 @@
<div>实付 {{ scope.row.payAmount }}</div>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width" width="220" fixed="right">
<el-table-column label="操作" class-name="small-padding fixed-width" width="150" align="center" fixed="right">
<template v-slot="scope">
<el-button size="small" type="text" @click="goDetail(scope.row)" v-hasPermi="['oms:order:query']">详情 </el-button>
<el-button size="small" type="text" @click="showLog(scope.row.id)" v-hasPermi="['oms:order:log']">日志 </el-button>
<el-button
size="small"
type="text"
@click="handleDelivery(scope.row)"
:disabled="scope.row.status !== 1 && scope.row.status !== 2 && scope.row.status !== 3"
>核销
</el-button>
<el-button size="small" text type="primary" @click="goDetail(scope.row)" v-hasPermi="['oms:order:query']">详情 </el-button>
<el-button size="small" text type="primary" @click="showLog(scope.row.id)" v-hasPermi="['oms:order:log']">记录 </el-button>
<el-button size="small" text type="primary" @click="handleDelivery(scope.row)">核销 </el-button>
</template>
</el-table-column>
</el-table>
@ -235,8 +250,8 @@
<el-option label="圆通快递" value="2" />
</el-select>
</el-form-item>-->
<el-form-item label="核销编码" prop="expressSn">
<el-input v-model="deliveryObj.form.expressSn" placeholder="请输入核销编码" controls-position="right" :min="0" />
<el-form-item label="商家ID" prop="usedMerchantId">
<el-input v-model="deliveryObj.form.usedMerchantId" placeholder="请输入待核销商家ID" controls-position="right" :min="0" />
</el-form-item>
</el-form>
<template v-slot:footer>
@ -265,9 +280,10 @@
<el-timeline v-if="logObj.logList.length">
<el-timeline-item v-for="item in logObj.logList" placement="top" :timestamp="parseTime(item.createTime, '')">
<el-card>
<h4>{{ getLogEvent(item.orderStatus) }}</h4>
<h4>{{ getLogEvent(item.status) }}</h4>
<br />
<h4>操作人{{ item.operateMan }}</h4>
<h4>操作人{{ item.operName }}</h4>
<h4>操作时间{{ item.operTime }}</h4>
<br v-if="item.note" />
<h4 v-if="item.note">备注{{ item.note }}</h4>
</el-card>
@ -381,14 +397,12 @@ export default {
deliveryObj: {
title: '核销',
form: {
orderId: null,
expressName: null,
expressSn: null
codeValue: null,
usedMerchantId: null
},
open: false,
rules: {
expressName: [{ required: true, message: '快递公司不能为空', trigger: 'change' }],
expressSn: [{ required: true, message: '快递单号不能为空', trigger: 'blur' }]
usedMerchantId: [{ required: true, message: '商家ID不能为空', trigger: 'blur' }]
}
},
noteObj: {
@ -635,7 +649,7 @@ export default {
oInput.remove();
},
handleDelivery(row) {
this.deliveryObj.form.orderId = row.id;
this.deliveryObj.form.codeValue = row.id;
this.deliveryObj.open = true;
},
submitDelivery() {
@ -651,9 +665,8 @@ export default {
},
cancelDelivery() {
this.deliveryObj.open = false;
this.deliveryObj.form.orderId = null;
this.deliveryObj.form.expressName = null;
this.deliveryObj.form.expressSn = null;
this.deliveryObj.form.codeValue = null;
this.deliveryObj.form.usedMerchantId = null;
},
handleSaveNote(row) {
const merchantNote = row.merchantNote;

View File

@ -111,7 +111,7 @@
<el-button size="small" type="text" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template>-->
<template v-slot="scope">
<el-button size="small" type="text">编辑 </el-button>
<el-button size="small" type="text" @click="showProductEditModal(scope.row)">编辑</el-button>
<!-- <el-button size="small" type="text">余额变更记录 </el-button>
<el-button size="small" type="text">开通易生支付 </el-button>
<el-button size="small" type="text" @click="showUserLoginInfoModal(scope.row, true)">登录记录 </el-button>
@ -125,6 +125,59 @@
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<!--编辑会员基础信息-->
<el-dialog title="编辑商品详情" v-model="productModalInfo.open" width="600px" append-to-body>
<el-form label-width="auto" :rules="productEditRules" :model="productModalInfo.data" ref="editForm" size="default">
<el-form-item label="昵称" prop="nickname">
<el-input v-model.trim="productModalInfo.data.nickname" placeholder="请输入会员昵称" size="small" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model.trim="productModalInfo.data.password" placeholder="请输入会员密码" size="small" />
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input v-model.trim="productModalInfo.data.phone" placeholder="请输入会员手机号" size="small" />
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-input v-model.trim="productModalInfo.data.mark" placeholder="请输入备注" size="small" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-switch
:active-value="1"
:inactive-value="0"
active-text="启用"
inactive-text="禁用"
inline-prompt
v-model="productModalInfo.data.status"
/>
</el-form-item>
<el-form-item label="头像" prop="avatar">
<!-- 暂时先用输入框组件后续OSS上传功能好了迁移到上传upload组件-->
<el-input v-model.trim="productModalInfo.data.avatar" placeholder="请输入头像" size="small" />
</el-form-item>
<el-form-item label="性别" prop="gender">
<DictRadio v-model="productModalInfo.data.gender" radioData="sys_user_sex" size="small" :show-all="'all'" />
</el-form-item>
<el-form-item label="地址" prop="address">
<AddressSelector v-model="productModalInfo.data.fullArea" style="width: 100%" />
</el-form-item>
<el-form-item label="生日" prop="birthday">
<el-input v-model.trim="productModalInfo.data.birthday" placeholder="请选择生日" size="small" />
</el-form-item>
<el-form-item label="用户等级" prop="level">
<el-input v-model.trim="productModalInfo.data.level" placeholder="请输入用户等级" size="small" />
</el-form-item>
<el-form-item label="剩余积分" prop="integral">
<el-input v-model.trim="productModalInfo.data.integral" placeholder="请输入剩余积分" size="small" />
</el-form-item>
<el-row>
<el-col :span="12"> </el-col>
<el-col :span="12">
<el-button type="danger" @click="closeEditProduct">关闭</el-button>
<el-button type="primary" @click="submitEditProduct">保存</el-button>
</el-col>
</el-row>
</el-form>
</el-dialog>
</div>
<!-- <SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>-->
</div>
@ -134,10 +187,12 @@
import { delPmsProduct, listPmsProduct } from '@/api/pms/product';
import { isStarRepo } from '@/utils/is-star-plugin';
import { useUserStore } from '@/store/modules/user';
import AddressSelector from '@/views/components/AddressSelector/index.vue';
import { editUserData } from '@/api/ums/member.js';
export default {
name: 'PmsProduct',
components: {},
components: { AddressSelector },
dicts: ['pms_publish_status'],
data() {
return {
@ -158,6 +213,22 @@ export default {
total: 0,
//
pmsProductList: [],
productModalInfo: {
open: false,
data: {}
},
productEditRules: {
nickname: [{ required: true, message: '昵称不能为空', trigger: 'blur' }],
/*password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],*/
/* address: [{ required: true, message: '地址不能为空', trigger: 'change' }],*/
/* avatar: [{ required: true, message: '头像不能为空', trigger: 'change' }],*/
/* gendor: [{ required: true, message: '性别不能为空', trigger: 'change' }],*/
birthday: [{ required: true, message: '生日不能为空', trigger: 'change' }],
level: [{ required: true, message: '用户等级不能为空', trigger: 'blur' }],
integral: [{ required: true, message: '积分不能为空', trigger: 'blur' }],
/* email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }],*/
phone: [{ required: true, pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }]
},
//
queryParams: {
pageNum: 1,
@ -191,6 +262,40 @@ export default {
}
},
methods: {
submitEditProduct() {
this.$refs['editForm'].validate((valid) => {
if (valid) {
const { fullArea } = this.userAccountEditModal.data || {};
const params = {
...this.userAccountEditModal.data
};
if (fullArea && fullArea.length) {
const [province = '', city = '', district = ''] = fullArea;
params.province = province;
params.city = city;
params.district = district;
}
editUserData(params).then((response) => {
this.$modal.msgSuccess('修改成功');
this.closeEditUser();
this.getList();
});
}
});
},
closeEditProduct() {
this.productModalInfo = {
open: false,
data: {}
};
},
//
showProductEditModal(record) {
this.productModalInfo = {
data: { ...record, gender: String(record.gender) } || {},
open: true
};
},
async confirmOk(success) {
if (success) {
const res = await isStarRepo(