tianyi 2 months ago
parent
commit
2be1207c41
  1. 376
      src/views/app/bill/current/current.vue
  2. 122
      src/views/app/bill/current/logiticsCompany.less
  3. 376
      src/views/app/bill/historical/historical.vue
  4. 122
      src/views/app/bill/historical/logiticsCompany.less
  5. 122
      src/views/app/bill/success/logiticsCompany.less
  6. 376
      src/views/app/bill/success/success.vue
  7. 558
      src/views/app/business/bus/addEdit.vue
  8. 1172
      src/views/app/business/bus/bus.vue
  9. 164
      src/views/app/business/logistics/logisticsAddress.vue
  10. 166
      src/views/app/business/recharge/logisticsAddress.vue
  11. 653
      src/views/app/business/recharge/recharge.vue
  12. 303
      src/views/app/data-statistics/data-statistics.vue
  13. 166
      src/views/sys/order-manage/logisticsAddress.vue

376
src/views/app/bill/current/current.vue

@ -0,0 +1,376 @@
<style lang="less">
@import "@/styles/table-common.less";
@import "./logiticsCompany.less";
</style>
<template>
<div class="search">
<Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="100">
<FormItem label="状态" prop="orderId">
<Select ref="dep" @on-change="checkStatus" clearable="true">
<Option v-for="(item, i) in dictData" :key="i" :value="item.value">{{
item.title
}}</Option>
</Select>
</FormItem>
<FormItem label="店铺名称" prop="shopName">
<Input type="text" v-model="searchForm.shopName" clearable placeholder="请输入公司名称"
style="width: 200px" />
</FormItem>
<FormItem style="margin-left: -35px" class="br">
<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
<Button @click="handleReset">重置</Button>
<a class="drop-down" @click="dropDown">
{{ dropDownContent }}
<Icon :type="dropDownIcon"></Icon>
</a>
</FormItem>
</Form>
</Row>
<Row align="middle" justify="space-between" class="operation">
<div>
<Button @click="add" type="primary" icon="md-briefcase">一键结算</Button>
<Button @click="delAll" icon="ios-checkbox-outline">确认</Button>
<Button @click="delAll" icon="md-folder-open">结算</Button>
</div>
<div class="icons">
<Tooltip content="刷新" placement="top" transfer>
<Icon type="md-refresh" size="18" class="item" @click="getDataList" />
</Tooltip>
<Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
<Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
</Tooltip>
<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default">默认</DropdownItem>
<DropdownItem :selected="tableSize == 'large'" name="large">宽松</DropdownItem>
<DropdownItem :selected="tableSize == 'small'" name="small">紧密</DropdownItem>
</DropdownMenu>
</Dropdown>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table :loading="loading" border :columns="columns" :data="data" :size="tableSize" sortable="custom"
@on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize"
@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]"
size="small" show-total show-elevator show-sizer></Page>
</Row>
</Card>
<Modal :title="线路维护" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000">
<logistics-address v-if="Visiable" ref="dialog"></logistics-address>
<div slot="footer" v-show=Visiable>
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</Modal>
<Modal :title="线路绑定" v-model="bindingVisiable" :mask-closable="false" :scrollabele="true" :width="1000">
<line-binding v-if="bindingVisiable" ref="bindinglog"></line-binding>
<div slot="footer" v-show=bindingVisiable>
<Button type="text" @click="bindingVisiable = false">关闭</Button>
</div>
</Modal>
<Modal :title="充值记录明细" v-model="rechargeVisiable" :mask-closable="false" :scrollabele="true" :width="1000">
<recharge-one v-if="rechargeVisiable" ref="rechargelog"></recharge-one>
<div slot="footer" v-show=rechargeVisiable>
<Button type="text" @click="rechargeVisiable = false">关闭</Button>
</div>
</Modal>
</div>
</template>
<script>
import {
getAllLogiticsCompanyData,
getLogiticsCompanyData,
deleteLogiticsCompany,
onLineCompany,
offLineCompany
} from "@/api/app";
import {
shortcuts
} from "@/libs/shortcuts";
import excel from "@/libs/excel";
import {
offLineWorker,
onLineWorker
} from "@/api";
export default {
name: "logiticsCompany",
components: {},
data() {
return {
dictData: [{
title: "全部",
value: ""
}, {
title: "待确认",
value: 0
}, {
title: "待结算",
value: 1
}, {
title: "已打款",
value: 2
}],
tableSize: "default",
message: "",
selectIndex: "",
currentRow: {},
height: 510,
showCompany: false,
bindingVisiable: false,
showType: "0",
openSearch: true,
openTip: true,
loading: true,
reading: false,
loadingExport: true,
exportModalVisible: false,
importModalVisible: false,
deployModalVisible: false,
uploadfile: {
name: "",
},
drop: false,
selectList: [],
searchForm: {
id: "",
shopName: "",
contacts: "",
mobile: "",
pageNumber: 1,
pageSize: 10,
sort: "createTime",
order: "desc",
startDate: "",
endDate: "",
signCompany: "0",
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {},
columns: [{
type: "selection",
width: 60,
align: "center",
fixed: "left",
},
{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
title: "账单周期",
key: "shopName",
minWidth: 100,
sortable: true,
fixed: "left",
},
{
title: "店铺名称",
key: "shopName",
minWidth: 100,
sortable: true,
fixed: "left",
},
{
title: "订单数量",
key: "companyTel",
minWidth: 150,
sortable: true,
},
{
title: "配送费",
key: "companyEmail",
minWidth: 250,
},
{
title: "商品原价",
key: "contacts",
width: 100,
},
{
title: "餐盒费",
key: "mobile",
width: 150,
},
{
title: "账户余额支付金额",
key: "mobile",
width: 150,
},
{
title: "商家实收总金额",
key: "mobile",
width: 150,
},
{
title: "活动金额",
key: "mobile",
width: 150,
},
{
title: "抵用券金额",
key: "mobile",
width: 150,
},
{
title: "平台补贴",
key: "mobile",
width: 150,
},
{
title: "商品平台抽成",
key: "mobile",
width: 150,
},
{
title: "商家补贴",
key: "mobile",
width: 150,
},
{
title: "商品商家抽成",
key: "mobile",
width: 150,
},
{
title: "商家营收",
key: "mobile",
width: 150,
},
{
title: "平台营收",
key: "mobile",
width: 150,
},
{
title: "本期期初",
key: "mobile",
width: 150,
},
{
title: "实际打款金额",
key: "mobile",
width: 150,
},
{
title: "账单状态",
key: "mobile",
width: 150,
},
{
title: "操作",
key: "action",
width: 200,
align: "center",
fixed: "right",
render: (h, params) => {
return h("div", [h(
"a", {
on: {
click: () => {
this.findAllRecord(params.row);
},
},
},
"确认"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.stationBinding(params.row);
},
},
},
"详情"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.edit(params.row);
},
},
},
"修改"
),
]);
},
},
],
chooseColumns: [],
filename: "公司数据",
exportTitle: "确认导出",
exportType: "",
data: [],
exportData: [],
total: 0,
Visiable: false,
rechargeVisiable: false,
};
},
methods: {
init() {
// this.getDataList();
},
getDataList() {
//
this.loading = true;
getLogiticsCompanyData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
if (!this.getStore("roles").includes("ROLE_ADMIN")) {
res.result.content.forEach((e) => {
e.mobile = "您无权查看该数据";
});
}
this.data = res.result.content;
this.total = res.result.totalElements;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1;
this.getDataList();
}
}
});
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
}
},
mounted() {
//
this.height = Number(document.documentElement.clientHeight - 230);
this.init();
},
};
</script>

122
src/views/app/bill/current/logiticsCompany.less

