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. 556
      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>

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

@ -1,288 +1,288 @@
<template> <template>
<div class="company-edit"> <div class="company-edit">
<!-- Drawer抽屉 --> <!-- Drawer抽屉 -->
<Drawer <Drawer :title="title" v-model="visible" width="500" draggable :mask-closable="type == '0'">
:title="title" <div :style="{ maxHeight: maxHeight }" class="drawer-content">
v-model="visible" <div class="drawer-header">
width="500" <div style="margin-right: 16px">优惠券配置</div>
draggable </div>
:mask-closable="type == '0'" <Form label-colon v-show="type != '2'">
> <Row :gutter="32">
<div :style="{ maxHeight: maxHeight }" class="drawer-content"> <Col span="24">
<div class="drawer-header"> <FormItem label="优惠券名称">
<div style="margin-right: 16px">大巴配置</div> {{ form.companyName }}
</div> </FormItem>
<Form label-colon v-show="type != '2'"> </Col>
<Row :gutter="32"> </Row>
<Col span="24"> </Form>
<FormItem label="大巴名称"> <Form ref="form" :model="form" :rules="formValidate" label-position="top">
{{ form.companyName }} <Row :gutter="32">
</FormItem> <Col span="24">
</Col> <FormItem label="优惠券名称" prop="companyName">
</Row> <Input v-model="form.companyName" />
</Form> </FormItem>
<Form </Col>
ref="form" </Row>
:model="form" <Row :gutter="32">
:rules="formValidate" <Col span="12">
label-position="top" <FormItem label="库存" prop="companyTel">
> <Input v-model="form.companyTel" />
<Row :gutter="32" v-if="type == '2'"> </FormItem>
<Col span="24"> </Col>
<FormItem label="大巴名称" prop="companyName"> <Col span="12">
<Input v-model="form.companyName" /> <FormItem label="适用范围" prop="companyAddress">
</FormItem> <Select ref="dep" @on-change="checkStatus" clearable="true">
</Col> <Option v-for="(item, i) in dictData" :key="i" :value="item.value">{{
</Row> item.title
<Row :gutter="32"> }}</Option>
<Col span="12"> </Select>
<FormItem label="登录账号" prop="username"> </FormItem>
<Input v-model="form.username" /> </Col>
</FormItem> </Row>
</Col> <Row :gutter="32">
<Col span="12"> <Col span="24">
<FormItem label="登录密码" prop="password"> <FormItem label="优惠金额">
<SetPassword v-model="form.password" @on-change="changePass" /> <Input></Input>
</FormItem> </FormItem>
</Col> </Col>
</Row> </Row>
<Row :gutter="32"> <Row :gutter="32">
<Col span="12"> <Col span="24">
<FormItem label="大巴电话" prop="companyTel"> <FormItem label="使用门槛">
<Input v-model="form.companyTel" /> <RadioGroup v-model="menkan" vertical>
</FormItem> <Radio label="buxian">不限制</Radio>
</Col> <Radio label="manjian"><Input style="width: 50px;"></Input>元可使用</Radio>
<Col span="12"> </RadioGroup>
<FormItem label="大巴邮箱" prop="companyEmail"> </FormItem>
<Input v-model="form.companyEmail" /> </Col>
</FormItem> </Row>
</Col> <Row :gutter="32">
</Row> <Col span="24">
<Row :gutter="32"> <FormItem label="用户限制">
<Col span="24"> <RadioGroup v-model="xianzhi" vertical>
<FormItem label="所在地区" prop="companyAddress"> <Radio label="meibangding">不限制</Radio>
<al-cascader <Radio label="bangding">绑定手机号用户</Radio>
v-model="form.companyAddress" </RadioGroup>
data-type="name" </FormItem>
level="2" </Col>
transfer </Row>
/> <Row :gutter="32">
</FormItem> <Col span="24">
</Col> <FormItem label="有效期">
</Row> <RadioGroup v-model="youxiao" vertical>
<Row :gutter="32"> <Radio label="guding">固定日期</Radio>
<Col span="24"> <DatePicker v-if="youxiao == 'guding'" type="daterange" split-panels placeholder="选择起始时间" style="width: 200px"></DatePicker>
<FormItem label="详细地址" prop="companyStreet"> <Radio label="xianqi">领券后<Input style="width: 50px;"></Input>天有效</Radio>
<Input v-model="form.companyStreet" /> </RadioGroup>
</FormItem>
</Col> </FormItem>
</Row> </Col>
<Row :gutter="32"> </Row>
<Col span="12"> <Row :gutter="32">
<FormItem label="联系人" prop="contacts"> <Col span="24">
<Input v-model="form.contacts" /> <FormItem label="活动互斥选择">
</FormItem> <Checkbox v-model="single">不与折扣同享</Checkbox>
</Col> <Checkbox v-model="single">不与满减活动同享</Checkbox>
<Col span="12"> <Checkbox v-model="single">不与满赠同享</Checkbox>
<FormItem label="手机号" prop="mobile"> <Checkbox v-model="single">不与满额免配送费同享</Checkbox>
<Input v-model="form.mobile" /> <Checkbox v-model="single">不与新用户立减活动同享</Checkbox>
</FormItem> <Checkbox v-model="single">不与配送费优惠活动同享</Checkbox>
</Col> <Checkbox v-model="single">不与会员/店铺红包券同享</Checkbox>
</Row> </FormItem>
<Row :gutter="32"> </Col>
<Col span="12"> </Row>
<FormItem label="商圈区域" prop="region"> <Row :gutter="32">
<region-tree-choose <Col span="24">
@on-change="handleSelectRegion" <FormItem label="配送方式">
ref="regionTree" <Checkbox v-model="single">平台配送</Checkbox>
></region-tree-choose> <Checkbox v-model="single">商家配送</Checkbox>
</FormItem> <Checkbox v-model="single">到店自取</Checkbox>
</Col> <Checkbox v-model="single">到店消费</Checkbox>
<Col span="12"> </FormItem>
<FormItem label="返佣金额" prop="rebateAmount"> </Col>
<Input v-model="form.rebateAmount" /> </Row>
</FormItem> </Form>
</Col> </div>
</Row> <div class="drawer-footer br" v-show="type != '0'">
<Row :gutter="32"> <Button type="primary" :loading="submitLoading" @click="submit">提交</Button>
<Col span="12"> <Button @click="visible = false">取消</Button>
<FormItem label="当次缴纳" prop="depoNum"> </div>
<Input v-model="form.depoNum" /> </Drawer>
</FormItem> </div>
</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>
</template> </template>
<script> <script>
import { addLogiticsCompany, editLogiticsCompany } from "@/api/app"; import {
import dict from "@/views/my-components/hiver/dict"; addLogiticsCompany,
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input"; editLogiticsCompany
import regionTreeChoose from "@/views/my-components/hiver/region-tree-choose"; } from "@/api/app";
export default { import dict from "@/views/my-components/hiver/dict";
name: "company", import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
components: { import regionTreeChoose from "@/views/my-components/hiver/region-tree-choose";
dict, export default {
uploadPicInput, name: "company",
regionTreeChoose components: {
}, dict,
props: { uploadPicInput,
value: { regionTreeChoose
type: Boolean, },
default: false, props: {
}, value: {
data: { type: Boolean,
type: Object, default: false,
}, },
type: { data: {
type: String, type: Object,
default: "0", },
}, type: {
}, type: String,
data() { default: "0",
return { },
roleList: [], },
visible: this.value, data() {
title: "", return {
data:[], menkan:'',
passColor: "", xianzhi:'',
submitLoading: false, youxiao:'',
maxHeight: 510, dictData: [{
form: { title: "全部",
companyAddress: [], value: ""
companyStreet: '', }, {
}, title: "配送",
formValidate: { value: 0
// }, {
companyName: [ title: "快递跑腿",
{ required: true, message: "请输入大巴名称", trigger: "change" }, value: 1
], }, {
contacts: [ title: "拼团",
{ required: true, message: "请输入联系人", trigger: "change" }, value: 2
], }],
mobile: [ roleList: [],
{ required: true, message: "请输入手机号", trigger: "change" }, visible: this.value,
], title: "",
}, data: [],
}; passColor: "",
}, submitLoading: false,
methods: { maxHeight: 510,
init() { 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) { changePass(v, grade, strength) {
this.form.password = strength; this.form.password = strength;
}, },
submit() { submit() {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
if (this.type == "1") { if (this.type == "1") {
// //
this.submitLoading = true; this.submitLoading = true;
editLogiticsCompany(this.form).then((res) => { editLogiticsCompany(this.form).then((res) => {
this.submitLoading = false; this.submitLoading = false;
if (res.success) { if (res.success) {
this.$Message.success("操作成功"); this.$Message.success("操作成功");
this.$emit("on-submit", true); this.$emit("on-submit", true);
this.visible = false; this.visible = false;
} }
}); });
} else { } else {
// //
this.submitLoading = true; this.submitLoading = true;
addLogiticsCompany(this.form).then((res) => { addLogiticsCompany(this.form).then((res) => {
this.submitLoading = false; this.submitLoading = false;
if (res.success) { if (res.success) {
this.$Message.success("操作成功"); this.$Message.success("操作成功");
this.$emit("on-submit", true); this.$emit("on-submit", true);
this.visible = false; this.visible = false;
} }
}); });
} }
} }
}); });
}, },
handleSelectRegion(v) { handleSelectRegion(v) {
this.form.region = v; this.form.region = v;
}, },
setCurrentValue(value) { setCurrentValue(value) {
if (value === this.visible) { if (value === this.visible) {
return; return;
} }
if (this.type == "1") { if (this.type == "1") {
this.title = "编辑大巴信息"; this.title = "编辑优惠券信息";
this.maxHeight = this.maxHeight =
Number(document.documentElement.clientHeight - 121) + "px"; Number(document.documentElement.clientHeight - 121) + "px";
} else if (this.type == "2") { } else if (this.type == "2") {
this.title = "添大巴"; this.title = "新增优惠券";
this.maxHeight = this.maxHeight =
Number(document.documentElement.clientHeight - 121) + "px"; Number(document.documentElement.clientHeight - 121) + "px";
} else { } else {
this.title = "大巴详情"; this.title = "优惠券详情";
this.maxHeight = "100%"; this.maxHeight = "100%";
} }
// //
this.$refs.form.resetFields(); this.$refs.form.resetFields();
if (this.type == "0" || this.type == "1") { if (this.type == "0" || this.type == "1") {
// //
let data = this.data; let data = this.data;
// //
if (data.companyAddress) { if (data.companyAddress) {
data.companyAddress = data.companyAddress.split(","); data.companyAddress = data.companyAddress.split(",");
} else { } else {
data.companyAddress = []; data.companyAddress = [];
} }
// //
this.$refs.regionTree.setData(data.region, data.regionTitle); this.$refs.regionTree.setData(data.region, data.regionTitle);
// //
this.form = data; this.form = data;
} else { } else {
// //
this.form = { this.form = {
companyAddress: [], companyAddress: [],
signCompany: "5", signCompany: "5",
}; };
} }
this.visible = value; this.visible = value;
}, },
}, },
watch: { watch: {
value(val) { value(val) {
this.setCurrentValue(val); this.setCurrentValue(val);
}, },
visible(value) { visible(value) {
this.$emit("input", value); this.$emit("input", value);
}, },
}, },
mounted() { mounted() {
this.init(); this.init();
}, },
}; };
</script> </script>
<style lang="less"> <style lang="less">
@import "@/styles/drawer-common.less"; @import "@/styles/drawer-common.less";
</style> </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> <template>
<div class="search"> <div class="search">
<Card> <Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch"> <Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70"> <Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem label="充值编号" prop="rechargeId"> <FormItem label="商家名" prop="rechargeId">
<Input <Input type="text" v-model="searchForm.name" placeholder="请输入商家名" clearable
type="text" style="width: 200px" />
v-model="searchForm.name" </FormItem>
placeholder="请输入充值编号" <FormItem label="状态" prop="rechargeName">
clearable <Input type="text" v-model="searchForm.rechargeName" placeholder="状态" clearable
style="width: 200px" style="width: 200px" />
/> </FormItem>
</FormItem> <FormItem style="margin-left: -35px" class="br">
<FormItem label="被充值人名称" prop="rechargeName"> <Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
<Input <Button @click="handleReset">重置</Button>
type="text" </FormItem>
v-model="searchForm.rechargeName" </Form>
placeholder="被充值人名称" </Row>
clearable <Row align="middle" justify="space-between" class="operation">
style="width: 200px" <div class="icons">
/> <Tooltip content="刷新" placement="top" transfer>
</FormItem> <Icon type="md-refresh" size="18" class="item" @click="getDataList" />
<span v-if="drop"> </Tooltip>
<FormItem label="被充值人编号" prop="rechargeWorkerId"> <Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
<dict dict="workerStatus" v-model="searchForm.workerStatus" style="width: 200px" /> <Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
</FormItem> </Tooltip>
<FormItem label="充值时间"> <Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
<DatePicker <Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
:options="options" </Tooltip>
v-model="selectDate" <Tooltip content="表格密度" placement="top" transfer>
type="daterange" <Dropdown @on-click="changeTableSize" trigger="click">
format="yyyy-MM-dd" <Icon type="md-list" size="18" class="item" />
clearable <DropdownMenu slot="list">
@on-change="selectDateRange" <DropdownItem :selected="tableSize == 'default'" name="default">默认</DropdownItem>
placeholder="选择起始时间" <DropdownItem :selected="tableSize == 'large'" name="large">宽松</DropdownItem>
style="width: 200px" <DropdownItem :selected="tableSize == 'small'" name="small">紧密</DropdownItem>
></DatePicker> </DropdownMenu>
</FormItem> </Dropdown>
</span> </Tooltip>
<FormItem style="margin-left: -35px" class="br"> </div>
<Button @click="handleSearch" type="primary" icon="ios-search" </Row>
>搜索</Button <Alert show-icon v-show="openTip">
> 已选择
<Button @click="handleReset">重置</Button> <span class="select-count">{{ selectList.length }}</span>
</FormItem> <a class="select-clear" @click="clearSelectAll">清空</a>
</Form> </Alert>
</Row> <Table :loading="loading" border :columns="columns" :data="data" :size="tableSize" ref="table"
<Row align="middle" justify="space-between" class="operation"> sortable="custom" @on-sort-change="changeSort" @on-selection-change="changeSelect"></Table>
<div class="icons"> <Row type="flex" justify="end" class="page">
<Tooltip content="刷新" placement="top" transfer> <Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize"
<Icon @on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]"
type="md-refresh" size="small" show-total show-elevator show-sizer></Page>
size="18" </Row>
class="item" </Card>
@click="getDataList" <!-- 订单详情 -->
/> <Modal :title="订单详情" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000">
</Tooltip> <logistics-address v-if="Visiable" ref="dialog"></logistics-address>
<Tooltip <div slot="footer" v-show="Visiable">
:content="openSearch ? '关闭搜索' : '开启搜索'" <Button type="text" @click="Visiable = false">关闭</Button>
placement="top" </div>
transfer </Modal>
> </div>
<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>
</template> </template>
<script> <script>
import { import {
getWorkerRechargeRecord getWorkerRechargeRecord
} from "@/api/index"; } from "@/api/index";
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input"; import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
import { shortcuts } from "@/libs/shortcuts"; import {
export default { shortcuts
name: "recharge", } from "@/libs/shortcuts";
components: { import logisticsAddress from "@/views/sys/order-manage/logisticsAddress";
uploadPicInput, export default {
}, name: "recharge",
data() { components: {
return { uploadPicInput,
tableSize: "default", logisticsAddress,
openSearch: true, // },
openTip: true, // data() {
loading: true, // return {
modalType: 0, // Visiable: false,
modalVisible: false, // tableSize: "default",
modalTitle: "", // openSearch: true, //
searchForm: { openTip: true, //
// loading: true, //
pageNumber: 1, // modalType: 0, //
pageSize: 10, // modalVisible: false, //
sort: "createTime", // modalTitle: "", //
order: "desc", // searchForm: {
startDate: "", // //
endDate: "", // pageNumber: 1, //
}, pageSize: 10, //
selectDate: null, sort: "createTime", //
options: { order: "desc", //
shortcuts: shortcuts, startDate: "", //
}, endDate: "", //
form: { },
// selectDate: null,
name: "", options: {
logo: "", shortcuts: shortcuts,
clientSecret: "", },
homeUri: "", form: {
redirectUri: "", //
autoApprove: false, name: "",
}, logo: "",
submitLoading: false, // clientSecret: "",
selectList: [], // homeUri: "",
columns: [ redirectUri: "",
{ autoApprove: false,
type: "selection", },
width: 60, submitLoading: false, //
align: "center", selectList: [], //
fixed: "left", columns: [{
}, type: "index",
{ width: 60,
type: "index", align: "center",
width: 60, },
align: "center", {
fixed: "left", title: "拼团编号",
}, key: "rechargeId",
{ align: "center",
title: "充值编号", },
key: "rechargeId", {
minWidth: 125, title: "商家名",
sortable: true, key: "rechargeName",
fixed: "left", align: "center",
}, },
{ {
title: "被充值人名称", title: "成团时间",
key: "rechargeName", key: "rechargeWorkerId",
minWidth: 125, align: "center",
sortable: true, },
fixed: "left", {
}, title: "几人团",
{ key: "rechargeNum",
title: "被充值人编号", align: "center",
key: "rechargeWorkerId", },
minWidth: 125, {
sortable: true, title: "状态",
fixed: "left", key: "createTime",
}, align: "center",
{ },
title: "充值金额", {
key: "rechargeNum", title: "操作",
minWidth: 125, key: "action",
sortable: true, width: 200,
fixed: "left", align: "center",
}, fixed: "right",
{ render: (h, params) => {
title: "充值时间", return h("div", [
key: "createTime", h("Divider", {
width: 170, props: {
sortable: true, type: "vertical",
sortType: "desc", },
}, }),
], h(
data: [], // "a", {
total: 0, // on: {
rechargeWorkerId: "", click: () => {
}; this.edit(params.row);
}, },
methods: { },
init() { },
this.getDataList(); "查看详情"
}, ),
changePage(v) { h("Divider", {
this.searchForm.pageNumber = v; props: {
this.getDataList(); type: "vertical",
this.clearSelectAll(); },
}, }),
changePageSize(v) { h(
this.searchForm.pageSize = v; "a", {
this.getDataList(); on: {
}, click: () => {
handleSearch() { this.edit(params.row);
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 = ""; data: [], //
this.searchForm.endDate = ""; total: 0, //
// rechargeWorkerId: "",
this.getDataList(); };
}, },
changeSort(e) { methods: {
this.searchForm.sort = e.key; init() {
this.searchForm.order = e.order; this.getDataList();
if (e.order === "normal") { },
this.searchForm.order = ""; changePage(v) {
} this.searchForm.pageNumber = v;
this.getDataList(); this.getDataList();
}, this.clearSelectAll();
clearSelectAll() { },
this.$refs.table.selectAll(false); edit(v){
},
changeSelect(e) { this.Visiable = true;
this.selectList = e; },
}, changePageSize(v) {
selectDateRange(v) { this.searchForm.pageSize = v;
if (v) { this.getDataList();
this.searchForm.startDate = v[0]; },
this.searchForm.endDate = v[1]; handleSearch() {
} this.searchForm.pageNumber = 1;
}, this.searchForm.pageSize = 10;
changeTableSize(v) { this.getDataList();
this.tableSize = v; },
}, handleReset() {
exportData() { this.$refs.searchForm.resetFields();
this.$refs.table.exportCsv({ this.searchForm.pageNumber = 1;
filename: "数据", this.searchForm.pageSize = 10;
}); this.selectDate = null;
}, this.searchForm.startDate = "";
generateSecret() { this.searchForm.endDate = "";
getSecretKey().then((res) => { //
if (res.success) { this.getDataList();
this.form.clientSecret = res.result; },
} changeSort(e) {
}); this.searchForm.sort = e.key;
}, this.searchForm.order = e.order;
getDataList() { if (e.order === "normal") {
this.loading = true; this.searchForm.order = "";
// }
getWorkerRechargeRecord(this.rechargeWorkerId).then((res) => { this.getDataList();
this.loading = false; },
if (res.success) { clearSelectAll() {
this.data = res.result.content; this.$refs.table.selectAll(false);
this.total = res.result.totalElements; },
if (this.data.length == 0 && this.searchForm.pageNumber > 1) { changeSelect(e) {
this.searchForm.pageNumber -= 1; this.selectList = e;
this.getDataList(); },
} selectDateRange(v) {
} if (v) {
}); this.searchForm.startDate = v[0];
}, this.searchForm.endDate = v[1];
handleSubmit() { }
this.$refs.form.validate((valid) => { },
if (valid) { changeTableSize(v) {
this.submitLoading = true; this.tableSize = v;
if (this.modalType === 0) { },
// id exportData() {
delete this.form.id; this.$refs.table.exportCsv({
addClient(this.form).then((res) => { filename: "数据",
this.submitLoading = false; });
if (res.success) { },
this.$Message.success("操作成功"); generateSecret() {
this.getDataList(); getSecretKey().then((res) => {
this.modalVisible = false; if (res.success) {
} this.form.clientSecret = res.result;
}); }
} else { });
// },
updateClient(this.form).then((res) => { getDataList() {
this.submitLoading = false; this.loading = true;
if (res.success) { //
this.$Message.success("操作成功"); getWorkerRechargeRecord(this.rechargeWorkerId).then((res) => {
this.getDataList(); this.loading = false;
this.modalVisible = 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();
}, }
}, }
mounted() { });
this.init(); },
}, 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> </script>
<style lang="less"> <style lang="less">
@import "@/styles/table-common.less"; @import "@/styles/table-common.less";
</style> </style>

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

@ -4,6 +4,11 @@
<template> <template>
<div class="search"> <div class="search">
<Card> <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"> <Row @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70"> <Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem> <FormItem>
@ -26,6 +31,304 @@
</Form> </Form>
</Row> </Row>
</Card> </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> </div>
</template> </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