|
|
@ -1,17 +1,14 @@
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
|
|
|
|
<!-- 定义一个订单模块的容器 -->
|
|
|
|
<div class="mod-order-order">
|
|
|
|
<div class="mod-order-order">
|
|
|
|
<el-form
|
|
|
|
<!-- 表单区域,用于输入筛选条件 -->
|
|
|
|
:inline="true"
|
|
|
|
<el-form :inline="true" :model="dataForm" @keyup.enter="getDataList(page)">
|
|
|
|
:model="dataForm"
|
|
|
|
<!-- 输入框:订单编号 -->
|
|
|
|
@keyup.enter="getDataList(page)"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<el-form-item label="订单编号:">
|
|
|
|
<el-form-item label="订单编号:">
|
|
|
|
<el-input
|
|
|
|
<el-input v-model="dataForm.orderNumber" placeholder="订单编号" clearable />
|
|
|
|
v-model="dataForm.orderNumber"
|
|
|
|
|
|
|
|
placeholder="订单编号"
|
|
|
|
|
|
|
|
clearable
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 时间选择器:下单时间范围 -->
|
|
|
|
<el-form-item label="下单时间:">
|
|
|
|
<el-form-item label="下单时间:">
|
|
|
|
<el-date-picker
|
|
|
|
<el-date-picker
|
|
|
|
v-model="dateRange"
|
|
|
|
v-model="dateRange"
|
|
|
@ -22,95 +19,59 @@
|
|
|
|
end-placeholder="结束日期"
|
|
|
|
end-placeholder="结束日期"
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 下拉菜单:订单状态 -->
|
|
|
|
<el-form-item label="订单状态:">
|
|
|
|
<el-form-item label="订单状态:">
|
|
|
|
<el-select
|
|
|
|
<el-select v-model="dataForm.status" clearable placeholder="请选择订单状态">
|
|
|
|
v-model="dataForm.status"
|
|
|
|
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
|
clearable
|
|
|
|
|
|
|
|
placeholder="请选择订单状态"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
|
|
v-for="item in options"
|
|
|
|
|
|
|
|
:key="item.value"
|
|
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-select>
|
|
|
|
</el-select>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 按钮组:查询、导出、清空 -->
|
|
|
|
<el-form-item>
|
|
|
|
<el-form-item>
|
|
|
|
<el-button
|
|
|
|
<el-button type="primary" icon="el-icon-search" @click="getDataList()">查询</el-button>
|
|
|
|
type="primary"
|
|
|
|
<el-button v-if="isAuth('order:order:waitingConsignmentExcel')" type="primary" @click="showConsignmentInfo()">
|
|
|
|
icon="el-icon-search"
|
|
|
|
|
|
|
|
@click="getDataList()"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
查询
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
|
|
v-if="isAuth('order:order:waitingConsignmentExcel')"
|
|
|
|
|
|
|
|
type="primary"
|
|
|
|
|
|
|
|
@click="showConsignmentInfo()"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
导出待发货订单
|
|
|
|
导出待发货订单
|
|
|
|
</el-button>
|
|
|
|
</el-button>
|
|
|
|
<el-button
|
|
|
|
<el-button v-if="isAuth('order:order:soldExcel')" type="primary" @click="getSoldExcel()">
|
|
|
|
v-if="isAuth('order:order:soldExcel')"
|
|
|
|
|
|
|
|
type="primary"
|
|
|
|
|
|
|
|
@click="getSoldExcel()"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
导出销售记录
|
|
|
|
导出销售记录
|
|
|
|
</el-button>
|
|
|
|
</el-button>
|
|
|
|
<el-button @click="clearDatas()">
|
|
|
|
<el-button @click="clearDatas()">清空</el-button>
|
|
|
|
清空
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form>
|
|
|
|
</el-form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 主要内容区 -->
|
|
|
|
<div class="main">
|
|
|
|
<div class="main">
|
|
|
|
<div class="content">
|
|
|
|
<div class="content">
|
|
|
|
|
|
|
|
<!-- 标题栏,显示商品信息头部 -->
|
|
|
|
<div class="tit">
|
|
|
|
<div class="tit">
|
|
|
|
<el-row style="width:100%">
|
|
|
|
<el-row style="width:100%">
|
|
|
|
<el-col :span="10">
|
|
|
|
<el-col :span="10"><span class="item product">商品</span></el-col>
|
|
|
|
<span class="item product">商品</span>
|
|
|
|
<el-col :span="3"><span class="item">成交单价/购买数量</span></el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col :span="3"><span class="item">实付金额</span></el-col>
|
|
|
|
<el-col :span="3">
|
|
|
|
<el-col :span="3"><span class="item">支付方式</span></el-col>
|
|
|
|
<span class="item">成交单价/购买数量</span>
|
|
|
|
<el-col :span="3"><span class="item">订单状态</span></el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col :span="2"><span class="item">操作</span></el-col>
|
|
|
|
<el-col :span="3">
|
|
|
|
|
|
|
|
<span class="item">实付金额</span>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="3">
|
|
|
|
|
|
|
|
<span class="item">支付方式</span>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="3">
|
|
|
|
|
|
|
|
<span class="item">订单状态</span>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
<el-col :span="2">
|
|
|
|
|
|
|
|
<span class="item">操作</span>
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
|
|
</el-row>
|
|
|
|
</el-row>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div
|
|
|
|
|
|
|
|
v-for="order in dataList"
|
|
|
|
<!-- 订单列表 -->
|
|
|
|
:key="order.orderId"
|
|
|
|
<div v-for="order in dataList" :key="order.orderId" class="prod">
|
|
|
|
class="prod"
|
|
|
|
<!-- 订单标题 -->
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="prod-tit">
|
|
|
|
<div class="prod-tit">
|
|
|
|
<span>订单编号:{{ order.orderNumber }}</span>
|
|
|
|
<span>订单编号:{{ order.orderNumber }}</span>
|
|
|
|
<span>下单时间:{{ order.createTime }}</span>
|
|
|
|
<span>下单时间:{{ order.createTime }}</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 订单内容 -->
|
|
|
|
<div class="prod-cont">
|
|
|
|
<div class="prod-cont">
|
|
|
|
<el-row style="width:100%">
|
|
|
|
<el-row style="width:100%">
|
|
|
|
|
|
|
|
<!-- 商品信息 -->
|
|
|
|
<el-col :span="12">
|
|
|
|
<el-col :span="12">
|
|
|
|
<div class="prod-item">
|
|
|
|
<div class="prod-item">
|
|
|
|
<div
|
|
|
|
<div v-for="orderItem in order.orderItems" :key="orderItem.orderItemId" class="items name">
|
|
|
|
v-for="orderItem in order.orderItems"
|
|
|
|
|
|
|
|
:key="orderItem.orderItemId"
|
|
|
|
|
|
|
|
class="items name"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="prod-image">
|
|
|
|
<div class="prod-image">
|
|
|
|
<img
|
|
|
|
<img alt="" :src="resourcesUrl + orderItem.pic" style="height:100px;width: 100px;" />
|
|
|
|
alt=""
|
|
|
|
|
|
|
|
:src="resourcesUrl + orderItem.pic"
|
|
|
|
|
|
|
|
style="height:100px;width: 100px;"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="prod-name">
|
|
|
|
<div class="prod-name">
|
|
|
|
<span>{{ orderItem.prodName }}</span>
|
|
|
|
<span>{{ orderItem.prodName }}</span>
|
|
|
@ -123,10 +84,9 @@
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col
|
|
|
|
|
|
|
|
:span="3"
|
|
|
|
<!-- 实付金额 -->
|
|
|
|
style="height: 100%;"
|
|
|
|
<el-col :span="3" style="height: 100%;">
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="item">
|
|
|
|
<div class="item">
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<span class="totalprice">¥{{ order.actualTotal }}</span>
|
|
|
|
<span class="totalprice">¥{{ order.actualTotal }}</span>
|
|
|
@ -135,10 +95,9 @@
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col
|
|
|
|
|
|
|
|
:span="3"
|
|
|
|
<!-- 支付方式 -->
|
|
|
|
style="height: 100%;"
|
|
|
|
<el-col :span="3" style="height: 100%;">
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="item">
|
|
|
|
<div class="item">
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<span v-if="order.payType === 1">微信支付</span>
|
|
|
|
<span v-if="order.payType === 1">微信支付</span>
|
|
|
@ -147,47 +106,24 @@
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col
|
|
|
|
|
|
|
|
:span="3"
|
|
|
|
<!-- 订单状态 -->
|
|
|
|
style="height: 100%;"
|
|
|
|
<el-col :span="3" style="height: 100%;">
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="item">
|
|
|
|
<div class="item">
|
|
|
|
<span
|
|
|
|
<span v-if="order.status === 1" type="danger">待付款</span>
|
|
|
|
v-if="order.status === 1"
|
|
|
|
<span v-else-if="order.status === 2" type="danger">待发货</span>
|
|
|
|
type="danger"
|
|
|
|
<span v-else-if="order.status === 3" type="danger">待收货</span>
|
|
|
|
>待付款</span>
|
|
|
|
<span v-else-if="order.status === 4" type="danger">待评价</span>
|
|
|
|
<span
|
|
|
|
<span v-else-if="order.status === 5" type="danger">成功</span>
|
|
|
|
v-else-if="order.status === 2"
|
|
|
|
<span v-else>失败</span>
|
|
|
|
type="danger"
|
|
|
|
|
|
|
|
>待发货</span>
|
|
|
|
|
|
|
|
<span
|
|
|
|
|
|
|
|
v-else-if="order.status === 3"
|
|
|
|
|
|
|
|
type="danger"
|
|
|
|
|
|
|
|
>待收货</span>
|
|
|
|
|
|
|
|
<span
|
|
|
|
|
|
|
|
v-else-if="order.status === 4"
|
|
|
|
|
|
|
|
type="danger"
|
|
|
|
|
|
|
|
>待评价</span>
|
|
|
|
|
|
|
|
<span
|
|
|
|
|
|
|
|
v-else-if="order.status === 5"
|
|
|
|
|
|
|
|
type="danger"
|
|
|
|
|
|
|
|
>成功</span>
|
|
|
|
|
|
|
|
<span
|
|
|
|
|
|
|
|
v-else
|
|
|
|
|
|
|
|
>失败</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
<el-col
|
|
|
|
|
|
|
|
:span="3"
|
|
|
|
<!-- 操作按钮 -->
|
|
|
|
style="height: 100%;"
|
|
|
|
<el-col :span="3" style="height: 100%;">
|
|
|
|
>
|
|
|
|
|
|
|
|
<div class="item">
|
|
|
|
<div class="item">
|
|
|
|
<div class="operate">
|
|
|
|
<div class="operate">
|
|
|
|
<el-button
|
|
|
|
<el-button v-if="isAuth('order:order:update')" type="text" @click="onAddOrUpdate(order.orderNumber)">
|
|
|
|
v-if="isAuth('order:order:update')"
|
|
|
|
|
|
|
|
type="text"
|
|
|
|
|
|
|
|
@click="onAddOrUpdate(order.orderNumber)"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
查看
|
|
|
|
查看
|
|
|
|
</el-button>
|
|
|
|
</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
@ -195,6 +131,8 @@
|
|
|
|
</el-col>
|
|
|
|
</el-col>
|
|
|
|
</el-row>
|
|
|
|
</el-row>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 备注信息 -->
|
|
|
|
<div class="remark">
|
|
|
|
<div class="remark">
|
|
|
|
<div class="buyer-remark">
|
|
|
|
<div class="buyer-remark">
|
|
|
|
<span>备注:{{ order.remarks }}</span>
|
|
|
|
<span>备注:{{ order.remarks }}</span>
|
|
|
@ -203,15 +141,15 @@
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- 空 -->
|
|
|
|
|
|
|
|
<div
|
|
|
|
<!-- 当没有数据时显示的提示信息 -->
|
|
|
|
v-if="!dataList.length"
|
|
|
|
<div v-if="!dataList.length" class="empty-tips">
|
|
|
|
class="empty-tips"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
暂无数据
|
|
|
|
暂无数据
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 分页组件 -->
|
|
|
|
<el-pagination
|
|
|
|
<el-pagination
|
|
|
|
:current-page="page.pageIndex"
|
|
|
|
:current-page="page.currentPage"
|
|
|
|
:page-sizes="[10, 20, 50, 100]"
|
|
|
|
:page-sizes="[10, 20, 50, 100]"
|
|
|
|
:page-size="page.pageSize"
|
|
|
|
:page-size="page.pageSize"
|
|
|
|
:total="page.total"
|
|
|
|
:total="page.total"
|
|
|
@ -219,63 +157,73 @@
|
|
|
|
@size-change="sizeChangeHandle"
|
|
|
|
@size-change="sizeChangeHandle"
|
|
|
|
@current-change="currentChangeHandle"
|
|
|
|
@current-change="currentChangeHandle"
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
<!-- 弹窗, 新增 / 修改 -->
|
|
|
|
|
|
|
|
<add-or-update
|
|
|
|
<!-- 弹窗:新增或修改订单 -->
|
|
|
|
v-if="addOrUpdateVisible"
|
|
|
|
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refresh-data-list="getDataList" />
|
|
|
|
ref="addOrUpdateRef"
|
|
|
|
|
|
|
|
@refresh-data-list="getDataList"
|
|
|
|
<!-- 弹窗:查看发货信息 -->
|
|
|
|
/>
|
|
|
|
<consignment-info v-if="consignmentInfoVisible" ref="consignmentInfoRef" @input-callback="getWaitingConsignmentExcel" />
|
|
|
|
<consignment-info
|
|
|
|
|
|
|
|
v-if="consignmentInfoVisible"
|
|
|
|
|
|
|
|
ref="consignmentInfoRef"
|
|
|
|
|
|
|
|
@input-callback="getWaitingConsignmentExcel"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
<script setup>
|
|
|
|
|
|
|
|
// 导入子组件用于订单信息编辑或新增以及发货信息查看。
|
|
|
|
import AddOrUpdate from './components/order-info.vue'
|
|
|
|
import AddOrUpdate from './components/order-info.vue'
|
|
|
|
import ConsignmentInfo from './components/consignment-info.vue'
|
|
|
|
import ConsignmentInfo from './components/consignment-info.vue'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 引入权限验证工具函数。
|
|
|
|
import { isAuth } from '@/utils'
|
|
|
|
import { isAuth } from '@/utils'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取环境变量中的资源URL。
|
|
|
|
const resourcesUrl = import.meta.env.VITE_APP_RESOURCES_URL
|
|
|
|
const resourcesUrl = import.meta.env.VITE_APP_RESOURCES_URL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义表单数据对象,用于存储用户输入的数据。
|
|
|
|
const dataForm = ref({})
|
|
|
|
const dataForm = ref({})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义日期范围选择器的双向绑定值。
|
|
|
|
const dateRange = ref([])
|
|
|
|
const dateRange = ref([])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义订单状态选项列表,供用户选择订单状态进行筛选。
|
|
|
|
const options = [{
|
|
|
|
const options = [{
|
|
|
|
value: 1,
|
|
|
|
value: 1,
|
|
|
|
label: '待付款'
|
|
|
|
label: '待付款'
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
{
|
|
|
|
|
|
|
|
value: 2,
|
|
|
|
value: 2,
|
|
|
|
label: '待发货'
|
|
|
|
label: '待发货'
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
{
|
|
|
|
|
|
|
|
value: 3,
|
|
|
|
value: 3,
|
|
|
|
label: '待收货'
|
|
|
|
label: '待收货'
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
{
|
|
|
|
|
|
|
|
value: 4,
|
|
|
|
value: 4,
|
|
|
|
label: '待评价'
|
|
|
|
label: '待评价'
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
{
|
|
|
|
|
|
|
|
value: 5,
|
|
|
|
value: 5,
|
|
|
|
label: '成功'
|
|
|
|
label: '成功'
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
{
|
|
|
|
|
|
|
|
value: 6,
|
|
|
|
value: 6,
|
|
|
|
label: '失败'
|
|
|
|
label: '失败'
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义数据列表引用,用于存储从服务器获取的订单数据。
|
|
|
|
const dataList = ref([])
|
|
|
|
const dataList = ref([])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义分页参数,包括总条数、当前页码和每页显示的数量。
|
|
|
|
const page = reactive({
|
|
|
|
const page = reactive({
|
|
|
|
total: 0, // 总页数
|
|
|
|
total: 0, // 总页数
|
|
|
|
currentPage: 1, // 当前页数
|
|
|
|
currentPage: 1, // 当前页数
|
|
|
|
pageSize: 10 // 每页显示多少条
|
|
|
|
pageSize: 10 // 每页显示多少条
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 页面加载时调用此方法获取初始数据。
|
|
|
|
onMounted(() => {
|
|
|
|
onMounted(() => {
|
|
|
|
getDataList(page)
|
|
|
|
getDataList(page)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 获取数据列表
|
|
|
|
* 发起HTTP请求获取订单数据列表,并更新页面上的数据显示。
|
|
|
|
|
|
|
|
* @param pageParam - 分页参数,默认使用全局page对象。
|
|
|
|
|
|
|
|
* @param params - 额外的查询参数。
|
|
|
|
|
|
|
|
* @param done - 回调函数,在获取数据完成后调用。
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const getDataList = (pageParam, params, done) => {
|
|
|
|
const getDataList = (pageParam, params, done) => {
|
|
|
|
pageParam = (pageParam === undefined ? page : pageParam)
|
|
|
|
pageParam = (pageParam === undefined ? page : pageParam)
|
|
|
@ -302,36 +250,42 @@ const getDataList = (pageParam, params, done) => {
|
|
|
|
if (done) done()
|
|
|
|
if (done) done()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 清除数据
|
|
|
|
* 清除所有表单数据和日期范围选择。
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const clearDatas = () => {
|
|
|
|
const clearDatas = () => {
|
|
|
|
dataForm.value = {}
|
|
|
|
dataForm.value = {}
|
|
|
|
dateRange.value = []
|
|
|
|
dateRange.value = []
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 每页数
|
|
|
|
* 当分页组件中每页显示数量改变时触发此方法。
|
|
|
|
* @param val
|
|
|
|
* @param val - 新的每页显示数量。
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const sizeChangeHandle = (val) => {
|
|
|
|
const sizeChangeHandle = (val) => {
|
|
|
|
page.pageSize = val
|
|
|
|
page.pageSize = val
|
|
|
|
page.currentPage = 1
|
|
|
|
page.currentPage = 1
|
|
|
|
getDataList(page)
|
|
|
|
getDataList(page)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 当前页
|
|
|
|
* 当分页组件中当前页码改变时触发此方法。
|
|
|
|
* @param val
|
|
|
|
* @param val - 新的当前页码。
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const currentChangeHandle = (val) => {
|
|
|
|
const currentChangeHandle = (val) => {
|
|
|
|
page.currentPage = val
|
|
|
|
page.currentPage = val
|
|
|
|
getDataList(page)
|
|
|
|
getDataList(page)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义对AddOrUpdate组件的引用。
|
|
|
|
const addOrUpdateRef = ref(null)
|
|
|
|
const addOrUpdateRef = ref(null)
|
|
|
|
|
|
|
|
// 控制AddOrUpdate弹窗的显示状态。
|
|
|
|
const addOrUpdateVisible = ref(false)
|
|
|
|
const addOrUpdateVisible = ref(false)
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 新增 / 修改
|
|
|
|
* 打开订单信息编辑或新增弹窗。
|
|
|
|
* @param val
|
|
|
|
* @param val - 可选参数,当存在时表示编辑指定ID的订单。
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const onAddOrUpdate = (val) => {
|
|
|
|
const onAddOrUpdate = (val) => {
|
|
|
|
addOrUpdateVisible.value = true
|
|
|
|
addOrUpdateVisible.value = true
|
|
|
@ -340,14 +294,25 @@ const onAddOrUpdate = (val) => {
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义对ConsignmentInfo组件的引用。
|
|
|
|
const consignmentInfoRef = ref(null)
|
|
|
|
const consignmentInfoRef = ref(null)
|
|
|
|
|
|
|
|
// 控制ConsignmentInfo弹窗的显示状态。
|
|
|
|
const consignmentInfoVisible = ref(false)
|
|
|
|
const consignmentInfoVisible = ref(false)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 显示发货信息弹窗。
|
|
|
|
|
|
|
|
*/
|
|
|
|
const showConsignmentInfo = () => {
|
|
|
|
const showConsignmentInfo = () => {
|
|
|
|
consignmentInfoVisible.value = true
|
|
|
|
consignmentInfoVisible.value = true
|
|
|
|
nextTick(() => {
|
|
|
|
nextTick(() => {
|
|
|
|
consignmentInfoRef.value?.init()
|
|
|
|
consignmentInfoRef.value?.init()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 下载待发货信息整理Excel文件。
|
|
|
|
|
|
|
|
* @param consignmentInfo - 发货信息对象。
|
|
|
|
|
|
|
|
*/
|
|
|
|
const getWaitingConsignmentExcel = (consignmentInfo) => {
|
|
|
|
const getWaitingConsignmentExcel = (consignmentInfo) => {
|
|
|
|
http({
|
|
|
|
http({
|
|
|
|
url: http.adornUrl('/order/order/waitingConsignmentExcel'),
|
|
|
|
url: http.adornUrl('/order/order/waitingConsignmentExcel'),
|
|
|
@ -356,42 +321,44 @@ const getWaitingConsignmentExcel = (consignmentInfo) => {
|
|
|
|
consignmentName: consignmentInfo.consignmentName,
|
|
|
|
consignmentName: consignmentInfo.consignmentName,
|
|
|
|
consignmentMobile: consignmentInfo.consignmentMobile,
|
|
|
|
consignmentMobile: consignmentInfo.consignmentMobile,
|
|
|
|
consignmentAddr: consignmentInfo.consignmentAddr,
|
|
|
|
consignmentAddr: consignmentInfo.consignmentAddr,
|
|
|
|
startTime: dateRange.value === null ? null : dateRange.value[0], // 开始时间
|
|
|
|
startTime: dateRange.value === null ? null : dateRange.value[0],
|
|
|
|
endTime: dateRange.value === null ? null : dateRange.value[1] // 结束时间
|
|
|
|
endTime: dateRange.value === null ? null : dateRange.value[1]
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
responseType: 'blob' // 解决文件下载乱码问题
|
|
|
|
responseType: 'blob'
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.then(({ data }) => {
|
|
|
|
.then(({ data }) => {
|
|
|
|
const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
|
|
|
|
const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
|
|
|
|
const fileName = '待发货信息整理.xls'
|
|
|
|
const fileName = '待发货信息整理.xls'
|
|
|
|
const elink = document.createElement('a')
|
|
|
|
downloadFile(blob, fileName)
|
|
|
|
if ('download' in elink) { // 非IE下载
|
|
|
|
|
|
|
|
elink.download = fileName
|
|
|
|
|
|
|
|
elink.style.display = 'none'
|
|
|
|
|
|
|
|
elink.href = URL.createObjectURL(blob)
|
|
|
|
|
|
|
|
document.body.appendChild(elink)
|
|
|
|
|
|
|
|
elink.click()
|
|
|
|
|
|
|
|
URL.revokeObjectURL(elink.href) // 释放URL 对象
|
|
|
|
|
|
|
|
document.body.removeChild(elink)
|
|
|
|
|
|
|
|
} else { // IE10+下载
|
|
|
|
|
|
|
|
navigator.msSaveBlob(blob, fileName)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 下载销售信息整理Excel文件。
|
|
|
|
|
|
|
|
*/
|
|
|
|
const getSoldExcel = () => {
|
|
|
|
const getSoldExcel = () => {
|
|
|
|
http({
|
|
|
|
http({
|
|
|
|
url: http.adornUrl('/order/order/soldExcel'),
|
|
|
|
url: http.adornUrl('/order/order/soldExcel'),
|
|
|
|
method: 'get',
|
|
|
|
method: 'get',
|
|
|
|
params: http.adornParams({
|
|
|
|
params: http.adornParams({
|
|
|
|
startTime: dateRange.value === null ? null : dateRange.value[0], // 开始时间
|
|
|
|
startTime: dateRange.value === null ? null : dateRange.value[0],
|
|
|
|
endTime: dateRange.value === null ? null : dateRange.value[1] // 结束时间
|
|
|
|
endTime: dateRange.value === null ? null : dateRange.value[1]
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
responseType: 'blob' // 解决文件下载乱码问题
|
|
|
|
responseType: 'blob'
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.then(({ data }) => {
|
|
|
|
.then(({ data }) => {
|
|
|
|
const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
|
|
|
|
const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
|
|
|
|
const fileName = '销售信息整理.xls'
|
|
|
|
const fileName = '销售信息整理.xls'
|
|
|
|
|
|
|
|
downloadFile(blob, fileName)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 文件下载辅助函数。
|
|
|
|
|
|
|
|
* @param blob - 文件内容。
|
|
|
|
|
|
|
|
* @param fileName - 文件名。
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
function downloadFile(blob, fileName) {
|
|
|
|
const elink = document.createElement('a')
|
|
|
|
const elink = document.createElement('a')
|
|
|
|
if ('download' in elink) { // 非IE下载
|
|
|
|
if ('download' in elink) { // 非IE下载
|
|
|
|
elink.download = fileName
|
|
|
|
elink.download = fileName
|
|
|
@ -399,35 +366,38 @@ const getSoldExcel = () => {
|
|
|
|
elink.href = URL.createObjectURL(blob)
|
|
|
|
elink.href = URL.createObjectURL(blob)
|
|
|
|
document.body.appendChild(elink)
|
|
|
|
document.body.appendChild(elink)
|
|
|
|
elink.click()
|
|
|
|
elink.click()
|
|
|
|
URL.revokeObjectURL(elink.href) // 释放URL 对象
|
|
|
|
URL.revokeObjectURL(elink.href)
|
|
|
|
document.body.removeChild(elink)
|
|
|
|
document.body.removeChild(elink)
|
|
|
|
} else { // IE10+下载
|
|
|
|
} else { // IE10+下载
|
|
|
|
navigator.msSaveBlob(blob, fileName)
|
|
|
|
navigator.msSaveBlob(blob, fileName)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
|
|
// 定义一个具有特定样式的订单模块,使用scoped属性确保样式仅应用于组件内部。
|
|
|
|
.mod-order-order {
|
|
|
|
.mod-order-order {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 标题栏设置为flex布局,高度固定为45px,并且内容垂直居中对齐。
|
|
|
|
.tit {
|
|
|
|
.tit {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
height: 45px;
|
|
|
|
height: 45px;
|
|
|
|
align-items: center;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.tit {
|
|
|
|
// 标题项内的项目设置:左右内边距为10px,宽度占父元素的10%,文本居中对齐。
|
|
|
|
.item {
|
|
|
|
.item {
|
|
|
|
padding: 0 10px;
|
|
|
|
padding: 0 10px;
|
|
|
|
width: 10%;
|
|
|
|
width: 10%;
|
|
|
|
text-align: center;
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 特殊的产品标题项,宽度设置为25%以适应更长的文本或更多内容。
|
|
|
|
.product {
|
|
|
|
.product {
|
|
|
|
width: 25%;
|
|
|
|
width: 25%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品标题部分,设置了内边距、背景色以及三边的边框。
|
|
|
|
.prod-tit {
|
|
|
|
.prod-tit {
|
|
|
|
padding: 10px;
|
|
|
|
padding: 10px;
|
|
|
|
background: #f8f8f9;
|
|
|
|
background: #f8f8f9;
|
|
|
@ -435,11 +405,13 @@ const getSoldExcel = () => {
|
|
|
|
border-top: 1px solid #dddee1;
|
|
|
|
border-top: 1px solid #dddee1;
|
|
|
|
border-right: 1px solid #dddee1;
|
|
|
|
border-right: 1px solid #dddee1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 标题内的span元素之间有15px的右边距。
|
|
|
|
span {
|
|
|
|
span {
|
|
|
|
margin-right: 15px;
|
|
|
|
margin-right: 15px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品内容区域,采用flex布局,定义了顶部和底部的边框,左边框以及字体颜色。
|
|
|
|
.prod-cont {
|
|
|
|
.prod-cont {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
border-top: 1px solid #dddee1;
|
|
|
|
border-top: 1px solid #dddee1;
|
|
|
@ -447,6 +419,7 @@ const getSoldExcel = () => {
|
|
|
|
border-left: 1px solid #dddee1;
|
|
|
|
border-left: 1px solid #dddee1;
|
|
|
|
color: #495060;
|
|
|
|
color: #495060;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 内部的项目项,设置为flex布局,内容垂直和水平居中,定义了内边距、右边框、文本居中对齐以及高度。
|
|
|
|
.item {
|
|
|
|
.item {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
display: -webkit-flex;
|
|
|
|
display: -webkit-flex;
|
|
|
@ -457,33 +430,39 @@ const getSoldExcel = () => {
|
|
|
|
text-align: center;
|
|
|
|
text-align: center;
|
|
|
|
height: 100%;
|
|
|
|
height: 100%;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 确保子span元素显示为块级元素。
|
|
|
|
span {
|
|
|
|
span {
|
|
|
|
display: block;
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品项目项,使用flex布局并设定为列方向排列,定义了右边框。
|
|
|
|
.prod-item {
|
|
|
|
.prod-item {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
flex-direction: column;
|
|
|
|
border-right: 1px solid #dddee1;
|
|
|
|
border-right: 1px solid #dddee1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 特殊的名称项,添加了相对定位、额外的内边距以及底部边框。
|
|
|
|
.items.name {
|
|
|
|
.items.name {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
position: relative;
|
|
|
|
position: relative;
|
|
|
|
padding: 20px;
|
|
|
|
padding: 20px;
|
|
|
|
border-bottom: 1px solid #dddee1;
|
|
|
|
border-bottom: 1px solid #dddee1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 最后一个子元素不显示底部边框。
|
|
|
|
&:last-child {
|
|
|
|
&:last-child {
|
|
|
|
border-bottom: none;
|
|
|
|
border-bottom: none;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品名称部分,设置宽度为55%,文本左对齐。
|
|
|
|
.prod-name {
|
|
|
|
.prod-name {
|
|
|
|
width: 55%;
|
|
|
|
width: 55%;
|
|
|
|
text-align: left;
|
|
|
|
text-align: left;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品信息显示为块级元素,颜色较淡,并且在上边距上有30px的空间。
|
|
|
|
.prod-info {
|
|
|
|
.prod-info {
|
|
|
|
display: block;
|
|
|
|
display: block;
|
|
|
|
color: #80848f;
|
|
|
|
color: #80848f;
|
|
|
@ -491,17 +470,20 @@ const getSoldExcel = () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品价格部分,绝对定位到右侧40px处,文本右对齐。
|
|
|
|
.prod-price {
|
|
|
|
.prod-price {
|
|
|
|
position: absolute;
|
|
|
|
position: absolute;
|
|
|
|
right: 40px;
|
|
|
|
right: 40px;
|
|
|
|
text-align: right;
|
|
|
|
text-align: right;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 价格中的span元素显示为块级元素,并且底部有10px的间距。
|
|
|
|
span {
|
|
|
|
span {
|
|
|
|
display: block;
|
|
|
|
display: block;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品图片部分,定义了右边距、宽度和高度,同时设置了图片的尺寸。
|
|
|
|
.prod-image {
|
|
|
|
.prod-image {
|
|
|
|
margin-right: 20px;
|
|
|
|
margin-right: 20px;
|
|
|
|
width: 100px;
|
|
|
|
width: 100px;
|
|
|
@ -513,21 +495,25 @@ const getSoldExcel = () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 通用的项目项,其中的span元素显示为块级元素,并且底部有10px的间距。
|
|
|
|
.item {
|
|
|
|
.item {
|
|
|
|
span {
|
|
|
|
span {
|
|
|
|
display: block;
|
|
|
|
display: block;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 操作链接的颜色设置为蓝色。
|
|
|
|
.operate {
|
|
|
|
.operate {
|
|
|
|
color: #2d8cf0;
|
|
|
|
color: #2d8cf0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 总价颜色设置为红色。
|
|
|
|
.totalprice {
|
|
|
|
.totalprice {
|
|
|
|
color: #c00;
|
|
|
|
color: #c00;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 产品备注部分,设置了宽度、高度、行高、背景颜色以及三边的边框。
|
|
|
|
.prod {
|
|
|
|
.prod {
|
|
|
|
.remark {
|
|
|
|
.remark {
|
|
|
|
width: 100%;
|
|
|
|
width: 100%;
|
|
|
@ -541,6 +527,7 @@ const getSoldExcel = () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 购买者备注部分,设置了左右内边距、溢出隐藏、单行文本以及省略号处理。
|
|
|
|
.buyer-remark {
|
|
|
|
.buyer-remark {
|
|
|
|
padding: 0 20px;
|
|
|
|
padding: 0 20px;
|
|
|
|
overflow: hidden;
|
|
|
|
overflow: hidden;
|
|
|
@ -548,6 +535,7 @@ const getSoldExcel = () => {
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 当没有数据时显示的提示信息,设置为块级元素,居中对齐,上下各有50px的外边距,颜色为灰色。
|
|
|
|
.empty-tips {
|
|
|
|
.empty-tips {
|
|
|
|
display: block;
|
|
|
|
display: block;
|
|
|
|
width: 100%;
|
|
|
|
width: 100%;
|
|
|
|