@ -0,0 +1,122 @@
.oss-wrapper {
display: flex;
flex-wrap: wrap;
position: relative;
}
.oss-card {
margin: 10px 2.5% 10px 0;
width: 22.5%;
:hover {
.content .other .name {
color: #1890ff;
transition: color .3s;
}
}
cursor: pointer;
.ivu-card-body {
padding: 0;
}
.content {
display: flex;
flex-direction: column;
:hover {
.play {
transition: opacity .3s;
opacity: 1 !important;
}
}
.img {
height: 135px;
object-fit: cover;
}
.video {
height: 135px;
position: relative;
.cover {
height: 100%;
width: 100%;
object-fit: fill;
}
.play {
position: absolute;
top: 43px;
left: calc(50% - 25px);
height: 50px;
width: 50px;
opacity: 0.8;
}
}
.other {
padding: 16px;
height: 135px;
.name {
font-size: 16px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
color: rgba(0, 0, 0, .85);
font-weight: 500;
margin-bottom: 4px;
}
.key {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
word-break: break-all;
height: 45px;
color: rgba(0, 0, 0, .45);
}
.info {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height: 36px;
font-size: 12px;
color: rgba(0, 0, 0, .45);
}
}
.actions {
display: flex;
align-items: center;
height: 50px;
background: #f7f9fa;
border-top: 1px solid #e8e8e8;
i:hover {
color: #1890ff;
}
.btn {
display: flex;
justify-content: center;
width: 25%;
border-right: 1px solid #e8e8e8;
}
.btn-no {
display: flex;
justify-content: center;
width: 25%;
}
}
}
}

376
src/views/app/bill/historical/historical.vue

@ -0,0 +1,376 @@
<style lang="less">
@import "@/styles/table-common.less";
@import "./logiticsCompany.less";
</style>
<template>
<div class="search">
<Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="100">
<FormItem label="状态" prop="orderId">
<Select ref="dep" @on-change="checkStatus" clearable="true">
<Option v-for="(item, i) in dictData" :key="i" :value="item.value">{{
item.title
}}</Option>
</Select>
</FormItem>
<FormItem label="店铺名称" prop="shopName">
<Input type="text" v-model="searchForm.shopName" clearable placeholder="请输入公司名称"
style="width: 200px" />
</FormItem>
<FormItem style="margin-left: -35px" class="br">
<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
<Button @click="handleReset">重置</Button>
<a class="drop-down" @click="dropDown">
{{ dropDownContent }}
<Icon :type="dropDownIcon"></Icon>
</a>
</FormItem>
</Form>
</Row>
<Row align="middle" justify="space-between" class="operation">
<div>
<Button @click="add" type="primary" icon="md-briefcase">一键结算</Button>
<Button @click="delAll" icon="ios-checkbox-outline">确认</Button>
<Button @click="delAll" icon="md-folder-open">结算</Button>
</div>
<div class="icons">
<Tooltip content="刷新" placement="top" transfer>
<Icon type="md-refresh" size="18" class="item" @click="getDataList" />
</Tooltip>
<Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
<Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
</Tooltip>
<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default">默认</DropdownItem>
<DropdownItem :selected="tableSize == 'large'" name="large">宽松</DropdownItem>
<DropdownItem :selected="tableSize == 'small'" name="small">紧密</DropdownItem>
</DropdownMenu>
</Dropdown>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table :loading="loading" border :columns="columns" :data="data" :size="tableSize" sortable="custom"
@on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize"
@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]"
size="small" show-total show-elevator show-sizer></Page>
</Row>
</Card>
<Modal :title="线路维护" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000">
<logistics-address v-if="Visiable" ref="dialog"></logistics-address>
<div slot="footer" v-show=Visiable>
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</Modal>
<Modal :title="线路绑定" v-model="bindingVisiable" :mask-closable="false" :scrollabele="true" :width="1000">
<line-binding v-if="bindingVisiable" ref="bindinglog"></line-binding>
<div slot="footer" v-show=bindingVisiable>
<Button type="text" @click="bindingVisiable = false">关闭</Button>
</div>
</Modal>
<Modal :title="充值记录明细" v-model="rechargeVisiable" :mask-closable="false" :scrollabele="true" :width="1000">
<recharge-one v-if="rechargeVisiable" ref="rechargelog"></recharge-one>
<div slot="footer" v-show=rechargeVisiable>
<Button type="text" @click="rechargeVisiable = false">关闭</Button>
</div>
</Modal>
</div>
</template>
<script>
import {
getAllLogiticsCompanyData,
getLogiticsCompanyData,
deleteLogiticsCompany,
onLineCompany,
offLineCompany
} from "@/api/app";
import {
shortcuts
} from "@/libs/shortcuts";
import excel from "@/libs/excel";
import {
offLineWorker,
onLineWorker
} from "@/api";
export default {
name: "logiticsCompany",
components: {},
data() {
return {
dictData: [{
title: "全部",
value: ""
}, {
title: "待确认",
value: 0
}, {
title: "待结算",
value: 1
}, {
title: "已打款",
value: 2
}],
tableSize: "default",
message: "",
selectIndex: "",
currentRow: {},
height: 510,
showCompany: false,
bindingVisiable: false,
showType: "0",
openSearch: true,
openTip: true,
loading: true,
reading: false,
loadingExport: true,
exportModalVisible: false,
importModalVisible: false,
deployModalVisible: false,
uploadfile: {
name: "",
},
drop: false,
selectList: [],
searchForm: {
id: "",
shopName: "",
contacts: "",
mobile: "",
pageNumber: 1,
pageSize: 10,
sort: "createTime",
order: "desc",
startDate: "",
endDate: "",
signCompany: "0",
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {},
columns: [{
type: "selection",
width: 60,
align: "center",
fixed: "left",
},
{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
title: "账单周期",
key: "shopName",
minWidth: 100,
sortable: true,
fixed: "left",
},
{
title: "店铺名称",
key: "shopName",
minWidth: 100,
sortable: true,
fixed: "left",
},
{
title: "订单数量",
key: "companyTel",
minWidth: 150,
sortable: true,
},
{
title: "配送费",
key: "companyEmail",
minWidth: 250,
},
{
title: "商品原价",
key: "contacts",
width: 100,
},
{
title: "餐盒费",
key: "mobile",
width: 150,
},
{
title: "账户余额支付金额",
key: "mobile",
width: 150,
},
{
title: "商家实收总金额",
key: "mobile",
width: 150,
},
{
title: "活动金额",
key: "mobile",
width: 150,
},
{
title: "抵用券金额",
key: "mobile",
width: 150,
},
{
title: "平台补贴",
key: "mobile",
width: 150,
},
{
title: "商品平台抽成",
key: "mobile",
width: 150,
},
{
title: "商家补贴",
key: "mobile",
width: 150,
},
{
title: "商品商家抽成",
key: "mobile",
width: 150,
},
{
title: "商家营收",
key: "mobile",
width: 150,
},
{
title: "平台营收",
key: "mobile",
width: 150,
},
{
title: "本期期初",
key: "mobile",
width: 150,
},
{
title: "实际打款金额",
key: "mobile",
width: 150,
},
{
title: "账单状态",
key: "mobile",
width: 150,
},
{
title: "操作",
key: "action",
width: 200,
align: "center",
fixed: "right",
render: (h, params) => {
return h("div", [h(
"a", {
on: {
click: () => {
this.findAllRecord(params.row);
},
},
},
"确认"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.stationBinding(params.row);
},
},
},
"详情"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.edit(params.row);
},
},
},
"修改"
),
]);
},
},
],
chooseColumns: [],
filename: "公司数据",
exportTitle: "确认导出",
exportType: "",
data: [],
exportData: [],
total: 0,
Visiable: false,
rechargeVisiable: false,
};
},
methods: {
init() {
// this.getDataList();
},
getDataList() {
//
this.loading = true;
getLogiticsCompanyData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
if (!this.getStore("roles").includes("ROLE_ADMIN")) {
res.result.content.forEach((e) => {
e.mobile = "您无权查看该数据";
});
}
this.data = res.result.content;
this.total = res.result.totalElements;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1;
this.getDataList();
}
}
});
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
}
},
mounted() {
//
this.height = Number(document.documentElement.clientHeight - 230);
this.init();
},
};
</script>

122
src/views/app/bill/historical/logiticsCompany.less

