feat(sdy): 更新经销商订单模型和导入功能
- 将 orderId 字段更改为 orderNo,类型从 number 改为 string - 更新经销商资本模型中的 describe 字段为 comments- 在 shopDealerOrder 模型中添加 settledPrice 和 payPrice 字段 - 修改导入接口 URL,使用 MODULES_API_URL 前缀- 在用户验证页面添加权限控制 - 移除订单状态和结算状态的搜索选项 - 添加新的经销商订单编辑组件和相关功能 - 创建新的经销商订单管理页面,包含完整的CRUD操作- 添加批量删除和订单结算功能- 更新表格列配置,展示更多订单详情信息
This commit is contained in:
@@ -5,6 +5,7 @@ import {utils, writeFile} from 'xlsx';
|
|||||||
import {message} from 'ant-design-vue';
|
import {message} from 'ant-design-vue';
|
||||||
import {getTenantId} from '@/utils/domain';
|
import {getTenantId} from '@/utils/domain';
|
||||||
import {listShopDealerOrder} from "@/api/shop/shopDealerOrder";
|
import {listShopDealerOrder} from "@/api/shop/shopDealerOrder";
|
||||||
|
import {MODULES_API_URL} from "@/config/setting";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入分销商订单
|
* 导入分销商订单
|
||||||
@@ -13,7 +14,7 @@ export async function importSdyDealerOrder(file: File) {
|
|||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', file);
|
formData.append('file', file);
|
||||||
const res = await request.post<ApiResult<unknown>>(
|
const res = await request.post<ApiResult<unknown>>(
|
||||||
'/sdy/sdy-dealer-order/import',
|
MODULES_API_URL + '/sdy/sdy-dealer-order/import',
|
||||||
formData
|
formData
|
||||||
);
|
);
|
||||||
if (res.data.code === 0) {
|
if (res.data.code === 0) {
|
||||||
@@ -60,7 +61,7 @@ export async function exportSdyDealerOrder(params?: ShopDealerOrderParam) {
|
|||||||
|
|
||||||
list.forEach((order: ShopDealerOrder) => {
|
list.forEach((order: ShopDealerOrder) => {
|
||||||
array.push([
|
array.push([
|
||||||
order.orderId || '',
|
order.orderNo || '',
|
||||||
order.userId || '',
|
order.userId || '',
|
||||||
order.orderPrice || '0',
|
order.orderPrice || '0',
|
||||||
order.firstUserId || '',
|
order.firstUserId || '',
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ export interface ShopDealerOrder {
|
|||||||
id?: number;
|
id?: number;
|
||||||
// 买家用户ID
|
// 买家用户ID
|
||||||
userId?: number;
|
userId?: number;
|
||||||
// 订单ID
|
// 订单编号
|
||||||
orderId?: number;
|
orderNo?: string;
|
||||||
// 订单总金额(不含运费)
|
// 订单总金额(不含运费)
|
||||||
orderPrice?: string;
|
orderPrice?: string;
|
||||||
// 分销商用户id(一级)
|
// 分销商用户id(一级)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export interface ShopDealerCapital {
|
|||||||
// 金额
|
// 金额
|
||||||
money?: string;
|
money?: string;
|
||||||
// 描述
|
// 描述
|
||||||
describe?: string;
|
comments?: string;
|
||||||
// 对方用户ID
|
// 对方用户ID
|
||||||
toUserId?: number;
|
toUserId?: number;
|
||||||
// 商城ID
|
// 商城ID
|
||||||
|
|||||||
@@ -10,10 +10,14 @@ export interface ShopDealerOrder {
|
|||||||
userId?: number;
|
userId?: number;
|
||||||
// 买家用户昵称
|
// 买家用户昵称
|
||||||
nickname?: string;
|
nickname?: string;
|
||||||
// 订单ID
|
// 订单编号
|
||||||
orderId?: number;
|
orderNo?: string;
|
||||||
// 订单总金额(不含运费)
|
// 订单总金额(不含运费)
|
||||||
orderPrice?: string;
|
orderPrice?: string;
|
||||||
|
// 结算金额
|
||||||
|
settledPrice?: string;
|
||||||
|
// 支付金额
|
||||||
|
payPrice?: string;
|
||||||
// 分销商用户id(一级)
|
// 分销商用户id(一级)
|
||||||
firstUserId?: number;
|
firstUserId?: number;
|
||||||
// 分销商用户id(二级)
|
// 分销商用户id(二级)
|
||||||
@@ -59,11 +63,11 @@ export interface ShopDealerOrder {
|
|||||||
*/
|
*/
|
||||||
export interface ShopDealerOrderParam extends PageParam {
|
export interface ShopDealerOrderParam extends PageParam {
|
||||||
id?: number;
|
id?: number;
|
||||||
orderId?: number;
|
|
||||||
orderNo?: string;
|
orderNo?: string;
|
||||||
productName?: string;
|
productName?: string;
|
||||||
userId?: number;
|
userId?: number;
|
||||||
isInvalid?: number;
|
isInvalid?: number;
|
||||||
isSettled?: number;
|
isSettled?: number;
|
||||||
|
myOrder?: number;
|
||||||
keywords?: string;
|
keywords?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
<div class="text-orange-500 py-1" v-if="record.status == 2">原因:{{ record.comments }}</div>
|
<div class="text-orange-500 py-1" v-if="record.status == 2">原因:{{ record.comments }}</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.key === 'action'">
|
<template v-if="column.key === 'action'">
|
||||||
<div>
|
<div v-if="hasPermission('sys:userVerify:update')">
|
||||||
<a @click="openEdit(record)">修改</a>
|
<a @click="openEdit(record)">修改</a>
|
||||||
<a-divider type="vertical"/>
|
<a-divider type="vertical"/>
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
@@ -68,6 +68,7 @@ import {pageUserVerify, removeUserVerify, removeBatchUserVerify} from '@/api/sys
|
|||||||
import type {UserVerify, UserVerifyParam} from '@/api/system/userVerify/model';
|
import type {UserVerify, UserVerifyParam} from '@/api/system/userVerify/model';
|
||||||
import {getPageTitle} from "@/utils/common";
|
import {getPageTitle} from "@/utils/common";
|
||||||
import Extra from "./components/Extra.vue";
|
import Extra from "./components/Extra.vue";
|
||||||
|
import {hasPermission} from "@/utils/permission";
|
||||||
|
|
||||||
// 表格实例
|
// 表格实例
|
||||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||||
@@ -263,7 +264,9 @@ const customRow = (record: UserVerify) => {
|
|||||||
},
|
},
|
||||||
// 行双击事件
|
// 行双击事件
|
||||||
onDblclick: () => {
|
onDblclick: () => {
|
||||||
openEdit(record);
|
if (hasPermission('sys:userVerify:update')) {
|
||||||
|
openEdit(record);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,29 +24,29 @@
|
|||||||
</a-space>
|
</a-space>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item label="订单状态">
|
<!-- <a-form-item label="订单状态">-->
|
||||||
<a-select
|
<!-- <a-select-->
|
||||||
v-model:value="where.isInvalid"
|
<!-- v-model:value="where.isInvalid"-->
|
||||||
placeholder="全部"
|
<!-- placeholder="全部"-->
|
||||||
allow-clear
|
<!-- allow-clear-->
|
||||||
style="width: 120px"
|
<!-- style="width: 120px"-->
|
||||||
>
|
<!-- >-->
|
||||||
<a-select-option :value="0">有效</a-select-option>
|
<!-- <a-select-option :value="0">有效</a-select-option>-->
|
||||||
<a-select-option :value="1">失效</a-select-option>
|
<!-- <a-select-option :value="1">失效</a-select-option>-->
|
||||||
</a-select>
|
<!-- </a-select>-->
|
||||||
</a-form-item>
|
<!-- </a-form-item>-->
|
||||||
|
|
||||||
<a-form-item label="结算状态">
|
<!-- <a-form-item label="结算状态">-->
|
||||||
<a-select
|
<!-- <a-select-->
|
||||||
v-model:value="where.isSettled"
|
<!-- v-model:value="where.isSettled"-->
|
||||||
placeholder="全部"
|
<!-- placeholder="全部"-->
|
||||||
allow-clear
|
<!-- allow-clear-->
|
||||||
style="width: 120px"
|
<!-- style="width: 120px"-->
|
||||||
>
|
<!-- >-->
|
||||||
<a-select-option :value="0">未结算</a-select-option>
|
<!-- <a-select-option :value="0">未结算</a-select-option>-->
|
||||||
<a-select-option :value="1">已结算</a-select-option>
|
<!-- <a-select-option :value="1">已结算</a-select-option>-->
|
||||||
</a-select>
|
<!-- </a-select>-->
|
||||||
</a-form-item>
|
<!-- </a-form-item>-->
|
||||||
|
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-space>
|
<a-space>
|
||||||
@@ -57,12 +57,12 @@
|
|||||||
v-model:value="where.keywords"
|
v-model:value="where.keywords"
|
||||||
@search="handleSearch"
|
@search="handleSearch"
|
||||||
/>
|
/>
|
||||||
<!-- <a-button type="primary" html-type="submit" class="ele-btn-icon">-->
|
<!-- <a-button type="primary" html-type="submit" class="ele-btn-icon">-->
|
||||||
<!-- <template #icon>-->
|
<!-- <template #icon>-->
|
||||||
<!-- <SearchOutlined/>-->
|
<!-- <SearchOutlined/>-->
|
||||||
<!-- </template>-->
|
<!-- </template>-->
|
||||||
<!-- 搜索-->
|
<!-- 搜索-->
|
||||||
<!-- </a-button>-->
|
<!-- </a-button>-->
|
||||||
<a-button @click="resetSearch">
|
<a-button @click="resetSearch">
|
||||||
重置
|
重置
|
||||||
</a-button>
|
</a-button>
|
||||||
@@ -102,9 +102,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {reactive, ref} from 'vue';
|
import {ref} from 'vue';
|
||||||
import {
|
import {
|
||||||
SearchOutlined,
|
|
||||||
DollarOutlined,
|
DollarOutlined,
|
||||||
UploadOutlined,
|
UploadOutlined,
|
||||||
DeleteOutlined
|
DeleteOutlined
|
||||||
@@ -113,7 +112,7 @@ import type {ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
|||||||
import Import from './Import.vue';
|
import Import from './Import.vue';
|
||||||
import useSearch from "@/utils/use-search";
|
import useSearch from "@/utils/use-search";
|
||||||
|
|
||||||
const props = withDefaults(
|
withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
// 选中的数据
|
// 选中的数据
|
||||||
selection?: any[];
|
selection?: any[];
|
||||||
@@ -128,6 +127,7 @@ const emit = defineEmits<{
|
|||||||
(e: 'batchSettle'): void;
|
(e: 'batchSettle'): void;
|
||||||
(e: 'export'): void;
|
(e: 'export'): void;
|
||||||
(e: 'importDone'): void;
|
(e: 'importDone'): void;
|
||||||
|
(e: 'remove'): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
// 是否显示导入弹窗
|
// 是否显示导入弹窗
|
||||||
@@ -135,7 +135,6 @@ const showImport = ref(false);
|
|||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
const {where, resetFields} = useSearch<ShopDealerOrderParam>({
|
const {where, resetFields} = useSearch<ShopDealerOrderParam>({
|
||||||
orderId: undefined,
|
|
||||||
orderNo: '',
|
orderNo: '',
|
||||||
productName: '',
|
productName: '',
|
||||||
isInvalid: undefined,
|
isInvalid: undefined,
|
||||||
|
|||||||
@@ -29,6 +29,11 @@
|
|||||||
{{ form.comments }}
|
{{ form.comments }}
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="订单编号" name="orderNo">
|
||||||
|
{{ form.orderNo }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="结算电量" name="orderPrice">
|
<a-form-item label="结算电量" name="orderPrice">
|
||||||
{{ parseFloat(form.orderPrice || 0).toFixed(2) }}
|
{{ parseFloat(form.orderPrice || 0).toFixed(2) }}
|
||||||
@@ -208,7 +213,7 @@
|
|||||||
id: undefined,
|
id: undefined,
|
||||||
userId: undefined,
|
userId: undefined,
|
||||||
nickname: undefined,
|
nickname: undefined,
|
||||||
orderId: undefined,
|
orderNo: undefined,
|
||||||
orderPrice: undefined,
|
orderPrice: undefined,
|
||||||
settledPrice: undefined,
|
settledPrice: undefined,
|
||||||
price: undefined,
|
price: undefined,
|
||||||
@@ -272,7 +277,7 @@
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
const formData = {
|
const formData = {
|
||||||
...form,
|
...form,
|
||||||
isSettled: 1,
|
isSettled: 1
|
||||||
};
|
};
|
||||||
updateSdyDealerOrder(formData)
|
updateSdyDealerOrder(formData)
|
||||||
.then((msg) => {
|
.then((msg) => {
|
||||||
@@ -297,7 +302,7 @@
|
|||||||
assignObject(form, props.data);
|
assignObject(form, props.data);
|
||||||
if(props.data.orderPrice && props.data.rate){
|
if(props.data.orderPrice && props.data.rate){
|
||||||
form.firstMoney = (Number(props.data.payPrice) * 0.3).toFixed(2)
|
form.firstMoney = (Number(props.data.payPrice) * 0.3).toFixed(2)
|
||||||
if(props.data.thirdUserId > 0){
|
if(props.data.thirdUserId && props.data.thirdUserId > 0){
|
||||||
form.secondMoney = (Number(props.data.payPrice) * 0.1).toFixed(2)
|
form.secondMoney = (Number(props.data.payPrice) * 0.1).toFixed(2)
|
||||||
}else {
|
}else {
|
||||||
form.secondMoney = (Number(props.data.payPrice) * 0.7).toFixed(2)
|
form.secondMoney = (Number(props.data.payPrice) * 0.7).toFixed(2)
|
||||||
@@ -310,7 +315,7 @@
|
|||||||
Object.assign(form, {
|
Object.assign(form, {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
userId: undefined,
|
userId: undefined,
|
||||||
orderId: undefined,
|
orderNo: undefined,
|
||||||
orderPrice: undefined,
|
orderPrice: undefined,
|
||||||
firstUserId: undefined,
|
firstUserId: undefined,
|
||||||
secondUserId: undefined,
|
secondUserId: undefined,
|
||||||
|
|||||||
@@ -22,11 +22,10 @@
|
|||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
<template v-if="column.key === 'orderInfo'">
|
|
||||||
<div class="order-info">
|
<template v-if="column.key === 'comments'">
|
||||||
<div class="order-id">订单号: {{ record.orderId || '-' }}</div>
|
<div>{{ record.comments }}</div>
|
||||||
<div class="order-price">金额: ¥{{ parseFloat(record.orderPrice || '0').toFixed(2) }}</div>
|
<div class="text-gray-400">用户ID:{{ record.userId }}</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-if="column.key === 'orderPrice'">
|
<template v-if="column.key === 'orderPrice'">
|
||||||
@@ -89,22 +88,11 @@
|
|||||||
|
|
||||||
<template v-if="column.key === 'action'">
|
<template v-if="column.key === 'action'">
|
||||||
<template v-if="record.isSettled === 0 && record.isInvalid === 0">
|
<template v-if="record.isSettled === 0 && record.isInvalid === 0">
|
||||||
<a @click="settleOrder(record)" class="ele-text-success">
|
<a @click="openEdit(record)" class="ele-text-success">
|
||||||
结算
|
结算
|
||||||
</a>
|
</a>
|
||||||
<a-divider type="vertical"/>
|
<a-divider type="vertical"/>
|
||||||
</template>
|
</template>
|
||||||
<!-- <template v-if="record.isInvalid === 0">-->
|
|
||||||
<!-- <a-popconfirm-->
|
|
||||||
<!-- title="确定要标记此订单为失效吗?"-->
|
|
||||||
<!-- @confirm="invalidateOrder(record)"-->
|
|
||||||
<!-- placement="topRight"-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- <a class="text-purple-500">-->
|
|
||||||
<!-- 验证-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </a-popconfirm>-->
|
|
||||||
<!-- </template>-->
|
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
v-if="record.isSettled === 0"
|
v-if="record.isSettled === 0"
|
||||||
title="确定要删除吗?"
|
title="确定要删除吗?"
|
||||||
@@ -129,8 +117,7 @@
|
|||||||
import {createVNode, ref} from 'vue';
|
import {createVNode, ref} from 'vue';
|
||||||
import {message, Modal} from 'ant-design-vue';
|
import {message, Modal} from 'ant-design-vue';
|
||||||
import {
|
import {
|
||||||
ExclamationCircleOutlined,
|
ExclamationCircleOutlined
|
||||||
DollarOutlined,
|
|
||||||
} from '@ant-design/icons-vue';
|
} from '@ant-design/icons-vue';
|
||||||
import type {EleProTable} from 'ele-admin-pro';
|
import type {EleProTable} from 'ele-admin-pro';
|
||||||
import type {
|
import type {
|
||||||
@@ -142,7 +129,7 @@ import {getPageTitle} from '@/utils/common';
|
|||||||
import ShopDealerOrderEdit from './components/shopDealerOrderEdit.vue';
|
import ShopDealerOrderEdit from './components/shopDealerOrderEdit.vue';
|
||||||
import {pageShopDealerOrder, removeShopDealerOrder, removeBatchShopDealerOrder} from '@/api/shop/shopDealerOrder';
|
import {pageShopDealerOrder, removeShopDealerOrder, removeBatchShopDealerOrder} from '@/api/shop/shopDealerOrder';
|
||||||
import type {ShopDealerOrder, ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
import type {ShopDealerOrder, ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
||||||
import {exportSdyDealerOrder, updateSdyDealerOrder} from "@/api/sdy/sdyDealerOrder";
|
import {exportSdyDealerOrder} from "@/api/sdy/sdyDealerOrder";
|
||||||
|
|
||||||
// 表格实例
|
// 表格实例
|
||||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||||
@@ -172,6 +159,9 @@ const datasource: DatasourceFunction = ({
|
|||||||
}
|
}
|
||||||
// 保存当前搜索条件用于导出
|
// 保存当前搜索条件用于导出
|
||||||
currentWhere.value = {...where};
|
currentWhere.value = {...where};
|
||||||
|
// 未结算订单
|
||||||
|
where.isSettled = 0;
|
||||||
|
where.myOrder = 1;
|
||||||
return pageShopDealerOrder({
|
return pageShopDealerOrder({
|
||||||
...where,
|
...where,
|
||||||
...orders,
|
...orders,
|
||||||
@@ -183,16 +173,15 @@ const datasource: DatasourceFunction = ({
|
|||||||
// 表格列配置
|
// 表格列配置
|
||||||
const columns = ref<ColumnItem[]>([
|
const columns = ref<ColumnItem[]>([
|
||||||
{
|
{
|
||||||
title: '用户ID',
|
title: '订单编号',
|
||||||
dataIndex: 'userId',
|
dataIndex: 'orderNo',
|
||||||
key: 'userId',
|
key: 'orderNo'
|
||||||
width: 90,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '客户名称',
|
title: '客户名称',
|
||||||
dataIndex: 'comments',
|
dataIndex: 'comments',
|
||||||
key: 'comments',
|
key: 'comments',
|
||||||
width: 120
|
width: 220,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '结算电量',
|
title: '结算电量',
|
||||||
@@ -274,44 +263,33 @@ const reload = (where?: ShopDealerOrderParam) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* 结算单个订单 */
|
/* 结算单个订单 */
|
||||||
const settleOrder = (row: ShopDealerOrder) => {
|
// const settleOrder = (row: ShopDealerOrder) => {
|
||||||
const totalCommission = (parseFloat(row.firstMoney || '0') +
|
// const totalCommission = (parseFloat(row.firstMoney || '0') +
|
||||||
parseFloat(row.secondMoney || '0') +
|
// parseFloat(row.secondMoney || '0') +
|
||||||
parseFloat(row.thirdMoney || '0')).toFixed(2);
|
// parseFloat(row.thirdMoney || '0')).toFixed(2);
|
||||||
|
//
|
||||||
Modal.confirm({
|
// Modal.confirm({
|
||||||
title: '确认结算',
|
// title: '确认结算',
|
||||||
content: `确定要结算此订单吗?总佣金金额:¥${totalCommission}`,
|
// content: `确定要结算此订单吗?总佣金金额:¥${totalCommission}`,
|
||||||
icon: createVNode(DollarOutlined),
|
// icon: createVNode(DollarOutlined),
|
||||||
okText: '确认结算',
|
// okText: '确认结算',
|
||||||
okType: 'primary',
|
// okType: 'primary',
|
||||||
cancelText: '取消',
|
// cancelText: '取消',
|
||||||
onOk: () => {
|
// onOk: () => {
|
||||||
const hide = message.loading('正在结算...', 0);
|
// const hide = message.loading('正在结算...', 0);
|
||||||
// 这里调用结算API
|
// // 这里调用结算API
|
||||||
updateSdyDealerOrder({
|
// updateSdyDealerOrder({
|
||||||
...row,
|
// ...row,
|
||||||
isSettled: 1
|
// isSettled: 1
|
||||||
})
|
// })
|
||||||
setTimeout(() => {
|
// setTimeout(() => {
|
||||||
hide();
|
// hide();
|
||||||
message.success('结算成功');
|
// message.success('结算成功');
|
||||||
reload();
|
// reload();
|
||||||
}, 1000);
|
// }, 1000);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
};
|
// };
|
||||||
|
|
||||||
/* 标记订单失效 */
|
|
||||||
const invalidateOrder = (row: ShopDealerOrder) => {
|
|
||||||
const hide = message.loading('正在处理...', 0);
|
|
||||||
// 这里调用失效API
|
|
||||||
setTimeout(() => {
|
|
||||||
hide();
|
|
||||||
message.success('订单已标记为失效');
|
|
||||||
reload();
|
|
||||||
}, 1000);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* 批量结算 */
|
/* 批量结算 */
|
||||||
const batchSettle = () => {
|
const batchSettle = () => {
|
||||||
|
|||||||
79
src/views/sdy/shopDealerOrder2/components/Import.vue
Normal file
79
src/views/sdy/shopDealerOrder2/components/Import.vue
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
<!-- 经销商订单导入弹窗 -->
|
||||||
|
<template>
|
||||||
|
<ele-modal
|
||||||
|
:width="520"
|
||||||
|
:footer="null"
|
||||||
|
title="导入分销订单"
|
||||||
|
:visible="visible"
|
||||||
|
@update:visible="updateVisible"
|
||||||
|
>
|
||||||
|
<a-spin :spinning="loading">
|
||||||
|
<a-upload-dragger
|
||||||
|
accept=".xls,.xlsx"
|
||||||
|
:show-upload-list="false"
|
||||||
|
:customRequest="doUpload"
|
||||||
|
style="padding: 24px 0; margin-bottom: 16px"
|
||||||
|
>
|
||||||
|
<p class="ant-upload-drag-icon">
|
||||||
|
<cloud-upload-outlined/>
|
||||||
|
</p>
|
||||||
|
<p class="ant-upload-hint">将文件拖到此处,或点击上传</p>
|
||||||
|
</a-upload-dragger>
|
||||||
|
</a-spin>
|
||||||
|
</ele-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import {ref} from 'vue';
|
||||||
|
import {message} from 'ant-design-vue/es';
|
||||||
|
import {CloudUploadOutlined} from '@ant-design/icons-vue';
|
||||||
|
import {importSdyDealerOrder} from "@/api/sdy/sdyDealerOrder";
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'done'): void;
|
||||||
|
(e: 'update:visible', visible: boolean): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
// 是否打开弹窗
|
||||||
|
visible: boolean;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
// 导入请求状态
|
||||||
|
const loading = ref(false);
|
||||||
|
|
||||||
|
/* 上传 */
|
||||||
|
const doUpload = ({file}) => {
|
||||||
|
if (
|
||||||
|
![
|
||||||
|
'application/vnd.ms-excel',
|
||||||
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||||
|
].includes(file.type)
|
||||||
|
) {
|
||||||
|
message.error('只能选择 excel 文件');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (file.size / 1024 / 1024 > 10) {
|
||||||
|
message.error('大小不能超过 10MB');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
loading.value = true;
|
||||||
|
importSdyDealerOrder(file)
|
||||||
|
.then((msg) => {
|
||||||
|
loading.value = false;
|
||||||
|
message.success(msg);
|
||||||
|
updateVisible(false);
|
||||||
|
emit('done');
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
loading.value = false;
|
||||||
|
message.error(e.message);
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 更新 visible */
|
||||||
|
const updateVisible = (value: boolean) => {
|
||||||
|
emit('update:visible', value);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
146
src/views/sdy/shopDealerOrder2/components/search.vue
Normal file
146
src/views/sdy/shopDealerOrder2/components/search.vue
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
<template>
|
||||||
|
<div class="flex items-center gap-20">
|
||||||
|
<!-- 搜索表单 -->
|
||||||
|
<a-form
|
||||||
|
:model="where"
|
||||||
|
layout="inline"
|
||||||
|
class="search-form"
|
||||||
|
@finish="handleSearch"
|
||||||
|
>
|
||||||
|
<a-form-item>
|
||||||
|
<a-space>
|
||||||
|
<a-button
|
||||||
|
danger
|
||||||
|
class="ele-btn-icon"
|
||||||
|
v-if="selection.length > 0"
|
||||||
|
:disabled="selection?.length === 0"
|
||||||
|
@click="removeBatch"
|
||||||
|
>
|
||||||
|
<template #icon>
|
||||||
|
<DeleteOutlined/>
|
||||||
|
</template>
|
||||||
|
<span>批量删除</span>
|
||||||
|
</a-button>
|
||||||
|
</a-space>
|
||||||
|
</a-form-item>
|
||||||
|
|
||||||
|
<a-form-item>
|
||||||
|
<a-space>
|
||||||
|
<a-input-search
|
||||||
|
allow-clear
|
||||||
|
placeholder="请输入关键词"
|
||||||
|
style="width: 240px"
|
||||||
|
v-model:value="where.keywords"
|
||||||
|
@search="handleSearch"
|
||||||
|
/>
|
||||||
|
</a-space>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
<a-divider type="vertical"/>
|
||||||
|
<!-- <a-space>-->
|
||||||
|
<!-- <a-button @click="exportData" class="ele-btn-icon">-->
|
||||||
|
<!-- <template #icon>-->
|
||||||
|
<!-- <ExportOutlined/>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
<!-- 导出数据-->
|
||||||
|
<!-- </a-button>-->
|
||||||
|
<!-- </a-space>-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 导入弹窗 -->
|
||||||
|
<Import v-model:visible="showImport" @done="emit('importDone')"/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import {ref} from 'vue';
|
||||||
|
import {
|
||||||
|
DeleteOutlined
|
||||||
|
} from '@ant-design/icons-vue';
|
||||||
|
import type {ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
||||||
|
import Import from './Import.vue';
|
||||||
|
import useSearch from "@/utils/use-search";
|
||||||
|
|
||||||
|
withDefaults(
|
||||||
|
defineProps<{
|
||||||
|
// 选中的数据
|
||||||
|
selection?: any[];
|
||||||
|
}>(),
|
||||||
|
{
|
||||||
|
selection: () => []
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'search', where?: ShopDealerOrderParam): void;
|
||||||
|
(e: 'batchSettle'): void;
|
||||||
|
(e: 'export'): void;
|
||||||
|
(e: 'importDone'): void;
|
||||||
|
(e: 'remove'): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
// 是否显示导入弹窗
|
||||||
|
const showImport = ref(false);
|
||||||
|
|
||||||
|
// 搜索表单
|
||||||
|
const {where, resetFields} = useSearch<ShopDealerOrderParam>({
|
||||||
|
orderId: undefined,
|
||||||
|
orderNo: '',
|
||||||
|
productName: '',
|
||||||
|
isInvalid: undefined,
|
||||||
|
isSettled: undefined
|
||||||
|
});
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
const handleSearch = () => {
|
||||||
|
const searchParams = {...where};
|
||||||
|
// 清除空值
|
||||||
|
Object.keys(searchParams).forEach(key => {
|
||||||
|
if (searchParams[key] === '' || searchParams[key] === undefined) {
|
||||||
|
delete searchParams[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
emit('search', searchParams);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 重置搜索
|
||||||
|
const resetSearch = () => {
|
||||||
|
// Object.keys(searchForm).forEach(key => {
|
||||||
|
// searchForm[key] = key === 'orderId' ? undefined : '';
|
||||||
|
// });
|
||||||
|
resetFields();
|
||||||
|
emit('search', {});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 批量删除
|
||||||
|
const removeBatch = () => {
|
||||||
|
emit('remove');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 导出数据
|
||||||
|
const exportData = () => {
|
||||||
|
emit('export');
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.search-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
.search-form {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
:deep(.ant-form-item) {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-buttons {
|
||||||
|
border-top: 1px solid #f0f0f0;
|
||||||
|
padding-top: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,335 @@
|
|||||||
|
<!-- 编辑弹窗 -->
|
||||||
|
<template>
|
||||||
|
<ele-modal
|
||||||
|
:width="900"
|
||||||
|
:visible="visible"
|
||||||
|
:maskClosable="false"
|
||||||
|
:maxable="maxable"
|
||||||
|
:title="isUpdate ? '分销订单' : '分销订单'"
|
||||||
|
:body-style="{ paddingBottom: '28px' }"
|
||||||
|
@update:visible="updateVisible"
|
||||||
|
:footer="null"
|
||||||
|
>
|
||||||
|
<a-form
|
||||||
|
ref="formRef"
|
||||||
|
:model="form"
|
||||||
|
:rules="rules"
|
||||||
|
:label-col="{ span: 6 }"
|
||||||
|
:wrapper-col="{ span: 18 }"
|
||||||
|
>
|
||||||
|
<!-- 订单基本信息 -->
|
||||||
|
<a-divider orientation="left">
|
||||||
|
<span style="color: #1890ff; font-weight: 600;">基本信息</span>
|
||||||
|
</a-divider>
|
||||||
|
|
||||||
|
<a-row :gutter="16">
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="客户名称" name="comments">
|
||||||
|
{{ form.comments }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="订单编号" name="orderNo">
|
||||||
|
{{ form.orderNo }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="结算电量" name="orderPrice">
|
||||||
|
{{ parseFloat(form.orderPrice || 0).toFixed(2) }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="税率" name="rate">
|
||||||
|
{{ form.rate }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="单价" name="price">
|
||||||
|
{{ form.price }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="结算金额" name="payPrice">
|
||||||
|
{{ parseFloat(form.settledPrice || 0).toFixed(2) }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="实发金额" name="payPrice">
|
||||||
|
{{ parseFloat(form.payPrice || 0).toFixed(2) }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 分销商信息 -->
|
||||||
|
<a-divider orientation="left">
|
||||||
|
<span style="color: #1890ff; font-weight: 600;">收益计算</span>
|
||||||
|
</a-divider>
|
||||||
|
|
||||||
|
<!-- 二级分销商 -->
|
||||||
|
<div class="dealer-section">
|
||||||
|
<h4 class="dealer-title">
|
||||||
|
<a-tag color="orange">间推收益</a-tag>
|
||||||
|
</h4>
|
||||||
|
<a-row :gutter="16">
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="用户ID" name="firstUserId">
|
||||||
|
{{ form.firstUserId }}
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="昵称" name="firstNickname">
|
||||||
|
{{ form.firstNickname }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="占比" name="rate">
|
||||||
|
{{ '30%' }}
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="获取收益" name="firstMoney">
|
||||||
|
{{ form.firstMoney }}
|
||||||
|
<!-- <a-input-number-->
|
||||||
|
<!-- :min="0"-->
|
||||||
|
<!-- :precision="2"-->
|
||||||
|
<!-- placeholder="请输入一级分销佣金"-->
|
||||||
|
<!-- v-model:value=""-->
|
||||||
|
<!-- style="width: 100%"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <template #addonAfter>元</template>-->
|
||||||
|
<!-- </a-input-number>-->
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 一级分销商 -->
|
||||||
|
<div class="dealer-section">
|
||||||
|
<h4 class="dealer-title">
|
||||||
|
<a-tag color="orange">{{ form.thirdUserId > 0 ? '推荐收益' : '获取收益' }}</a-tag>
|
||||||
|
</h4>
|
||||||
|
<a-row :gutter="16">
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="用户ID" name="userId">
|
||||||
|
{{ form.userId }}
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="昵称" name="nickname">
|
||||||
|
{{ form.nickname }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="占比" name="rate">
|
||||||
|
{{ form?.thirdUserId > 0 ? '10%' : '70%' }}
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="获取收益" name="firstMoney">
|
||||||
|
{{ form.secondMoney }}
|
||||||
|
<!-- <a-input-number-->
|
||||||
|
<!-- :min="0"-->
|
||||||
|
<!-- :precision="2"-->
|
||||||
|
<!-- placeholder="请输入一级分销佣金"-->
|
||||||
|
<!-- v-model:value=""-->
|
||||||
|
<!-- style="width: 100%"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <template #addonAfter>元</template>-->
|
||||||
|
<!-- </a-input-number>-->
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 三级分销商 -->
|
||||||
|
<div class="dealer-section" v-if="form.thirdUserId > 0">
|
||||||
|
<h4 class="dealer-title">
|
||||||
|
<a-tag color="orange">{{ form.thirdUserId > 0 ? '获取收益' : '推荐收益' }}</a-tag>
|
||||||
|
</h4>
|
||||||
|
<a-row :gutter="16">
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="用户ID" name="secondUserId">
|
||||||
|
{{ form.secondUserId }}
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="昵称" name="secondNickname">
|
||||||
|
{{ form.secondNickname }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-form-item label="占比" name="rate">
|
||||||
|
{{ '60%' }}
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="获取收益" name="thirdMoney">
|
||||||
|
{{ form.thirdMoney }}
|
||||||
|
<!-- <a-input-number-->
|
||||||
|
<!-- :min="0"-->
|
||||||
|
<!-- :precision="2"-->
|
||||||
|
<!-- placeholder="请输入二级分销佣金"-->
|
||||||
|
<!-- v-model:value=""-->
|
||||||
|
<!-- style="width: 100%"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <template #addonAfter>元</template>-->
|
||||||
|
<!-- </a-input-number>-->
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a-form-item label="结算时间" name="settleTime" v-if="form.isSettled === 1">
|
||||||
|
{{ form.settleTime }}
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</ele-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, reactive, watch } from 'vue';
|
||||||
|
import { Form } from 'ant-design-vue';
|
||||||
|
import { assignObject } from 'ele-admin-pro';
|
||||||
|
import { ShopDealerOrder } from '@/api/shop/shopDealerOrder/model';
|
||||||
|
import { FormInstance } from 'ant-design-vue/es/form';
|
||||||
|
|
||||||
|
// 是否是修改
|
||||||
|
const isUpdate = ref(false);
|
||||||
|
const useForm = Form.useForm;
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
// 弹窗是否打开
|
||||||
|
visible: boolean;
|
||||||
|
// 修改回显的数据
|
||||||
|
data?: ShopDealerOrder | null;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'done'): void;
|
||||||
|
(e: 'update:visible', visible: boolean): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
// 是否显示最大化切换按钮
|
||||||
|
const maxable = ref(true);
|
||||||
|
// 表格选中数据
|
||||||
|
const formRef = ref<FormInstance | null>(null);
|
||||||
|
|
||||||
|
// 表单数据
|
||||||
|
const form = reactive<ShopDealerOrder>({
|
||||||
|
id: undefined,
|
||||||
|
userId: undefined,
|
||||||
|
nickname: undefined,
|
||||||
|
orderNo: undefined,
|
||||||
|
orderPrice: undefined,
|
||||||
|
settledPrice: undefined,
|
||||||
|
price: undefined,
|
||||||
|
month: undefined,
|
||||||
|
payPrice: undefined,
|
||||||
|
firstUserId: undefined,
|
||||||
|
secondUserId: undefined,
|
||||||
|
thirdUserId: undefined,
|
||||||
|
firstMoney: undefined,
|
||||||
|
secondMoney: undefined,
|
||||||
|
thirdMoney: undefined,
|
||||||
|
firstNickname: undefined,
|
||||||
|
secondNickname: undefined,
|
||||||
|
thirdNickname: undefined,
|
||||||
|
rate: undefined,
|
||||||
|
comments: undefined,
|
||||||
|
isInvalid: 0,
|
||||||
|
isSettled: 0,
|
||||||
|
settleTime: undefined,
|
||||||
|
tenantId: undefined,
|
||||||
|
createTime: undefined,
|
||||||
|
updateTime: undefined
|
||||||
|
});
|
||||||
|
|
||||||
|
/* 更新visible */
|
||||||
|
const updateVisible = (value: boolean) => {
|
||||||
|
emit('update:visible', value);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表单验证规则
|
||||||
|
const rules = reactive({
|
||||||
|
userId: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择用户ID',
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const { resetFields } = useForm(form, rules);
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.visible,
|
||||||
|
(visible) => {
|
||||||
|
if (visible) {
|
||||||
|
if (props.data) {
|
||||||
|
assignObject(form, props.data);
|
||||||
|
if(props.data.orderPrice && props.data.rate){
|
||||||
|
form.firstMoney = (Number(props.data.payPrice) * 0.3).toFixed(2)
|
||||||
|
if(props.data.thirdUserId && props.data.thirdUserId > 0){
|
||||||
|
form.secondMoney = (Number(props.data.payPrice) * 0.1).toFixed(2)
|
||||||
|
}else {
|
||||||
|
form.secondMoney = (Number(props.data.payPrice) * 0.7).toFixed(2)
|
||||||
|
}
|
||||||
|
form.thirdMoney = (Number(props.data.payPrice) * 0.6).toFixed(2)
|
||||||
|
}
|
||||||
|
isUpdate.value = true;
|
||||||
|
} else {
|
||||||
|
// 重置为默认值
|
||||||
|
Object.assign(form, {
|
||||||
|
id: undefined,
|
||||||
|
userId: undefined,
|
||||||
|
orderId: undefined,
|
||||||
|
orderPrice: undefined,
|
||||||
|
firstUserId: undefined,
|
||||||
|
secondUserId: undefined,
|
||||||
|
thirdUserId: undefined,
|
||||||
|
firstMoney: undefined,
|
||||||
|
secondMoney: undefined,
|
||||||
|
thirdMoney: undefined,
|
||||||
|
isInvalid: 0,
|
||||||
|
isSettled: 0,
|
||||||
|
settleTime: undefined
|
||||||
|
});
|
||||||
|
isUpdate.value = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resetFields();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.dealer-section {
|
||||||
|
margin-bottom: 24px;
|
||||||
|
padding: 16px;
|
||||||
|
background: #fafafa;
|
||||||
|
border-radius: 6px;
|
||||||
|
border-left: 3px solid #1890ff;
|
||||||
|
|
||||||
|
.dealer-title {
|
||||||
|
margin: 0 0 16px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
|
.ant-tag {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.ant-divider-horizontal.ant-divider-with-text-left) {
|
||||||
|
margin: 24px 0 16px 0;
|
||||||
|
|
||||||
|
.ant-divider-inner-text {
|
||||||
|
padding: 0 16px 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.ant-form-item) {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.ant-input-number) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
475
src/views/sdy/shopDealerOrder2/index.vue
Normal file
475
src/views/sdy/shopDealerOrder2/index.vue
Normal file
@@ -0,0 +1,475 @@
|
|||||||
|
<template>
|
||||||
|
<a-page-header :title="getPageTitle()" @back="() => $router.go(-1)">
|
||||||
|
<a-card :bordered="false" :body-style="{ padding: '16px' }">
|
||||||
|
<ele-pro-table
|
||||||
|
ref="tableRef"
|
||||||
|
row-key="id"
|
||||||
|
:columns="columns"
|
||||||
|
:datasource="datasource"
|
||||||
|
:customRow="customRow"
|
||||||
|
tool-class="ele-toolbar-form"
|
||||||
|
class="sys-org-table"
|
||||||
|
>
|
||||||
|
<template #toolbar>
|
||||||
|
<search
|
||||||
|
@search="reload"
|
||||||
|
:selection="selection"
|
||||||
|
@batchSettle="batchSettle"
|
||||||
|
@export="handleExport"
|
||||||
|
@remove="removeBatch"
|
||||||
|
@importDone="reload"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
|
||||||
|
<template v-if="column.key === 'comments'">
|
||||||
|
<div>{{ record.comments }}</div>
|
||||||
|
<div class="text-gray-400">用户ID:{{ record.userId }}</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'orderPrice'">
|
||||||
|
{{ parseFloat(record.orderPrice).toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'orderPrice1000'">
|
||||||
|
{{ (record.orderPrice * 1000).toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'price'">
|
||||||
|
{{ (record.price || 0).toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'settledPrice'">
|
||||||
|
{{ record.settledPrice.toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'payPrice'">
|
||||||
|
{{ record.payPrice.toFixed(2) }}
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'dealerInfo'">
|
||||||
|
<div class="dealer-info">
|
||||||
|
<div v-if="record.firstUserId" class="dealer-level">
|
||||||
|
<a-tag color="red">一级</a-tag>
|
||||||
|
用户{{ record.firstUserId }} - ¥{{ parseFloat(record.firstMoney || '0').toFixed(2) }}
|
||||||
|
</div>
|
||||||
|
<div v-if="record.secondUserId" class="dealer-level">
|
||||||
|
<a-tag color="orange">二级</a-tag>
|
||||||
|
用户{{ record.secondUserId }} - ¥{{ parseFloat(record.secondMoney || '0').toFixed(2) }}
|
||||||
|
</div>
|
||||||
|
<div v-if="record.thirdUserId" class="dealer-level">
|
||||||
|
<a-tag color="gold">三级</a-tag>
|
||||||
|
用户{{ record.thirdUserId }} - ¥{{ parseFloat(record.thirdMoney || '0').toFixed(2) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'isInvalid'">
|
||||||
|
<a-tag v-if="record.isInvalid === 0" color="success">已签约</a-tag>
|
||||||
|
<a-tag v-if="record.isInvalid === 1" color="error">未签约</a-tag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'isSettled'">
|
||||||
|
<a-tag v-if="record.isSettled === 0" color="orange">未结算</a-tag>
|
||||||
|
<a-tag v-if="record.isSettled === 1" color="success">已结算</a-tag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'createTime'">
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<a-tooltip title="创建时间">
|
||||||
|
<span class="text-gray-500">{{ record.createTime }}</span>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="结算时间">
|
||||||
|
<span class="text-purple-500">{{ record.settleTime }}</span>
|
||||||
|
</a-tooltip>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<template v-if="record.isSettled === 0 && record.isInvalid === 0">
|
||||||
|
<a @click="settleOrder(record)" class="ele-text-success">
|
||||||
|
结算
|
||||||
|
</a>
|
||||||
|
<a-divider type="vertical"/>
|
||||||
|
</template>
|
||||||
|
<!-- <template v-if="record.isInvalid === 0">-->
|
||||||
|
<!-- <a-popconfirm-->
|
||||||
|
<!-- title="确定要标记此订单为失效吗?"-->
|
||||||
|
<!-- @confirm="invalidateOrder(record)"-->
|
||||||
|
<!-- placement="topRight"-->
|
||||||
|
<!-- >-->
|
||||||
|
<!-- <a class="text-purple-500">-->
|
||||||
|
<!-- 验证-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!-- </a-popconfirm>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
<a-popconfirm
|
||||||
|
v-if="record.isSettled === 0"
|
||||||
|
title="确定要删除吗?"
|
||||||
|
@confirm="remove(record)"
|
||||||
|
placement="topRight"
|
||||||
|
>
|
||||||
|
<a class="text-red-500">
|
||||||
|
删除
|
||||||
|
</a>
|
||||||
|
</a-popconfirm>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</ele-pro-table>
|
||||||
|
</a-card>
|
||||||
|
|
||||||
|
<!-- 编辑弹窗 -->
|
||||||
|
<ShopDealerOrderEdit v-model:visible="showEdit" :data="current" @done="reload"/>
|
||||||
|
</a-page-header>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import {createVNode, ref} from 'vue';
|
||||||
|
import {message, Modal} from 'ant-design-vue';
|
||||||
|
import {
|
||||||
|
ExclamationCircleOutlined,
|
||||||
|
DollarOutlined,
|
||||||
|
} from '@ant-design/icons-vue';
|
||||||
|
import type {EleProTable} from 'ele-admin-pro';
|
||||||
|
import type {
|
||||||
|
DatasourceFunction,
|
||||||
|
ColumnItem
|
||||||
|
} from 'ele-admin-pro/es/ele-pro-table/types';
|
||||||
|
import Search from './components/search.vue';
|
||||||
|
import {getPageTitle} from '@/utils/common';
|
||||||
|
import ShopDealerOrderEdit from './components/shopDealerOrderEdit.vue';
|
||||||
|
import {pageShopDealerOrder, removeShopDealerOrder, removeBatchShopDealerOrder} from '@/api/shop/shopDealerOrder';
|
||||||
|
import type {ShopDealerOrder, ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
||||||
|
import {exportSdyDealerOrder, updateSdyDealerOrder} from "@/api/sdy/sdyDealerOrder";
|
||||||
|
|
||||||
|
// 表格实例
|
||||||
|
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||||
|
|
||||||
|
// 表格选中数据
|
||||||
|
const selection = ref<ShopDealerOrder[]>([]);
|
||||||
|
// 当前编辑数据
|
||||||
|
const current = ref<ShopDealerOrder | null>(null);
|
||||||
|
// 是否显示编辑弹窗
|
||||||
|
const showEdit = ref(false);
|
||||||
|
// 加载状态
|
||||||
|
const loading = ref(true);
|
||||||
|
|
||||||
|
// 当前搜索条件
|
||||||
|
const currentWhere = ref<ShopDealerOrderParam>({});
|
||||||
|
|
||||||
|
// 表格数据源
|
||||||
|
const datasource: DatasourceFunction = ({
|
||||||
|
page,
|
||||||
|
limit,
|
||||||
|
where,
|
||||||
|
orders,
|
||||||
|
filters
|
||||||
|
}) => {
|
||||||
|
if (filters) {
|
||||||
|
where.status = filters.status;
|
||||||
|
}
|
||||||
|
// 保存当前搜索条件用于导出
|
||||||
|
currentWhere.value = {...where};
|
||||||
|
// 已结算订单
|
||||||
|
where.isSettled = 1;
|
||||||
|
return pageShopDealerOrder({
|
||||||
|
...where,
|
||||||
|
...orders,
|
||||||
|
page,
|
||||||
|
limit
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表格列配置
|
||||||
|
const columns = ref<ColumnItem[]>([
|
||||||
|
{
|
||||||
|
key: 'index',
|
||||||
|
width: 48,
|
||||||
|
align: 'center',
|
||||||
|
fixed: 'left',
|
||||||
|
hideInSetting: true,
|
||||||
|
customRender: ({index}) => index + (tableRef.value?.tableIndex ?? 0)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '客户名称',
|
||||||
|
dataIndex: 'comments',
|
||||||
|
key: 'comments',
|
||||||
|
width: 180
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '结算电量',
|
||||||
|
dataIndex: 'orderPrice',
|
||||||
|
key: 'orderPrice',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '换算成度',
|
||||||
|
dataIndex: 'orderPrice1000',
|
||||||
|
key: 'orderPrice1000',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '结算单价',
|
||||||
|
dataIndex: 'price',
|
||||||
|
key: 'price',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '结算金额',
|
||||||
|
dataIndex: 'settledPrice',
|
||||||
|
key: 'settledPrice',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '税费',
|
||||||
|
dataIndex: 'rate',
|
||||||
|
key: 'rate',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '实发金额',
|
||||||
|
dataIndex: 'payPrice',
|
||||||
|
key: 'payPrice',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '签约状态',
|
||||||
|
dataIndex: 'isInvalid',
|
||||||
|
key: 'isInvalid',
|
||||||
|
align: 'center',
|
||||||
|
width: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '月份',
|
||||||
|
dataIndex: 'month',
|
||||||
|
key: 'month',
|
||||||
|
align: 'center',
|
||||||
|
width: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '结算状态',
|
||||||
|
dataIndex: 'isSettled',
|
||||||
|
key: 'isSettled',
|
||||||
|
align: 'center',
|
||||||
|
width: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建时间',
|
||||||
|
dataIndex: 'createTime',
|
||||||
|
key: 'createTime',
|
||||||
|
align: 'center'
|
||||||
|
}
|
||||||
|
// {
|
||||||
|
// title: '操作',
|
||||||
|
// key: 'action',
|
||||||
|
// width: 180,
|
||||||
|
// fixed: 'right',
|
||||||
|
// align: 'center',
|
||||||
|
// hideInSetting: true
|
||||||
|
// }
|
||||||
|
]);
|
||||||
|
|
||||||
|
/* 搜索 */
|
||||||
|
const reload = (where?: ShopDealerOrderParam) => {
|
||||||
|
selection.value = [];
|
||||||
|
tableRef?.value?.reload({where: where});
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 结算单个订单 */
|
||||||
|
const settleOrder = (row: ShopDealerOrder) => {
|
||||||
|
const totalCommission = (parseFloat(row.firstMoney || '0') +
|
||||||
|
parseFloat(row.secondMoney || '0') +
|
||||||
|
parseFloat(row.thirdMoney || '0')).toFixed(2);
|
||||||
|
|
||||||
|
Modal.confirm({
|
||||||
|
title: '确认结算',
|
||||||
|
content: `确定要结算此订单吗?总佣金金额:¥${totalCommission}`,
|
||||||
|
icon: createVNode(DollarOutlined),
|
||||||
|
okText: '确认结算',
|
||||||
|
okType: 'primary',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk: () => {
|
||||||
|
const hide = message.loading('正在结算...', 0);
|
||||||
|
// 这里调用结算API
|
||||||
|
updateSdyDealerOrder({
|
||||||
|
...row,
|
||||||
|
isSettled: 1
|
||||||
|
})
|
||||||
|
setTimeout(() => {
|
||||||
|
hide();
|
||||||
|
message.success('结算成功');
|
||||||
|
reload();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 批量结算 */
|
||||||
|
const batchSettle = () => {
|
||||||
|
if (!selection.value.length) {
|
||||||
|
message.error('请至少选择一条数据');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const validOrders = selection.value.filter(order =>
|
||||||
|
order.isSettled === 0 && order.isInvalid === 0
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!validOrders.length) {
|
||||||
|
message.error('所选订单中没有可结算的订单');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const totalCommission = validOrders.reduce((sum, order) => {
|
||||||
|
return sum + parseFloat(order.firstMoney || '0') +
|
||||||
|
parseFloat(order.secondMoney || '0') +
|
||||||
|
parseFloat(order.thirdMoney || '0');
|
||||||
|
}, 0).toFixed(2);
|
||||||
|
|
||||||
|
Modal.confirm({
|
||||||
|
title: '批量结算确认',
|
||||||
|
content: `确定要结算选中的 ${validOrders.length} 个订单吗?总佣金金额:¥${totalCommission}`,
|
||||||
|
icon: createVNode(ExclamationCircleOutlined),
|
||||||
|
okText: '确认结算',
|
||||||
|
okType: 'primary',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk: () => {
|
||||||
|
const hide = message.loading('正在批量结算...', 0);
|
||||||
|
// 这里调用批量结算API
|
||||||
|
setTimeout(() => {
|
||||||
|
hide();
|
||||||
|
message.success(`成功结算 ${validOrders.length} 个订单`);
|
||||||
|
reload();
|
||||||
|
}, 1500);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 导出数据 */
|
||||||
|
const handleExport = () => {
|
||||||
|
// 调用导出API,传入当前搜索条件
|
||||||
|
exportSdyDealerOrder(currentWhere.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 打开编辑弹窗 */
|
||||||
|
const openEdit = (row?: ShopDealerOrder) => {
|
||||||
|
current.value = row ?? null;
|
||||||
|
showEdit.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 删除单个 */
|
||||||
|
const remove = (row: ShopDealerOrder) => {
|
||||||
|
const hide = message.loading('请求中..', 0);
|
||||||
|
removeShopDealerOrder(row.id)
|
||||||
|
.then((msg) => {
|
||||||
|
hide();
|
||||||
|
message.success(msg);
|
||||||
|
reload();
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
hide();
|
||||||
|
message.error(e.message);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 批量删除 */
|
||||||
|
const removeBatch = () => {
|
||||||
|
if (!selection.value.length) {
|
||||||
|
message.error('请至少选择一条数据');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Modal.confirm({
|
||||||
|
title: '提示',
|
||||||
|
content: '确定要删除选中的记录吗?',
|
||||||
|
icon: createVNode(ExclamationCircleOutlined),
|
||||||
|
maskClosable: true,
|
||||||
|
onOk: () => {
|
||||||
|
const hide = message.loading('请求中..', 0);
|
||||||
|
removeBatchShopDealerOrder(selection.value.map((d) => d.id))
|
||||||
|
.then((msg) => {
|
||||||
|
hide();
|
||||||
|
message.success(msg);
|
||||||
|
reload();
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
hide();
|
||||||
|
message.error(e.message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 查询 */
|
||||||
|
const query = () => {
|
||||||
|
loading.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 自定义行属性 */
|
||||||
|
const customRow = (record: ShopDealerOrder) => {
|
||||||
|
return {
|
||||||
|
// 行点击事件
|
||||||
|
onClick: () => {
|
||||||
|
// console.log(record);
|
||||||
|
},
|
||||||
|
// 行双击事件
|
||||||
|
onDblclick: () => {
|
||||||
|
openEdit(record);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
query();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
export default {
|
||||||
|
name: 'ShopDealerOrder'
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.order-info {
|
||||||
|
.order-id {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-price {
|
||||||
|
color: #ff4d4f;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dealer-info {
|
||||||
|
.dealer-level {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.detail-section) {
|
||||||
|
h4 {
|
||||||
|
color: #1890ff;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
border-bottom: 1px solid #f0f0f0;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 4px 0;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.ant-table-tbody > tr > td) {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.ant-tag) {
|
||||||
|
margin: 2px 4px 2px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -96,9 +96,9 @@
|
|||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
|
|
||||||
<a-form-item label="流动描述" name="describe">
|
<a-form-item label="流动描述" name="comments">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
v-model:value="form.describe"
|
v-model:value="form.comments"
|
||||||
placeholder="请输入资金流动描述"
|
placeholder="请输入资金流动描述"
|
||||||
:rows="3"
|
:rows="3"
|
||||||
:maxlength="200"
|
:maxlength="200"
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
orderId: undefined,
|
orderId: undefined,
|
||||||
flowType: undefined,
|
flowType: undefined,
|
||||||
money: undefined,
|
money: undefined,
|
||||||
describe: '',
|
comments: '',
|
||||||
toUserId: undefined,
|
toUserId: undefined,
|
||||||
tenantId: undefined,
|
tenantId: undefined,
|
||||||
createTime: undefined,
|
createTime: undefined,
|
||||||
@@ -230,7 +230,7 @@
|
|||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
describe: [
|
comments: [
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入流动描述',
|
message: '请输入流动描述',
|
||||||
@@ -335,7 +335,7 @@
|
|||||||
orderId: undefined,
|
orderId: undefined,
|
||||||
flowType: undefined,
|
flowType: undefined,
|
||||||
money: undefined,
|
money: undefined,
|
||||||
describe: '',
|
comments: '',
|
||||||
toUserId: undefined,
|
toUserId: undefined,
|
||||||
tenantId: undefined,
|
tenantId: undefined,
|
||||||
createTime: undefined,
|
createTime: undefined,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<a-card :bordered="false" :body-style="{ padding: '16px' }">
|
<a-card :bordered="false" :body-style="{ padding: '16px' }">
|
||||||
<ele-pro-table
|
<ele-pro-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
row-key="shopDealerCapitalId"
|
row-key="id"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:datasource="datasource"
|
:datasource="datasource"
|
||||||
:customRow="customRow"
|
:customRow="customRow"
|
||||||
@@ -223,7 +223,7 @@
|
|||||||
/* 删除单个 */
|
/* 删除单个 */
|
||||||
const remove = (row: ShopDealerCapital) => {
|
const remove = (row: ShopDealerCapital) => {
|
||||||
const hide = message.loading('请求中..', 0);
|
const hide = message.loading('请求中..', 0);
|
||||||
removeShopDealerCapital(row.shopDealerCapitalId)
|
removeShopDealerCapital(row.id)
|
||||||
.then((msg) => {
|
.then((msg) => {
|
||||||
hide();
|
hide();
|
||||||
message.success(msg);
|
message.success(msg);
|
||||||
@@ -248,7 +248,7 @@
|
|||||||
maskClosable: true,
|
maskClosable: true,
|
||||||
onOk: () => {
|
onOk: () => {
|
||||||
const hide = message.loading('请求中..', 0);
|
const hide = message.loading('请求中..', 0);
|
||||||
removeBatchShopDealerCapital(selection.value.map((d) => d.shopDealerCapitalId))
|
removeBatchShopDealerCapital(selection.value.map((d) => d.id))
|
||||||
.then((msg) => {
|
.then((msg) => {
|
||||||
hide();
|
hide();
|
||||||
message.success(msg);
|
message.success(msg);
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
</a>
|
</a>
|
||||||
<template v-if="record.isSettled === 0 && record.isInvalid === 0">
|
<template v-if="record.isSettled === 0 && record.isInvalid === 0">
|
||||||
<a-divider type="vertical"/>
|
<a-divider type="vertical"/>
|
||||||
<a @click="settleOrder(record)" class="ele-text-success">
|
<a @click="openEdit(record)" class="ele-text-success">
|
||||||
<DollarOutlined/>
|
<DollarOutlined/>
|
||||||
结算
|
结算
|
||||||
</a>
|
</a>
|
||||||
@@ -107,7 +107,12 @@ import type {
|
|||||||
import Search from './components/search.vue';
|
import Search from './components/search.vue';
|
||||||
import {getPageTitle} from '@/utils/common';
|
import {getPageTitle} from '@/utils/common';
|
||||||
import ShopDealerOrderEdit from './components/shopDealerOrderEdit.vue';
|
import ShopDealerOrderEdit from './components/shopDealerOrderEdit.vue';
|
||||||
import {pageShopDealerOrder, removeShopDealerOrder, removeBatchShopDealerOrder, exportShopDealerOrder} from '@/api/shop/shopDealerOrder';
|
import {
|
||||||
|
pageShopDealerOrder,
|
||||||
|
removeShopDealerOrder,
|
||||||
|
removeBatchShopDealerOrder,
|
||||||
|
exportShopDealerOrder
|
||||||
|
} from '@/api/shop/shopDealerOrder';
|
||||||
import type {ShopDealerOrder, ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
import type {ShopDealerOrder, ShopDealerOrderParam} from '@/api/shop/shopDealerOrder/model';
|
||||||
|
|
||||||
// 表格实例
|
// 表格实例
|
||||||
@@ -119,8 +124,6 @@ const selection = ref<ShopDealerOrder[]>([]);
|
|||||||
const current = ref<ShopDealerOrder | null>(null);
|
const current = ref<ShopDealerOrder | null>(null);
|
||||||
// 是否显示编辑弹窗
|
// 是否显示编辑弹窗
|
||||||
const showEdit = ref(false);
|
const showEdit = ref(false);
|
||||||
// 是否显示批量移动弹窗
|
|
||||||
const showMove = ref(false);
|
|
||||||
// 加载状态
|
// 加载状态
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
|
|
||||||
@@ -139,7 +142,7 @@ const datasource: DatasourceFunction = ({
|
|||||||
where.status = filters.status;
|
where.status = filters.status;
|
||||||
}
|
}
|
||||||
// 保存当前搜索条件用于导出
|
// 保存当前搜索条件用于导出
|
||||||
currentWhere.value = { ...where };
|
currentWhere.value = {...where};
|
||||||
return pageShopDealerOrder({
|
return pageShopDealerOrder({
|
||||||
...where,
|
...where,
|
||||||
...orders,
|
...orders,
|
||||||
@@ -301,31 +304,6 @@ const viewDetail = (row: ShopDealerOrder) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 结算单个订单 */
|
|
||||||
const settleOrder = (row: ShopDealerOrder) => {
|
|
||||||
const totalCommission = (parseFloat(row.firstMoney || '0') +
|
|
||||||
parseFloat(row.secondMoney || '0') +
|
|
||||||
parseFloat(row.thirdMoney || '0')).toFixed(2);
|
|
||||||
|
|
||||||
Modal.confirm({
|
|
||||||
title: '确认结算',
|
|
||||||
content: `确定要结算此订单的佣金吗?总佣金金额:¥${totalCommission}`,
|
|
||||||
icon: createVNode(DollarOutlined),
|
|
||||||
okText: '确认结算',
|
|
||||||
okType: 'primary',
|
|
||||||
cancelText: '取消',
|
|
||||||
onOk: () => {
|
|
||||||
const hide = message.loading('正在结算...', 0);
|
|
||||||
// 这里调用结算API
|
|
||||||
setTimeout(() => {
|
|
||||||
hide();
|
|
||||||
message.success('结算成功');
|
|
||||||
reload();
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/* 标记订单失效 */
|
/* 标记订单失效 */
|
||||||
const invalidateOrder = (row: ShopDealerOrder) => {
|
const invalidateOrder = (row: ShopDealerOrder) => {
|
||||||
const hide = message.loading('正在处理...', 0);
|
const hide = message.loading('正在处理...', 0);
|
||||||
@@ -505,4 +483,4 @@ export default {
|
|||||||
:deep(.ant-tag) {
|
:deep(.ant-tag) {
|
||||||
margin: 2px 4px 2px 0;
|
margin: 2px 4px 2px 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user