From eb7a808aaf7dd0a6dd2ff70f9ef3f8ce0b1e31d1 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 22 五月 2026 18:27:32 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun
---
admin/src/components/business/OperaShopInfoWindow.vue | 424 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 272 insertions(+), 152 deletions(-)
diff --git a/admin/src/components/business/OperaShopInfoWindow.vue b/admin/src/components/business/OperaShopInfoWindow.vue
index f272d7d..dda7fd8 100644
--- a/admin/src/components/business/OperaShopInfoWindow.vue
+++ b/admin/src/components/business/OperaShopInfoWindow.vue
@@ -1,9 +1,9 @@
<template>
<GlobalWindow
- :title="title"
- :withFooter="false"
- :visible.sync="visible"
- width="80%"
+ :title="title"
+ :withFooter="false"
+ :visible.sync="visible"
+ width="calc(100% - 255px )"
>
<div class="store-header" v-if="storeInfo">
<div class="store-header-left">
@@ -38,68 +38,188 @@
</div>
<el-tabs v-model="activeTab" class="store-tabs">
+ <el-tab-pane label="闂ㄥ簵淇℃伅" name="shopInfo">
+ <div class="shop-info-content" v-if="storeInfo">
+ <!-- 绗竴閮ㄥ垎锛氫笁涓瓧娈典竴琛� -->
+ <div class="info-grid" style="margin-bottom: 0;">
+ <div class="info-item">
+ <span class="label">鎵�鍦ㄧ渷甯傚尯锛�</span>
+ <span class="value">{{ storeInfo.provinceName || '' }} {{ storeInfo.cityName || '' }} {{ storeInfo.areaName || '' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">闂ㄥ簵鍦板潃锛�</span>
+ <span class="value">{{ storeInfo.address || '' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鍏ラ┗鎶奸噾锛�</span>
+ <span class="value amount">楼{{ storeInfo.depositAmount ? (storeInfo.depositAmount / 100).toFixed(2) : '0.00' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">钀ヤ笟鏃堕棿锛�</span>
+ <span class="value" v-if="storeInfo.businessType === 1">鍏ㄥぉ钀ヤ笟</span>
+ <span class="value" v-if="storeInfo.businessType === 0">闄愭椂钀ヤ笟</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閰嶉�佽寖鍥达細</span>
+ <span class="value" v-if="storeInfo.deliveryArea">{{ storeInfo.deliveryArea }}鍏噷</span>
+ <span class="value" v-else>鏆傛棤</span>
+ </div>
+ <div class="info-item">
+ <span class="label">浣嶇疆鏍囩锛�</span>
+ <span class="value">{{ storeInfo.locationTagNames || '' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">闂ㄥ簵鐘舵�侊細</span>
+ <span class="value" :class="getStatusClass(storeInfo.status)">
+ {{ storeInfo.status === 0 ? '鍚敤' : '绂佺敤' }}
+ </span>
+ </div>
+ </div>
+
+ <!-- 绗簩閮ㄥ垎锛氫竴涓瓧娈典竴琛� -->
+ <div class="info-full">
+ <div class="info-item-full">
+ <span class="label">闂ㄥ簵浠嬬粛锛�</span>
+ <span class="value">{{ storeInfo.content || '' }}</span>
+ </div>
+ <div class="info-item-full">
+ <span class="label">钀ヤ笟鏃堕棿锛�</span>
+ <span class="value">{{ storeInfo.shopHours || '' }}</span>
+ </div>
+ <div class="info-item-full">
+ <span class="label">瀵勫瓨绫诲瀷锛�</span>
+ <span class="value">{{ storeInfo.depositTypes || '' }}</span>
+ </div>
+ <div class="info-item-full">
+ <span class="label">鏀惰垂鏍囧噯锛�</span>
+ <span class="value">{{ storeInfo.feeStandard || '' }}</span>
+ </div>
+ </div>
+ </div>
+ </el-tab-pane>
+
<el-tab-pane label="闂ㄥ簵涓氱哗" name="performance">
- <el-form ref="searchForm" :model="searchForm" inline>
- <el-form-item label="浜ゆ槗鍙�" prop="orderNo">
- <el-input v-model="searchForm.orderNo" clearable placeholder="璇疯緭鍏ヤ氦鏄撳彿"></el-input>
+ <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="璁㈠崟缂栧彿" prop="code">
+ <el-input v-model="searchForm.code" style="width: 150px;" clearable placeholder="璇疯緭鍏ヨ鍗曠紪鍙�" @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="鏀舵敮绫诲瀷" prop="optType">
- <el-select v-model="searchForm.optType" clearable placeholder="璇烽�夋嫨绫诲瀷">
+ <el-form-item label="鐗╁搧淇℃伅" prop="goodsInfo">
+ <el-input v-model="searchForm.goodsInfo" style="width: 150px;" clearable placeholder="璇疯緭鍏ョ墿鍝佷俊鎭�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="璁㈠崟鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" clearable style="width: 150px;" placeholder="璇烽�夋嫨璁㈠崟鐘舵��" @change="search">
<el-option label="鍏ㄩ儴" value=""></el-option>
- <el-option label="鏀跺叆" :value="1"></el-option>
- <el-option label="鏀嚭" :value="-1"></el-option>
+ <el-option label="寰呮敮浠�" :value="0"></el-option>
+ <el-option label="寰呭瘎瀛�" :value="1"></el-option>
+ <el-option label="宸插瘎瀛�" :value="2"></el-option>
+ <el-option label="宸叉帴鍗�" :value="3"></el-option>
+ <el-option label="娲鹃�佷腑" :value="4"></el-option>
+ <el-option label="宸插埌搴�/宸查�佽揪" :value="5"></el-option>
+ <el-option label="宸插畬鎴�" :value="7"></el-option>
+ <el-option label="宸插彇娑�" :value="99"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="鏀舵敮鏃堕棿" prop="createTime">
- <el-date-picker type="daterange" v-model="searchForm.createTime" clearable value-format="yyyy-MM-dd HH:mm:ss"
- range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" />
+ <el-form-item label="缁撶畻鐘舵��" prop="settlementStatus">
+ <el-select v-model="searchForm.settlementStatus" style="width: 150px;" clearable placeholder="璇烽�夋嫨缁撶畻鐘舵��" @change="search">
+ <el-option label="寰呯粨绠�" :value="0"></el-option>
+ <el-option label="宸茬粨绠�" :value="1"></el-option>
+ </el-select>
</el-form-item>
- <section>
- <el-button type="primary" @click="search">鏌ヨ</el-button>
+ <el-form-item label="鍒涘缓鏃堕棿" prop="createTime1">
+ <el-date-picker type="daterange" v-model="searchForm.createTime1" clearable value-format="yyyy-MM-dd"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <section style="display: inline-block">
+ <el-button type="primary" @click="search">鎼滅储</el-button>
<el-button @click="reset">閲嶇疆</el-button>
<el-button :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button>
</section>
</el-form>
- <el-table :data="tableData.list" border stripe v-loading="isWorking.search" class="performance-table">
- <el-table-column label="鏀跺叆/鏀嚭" min-width="100px">
+ <!--
+ <div class="statistics">
+ <span>璁㈠崟鏁帮細{{ statistics.orderCount }}</span>
+ <span>璁㈠崟鎬讳环锛毬{ (statistics.orderAmount / 100).toFixed(2) }}</span>
+ <span>缁撶畻鎬讳环锛毬{ (statistics.settleAmount / 100).toFixed(2) }}</span>
+ </div>
+ -->
+
+ <el-table :data="tableData.list" stripe>
+ <el-table-column prop="code" label="璁㈠崟缂栧彿" min-width="160px">
<template slot-scope="{row}">
- <span :class="row.optType === 1 ? 'income' : 'expense'">{{ row.optType === 1 ? '鏀跺叆' : '鏀嚭' }}</span>
+ <span class="bluestate" @click="$refs.operaOrderDetail.open(row)">{{ row.code }}</span>
</template>
</el-table-column>
- <el-table-column prop="amount" label="閲戦锛堝厓锛�" min-width="100px">
+ <el-table-column prop="goodsInfo" label="鐗╁搧淇℃伅" min-width="180px" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="isUrgent" label="绫诲瀷" min-width="80px">
+ <template slot-scope="{row}"><span>{{ row.type === 1?'鍚屽煄瀵勯��':'灏卞湴瀛樺彇' }}</span></template>
+ </el-table-column>
+ <el-table-column prop="isUrgent" label="璁㈠崟绾у埆" min-width="80px">
+ <template slot-scope="{row}"><span v-if="row.type ===1">{{ row.isUrgent === 1?'鏋侀�熻揪':'鏍囬�熻揪' }}</span></template>
+ </el-table-column>
+ <!-- <el-table-column label="鐗╁搧淇濊垂锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.declaredFee / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="鐗╁搧淇濊垂锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.declaredFee / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="鍩虹鏈嶅姟璐癸紙鍏冿級" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.price / 100).toFixed(2) }}</template>
+ </el-table-column> -->
+
+ <el-table-column label="缁撶畻閲戦锛堝厓锛�" min-width="120px">
<template slot-scope="{row}">
- <span :class="row.optType === 1 ? 'income' : 'expense'">{{ row.amount }}</span>
+ 楼{{ storeInfo.id == row.depositShopId ? (row.depositShopFee / 100).toFixed(2) : storeInfo.id == row.takeShopId ? (row.takeShopFee / 100).toFixed(2) : '' }}
</template>
</el-table-column>
- <el-table-column prop="createTime" label="鏀舵敮鏃堕棿" min-width="160px"></el-table-column>
- <el-table-column label="涓氬姟绫诲瀷" min-width="100px">
+ <el-table-column label="璁㈠崟鎬讳环锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.totalAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="瀹炰粯鐜伴噾锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.payAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="閫�娆鹃噾棰濓紙鍏冿級" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.refundAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="瓒呮椂閲戦锛堝厓锛�" min-width="100px">
+ <template slot-scope="{row}">楼{{ (row.overdueAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="150px"> </el-table-column>
+ <!-- <el-table-column label="鍔犳�ヨ垂锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}"><span v-if="row.type ===1 ">楼{{ (row.urgentAmount / 100).toFixed(2) }}</span></template>
+ </el-table-column>
+ <el-table-column label="瓒呮椂閲戦" min-width="100px">
+ <template slot-scope="{row}">楼{{ (row.overdueAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="寮傚父閲戦" min-width="100px">
+ <template slot-scope="{row}">楼{{ (row.exceptionAmount / 100).toFixed(2) }}</template>
+ </el-table-column> -->
+ <el-table-column prop="statusDesc" label="璁㈠崟鐘舵��" min-width="100px">
<template slot-scope="{row}">
- <span v-if="row.type === 0">瀹屾垚璁㈠崟</span>
- <span v-if="row.type === 1">鎻愮幇鏀嚭</span>
- <span v-if="row.type === 2">鎻愮幇閫�鍥�</span>
- <span v-if="row.type === 3">骞冲彴濂栧姳</span>
+ <span :style="{ color: row.status <7 ? '#e6a23c' : (row.status ===7 ? '#67c23a' : 'grey' )}">
+ {{ row.statusDesc }}
+ </span>
</template>
</el-table-column>
- <el-table-column prop="orderNo" label="浜ゆ槗鍙�" min-width="180px"></el-table-column>
- <el-table-column label="鐘舵��" min-width="100px">
+ <el-table-column label="缁撶畻鐘舵��" min-width="100px">
<template slot-scope="{row}">
- <span :class="row.vaildStatus === 1 ? 'status-success' : 'status-pending'">
- {{ row.vaildStatus === 1 ? '宸插埌璐�' : '鎻愮幇涓�' }}
- </span>
+ <span :style="{ color: row.settlementStatus === 1 ? '#67c23a' : '#e6a23c' }">
+ {{ row.settlementStatus === 1 ? '宸茬粨绠�' : '鏈粨绠�' }}
+ </span>
</template>
</el-table-column>
+ <el-table-column prop="payTime" label="鏀粯鏃堕棿" min-width="150px"> </el-table-column>
</el-table>
<pagination
- @size-change="handleSizeChange"
- @current-change="handlePageChange"
- :pagination="tableData.pagination"
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
></pagination>
</el-tab-pane>
<el-tab-pane label="闂ㄥ簵璧勮川" name="qualification">
<div class="qualification-content" v-if="storeInfo">
- <div class="qualification-section">
+ <!-- <div class="qualification-section">
<h4 class="section-title">鍩烘湰淇℃伅</h4>
<div class="info-grid">
<div class="info-row">
@@ -112,14 +232,18 @@
</div>
<div class="info-row">
<span class="label">闂ㄥ簵鐘舵�侊細</span>
- <span class="value">{{ storeInfo.auditStatus === 0 ? '寰呭鎵�' : storeInfo.auditStatus === 1 ? '瀹℃壒閫氳繃' : '瀹℃壒鏈�氳繃' }}</span>
+ <span class="value">{{ storeInfo.status === 1 ? '绂佺敤' : '鍚敤' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">瀹℃壒鐘舵�侊細</span>
+ <span class="value">{{ storeInfo.auditStatus === 0 ? '寰呭鎵�' : storeInfo.auditStatus === 1 ? '瀹℃壒閫氳繃' : storeInfo.auditStatus === 2 ? '瀹℃壒鏈�氳繃' : '宸叉敮浠樻娂閲�' }}</span>
</div>
<div class="info-row">
<span class="label">閰嶉�佽寖鍥达細</span>
<span class="value">{{ storeInfo.deliveryRange || '鏆傛棤' }}</span>
</div>
</div>
- </div>
+ </div> -->
<div class="qualification-section">
<h4 class="section-title">涓讳綋璧勮川</h4>
@@ -162,7 +286,7 @@
<template v-else>
<div class="image-item-row">
<span class="label">韬唤璇佹闈細</span>
- <el-image :src="storeInfo.idcardImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImg]">
+ <el-image v-if="storeInfo.idcardImgUrl" :src="storeInfo.idcardImgUrl" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgUrl]">
<div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
</el-image>
</div>
@@ -191,7 +315,7 @@
</template>
</div>
- <div class="qualification-section" v-if="storeInfo.companyType === 1">
+ <div class="qualification-section">
<h4 class="section-title">闂ㄥ簵鐓х墖鍙婂叾浠栨潗鏂�</h4>
<div class="image-item-row">
<span class="label">闂ㄥ簵闂ㄥご鐓э細</span>
@@ -221,142 +345,83 @@
</div>
</el-tab-pane>
</el-tabs>
+ <OperaOrderDetail ref="operaOrderDetail" @success="handlePageChange" />
</GlobalWindow>
</template>
<script>
-import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination'
import { detail } from '@/api/business/shopInfo'
+import BaseTable from '@/components/base/BaseTable'
+import OperaOrderDetail from '@/components/business/OperaOrderDetail'
import { fetchList, exportExcel } from '@/api/business/revenue'
export default {
name: 'OperaShopInfoWindow',
- extends: BaseOpera,
- components: { GlobalWindow, Pagination },
+ extends: BaseTable,
+ components: { GlobalWindow, Pagination,OperaOrderDetail },
data () {
return {
- activeTab: 'performance',
- storeInfo: null,
+ title: '闂ㄥ簵璇︽儏',
+ activeTab: 'shopInfo',
+ storeInfo: {},
+ visible: false,
searchForm: {
+ code: '',
orderNo: '',
- optType: 0,
- createTime: '',
- memberId: '',
- memberType: 2
- },
- tableData: {
- list: [],
- pagination: {
- pageIndex: 1,
- pageSize: 10,
- total: 0
- }
- },
- isWorking: {
- search: false,
- export: false
+ goodsInfo: '',
+ createTime1: '',
+ createStartTime: '',
+ createEndTime: '',
+ startTime: '',
+ endTime: '',
+ orderStatus: '',
+ shopId: null,
+ settleStatus: ''
},
defaultAvatar: 'https://cube.elemecdn.com/3/c7/9d47156420e4e9c6e2c1f6d6e6e6e6e6.jpeg'
}
},
created () {
this.config({
- api: '/business/shopInfo',
+ api: '/business/orderManagement',
'field.id': 'id'
})
},
methods: {
- open (title, row) {
- this.searchForm.memberId = row.id
- detail(row.id)
- .then(res => {
- this.storeInfo = res
- this.activeTab = 'performance'
- this.searchForm = {
- orderNo: '',
- optType: '',
- createTime: '',
- memberId: '',
- memberType: 2
- }
- this.title = title
- this.visible = true
- this.search()
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- },
- search () {
- this.isWorking.search = true
- const data = {
- capacity: this.tableData.pagination.pageSize,
- page: this.tableData.pagination.pageIndex,
- model: {
- orderNo: this.searchForm.orderNo,
- optType: this.searchForm.optType,
- startTime: this.searchForm.createTime?.[0] || '',
- endTime: this.searchForm.createTime?.[1] || '',
- memberId: this.searchForm.memberId,
- memberType: this.searchForm.memberType || ''
- }
- }
- fetchList(data)
- .then(res => {
- this.tableData.list = res.list || []
- this.tableData.pagination.total = res.total || 0
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- .finally(() => {
- this.isWorking.search = false
- })
+ handleDateChange (val) {
+ this.searchForm.createStartTime = val ? val[0] : ''
+ this.searchForm.createEndTime = val ? val[1] : ''
+ this.search()
},
reset () {
- this.searchForm = {
- orderNo: '',
- optType: '',
- createTime: '',
- memberId: '',
- memberType: 2
+ this.$refs.searchForm.resetFields()
+ this.searchForm.createStartTime = ''
+ this.searchForm.createEndTime = ''
+ this.search()
+ },
+ open (title, row) {
+ this.searchForm.memberId = row.id
+ this.getStoreInfo(row.id).then(() => {
+ this.activeTab = 'shopInfo'
+ this.title = title
+ this.visible = true
+ this.searchForm.shopId = row.id
+ this.search()
+ })
+ },
+ // 鑾峰彇闂ㄥ簵璇︽儏
+ async getStoreInfo(id) {
+ try {
+ const res = await detail(id)
+ this.storeInfo = res
+ } catch (e) {
+ this.$tip.apiFailed(e)
}
- this.search()
},
- handleSizeChange (pageSize) {
- this.tableData.pagination.pageSize = pageSize
- this.search()
- },
- handlePageChange (pageIndex) {
- this.tableData.pagination.pageIndex = pageIndex
- this.search()
- },
- exportExcel () {
- this.isWorking.export = true
- const data = {
- capacity: 999999,
- page: this.tableData.pagination.pageIndex,
- model: {
- orderNo: this.searchForm.orderNo,
- optType: this.searchForm.optType,
- startTime: this.searchForm.createTime?.[0] || '',
- endTime: this.searchForm.createTime?.[1] || '',
- memberId: this.searchForm.memberId,
- memberType: this.searchForm.memberType || ''
- }
- }
- exportExcel(data)
- .then(res => {
- this.download(res)
- this.$tip.apiSuccess('瀵煎嚭鎴愬姛')
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- .finally(() => {
- this.isWorking.export = false
- })
+ // 鑾峰彇闂ㄥ簵鐘舵�佹牱寮�
+ getStatusClass(status) {
+ return status === 0 ? 'status-enabled' : 'status-disabled'
}
}
}
@@ -374,10 +439,65 @@
margin-right: 20px;
}
.store-avatar {
- width: 80px;
- height: 80px;
- border-radius: 50%;
-}
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ }
+
+ .info-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 20px;
+ margin-bottom: 30px;
+ padding: 20px;
+ /* background: #f5f7fa; */
+ border-radius: 4px;
+ }
+
+ .info-full {
+ padding: 20px;
+ /* background: #f5f7fa; */
+ border-radius: 4px;
+ }
+
+ .info-item {
+ font-size: 14px;
+ }
+
+ .info-item-full {
+ font-size: 14px;
+ margin-bottom: 15px;
+ }
+
+ .info-item-full:last-child {
+ margin-bottom: 0;
+ }
+
+ .label {
+ color: #909399;
+ min-width: 100px;
+ display: inline-block;
+ margin-right: 10px;
+ }
+
+ .value {
+ color: #606266;
+ }
+
+ .value.amount {
+ color: #f56c6c;
+ font-weight: bold;
+ }
+
+ .status-enabled {
+ color: #67c23a;
+ font-weight: bold;
+ }
+
+ .status-disabled {
+ color: #f56c6c;
+ font-weight: bold;
+ }
.store-header-right {
flex: 1;
}
--
Gitblit v1.9.3