@ -0,0 +1,122 @@
.oss-wrapper {
display: flex;
flex-wrap: wrap;
position: relative;
}
.oss-card {
margin: 10px 2.5% 10px 0;
width: 22.5%;
:hover {
.content .other .name {
color: #1890ff;
transition: color .3s;
}
}
cursor: pointer;
.ivu-card-body {
padding: 0;
}
.content {
display: flex;
flex-direction: column;
:hover {
.play {
transition: opacity .3s;
opacity: 1 !important;
}
}
.img {
height: 135px;
object-fit: cover;
}
.video {
height: 135px;
position: relative;
.cover {
height: 100%;
width: 100%;
object-fit: fill;
}
.play {
position: absolute;
top: 43px;
left: calc(50% - 25px);
height: 50px;
width: 50px;
opacity: 0.8;
}
}
.other {
padding: 16px;
height: 135px;
.name {
font-size: 16px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
color: rgba(0, 0, 0, .85);
font-weight: 500;
margin-bottom: 4px;
}
.key {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
word-break: break-all;
height: 45px;
color: rgba(0, 0, 0, .45);
}
.info {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height: 36px;
font-size: 12px;
color: rgba(0, 0, 0, .45);
}
}
.actions {
display: flex;
align-items: center;
height: 50px;
background: #f7f9fa;
border-top: 1px solid #e8e8e8;
i:hover {
color: #1890ff;
}
.btn {
display: flex;
justify-content: center;
width: 25%;
border-right: 1px solid #e8e8e8;
}
.btn-no {
display: flex;
justify-content: center;
width: 25%;
}
}
}
}

122
src/views/app/bill/success/logiticsCompany.less

@ -0,0 +1,122 @@
.oss-wrapper {
display: flex;
flex-wrap: wrap;
position: relative;
}
.oss-card {
margin: 10px 2.5% 10px 0;
width: 22.5%;
:hover {
.content .other .name {
color: #1890ff;
transition: color .3s;
}
}
cursor: pointer;
.ivu-card-body {
padding: 0;
}
.content {
display: flex;
flex-direction: column;
:hover {
.play {
transition: opacity .3s;
opacity: 1 !important;
}
}
.img {
height: 135px;
object-fit: cover;
}
.video {
height: 135px;
position: relative;
.cover {
height: 100%;
width: 100%;
object-fit: fill;
}
.play {
position: absolute;
top: 43px;
left: calc(50% - 25px);
height: 50px;
width: 50px;
opacity: 0.8;
}
}
.other {
padding: 16px;
height: 135px;
.name {
font-size: 16px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
color: rgba(0, 0, 0, .85);
font-weight: 500;
margin-bottom: 4px;
}
.key {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
word-break: break-all;
height: 45px;
color: rgba(0, 0, 0, .45);
}
.info {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height: 36px;
font-size: 12px;
color: rgba(0, 0, 0, .45);
}
}
.actions {
display: flex;
align-items: center;
height: 50px;
background: #f7f9fa;
border-top: 1px solid #e8e8e8;
i:hover {
color: #1890ff;
}
.btn {
display: flex;
justify-content: center;
width: 25%;
border-right: 1px solid #e8e8e8;
}
.btn-no {
display: flex;
justify-content: center;
width: 25%;
}
}
}
}

376
src/views/app/bill/success/success.vue

@ -0,0 +1,376 @@
<style lang="less">
@import "@/styles/table-common.less";
@import "./logiticsCompany.less";
</style>
<template>
<div class="search">
<Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="100">
<FormItem label="状态" prop="orderId">
<Select ref="dep" @on-change="checkStatus" clearable="true">
<Option v-for="(item, i) in dictData" :key="i" :value="item.value">{{
item.title
}}</Option>
</Select>
</FormItem>
<FormItem label="店铺名称" prop="shopName">
<Input type="text" v-model="searchForm.shopName" clearable placeholder="请输入公司名称"
style="width: 200px" />
</FormItem>
<FormItem style="margin-left: -35px" class="br">
<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
<Button @click="handleReset">重置</Button>
<a class="drop-down" @click="dropDown">
{{ dropDownContent }}
<Icon :type="dropDownIcon"></Icon>
</a>
</FormItem>
</Form>
</Row>
<Row align="middle" justify="space-between" class="operation">
<div>
<Button @click="add" type="primary" icon="md-briefcase">一键结算</Button>
<Button @click="delAll" icon="ios-checkbox-outline">确认</Button>
<Button @click="delAll" icon="md-folder-open">结算</Button>
</div>
<div class="icons">
<Tooltip content="刷新" placement="top" transfer>
<Icon type="md-refresh" size="18" class="item" @click="getDataList" />
</Tooltip>
<Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
<Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
</Tooltip>
<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default">默认</DropdownItem>
<DropdownItem :selected="tableSize == 'large'" name="large">宽松</DropdownItem>
<DropdownItem :selected="tableSize == 'small'" name="small">紧密</DropdownItem>
</DropdownMenu>
</Dropdown>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table :loading="loading" border :columns="columns" :data="data" :size="tableSize" sortable="custom"
@on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize"
@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]"
size="small" show-total show-elevator show-sizer></Page>
</Row>
</Card>
<Modal :title="线路维护" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000">
<logistics-address v-if="Visiable" ref="dialog"></logistics-address>
<div slot="footer" v-show=Visiable>
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</Modal>
<Modal :title="线路绑定" v-model="bindingVisiable" :mask-closable="false" :scrollabele="true" :width="1000">
<line-binding v-if="bindingVisiable" ref="bindinglog"></line-binding>
<div slot="footer" v-show=bindingVisiable>
<Button type="text" @click="bindingVisiable = false">关闭</Button>
</div>
</Modal>
<Modal :title="充值记录明细" v-model="rechargeVisiable" :mask-closable="false" :scrollabele="true" :width="1000">
<recharge-one v-if="rechargeVisiable" ref="rechargelog"></recharge-one>
<div slot="footer" v-show=rechargeVisiable>
<Button type="text" @click="rechargeVisiable = false">关闭</Button>
</div>
</Modal>
</div>
</template>
<script>
import {
getAllLogiticsCompanyData,
getLogiticsCompanyData,
deleteLogiticsCompany,
onLineCompany,
offLineCompany
} from "@/api/app";
import {
shortcuts
} from "@/libs/shortcuts";
import excel from "@/libs/excel";
import {
offLineWorker,
onLineWorker
} from "@/api";
export default {
name: "logiticsCompany",
components: {},
data() {
return {
dictData: [{
title: "全部",
value: ""
}, {
title: "待确认",
value: 0
}, {
title: "待结算",
value: 1
}, {
title: "已打款",
value: 2
}],
tableSize: "default",
message: "",
selectIndex: "",
currentRow: {},
height: 510,
showCompany: false,
bindingVisiable: false,
showType: "0",
openSearch: true,
openTip: true,
loading: true,
reading: false,
loadingExport: true,
exportModalVisible: false,
importModalVisible: false,
deployModalVisible: false,
uploadfile: {
name: "",
},
drop: false,
selectList: [],
searchForm: {
id: "",
shopName: "",
contacts: "",
mobile: "",
pageNumber: 1,
pageSize: 10,
sort: "createTime",
order: "desc",
startDate: "",
endDate: "",
signCompany: "0",
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {},
columns: [{
type: "selection",
width: 60,
align: "center",
fixed: "left",
},
{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
title: "账单周期",
key: "shopName",
minWidth: 100,
sortable: true,
fixed: "left",
},
{
title: "店铺名称",
key: "shopName",
minWidth: 100,
sortable: true,
fixed: "left",
},
{
title: "订单数量",
key: "companyTel",
minWidth: 150,
sortable: true,
},
{
title: "配送费",
key: "companyEmail",
minWidth: 250,
},
{
title: "商品原价",
key: "contacts",
width: 100,
},
{
title: "餐盒费",
key: "mobile",
width: 150,
},
{
title: "账户余额支付金额",
key: "mobile",
width: 150,
},
{
title: "商家实收总金额",
key: "mobile",
width: 150,
},
{
title: "活动金额",
key: "mobile",
width: 150,
},
{
title: "抵用券金额",
key: "mobile",
width: 150,
},
{
title: "平台补贴",
key: "mobile",
width: 150,
},
{
title: "商品平台抽成",
key: "mobile",
width: 150,
},
{
title: "商家补贴",
key: "mobile",
width: 150,
},
{
title: "商品商家抽成",
key: "mobile",
width: 150,
},
{
title: "商家营收",
key: "mobile",
width: 150,
},
{
title: "平台营收",
key: "mobile",
width: 150,
},
{
title: "本期期初",
key: "mobile",
width: 150,
},
{
title: "实际打款金额",
key: "mobile",
width: 150,
},
{
title: "账单状态",
key: "mobile",
width: 150,
},
{
title: "操作",
key: "action",
width: 200,
align: "center",
fixed: "right",
render: (h, params) => {
return h("div", [h(
"a", {
on: {
click: () => {
this.findAllRecord(params.row);
},
},
},
"确认"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.stationBinding(params.row);
},
},
},
"详情"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.edit(params.row);
},
},
},
"修改"
),
]);
},
},
],
chooseColumns: [],
filename: "公司数据",
exportTitle: "确认导出",
exportType: "",
data: [],
exportData: [],
total: 0,
Visiable: false,
rechargeVisiable: false,
};
},
methods: {
init() {
// this.getDataList();
},
getDataList() {
//
this.loading = true;
getLogiticsCompanyData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
if (!this.getStore("roles").includes("ROLE_ADMIN")) {
res.result.content.forEach((e) => {
e.mobile = "您无权查看该数据";
});
}
this.data = res.result.content;
this.total = res.result.totalElements;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1;
this.getDataList();
}
}
});
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
}
},
mounted() {
//
this.height = Number(document.documentElement.clientHeight - 230);
this.init();
},
};
</script>

558
src/views/app/business/bus/addEdit.vue

@ -1,288 +1,288 @@
<template>
<div class="company-edit">
<!-- Drawer抽屉 -->
<Drawer
:title="title"
v-model="visible"
width="500"
draggable
:mask-closable="type == '0'"
>
<div :style="{ maxHeight: maxHeight }" class="drawer-content">
<div class="drawer-header">
<div style="margin-right: 16px">大巴配置</div>
</div>
<Form label-colon v-show="type != '2'">
<Row :gutter="32">
<Col span="24">
<FormItem label="大巴名称">
{{ form.companyName }}
</FormItem>
</Col>
</Row>
</Form>
<Form
ref="form"
:model="form"
:rules="formValidate"
label-position="top"
>
<Row :gutter="32" v-if="type == '2'">
<Col span="24">
<FormItem label="大巴名称" prop="companyName">
<Input v-model="form.companyName" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="12">
<FormItem label="登录账号" prop="username">
<Input v-model="form.username" />
</FormItem>
</Col>
<Col span="12">
<FormItem label="登录密码" prop="password">
<SetPassword v-model="form.password" @on-change="changePass" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="12">
<FormItem label="大巴电话" prop="companyTel">
<Input v-model="form.companyTel" />
</FormItem>
</Col>
<Col span="12">
<FormItem label="大巴邮箱" prop="companyEmail">
<Input v-model="form.companyEmail" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="所在地区" prop="companyAddress">
<al-cascader
v-model="form.companyAddress"
data-type="name"
level="2"
transfer
/>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="详细地址" prop="companyStreet">
<Input v-model="form.companyStreet" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="12">
<FormItem label="联系人" prop="contacts">
<Input v-model="form.contacts" />
</FormItem>
</Col>
<Col span="12">
<FormItem label="手机号" prop="mobile">
<Input v-model="form.mobile" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="12">
<FormItem label="商圈区域" prop="region">
<region-tree-choose
@on-change="handleSelectRegion"
ref="regionTree"
></region-tree-choose>
</FormItem>
</Col>
<Col span="12">
<FormItem label="返佣金额" prop="rebateAmount">
<Input v-model="form.rebateAmount" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="12">
<FormItem label="当次缴纳" prop="depoNum">
<Input v-model="form.depoNum" />
</FormItem>
</Col>
<Col span="12">
<FormItem label="押金余额" prop="depoBal">
<Input v-model="form.depoBal" :disabled="true"/>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="大巴收费标准说明">
<Input type="textarea" v-model="form.remark" :rows="4" />
</FormItem>
</Col>
</Row>
</Form>
</div>
<div class="drawer-footer br" v-show="type != '0'">
<Button type="primary" :loading="submitLoading" @click="submit"
>提交</Button
>
<Button @click="visible = false">取消</Button>
</div>
</Drawer>
</div>
<div class="company-edit">
<!-- Drawer抽屉 -->
<Drawer :title="title" v-model="visible" width="500" draggable :mask-closable="type == '0'">
<div :style="{ maxHeight: maxHeight }" class="drawer-content">
<div class="drawer-header">
<div style="margin-right: 16px">优惠券配置</div>
</div>
<Form label-colon v-show="type != '2'">
<Row :gutter="32">
<Col span="24">
<FormItem label="优惠券名称">
{{ form.companyName }}
</FormItem>
</Col>
</Row>
</Form>
<Form ref="form" :model="form" :rules="formValidate" label-position="top">
<Row :gutter="32">
<Col span="24">
<FormItem label="优惠券名称" prop="companyName">
<Input v-model="form.companyName" />
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="12">
<FormItem label="库存" prop="companyTel">
<Input v-model="form.companyTel" />
</FormItem>
</Col>
<Col span="12">
<FormItem label="适用范围" prop="companyAddress">
<Select ref="dep" @on-change="checkStatus" clearable="true">
<Option v-for="(item, i) in dictData" :key="i" :value="item.value">{{
item.title
}}</Option>
</Select>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="优惠金额">
<Input></Input>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="使用门槛">
<RadioGroup v-model="menkan" vertical>
<Radio label="buxian">不限制</Radio>
<Radio label="manjian"><Input style="width: 50px;"></Input>元可使用</Radio>
</RadioGroup>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="用户限制">
<RadioGroup v-model="xianzhi" vertical>
<Radio label="meibangding">不限制</Radio>
<Radio label="bangding">绑定手机号用户</Radio>
</RadioGroup>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="有效期">
<RadioGroup v-model="youxiao" vertical>
<Radio label="guding">固定日期</Radio>
<DatePicker v-if="youxiao == 'guding'" type="daterange" split-panels placeholder="选择起始时间" style="width: 200px"></DatePicker>
<Radio label="xianqi">领券后<Input style="width: 50px;"></Input>天有效</Radio>
</RadioGroup>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="活动互斥选择">
<Checkbox v-model="single">不与折扣同享</Checkbox>
<Checkbox v-model="single">不与满减活动同享</Checkbox>
<Checkbox v-model="single">不与满赠同享</Checkbox>
<Checkbox v-model="single">不与满额免配送费同享</Checkbox>
<Checkbox v-model="single">不与新用户立减活动同享</Checkbox>
<Checkbox v-model="single">不与配送费优惠活动同享</Checkbox>
<Checkbox v-model="single">不与会员/店铺红包券同享</Checkbox>
</FormItem>
</Col>
</Row>
<Row :gutter="32">
<Col span="24">
<FormItem label="配送方式">
<Checkbox v-model="single">平台配送</Checkbox>
<Checkbox v-model="single">商家配送</Checkbox>
<Checkbox v-model="single">到店自取</Checkbox>
<Checkbox v-model="single">到店消费</Checkbox>
</FormItem>
</Col>
</Row>
</Form>
</div>
<div class="drawer-footer br" v-show="type != '0'">
<Button type="primary" :loading="submitLoading" @click="submit">提交</Button>
<Button @click="visible = false">取消</Button>
</div>
</Drawer>
</div>
</template>
<script>
import { addLogiticsCompany, editLogiticsCompany } from "@/api/app";
import dict from "@/views/my-components/hiver/dict";
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
import regionTreeChoose from "@/views/my-components/hiver/region-tree-choose";
export default {
name: "company",
components: {
dict,
uploadPicInput,
regionTreeChoose
},
props: {
value: {
type: Boolean,
default: false,
},
data: {
type: Object,
},
type: {
type: String,
default: "0",
},
},
data() {
return {
roleList: [],
visible: this.value,
title: "",
data:[],
passColor: "",
submitLoading: false,
maxHeight: 510,
form: {
companyAddress: [],
companyStreet: '',
},
formValidate: {
//
companyName: [
{ required: true, message: "请输入大巴名称", trigger: "change" },
],
contacts: [
{ required: true, message: "请输入联系人", trigger: "change" },
],
mobile: [
{ required: true, message: "请输入手机号", trigger: "change" },
],
},
};
},
methods: {
init() {
import {
addLogiticsCompany,
editLogiticsCompany
} from "@/api/app";
import dict from "@/views/my-components/hiver/dict";
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
import regionTreeChoose from "@/views/my-components/hiver/region-tree-choose";
export default {
name: "company",
components: {
dict,
uploadPicInput,
regionTreeChoose
},
props: {
value: {
type: Boolean,
default: false,
},
data: {
type: Object,
},
type: {
type: String,
default: "0",
},
},
data() {
return {
menkan:'',
xianzhi:'',
youxiao:'',
dictData: [{
title: "全部",
value: ""
}, {
title: "配送",
value: 0
}, {
title: "快递跑腿",
value: 1
}, {
title: "拼团",
value: 2
}],
roleList: [],
visible: this.value,
title: "",
data: [],
passColor: "",
submitLoading: false,
maxHeight: 510,
form: {
companyAddress: [],
companyStreet: '',
},
formValidate: {
//
companyName: [{
required: true,
message: "请输入优惠券名称",
trigger: "change"
}, ],
contacts: [{
required: true,
message: "请输入联系人",
trigger: "change"
}, ],
mobile: [{
required: true,
message: "请输入手机号",
trigger: "change"
}, ],
},
};
},
methods: {
init() {
},
changePass(v, grade, strength) {
this.form.password = strength;
},
submit() {
},
changePass(v, grade, strength) {
this.form.password = strength;
},
submit() {
this.$refs.form.validate((valid) => {
if (valid) {
if (this.type == "1") {
//
this.submitLoading = true;
editLogiticsCompany(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.$emit("on-submit", true);
this.visible = false;
}
});
} else {
//
this.submitLoading = true;
addLogiticsCompany(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.$emit("on-submit", true);
this.visible = false;
}
});
}
}
});
},
handleSelectRegion(v) {
this.form.region = v;
},
setCurrentValue(value) {
if (value === this.visible) {
return;
}
if (this.type == "1") {
this.title = "编辑大巴信息";
this.maxHeight =
Number(document.documentElement.clientHeight - 121) + "px";
} else if (this.type == "2") {
this.title = "添大巴";
this.maxHeight =
Number(document.documentElement.clientHeight - 121) + "px";
} else {
this.title = "大巴详情";
this.maxHeight = "100%";
}
//
this.$refs.form.resetFields();
if (this.type == "0" || this.type == "1") {
//
let data = this.data;
//
if (data.companyAddress) {
data.companyAddress = data.companyAddress.split(",");
} else {
data.companyAddress = [];
}
//
this.$refs.regionTree.setData(data.region, data.regionTitle);
//
this.form = data;
} else {
//
this.form = {
companyAddress: [],
signCompany: "5",
};
}
this.visible = value;
},
},
watch: {
value(val) {
this.setCurrentValue(val);
},
visible(value) {
this.$emit("input", value);
},
},
mounted() {
this.init();
},
};
this.$refs.form.validate((valid) => {
if (valid) {
if (this.type == "1") {
//
this.submitLoading = true;
editLogiticsCompany(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.$emit("on-submit", true);
this.visible = false;
}
});
} else {
//
this.submitLoading = true;
addLogiticsCompany(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.$emit("on-submit", true);
this.visible = false;
}
});
}
}
});
},
handleSelectRegion(v) {
this.form.region = v;
},
setCurrentValue(value) {
if (value === this.visible) {
return;
}
if (this.type == "1") {
this.title = "编辑优惠券信息";
this.maxHeight =
Number(document.documentElement.clientHeight - 121) + "px";
} else if (this.type == "2") {
this.title = "新增优惠券";
this.maxHeight =
Number(document.documentElement.clientHeight - 121) + "px";
} else {
this.title = "优惠券详情";
this.maxHeight = "100%";
}
//
this.$refs.form.resetFields();
if (this.type == "0" || this.type == "1") {
//
let data = this.data;
//
if (data.companyAddress) {
data.companyAddress = data.companyAddress.split(",");
} else {
data.companyAddress = [];
}
//
this.$refs.regionTree.setData(data.region, data.regionTitle);
//
this.form = data;
} else {
//
this.form = {
companyAddress: [],
signCompany: "5",
};
}
this.visible = value;
},
},
watch: {
value(val) {
this.setCurrentValue(val);
},
visible(value) {
this.$emit("input", value);
},
},
mounted() {
this.init();
},
};
</script>
<style lang="less">
@import "@/styles/drawer-common.less";
</style>
@import "@/styles/drawer-common.less";
</style>

1172
src/views/app/business/bus/bus.vue

File diff suppressed because it is too large

164
src/views/app/business/logistics/logisticsAddress.vue

@ -0,0 +1,164 @@
<template>
<div class="search">
<div class='waiceng' style="margin-top: 20px;">
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">核对编号0005</div>
<div style="flex:1;padding-left:10px;">物流编号12604030938</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">订单编号126040314565364</div>
<div style="flex:1;padding-left:10px;">物流订单生成时间2026-04-03 14:56:09</div>
</div>
</div>
<div class="title">商家信息</div>
<div class='waiceng'>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">名称麽麽蜜呀明珠早市馆西3号门</div>
<div style="flex:1;padding-left:10px;">联系方式13231710122</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">地址河北省沧州市运河区明珠商贸城早市馆西3号门底商A2-1031</div>
<div style="flex:1;padding-left:10px;">发货时间15:13</div>
</div>
</div>
<div class="title">用户信息</div>
<div class='waiceng'>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;"></div>
<div style="flex:1;padding-left:10px;">联系方式15145128710</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">地址明珠国际商贸城早市馆5楼北天井3道进来思羽家</div>
<div style="flex:1;padding-left:10px;">要求送达时间15:21</div>
</div>
</div>
<div class="title">商品信息</div>
<div class='waiceng' style="text-align: center;">
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">商品名称</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">规格</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">数量</div>
<div style="flex:1;padding-left:10px;">总价</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">百香多芒</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">少冰+正常糖</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">1</div>
<div style="flex:1;padding-left:10px;">¥7.00</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">超级百香果</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">少冰+正常糖</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">1</div>
<div style="flex:1;padding-left:10px;">¥14.00</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">餐盒费</div>
<div style="width:25%;padding-left:10px;">¥0.00</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">配送费</div>
<div style="width:25%;padding-left:10px;">¥1.50</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">总计</div>
<div style="width:25%;padding-left:10px;">¥1.50</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">抵用券金额</div>
<div style="width:25%;padding-left:10px;">¥1.50</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">活动优惠金额</div>
<div style="width:25%;padding-left:10px;">¥1.50</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">实付金额</div>
<div style="width:25%;padding-left:10px;">¥1.50</div>
</div>
</div>
<div class="title">配送流程</div>
<div class='waiceng' style="text-align: center;">
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">状态</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">时间</div>
<div style="flex:1;padding-left:10px;">角色</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">用户下单</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">2026-04-03 14:56:09</div>
<div style="flex:1;padding-left:10px;"></div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">商家接单</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">2026-04-03 14:56:09</div>
<div style="flex:1;padding-left:10px;">麽麽蜜呀</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">配送员接单</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">2026-04-03 14:56:09</div>
<div style="flex:1;padding-left:10px;">张宝芹</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">已到店</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">2026-04-03 14:56:09</div>
<div style="flex:1;padding-left:10px;">张宝芹</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">配送员已取货</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">2026-04-03 14:56:09</div>
<div style="flex:1;padding-left:10px;">张宝芹</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">配送员已送达</div>
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">2026-04-03 14:56:09</div>
<div style="flex:1;padding-left:10px;">张宝芹</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">送单时长</div>
<div style="width: 33%;padding-left:10px;">23分钟</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">订单总计时</div>
<div style="width: 33%;padding-left:10px;">0时23分</div>
</div>
<div class="nei1">
<div style="flex:1;padding-left:10px;border-right:1px solid #eee;">超时</div>
<div style="width: 33%;padding-left:10px;">--</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "logisticsAddress",
data() {
return {
orderData:{}
};
},
methods: {
initRecharge(data) {
//data
console.log(data);
this.orderData = data
}
}
};
</script>
<style lang="less">
//@import "@/styles/table-common.less";
.nei1{
display: flex;
border:1px solid #eee;
height: 30px;
line-height: 30px;
}
.title{
height: 40px;
line-height: 40px;
font-size: 14px;
font-weight: 700;
}
</style>

166
src/views/app/business/recharge/logisticsAddress.vue

@ -0,0 +1,166 @@
<template>
<div class="search">
<div style="display: flex;">
<div class="waiceng">
<div class="title">订单信息</div>
<div>订单编号{{orderData.numberCode}}</div>
<div>支付订单编号{{'ORDER'+orderData.id}}</div>
</div>
<div class="waiceng">
<div class="title">用户信息</div>
<div>收货人<span class="blue-color">{{orderData.receiverName}}</span></div>
<div>收货电话<span class="blue-color">{{orderData.receiverPhone}}</span></div>
<div>收货地址<span class="blue-color">{{orderData.receiverAddress}}</span></div>
<div>要求送达时间<span class="blue-color">2026/04/07 09:31:00</span></div>
</div>
<div class="waiceng">
<div class="title">店铺信息</div>
<div>店铺名称<span class="blue-color">{{orderData.shopName}}</span></div>
<div>店铺电话<span class="blue-color">{{orderData.shopPhone}}</span></div>
<div>配送方式 <span class="blue-color">{{orderData.deliveryType == 1?'配送':'不配送'}}</span></div>
</div>
<div class="waiceng">
<div class="title">其他信息</div>
<div>配送员<span class="blue-color">张宝芹</span></div>
<div>配送员电话<span class="blue-color">15832720108</span></div>
<div>备注<span class="blue-color">{{orderData.remark}}</span></div>
</div>
</div>
<div style="display: flex;">
<div class="waiceng" style="width: 70%;">
<div class="title">商品信息</div>
<div class="box" v-for="(item,index) in orderData.goodsList" :key="index">
<div style="flex:1;">{{item.productName}}</div>
<div class="price"> X{{item.quantity}}</div>
<div class="price">¥{{item.price}}</div>
</div>
<div class="box">
<div style="flex:1;">餐盒费</div>
<div class="price">¥{{orderData.packageFee}}</div>
</div>
<div class="box">
<div style="flex:1;">配送费</div>
<div class="price">¥{{orderData.deliveryFee}}</div>
</div>
<div class="zong">活动优惠<span style="color:red;">¥0</span> 下单返佣<span style="color:red;">¥0</span>
合计<span style="color:#11cd6e;">¥{{orderData.totalAmount}}</span></div>
<div class="zong">流水金额<span class="blue-color">¥24</span> </div>
<div class="zong">商家预计收入<span class="blue-color">¥20.16</span> </div>
</div>
<div class="waiceng" style="width: 30%;background: #eee;padding: 0;">
<div style="background: #fff;padding: 10px;margin-bottom: 10px;border-radius: 10px;">
<div class="title">物流信息</div>
<div class="text">用户提交订单时间{{orderData.createTime | formatDateTime }}</div>
<div class="text">用户完成支付时间2026/04/07 09:06:41</div>
<div class="text">商家接单时间2026/04/07 09:06:41</div>
<div class="text">配送员已接单2026/04/07 09:06:44</div>
</div>
<div style="background: #fff;padding: 10px;border-radius: 10px;">
<div class="title">运营订单备注</div>
<textarea name="" id="" cols="30" rows="10" style="width: 100%;border: 1px solid #eee;"></textarea>
<div class='btn' @tap="returnOrder">退款</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {
returnOrder,
} from "@/api/index";
export default {
name: "logisticsAddress",
data() {
return {
orderData: {}
};
},
filters: {
formatDateTime(isoString) {
if (!isoString) return ''
const date = new Date(isoString)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}
},
methods: {
initRecharge(data) {
console.log('111112222', data);
this.orderData = data
},
returnOrder(){
returnOrder({
orderId:orderData.id,
userId:orderData.userId
}).then((res) => {
this.loading = false;
if (res.success) {
this.$Message.success("取消订单成功");
}
});
}
}
};
</script>
<style lang="less">
.search {
background: #eee;
}
.title {
font-weight: 700;
font-size: 15px;
}
.waiceng {
background: #fff;
border-radius: 10px;
margin: 5px;
padding: 10px;
}
.btn {
width: 75px;
height: 30px;
background: #4487fe;
font-size: 14px;
color: #fff;
border-radius: 7px;
text-align: center;
line-height: 30px;
margin: 0 auto;
}
.zong {
text-align: right;
height: 40px;
line-height: 40px;
}
.box {
display: flex;
border-bottom: 1px solid #eee;
line-height: 30px;
height: 30px px;
}
.text {
font-weight: bold;
color: #777;
}
.price {
flex: 1;
text-align: right
}
.blue-color {
color: #056dae;
}
</style>

653
src/views/app/business/recharge/recharge.vue

@ -1,356 +1,311 @@
<template>
<div class="search">
<Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem label="充值编号" prop="rechargeId">
<Input
type="text"
v-model="searchForm.name"
placeholder="请输入充值编号"
clearable
style="width: 200px"
/>
</FormItem>
<FormItem label="被充值人名称" prop="rechargeName">
<Input
type="text"
v-model="searchForm.rechargeName"
placeholder="被充值人名称"
clearable
style="width: 200px"
/>
</FormItem>
<span v-if="drop">
<FormItem label="被充值人编号" prop="rechargeWorkerId">
<dict dict="workerStatus" v-model="searchForm.workerStatus" style="width: 200px" />
</FormItem>
<FormItem label="充值时间">
<DatePicker
:options="options"
v-model="selectDate"
type="daterange"
format="yyyy-MM-dd"
clearable
@on-change="selectDateRange"
placeholder="选择起始时间"
style="width: 200px"
></DatePicker>
</FormItem>
</span>
<FormItem style="margin-left: -35px" class="br">
<Button @click="handleSearch" type="primary" icon="ios-search"
>搜索</Button
>
<Button @click="handleReset">重置</Button>
</FormItem>
</Form>
</Row>
<Row align="middle" justify="space-between" class="operation">
<div class="icons">
<Tooltip content="刷新" placement="top" transfer>
<Icon
type="md-refresh"
size="18"
class="item"
@click="getDataList"
/>
</Tooltip>
<Tooltip
:content="openSearch ? '关闭搜索' : '开启搜索'"
placement="top"
transfer
>
<Icon
type="ios-search"
size="18"
class="item tip"
@click="openSearch = !openSearch"
/>
</Tooltip>
<Tooltip
:content="openTip ? '关闭提示' : '开启提示'"
placement="top"
transfer
>
<Icon
type="md-bulb"
size="18"
class="item tip"
@click="openTip = !openTip"
/>
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default"
>默认</DropdownItem
>
<DropdownItem :selected="tableSize == 'large'" name="large"
>宽松</DropdownItem
>
<DropdownItem :selected="tableSize == 'small'" name="small"
>紧密</DropdownItem
>
</DropdownMenu>
</Dropdown>
</Tooltip>
<Tooltip content="导出数据" placement="top" transfer>
<Icon
type="md-download"
size="18"
class="item"
@click="exportData"
/>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table
:loading="loading"
border
:columns="columns"
:data="data"
:size="tableSize"
ref="table"
sortable="custom"
@on-sort-change="changeSort"
@on-selection-change="changeSelect"
></Table>
<Row type="flex" justify="end" class="page">
<Page
:current="searchForm.pageNumber"
:total="total"
:page-size="searchForm.pageSize"
@on-change="changePage"
@on-page-size-change="changePageSize"
:page-size-opts="[10, 20, 50]"
size="small"
show-total
show-elevator
show-sizer
></Page>
</Row>
</Card>
</div>
<div class="search">
<Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem label="商家名" prop="rechargeId">
<Input type="text" v-model="searchForm.name" placeholder="请输入商家名" clearable
style="width: 200px" />
</FormItem>
<FormItem label="状态" prop="rechargeName">
<Input type="text" v-model="searchForm.rechargeName" placeholder="状态" clearable
style="width: 200px" />
</FormItem>
<FormItem style="margin-left: -35px" class="br">
<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
<Button @click="handleReset">重置</Button>
</FormItem>
</Form>
</Row>
<Row align="middle" justify="space-between" class="operation">
<div class="icons">
<Tooltip content="刷新" placement="top" transfer>
<Icon type="md-refresh" size="18" class="item" @click="getDataList" />
</Tooltip>
<Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
<Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
</Tooltip>
<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default">默认</DropdownItem>
<DropdownItem :selected="tableSize == 'large'" name="large">宽松</DropdownItem>
<DropdownItem :selected="tableSize == 'small'" name="small">紧密</DropdownItem>
</DropdownMenu>
</Dropdown>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table :loading="loading" border :columns="columns" :data="data" :size="tableSize" ref="table"
sortable="custom" @on-sort-change="changeSort" @on-selection-change="changeSelect"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize"
@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]"
size="small" show-total show-elevator show-sizer></Page>
</Row>
</Card>
<!-- 订单详情 -->
<Modal :title="订单详情" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000">
<logistics-address v-if="Visiable" ref="dialog"></logistics-address>
<div slot="footer" v-show="Visiable">
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</Modal>
</div>
</template>
<script>
import {
getWorkerRechargeRecord
} from "@/api/index";
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
import { shortcuts } from "@/libs/shortcuts";
export default {
name: "recharge",
components: {
uploadPicInput,
},
data() {
return {
tableSize: "default",
openSearch: true, //
openTip: true, //
loading: true, //
modalType: 0, //
modalVisible: false, //
modalTitle: "", //
searchForm: {
//
pageNumber: 1, //
pageSize: 10, //
sort: "createTime", //
order: "desc", //
startDate: "", //
endDate: "", //
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {
//
name: "",
logo: "",
clientSecret: "",
homeUri: "",
redirectUri: "",
autoApprove: false,
},
submitLoading: false, //
selectList: [], //
columns: [
{
type: "selection",
width: 60,
align: "center",
fixed: "left",
},
{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
title: "充值编号",
key: "rechargeId",
minWidth: 125,
sortable: true,
fixed: "left",
},
{
title: "被充值人名称",
key: "rechargeName",
minWidth: 125,
sortable: true,
fixed: "left",
},
{
title: "被充值人编号",
key: "rechargeWorkerId",
minWidth: 125,
sortable: true,
fixed: "left",
},
{
title: "充值金额",
key: "rechargeNum",
minWidth: 125,
sortable: true,
fixed: "left",
},
{
title: "充值时间",
key: "createTime",
width: 170,
sortable: true,
sortType: "desc",
},
],
data: [], //
total: 0, //
rechargeWorkerId: "",
};
},
methods: {
init() {
this.getDataList();
},
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
this.clearSelectAll();
},
changePageSize(v) {
this.searchForm.pageSize = v;
this.getDataList();
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
},
handleReset() {
this.$refs.searchForm.resetFields();
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.selectDate = null;
this.searchForm.startDate = "";
this.searchForm.endDate = "";
//
this.getDataList();
},
changeSort(e) {
this.searchForm.sort = e.key;
this.searchForm.order = e.order;
if (e.order === "normal") {
this.searchForm.order = "";
}
this.getDataList();
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
changeSelect(e) {
this.selectList = e;
},
selectDateRange(v) {
if (v) {
this.searchForm.startDate = v[0];
this.searchForm.endDate = v[1];
}
},
changeTableSize(v) {
this.tableSize = v;
},
exportData() {
this.$refs.table.exportCsv({
filename: "数据",
});
},
generateSecret() {
getSecretKey().then((res) => {
if (res.success) {
this.form.clientSecret = res.result;
}
});
},
getDataList() {
this.loading = true;
//
getWorkerRechargeRecord(this.rechargeWorkerId).then((res) => {
this.loading = false;
if (res.success) {
this.data = res.result.content;
this.total = res.result.totalElements;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1;
this.getDataList();
}
}
});
},
handleSubmit() {
this.$refs.form.validate((valid) => {
if (valid) {
this.submitLoading = true;
if (this.modalType === 0) {
// id
delete this.form.id;
addClient(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
this.modalVisible = false;
}
});
} else {
//
updateClient(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
this.modalVisible = false;
}
});
}
}
});
},
},
mounted() {
this.init();
},
};
import {
getWorkerRechargeRecord
} from "@/api/index";
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
import {
shortcuts
} from "@/libs/shortcuts";
import logisticsAddress from "@/views/sys/order-manage/logisticsAddress";
export default {
name: "recharge",
components: {
uploadPicInput,
logisticsAddress,
},
data() {
return {
Visiable: false,
tableSize: "default",
openSearch: true, //
openTip: true, //
loading: true, //
modalType: 0, //
modalVisible: false, //
modalTitle: "", //
searchForm: {
//
pageNumber: 1, //
pageSize: 10, //
sort: "createTime", //
order: "desc", //
startDate: "", //
endDate: "", //
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {
//
name: "",
logo: "",
clientSecret: "",
homeUri: "",
redirectUri: "",
autoApprove: false,
},
submitLoading: false, //
selectList: [], //
columns: [{
type: "index",
width: 60,
align: "center",
},
{
title: "拼团编号",
key: "rechargeId",
align: "center",
},
{
title: "商家名",
key: "rechargeName",
align: "center",
},
{
title: "成团时间",
key: "rechargeWorkerId",
align: "center",
},
{
title: "几人团",
key: "rechargeNum",
align: "center",
},
{
title: "状态",
key: "createTime",
align: "center",
},
{
title: "操作",
key: "action",
width: 200,
align: "center",
fixed: "right",
render: (h, params) => {
return h("div", [
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.edit(params.row);
},
},
},
"查看详情"
),
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a", {
on: {
click: () => {
this.edit(params.row);
},
},
},
"查看订单"
),
]);
},
},
],
data: [], //
total: 0, //
rechargeWorkerId: "",
};
},
methods: {
init() {
this.getDataList();
},
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
this.clearSelectAll();
},
edit(v){
this.Visiable = true;
},
changePageSize(v) {
this.searchForm.pageSize = v;
this.getDataList();
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
},
handleReset() {
this.$refs.searchForm.resetFields();
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.selectDate = null;
this.searchForm.startDate = "";
this.searchForm.endDate = "";
//
this.getDataList();
},
changeSort(e) {
this.searchForm.sort = e.key;
this.searchForm.order = e.order;
if (e.order === "normal") {
this.searchForm.order = "";
}
this.getDataList();
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
changeSelect(e) {
this.selectList = e;
},
selectDateRange(v) {
if (v) {
this.searchForm.startDate = v[0];
this.searchForm.endDate = v[1];
}
},
changeTableSize(v) {
this.tableSize = v;
},
exportData() {
this.$refs.table.exportCsv({
filename: "数据",
});
},
generateSecret() {
getSecretKey().then((res) => {
if (res.success) {
this.form.clientSecret = res.result;
}
});
},
getDataList() {
this.loading = true;
//
getWorkerRechargeRecord(this.rechargeWorkerId).then((res) => {
this.loading = false;
if (res.success) {
this.data = res.result.content;
this.total = res.result.totalElements;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1;
this.getDataList();
}
}
});
},
handleSubmit() {
this.$refs.form.validate((valid) => {
if (valid) {
this.submitLoading = true;
if (this.modalType === 0) {
// id
delete this.form.id;
addClient(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
this.modalVisible = false;
}
});
} else {
//
updateClient(this.form).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
this.modalVisible = false;
}
});
}
}
});
},
},
mounted() {
this.init();
},
};
</script>
<style lang="less">
@import "@/styles/table-common.less";
@import "@/styles/table-common.less";
</style>

303
src/views/app/data-statistics/data-statistics.vue

@ -4,6 +4,11 @@
<template>
<div class="search">
<Card>
<Tabs v-model="tabName" :animated="false" @on-click="changeOrderTab">
<TabPane label="拼团单" name="0"></TabPane>
<TabPane label="外卖单" name="1"></TabPane>
<TabPane label="跑腿单" name="2"></TabPane>
</Tabs>
<Row @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem>
@ -26,6 +31,304 @@
</Form>
</Row>
</Card>
<Card>
<div style="border-left: 5px solid rgb(70, 130, 180);height: 20px;line-height: 20px;font-size: 18px;font-weight: 700;margin-bottom: 20px;padding-left: 7px;">
订单数据
</div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-briefcase" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>订单数量</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-buffer" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>流水总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>支付总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-bookmarks" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>活动总优惠</div>
</div>
</div>
</Col>
</Row>
<div style="width:100%;height: 20px;"></div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-alarm" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>配送总准时率%</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>优惠券优惠总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-book" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>配送费总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-bookmarks" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>配送费实际支付总金额</div>
</div>
</div>
</Col>
</Row>
<div style="width:100%;height: 20px;"></div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#32CD32;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>返佣补贴金额</div>
</div>
</div>
</Col>
</Row>
<div style="border-left: 5px solid rgb(70, 130, 180);height: 20px;line-height: 20px;font-size: 18px;font-weight: 700;margin: 20px 0;padding-left: 7px;">
平台数据
</div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-briefcase" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>平台营收</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-buffer" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>平台补贴总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>客单价</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-bookmarks" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>平台抽成</div>
</div>
</div>
</Col>
</Row>
<div style="width:100%;height: 20px;"></div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-alarm" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>平台优惠券补贴总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>平台配送费</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#87CEFA;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-book" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>平台实际配送费</div>
</div>
</div>
</Col>
</Row>
<div style="border-left: 5px solid rgb(70, 130, 180);height: 20px;line-height: 20px;font-size: 18px;font-weight: 700;margin: 20px 0;padding-left: 7px;">
商家数据
</div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-briefcase" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>外卖入驻商家数量</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-buffer" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>产生订单商家数量</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>外卖申请商家数量</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-bookmarks" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>冻结商家数量</div>
</div>
</div>
</Col>
</Row>
<div style="width:100%;height: 20px;"></div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="md-alarm" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>商家补贴总金额</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="logo-yen" color="#fff" size="40"/>
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>商家配送费</div>
</div>
</div>
</Col>
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#FFA500;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-book" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>商家实际配送费</div>
</div>
</div>
</Col>
</Row>
<div style="border-left: 5px solid rgb(70, 130, 180);height: 20px;line-height: 20px;font-size: 18px;font-weight: 700;margin: 20px 0;padding-left: 7px;">
用户数据
</div>
<Row :gutter="16">
<Col span="6">
<div style="display:flex;">
<div style="width:50px;height:50px;background:#6495ED;border-radius:5px;text-align:center;padding-top:5px;margin-right:10px;">
<Icon type="ios-briefcase" color="#fff" size="40" />
</div>
<div>
<div style="font-weight:700;font-size:22px;">100</div>
<div>产生订单用户数</div>
</div>
</div>
</Col>
</Row>
</Card>
</div>
</template>

166
src/views/sys/order-manage/logisticsAddress.vue

@ -0,0 +1,166 @@
<template>
<div class="search">
<div style="display: flex;">
<div class="waiceng">
<div class="title">订单信息</div>
<div>订单编号{{orderData.numberCode}}</div>
<div>支付订单编号{{'ORDER'+orderData.id}}</div>
</div>
<div class="waiceng">
<div class="title">用户信息</div>
<div>收货人<span class="blue-color">{{orderData.receiverName}}</span></div>
<div>收货电话<span class="blue-color">{{orderData.receiverPhone}}</span></div>
<div>收货地址<span class="blue-color">{{orderData.receiverAddress}}</span></div>
<div>要求送达时间<span class="blue-color">2026/04/07 09:31:00</span></div>
</div>
<div class="waiceng">
<div class="title">店铺信息</div>
<div>店铺名称<span class="blue-color">{{orderData.shopName}}</span></div>
<div>店铺电话<span class="blue-color">{{orderData.shopPhone}}</span></div>
<div>配送方式 <span class="blue-color">{{orderData.deliveryType == 1?'配送':'不配送'}}</span></div>
</div>
<div class="waiceng">
<div class="title">其他信息</div>
<div>配送员<span class="blue-color">张宝芹</span></div>
<div>配送员电话<span class="blue-color">15832720108</span></div>
<div>备注<span class="blue-color">{{orderData.remark}}</span></div>
</div>
</div>
<div style="display: flex;">
<div class="waiceng" style="width: 70%;">
<div class="title">商品信息</div>
<div class="box" v-for="(item,index) in orderData.goodsList" :key="index">
<div style="flex:1;">{{item.productName}}</div>
<div class="price"> X{{item.quantity}}</div>
<div class="price">¥{{item.price}}</div>
</div>
<div class="box">
<div style="flex:1;">餐盒费</div>
<div class="price">¥{{orderData.packageFee}}</div>
</div>
<div class="box">
<div style="flex:1;">配送费</div>
<div class="price">¥{{orderData.deliveryFee}}</div>
</div>
<div class="zong">活动优惠<span style="color:red;">¥0</span> 下单返佣<span style="color:red;">¥0</span>
合计<span style="color:#11cd6e;">¥{{orderData.totalAmount}}</span></div>
<div class="zong">流水金额<span class="blue-color">¥24</span> </div>
<div class="zong">商家预计收入<span class="blue-color">¥20.16</span> </div>
</div>
<div class="waiceng" style="width: 30%;background: #eee;padding: 0;">
<div style="background: #fff;padding: 10px;margin-bottom: 10px;border-radius: 10px;">
<div class="title">物流信息</div>
<div class="text">用户提交订单时间{{orderData.createTime | formatDateTime }}</div>
<div class="text">用户完成支付时间2026/04/07 09:06:41</div>
<div class="text">商家接单时间2026/04/07 09:06:41</div>
<div class="text">配送员已接单2026/04/07 09:06:44</div>
</div>
<div style="background: #fff;padding: 10px;border-radius: 10px;">
<div class="title">运营订单备注</div>
<textarea name="" id="" cols="30" rows="10" style="width: 100%;border: 1px solid #eee;"></textarea>
<div class='btn' @tap="returnOrder">退款</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {
returnOrder,
} from "@/api/index";
export default {
name: "logisticsAddress",
data() {
return {
orderData: {}
};
},
filters: {
formatDateTime(isoString) {
if (!isoString) return ''
const date = new Date(isoString)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}
},
methods: {
initRecharge(data) {
console.log('111112222', data);
this.orderData = data
},
returnOrder(){
returnOrder({
orderId:orderData.id,
userId:orderData.userId
}).then((res) => {
this.loading = false;
if (res.success) {
this.$Message.success("取消订单成功");
}
});
}
}
};
</script>
<style lang="less">
.search {
background: #eee;
}
.title {
font-weight: 700;
font-size: 15px;
}
.waiceng {
background: #fff;
border-radius: 10px;
margin: 5px;
padding: 10px;
}
.btn {
width: 75px;
height: 30px;
background: #4487fe;
font-size: 14px;
color: #fff;
border-radius: 7px;
text-align: center;
line-height: 30px;
margin: 0 auto;
}
.zong {
text-align: right;
height: 40px;
line-height: 40px;
}
.box {
display: flex;
border-bottom: 1px solid #eee;
line-height: 30px;
height: 30px px;
}
.text {
font-weight: bold;
color: #777;
}
.price {
flex: 1;
text-align: right
}
.blue-color {
color: #056dae;
}
</style>
Loading…
Cancel
Save