From c313a253b1fcdc75b6be5db575fc2b29fb407021 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 15 四月 2026 20:05:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
admin/src/components/business/OperaCityPriceRuleWindow.vue | 10
admin/src/components/business/OperaShopApprovalWindow.vue | 450 +++++
small-program/pages/itinerary/itinerary.vue | 19
small-program/static/icon/nav_wode@2x.png | 0
small-program/pages/message/message.vue | 19
small-program/static/icon/nav_xingcheng_sel@2x.png | 0
admin/src/api/business/shopWithdraw.js | 29
admin/src/views/business/driverList.vue | 155 +
admin/src/views/business/shopWithdrawList.vue | 156 +
admin/src/components/business/OperaWithdrawDetailWindow.vue | 297 +++
small-program/static/icon/nav_xiaoxi_sel@2x.png | 0
admin/.env.development | 2
admin/src/views/business/vehicleType.vue | 99 +
admin/src/components/business/OperaGoodsCategoryEditWindow.vue | 204 ++
admin/src/api/business/goodsCategory.js | 33
admin/src/components/business/OperaMemberDetail.vue | 185 ++
admin/src/components/business/OperaDriverDetail.vue | 363 ++++
admin/src/components/business/OperaShopInfoWindow.vue | 100
admin/src/views/business/shopQualificationList.vue | 155 +
admin/src/components/business/OperaDispatch.vue | 144 +
admin/src/api/business/banner.js | 43
admin/src/views/business/driverVerification.vue | 160 +
small-program/static/icon/nav_xingcheng@2x.png | 0
admin/src/views/business/memberList.vue | 105 +
admin/src/views/business/bannerList.vue | 138 +
admin/src/views/business/goodsCategoryList.vue | 96 +
admin/src/api/business/memberManage.js | 18
admin/src/views/business/memberManage.vue | 149 +
small-program/static/icon/nav_home@2x.png | 0
admin/src/components/business/OperaOrderDetail.vue | 399 ++++
admin/src/views/business/storeList.vue | 5
admin/src/components/business/OperaShopEditWindow.vue | 19
admin/src/components/business/OperaShopInfoSeeWindow.vue | 416 ++++
small-program/static/icon/nav_wode_sel@2x.png | 0
small-program/static/icon/nav_xiaoxi@2x.png | 0
small-program/static/icon/nav_home_sel@2x.png | 0
admin/src/views/business/itemLevel.vue | 96 +
admin/src/api/business/orderManagement.js | 18
admin/src/views/business/orderManagement.vue | 190 ++
admin/src/api/business/shopInfo.js | 5
admin/src/views/business/baggageType.vue | 96 +
admin/src/views/business/sysParams.vue | 169 +
admin/src/api/business/revenue.js | 39
admin/src/components/business/OperaDriverApproval.vue | 338 +++
admin/src/components/business/OperaBannerEditWindow.vue | 135 +
/dev/null | 26
small-program/main.js | 6
small-program/pages.json | 154 -
admin/src/api/business/sysParams.js | 11
admin/src/api/business/driver.js | 30
50 files changed, 5,059 insertions(+), 222 deletions(-)
diff --git a/admin/.env.development b/admin/.env.development
index 2585437..a03598a 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -1,4 +1,4 @@
# 寮�鍙戠幆澧冮厤缃�
NODE_ENV = 'development'
-VUE_APP_API_URL = 'http://192.168.1.44:10010'
+VUE_APP_API_URL = 'http://192.168.1.4:10010'
# VUE_APP_API_URL = 'https://jinkuai.832smartfarm.com/jinkuai_admin'
diff --git a/admin/src/api/business/banner.js b/admin/src/api/business/banner.js
new file mode 100644
index 0000000..84e4f4d
--- /dev/null
+++ b/admin/src/api/business/banner.js
@@ -0,0 +1,43 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/banner/page', data, {
+ trim: true
+ })
+}
+
+export function create (data) {
+ return request.post('/business/banner/create', data)
+}
+
+export function updateStatus (data) {
+ return request.post('/business/banner/updateStatus', data)
+}
+
+export function updateById (data) {
+ return request.post('/business/banner/updateById', data)
+}
+
+export function getById (id) {
+ return request.get(`/business/banner/${id}`)
+}
+
+export function deleteById (id) {
+ return request.get(`/business/banner/delete/${id}`)
+}
+
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/banner/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/banner/exportExcel', data, {
+ download: true,
+ trim: true
+ })
+}
\ No newline at end of file
diff --git a/admin/src/api/business/driver.js b/admin/src/api/business/driver.js
new file mode 100644
index 0000000..f7ae784
--- /dev/null
+++ b/admin/src/api/business/driver.js
@@ -0,0 +1,30 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/driverInfo/page', data, {
+ trim: true
+ })
+}
+
+export function getById (id) {
+ return request.get(`/business/driverInfo/detail/${id}`)
+}
+
+export function updateStatus (data) {
+ return request.post('/business/driverInfo/updateStatus', data, {
+ trim: true
+ })
+}
+
+export function exportExcel (data) {
+ return request.post('/business/driverInfo/exportExcel', data, {
+ download: true,
+ trim: true
+ })
+}
+
+export function audit (data) {
+ return request.post('/business/driverInfo/audit', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/goodsCategory.js b/admin/src/api/business/goodsCategory.js
new file mode 100644
index 0000000..4d1bfec
--- /dev/null
+++ b/admin/src/api/business/goodsCategory.js
@@ -0,0 +1,33 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/category/page', data, {
+ trim: true
+ })
+}
+
+export function create (data) {
+ return request.post('/business/category/create', data, {
+ trim: true
+ })
+}
+
+export function updateStatus (data) {
+ return request.post('/business/category/updateStatus', data, {
+ trim: true
+ })
+}
+
+export function updateById (data) {
+ return request.post('/business/category/updateById', data, {
+ trim: true
+ })
+}
+
+export function getById (id) {
+ return request.get(`/business/category/${id}`)
+}
+
+export function deleteById (id) {
+ return request.get(`/business/category/delete/${id}`)
+}
diff --git a/admin/src/api/business/memberManage.js b/admin/src/api/business/memberManage.js
new file mode 100644
index 0000000..797020e
--- /dev/null
+++ b/admin/src/api/business/memberManage.js
@@ -0,0 +1,18 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/member/list/page', data, {
+ trim: true
+ })
+}
+
+export function getById (id) {
+ return request.get(`/business/member/detail/${id}`)
+}
+
+export function exportExcel (data) {
+ return request.post('/business/member/list/exportExcel', data, {
+ download: true,
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/orderManagement.js b/admin/src/api/business/orderManagement.js
new file mode 100644
index 0000000..c7fae0e
--- /dev/null
+++ b/admin/src/api/business/orderManagement.js
@@ -0,0 +1,18 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/orders/page', data, {
+ trim: true
+ })
+}
+
+export function getById (id) {
+ return request.get(`/business/orders/detail/${id}`)
+}
+
+export function exportExcel (data) {
+ return request.post('/business/orders/exportExcel', data, {
+ download: true,
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/revenue.js b/admin/src/api/business/revenue.js
new file mode 100644
index 0000000..335f68a
--- /dev/null
+++ b/admin/src/api/business/revenue.js
@@ -0,0 +1,39 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/revenue/page', data, {
+ trim: true
+ })
+}
+
+export function create (data) {
+ return request.post('/business/revenue/create', data)
+}
+
+export function updateStatus (data) {
+ return request.post('/business/revenue/updateStatus', data)
+}
+
+export function updateById (data) {
+ return request.post('/business/revenue/updateShop', data)
+}
+
+export function deleteById (id) {
+ return request.get(`/business/revenue/delete/${id}`)
+}
+
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/revenue/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/revenue/exportExcel', data, {
+ download: true,
+ trim: true
+ })
+}
\ No newline at end of file
diff --git a/admin/src/api/business/shopInfo.js b/admin/src/api/business/shopInfo.js
index d394d7f..3ec1001 100644
--- a/admin/src/api/business/shopInfo.js
+++ b/admin/src/api/business/shopInfo.js
@@ -44,3 +44,8 @@
export function resetPassword (data) {
return request.post('/business/shopInfo/resetPassword', data)
}
+
+// 闂ㄥ簵瀹℃壒
+export function audit (data) {
+ return request.post('/business/shopInfo/audit', data)
+}
diff --git a/admin/src/api/business/shopWithdraw.js b/admin/src/api/business/shopWithdraw.js
new file mode 100644
index 0000000..4bec4a8
--- /dev/null
+++ b/admin/src/api/business/shopWithdraw.js
@@ -0,0 +1,29 @@
+import request from '../../utils/request'
+
+export function fetchList (data) {
+ return request.post('/business/withdrawalOrders/page', data, {
+ trim: true
+ })
+}
+
+export function getById (id) {
+ return request.get(`/business/withdrawalOrders/${id}`)
+}
+
+export function getTotalAmount (data) {
+ return request.post('/business/withdrawalOrders/totalAmount', data, {
+ trim: true
+ })
+}
+
+export function audit (data) {
+ return request.post('/business/withdrawalOrders/audit', data, {
+ trim: true
+ })
+}
+
+export function approve (data) {
+ return request.post('/business/withdrawalOrders/approve', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/sysParams.js b/admin/src/api/business/sysParams.js
new file mode 100644
index 0000000..0ca888f
--- /dev/null
+++ b/admin/src/api/business/sysParams.js
@@ -0,0 +1,11 @@
+import request from '../../utils/request'
+
+export function getParams () {
+ return request.get('/business/operationConfig')
+}
+
+export function saveParams (data) {
+ return request.post('/business/operationConfig/save', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/components/business/OperaBannerEditWindow.vue b/admin/src/components/business/OperaBannerEditWindow.vue
new file mode 100644
index 0000000..d688d0d
--- /dev/null
+++ b/admin/src/components/business/OperaBannerEditWindow.vue
@@ -0,0 +1,135 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ width="500px"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form ref="form" :model="form" :rules="rules">
+ <el-form-item label="鏍囬" prop="title">
+ <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�"></el-input>
+ </el-form-item>
+ <el-form-item label="鍥剧墖" prop="imgurl">
+ <UploadImages
+ :fileList="imgurl ? [{ url: imgurl }] : []"
+ :uploadData="{ folder: 'banner' }"
+ :maxCount="1"
+ @getFileList="e => { form.imgurl = e.fileurl; imgurl = e.url }"
+ @deleteRow="form.imgurl = ''; imgurl = ''" />
+ </el-form-item>
+ <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+ <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-switch
+ v-model="form.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0"
+ ></el-switch>
+ </el-form-item>
+ <el-form-item label="灞曠ず浣嶇疆" prop="position">
+ <el-select v-model="form.position" placeholder="璇烽�夋嫨灞曠ず浣嶇疆">
+ <el-option label="浼氬憳绔椤佃疆鎾�" :value="0"></el-option>
+ <el-option label="鍙告満APP寮曞椤�" :value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璺宠浆鏂瑰紡" prop="type">
+ <el-select v-model="form.type" placeholder="璇烽�夋嫨璺宠浆鏂瑰紡">
+ <el-option label="鏃�" :value="0"></el-option>
+ <el-option label="瀵屾枃鏈�" :value="1"></el-option>
+ <el-option label="澶栭摼" :value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍐呭" prop="content" v-if="form.type === 1">
+ <RichEditor :richData="form.content" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
+ </el-form-item>
+ <el-form-item label="鍐呭" prop="content" v-if="form.type === 2">
+ <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadImages from '@/components/common/uploadImages'
+import { getById } from '@/api/business/banner'
+import RichEditor from '@/components/common/RichEditor'
+export default {
+ name: 'OperaBannerEditWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow, UploadImages, RichEditor },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ styleEditor:'border: 1px solid #ccc;display: inline-block;',
+ form: {
+ id: null,
+ title: '',
+ content: '',
+ position: '',
+ imgurl: '',
+ type: '',
+ sortnum: '',
+ status: 1
+ },
+ imgurl: '',
+ rules: {
+ position: [{ required: true, message: '璇烽�夋嫨灞曠ず浣嶇疆', trigger: 'change' }],
+ imgurl: [{ required: true, message: '璇蜂笂浼犲浘鐗�', trigger: 'change' }],
+ type: [{ required: true, message: '璇烽�夋嫨璺宠浆鏂瑰紡', trigger: 'change' }],
+ content: [{ required: true, message: '璇疯緭鍏ュ唴瀹�', trigger: 'blur' }]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/banner',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ if (row && row.id) {
+ getById(row.id).then(res => {
+ this.form = {
+ id: res.id,
+ title: res.title || '',
+ position: res.position,
+ imgurl: res.imgurl || '',
+ type: res.type,
+ sortnum: res.sortnum,
+ status: res.status ?? 1,
+ content: res.content || ''
+ }
+ this.imgurl = res.imgurlFull
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ } else {
+ this.form = {
+ id: null,
+ title: '',
+ position: '',
+ imgurl: '',
+ type: '',
+ sortnum: '',
+ status: 1,
+ content: ''
+ }
+ this.imgurl = ''
+ this.visible = true
+ }
+ },
+ getWangedditor (data) {
+ this.form.content = data
+ }
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaCityPriceRuleWindow.vue b/admin/src/components/business/OperaCityPriceRuleWindow.vue
index 8e40ff5..74b5489 100644
--- a/admin/src/components/business/OperaCityPriceRuleWindow.vue
+++ b/admin/src/components/business/OperaCityPriceRuleWindow.vue
@@ -179,13 +179,11 @@
this.$tip.apiFailed(e)
})
},
- // 鏌ヨ寮傚湴瀵勯�佽鍒欏垪琛�
+ // 鏌ヨ棰勮鏃舵晥
fetchEstimatedDelivery () {
estimatedDelivery(this.form.cityId)
.then(data => {
- this.timeTableData = [
- data
- ]
+ this.timeTableData = data
})
.catch(e => {
this.$tip.apiFailed(e)
@@ -223,13 +221,13 @@
Promise.all([
batchSave({ cityId: this.form.cityId, items: this.jiudiTableData }),
batchSaveRemoteDelivery({ cityId: this.form.cityId, items: this.remoteTableData }),
- batchSaveEstimatedDelivery({ cityId: this.form.cityId, ...this.timeTableData[0] }),
+ batchSaveEstimatedDelivery({ cityId: this.form.cityId, items: this.timeTableData }),
batchSaveStoreDeposit({ cityId: this.form.cityId, items: this.storeDepositData }),
batchSaveRevenueShare({ cityId: this.form.cityId, items: this.shareTableData })
])
.then(() => {
this.visible = false
- this.$tip.apiSuccess('淇濆瓨鎴愬姛')
+ // this.$tip.apiSuccess('淇濆瓨鎴愬姛')
this.$emit('success')
})
.catch(e => {
diff --git a/admin/src/components/business/OperaDispatch.vue b/admin/src/components/business/OperaDispatch.vue
new file mode 100644
index 0000000..24f5aae
--- /dev/null
+++ b/admin/src/components/business/OperaDispatch.vue
@@ -0,0 +1,144 @@
+<template>
+ <GlobalWindow
+ title="鎵嬪姩娲惧崟"
+ :visible.sync="visible"
+ width="700px"
+ @confirm="handleConfirm"
+ @close="handleClose"
+ >
+ <div class="dispatch-info">
+ <div class="info-row">
+ <div class="info-item">
+ <span class="label">璁㈠崟缂栧彿锛�</span>
+ <span class="value">{{ orderInfo.orderNo }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">瀹炰粯閲戦锛�</span>
+ <span class="value">楼{{ (orderInfo.payAmount / 100).toFixed(2) }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閰嶉�佹柟寮忥細</span>
+ <span class="value">
+ <span v-if="orderInfo.deliveryType === 1">鏅�氶厤閫�</span>
+ <span v-else-if="orderInfo.deliveryType === 2">鎬ラ�熻揪</span>
+ <span v-else-if="orderInfo.deliveryType === 3">寮傚湴瀵勯��</span>
+ <span v-else>-</span>
+ </span>
+ </div>
+ </div>
+ </div>
+
+ <el-table :data="orderInfo.goodsList" stripe class="goods-table">
+ <el-table-column prop="goodsName" label="鐗╁搧鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="goodsSize" label="鐗╁搧灏哄" min-width="80px"></el-table-column>
+ <el-table-column label="閰嶉�佷环锛堝厓锛�" min-width="100px">
+ <template slot-scope="{row}">楼{{ (row.deliveryPrice / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column prop="quantity" label="鏁伴噺" min-width="60px"></el-table-column>
+ <el-table-column label="灏忚锛堝厓锛�" min-width="100px">
+ <template slot-scope="{row}">楼{{ ((row.deliveryPrice * row.quantity) / 100).toFixed(2) }}</template>
+ </el-table-column>
+ </el-table>
+
+ <el-form ref="form" :model="form" :rules="rules" label-width="100px" class="dispatch-form">
+ <el-form-item label="閰嶉�佸徃鏈�" prop="driverId">
+ <el-select v-model="form.driverId" placeholder="璇烽�夋嫨閰嶉�佸徃鏈�" style="width: 100%">
+ <el-option label="鍙告満A" :value="1"></el-option>
+ <el-option label="鍙告満B" :value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍔犳�ヨ垂" prop="urgentFee">
+ <el-input-number v-model="form.urgentFee" :min="0" :precision="2" controls-position="right" style="width: 100%"></el-input-number>
+ </el-form-item>
+ <el-form-item label="澶囨敞璇存槑" prop="remark">
+ <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉ㄨ鏄�" :rows="3"></el-input>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+
+export default {
+ name: 'OperaDispatch',
+ components: { GlobalWindow },
+ data () {
+ return {
+ visible: false,
+ orderInfo: {
+ orderNo: '',
+ payAmount: 0,
+ deliveryType: '',
+ goodsList: []
+ },
+ form: {
+ driverId: '',
+ urgentFee: 0,
+ remark: ''
+ },
+ rules: {
+ driverId: [{ required: true, message: '璇烽�夋嫨閰嶉�佸徃鏈�', trigger: 'change' }]
+ }
+ }
+ },
+ methods: {
+ open (row) {
+ this.orderInfo = {
+ orderNo: row.orderNo,
+ payAmount: row.payAmount || 0,
+ deliveryType: row.deliveryType || '',
+ goodsList: row.goodsList || []
+ }
+ this.form = {
+ driverId: '',
+ urgentFee: 0,
+ remark: ''
+ }
+ this.visible = true
+ },
+ handleClose () {
+ this.visible = false
+ },
+ handleConfirm () {
+ this.$refs.form.validate(valid => {
+ if (!valid) return
+ this.$emit('confirm', {
+ orderId: this.orderInfo.id,
+ ...this.form
+ })
+ this.visible = false
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.dispatch-info {
+ margin-bottom: 20px;
+}
+.info-row {
+ display: flex;
+ gap: 30px;
+ padding: 15px;
+ background: #f5f7fa;
+ border-radius: 4px;
+}
+.info-item {
+ display: flex;
+ font-size: 14px;
+}
+.info-item .label {
+ color: #909399;
+}
+.info-item .value {
+ color: #606266;
+}
+.goods-table {
+ margin-bottom: 20px;
+}
+.dispatch-form {
+ margin-top: 20px;
+}
+</style>
diff --git a/admin/src/components/business/OperaDriverApproval.vue b/admin/src/components/business/OperaDriverApproval.vue
new file mode 100644
index 0000000..c328301
--- /dev/null
+++ b/admin/src/components/business/OperaDriverApproval.vue
@@ -0,0 +1,338 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ width="900px"
+ :withFooter="false"
+ >
+ <div class="driver-approval">
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鍙告満淇℃伅</span>
+ <el-tag type="success" v-if="detailInfo.auditStatus">宸叉巿鏉冩墜鏈哄彿</el-tag>
+ <el-tag type="warning" v-else>鏈巿鏉冩墜鏈哄彿</el-tag>
+ <div class="approval-status">
+ <el-tag v-if="detailInfo.auditStatus === 0" type="warning" class="status-tag">寰呭鏍�</el-tag>
+ <el-tag v-else-if="detailInfo.auditStatus === 1" type="success" class="status-tag">瀹℃壒閫氳繃</el-tag>
+ <el-tag v-else-if="detailInfo.auditStatus === 2" type="danger" class="status-tag">瀹℃壒椹冲洖</el-tag>
+ </div>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">鍙告満濮撳悕锛�</span>
+ <span class="value">{{ detailInfo.name || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎺堟潈鎵嬫満鍙凤細</span>
+ <span class="value">{{ detailInfo.telephone || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">韬唤璇佸彿锛�</span>
+ <span class="value">{{ detailInfo.idcard || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">濠氬Щ鎯呭喌锛�</span>
+ <span class="value" v-if="detailInfo.maritalStatus === 3">涓у伓</span>
+ <span class="value" v-else-if="detailInfo.maritalStatus === 2">绂诲紓</span>
+ <span class="value" v-else-if="detailInfo.maritalStatus === 1">宸插</span>
+ <span class="value" v-else-if="detailInfo.maritalStatus === 0">鏈</span>
+ <span class="value" v-else>-</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎬у埆锛�</span>
+ <span class="value">{{ detailInfo.gender === 1 ? '鐢�' : detailInfo.gender === 2 ? '濂�' : '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐜板眳浣忓湴鍧�锛�</span>
+ <span class="value">{{ detailInfo.livePlace || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">璇勭骇锛�</span>
+ <span class="value">{{ detailInfo.driverLevel || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐘舵�侊細</span>
+ <span class="value">{{ detailInfo.status === 0 ? '鍚敤' : '绂佺敤' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">杞﹁締淇℃伅</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">杞︾墝鍙凤細</span>
+ <span class="value">{{ detailInfo.carCode || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">杞﹁締绫诲瀷锛�</span>
+ <span class="value">{{ detailInfo.carTypeName || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">杞﹁締棰滆壊锛�</span>
+ <span class="value">{{ detailInfo.carColor || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">椹鹃┒璇佹湁鏁堟湡锛�</span>
+ <span class="value">{{ detailInfo.cardStartDate || '-' }} 鑷� {{ detailInfo.cardEndDate || '-' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">闄勪欢鏉愭枡</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">韬唤璇佹闈細</span>
+ <el-image
+ v-if="detailInfo.idcardImg"
+ style="width: 80px; height: 80px"
+ :src="detailInfo.imgPrefix + detailInfo.idcardImg"
+ :preview-src-list="[detailInfo.imgPrefix + detailInfo.idcardImg]"
+ fit="cover"
+ ></el-image>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item">
+ <span class="label">韬唤璇佸弽闈細</span>
+ <el-image
+ v-if="detailInfo.idcardImgBack"
+ style="width: 80px; height: 80px"
+ :src="detailInfo.imgPrefix + detailInfo.idcardImgBack"
+ :preview-src-list="[detailInfo.imgPrefix + detailInfo.idcardImgBack]"
+ fit="cover"
+ ></el-image>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">杞﹁締鐓х墖锛�</span>
+ <span v-if="!detailInfo.carImgList">-</span>
+ <div v-else class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.carImgList"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img.fileurlFull"
+ :preview-src-list="detailInfo.carImgList.map(item => item.fileurlFull)"
+ fit="cover"
+ ></el-image>
+ </div>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">椹鹃┒璇佺収鐗囷細</span>
+ <span v-if="!detailInfo.licenseImgList">-</span>
+ <div v-else class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.licenseImgList"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img.fileurlFull"
+ :preview-src-list="detailInfo.licenseImgList.map(item => item.fileurlFull)"
+ fit="cover"
+ ></el-image>
+ </div>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">鍏跺畠鏉愭枡锛�</span>
+ <span v-if="!detailInfo.otherImgList">-</span>
+ <div v-else class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.otherImgList"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img.fileurlFull"
+ :preview-src-list="detailInfo.otherImgList.map(item => item.fileurlFull)"
+ fit="cover"
+ ></el-image>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="approval-form" v-if="detailInfo.auditStatus === 0">
+ <el-form ref="approvalForm" :model="approvalForm" :rules="approvalRules">
+ <el-form-item label="瀹℃壒缁撴灉" prop="auditStatus">
+ <el-radio-group v-model="approvalForm.auditStatus">
+ <el-radio :label="0">閫氳繃</el-radio>
+ <el-radio :label="1">鎷掔粷</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鍙告満璇勭骇" prop="driverLevel">
+ <el-select v-model="approvalForm.driverLevel" placeholder="璇烽�夋嫨鍙告満璇勭骇" style="width: 300px">
+ <el-option label="S" :value="5"></el-option>
+ <el-option label="A" :value="4"></el-option>
+ <el-option label="B" :value="3"></el-option>
+ <el-option label="C" :value="2"></el-option>
+ <el-option label="D" :value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="瀹℃壒鎰忚" prop="auditRemark">
+ <el-input
+ type="textarea"
+ v-model="approvalForm.auditRemark"
+ placeholder="璇疯緭鍏ュ鎵规剰瑙�"
+ :rows="3"
+ style="width: 400px"
+ ></el-input>
+ </el-form-item>
+ </el-form>
+ <div class="approval-buttons">
+ <el-button @click="close">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleConfirm" :loading="isWorking">纭畾</el-button>
+ </div>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById, audit } from '@/api/business/driver'
+
+export default {
+ name: 'OperaDriverApproval',
+ components: { GlobalWindow },
+ data () {
+ return {
+ title: '鍙告満瀹℃牳',
+ visible: false,
+ isWorking: false,
+ detailInfo: {},
+ approvalForm: {
+ id: null,
+ auditStatus: 0,
+ driverLevel: '',
+ auditRemark: ''
+ },
+ approvalRules: {
+ auditStatus: [{ required: true, message: '璇烽�夋嫨瀹℃壒缁撴灉', trigger: 'change' }],
+ driverLevel: [{ required: true, message: '璇烽�夋嫨鍙告満璇勭骇', trigger: 'change' }],
+ auditRemark: [{ required: true, message: '璇疯緭鍏ュ鎵规剰瑙�', trigger: 'blur' }]
+ }
+ }
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ this.approvalForm = {
+ id: row.id,
+ auditStatus: 1,
+ driverLevel: '',
+ auditRemark: ''
+ }
+ this.$nextTick(() => {
+ this.$refs.approvalForm && this.$refs.approvalForm.clearValidate()
+ })
+ getById(row.id).then(res => {
+ this.detailInfo = res
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ close () {
+ this.visible = false
+ },
+ handleConfirm () {
+ this.$refs.approvalForm.validate(valid => {
+ if (!valid) return
+ if (this.approvalForm.status === 2 && !this.approvalForm.remark) {
+ this.$message.warning('璇疯緭鍏ュ鎵规剰瑙�')
+ return
+ }
+ this.isWorking = true
+ audit({
+ id: this.approvalForm.id,
+ auditStatus: this.approvalForm.auditStatus,
+ driverLevel: this.approvalForm.driverLevel,
+ auditRemark: this.approvalForm.auditRemark
+ }).then(res => {
+ this.$tip.apiSuccess(res || '瀹℃牳鎴愬姛')
+ this.$emit('success', this.approvalForm)
+ this.visible = false
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ }).finally(() => {
+ this.isWorking = false
+ })
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.driver-approval {
+
+}
+.section {
+ margin-bottom: 25px;
+}
+.section-header {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 15px;
+ flex-wrap: wrap;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.approval-status {
+ margin-left: auto;
+}
+.status-tag {
+ font-size: 14px;
+ padding: 4px 12px;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ padding: 0 10px;
+}
+.info-item {
+ display: flex;
+ font-size: 14px;
+}
+.info-item.full-width {
+ grid-column: span 2;
+}
+.info-item .label {
+ color: #909399;
+ min-width: 110px;
+}
+.info-item .value {
+ color: #606266;
+ word-break: break-all;
+}
+.image-list {
+ display: flex;
+ flex-wrap: wrap;
+}
+.approval-form {
+ padding: 20px;
+ background: #f5f7fa;
+ border-top: 1px solid #eee;
+}
+.approval-form /deep/ .el-form-item {
+ margin-bottom: 15px;
+}
+.approval-form /deep/ .el-form-item:last-child {
+ margin-bottom: 0;
+}
+.approval-buttons {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 15px;
+}
+</style>
diff --git a/admin/src/components/business/OperaDriverDetail.vue b/admin/src/components/business/OperaDriverDetail.vue
new file mode 100644
index 0000000..5b25e54
--- /dev/null
+++ b/admin/src/components/business/OperaDriverDetail.vue
@@ -0,0 +1,363 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ width="900px"
+ :withFooter="false"
+ >
+ <div class="driver-detail">
+ <el-tabs v-model="activeTab">
+ <el-tab-pane label="鍩烘湰淇℃伅" name="basic"></el-tab-pane>
+ <el-tab-pane label="鍙告満涓氬姟" name="business"></el-tab-pane>
+ </el-tabs>
+
+ <div v-show="activeTab === 'basic'" class="tab-content">
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鍙告満淇℃伅</span>
+ <el-tag type="success" v-if="detailInfo.auditStatus">宸叉巿鏉冩墜鏈哄彿</el-tag>
+ <el-tag type="warning" v-else>鏈巿鏉冩墜鏈哄彿</el-tag>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">鍙告満濮撳悕锛�</span>
+ <span class="value">{{ detailInfo.name || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎺堟潈鎵嬫満鍙凤細</span>
+ <span class="value">{{ detailInfo.telephone || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">韬唤璇佸彿锛�</span>
+ <span class="value">{{ detailInfo.idcard || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">濠氬Щ鎯呭喌锛�</span>
+ <span class="value" v-if="detailInfo.maritalStatus === 3">涓у伓</span>
+ <span class="value" v-else-if="detailInfo.maritalStatus === 2">绂诲紓</span>
+ <span class="value" v-else-if="detailInfo.maritalStatus === 1">宸插</span>
+ <span class="value" v-else-if="detailInfo.maritalStatus === 0">鏈</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎬у埆锛�</span>
+ <span class="value">{{ detailInfo.gender === 1 ? '鐢�' : detailInfo.gender === 2 ? '濂�' : '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐜板眳浣忓湴鍧�锛�</span>
+ <span class="value">{{ detailInfo.livePlace || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">璇勭骇锛�</span>
+ <span class="value">{{ detailInfo.driverLevel || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐘舵�侊細</span>
+ <span class="value">{{ detailInfo.status === 0 ? '鍚敤' : '绂佺敤' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">杞﹁締淇℃伅</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">杞︾墝鍙凤細</span>
+ <span class="value">{{ detailInfo.carCode || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">杞﹁締绫诲瀷锛�</span>
+ <span class="value">{{ detailInfo.carTypeName || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">杞﹁締棰滆壊锛�</span>
+ <span class="value">{{ detailInfo.carColor || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">椹鹃┒璇佹湁鏁堟湡锛�</span>
+ <span class="value">{{ detailInfo.cardStartDate || '-' }} 鑷� {{ detailInfo.cardEndDate || '-' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">闄勪欢鏉愭枡</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">韬唤璇佹闈細</span>
+ <el-image
+ v-if="detailInfo.idcardImg"
+ style="width: 80px; height: 80px"
+ :src="detailInfo.imgPrefix + detailInfo.idcardImg"
+ :preview-src-list="[detailInfo.imgPrefix + detailInfo.idcardImg]"
+ fit="cover"
+ ></el-image>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item">
+ <span class="label">韬唤璇佸弽闈細</span>
+ <el-image
+ v-if="detailInfo.idcardImgBack"
+ style="width: 80px; height: 80px"
+ :src="detailInfo.imgPrefix + detailInfo.idcardImgBack"
+ :preview-src-list="[detailInfo.imgPrefix + detailInfo.idcardImgBack]"
+ fit="cover"
+ ></el-image>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">杞﹁締鐓х墖锛�</span>
+ <span v-if="!detailInfo.carImgList">-</span>
+ <div v-else class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.carImgList"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img.fileurlFull"
+ :preview-src-list="detailInfo.carImgList.map(item => item.fileurlFull)"
+ fit="cover"
+ ></el-image>
+ </div>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">椹鹃┒璇佺収鐗囷細</span>
+ <span v-if="!detailInfo.licenseImgList">-</span>
+ <div v-else class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.licenseImgList"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img.fileurlFull"
+ :preview-src-list="detailInfo.licenseImgList.map(item => item.fileurlFull)"
+ fit="cover"
+ ></el-image>
+ </div>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">鍏跺畠鏉愭枡锛�</span>
+ <span v-if="!detailInfo.otherImgList">-</span>
+ <div v-else class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.otherImgList"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img.fileurlFull"
+ :preview-src-list="detailInfo.otherImgList.map(item => item.fileurlFull)"
+ fit="cover"
+ ></el-image>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div v-show="activeTab === 'business'" class="tab-content">
+ <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="璁㈠崟缂栧彿" prop="orderNo">
+ <el-input v-model="searchForm.orderNo" clearable placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
+ </el-form-item>
+ <el-form-item label="鐗╁搧淇℃伅" prop="goodsInfo">
+ <el-input v-model="searchForm.goodsInfo" clearable placeholder="璇疯緭鍏ョ墿鍝佷俊鎭�"></el-input>
+ </el-form-item>
+ <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
+ <el-date-picker type="daterange" v-model="searchForm.createTime" clearable value-format="yyyy-MM-dd"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <el-form-item label="璁㈠崟鐘舵��" prop="orderStatus">
+ <el-select v-model="searchForm.orderStatus" clearable placeholder="璇烽�夋嫨璁㈠崟鐘舵��">
+ <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-select>
+ </el-form-item>
+ <el-form-item label="缁撶畻鐘舵��" prop="settleStatus">
+ <el-select v-model="searchForm.settleStatus" clearable placeholder="璇烽�夋嫨缁撶畻鐘舵��">
+ <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="searchBusiness">鎼滅储</el-button>
+ <el-button @click="resetBusiness">閲嶇疆</el-button>
+ </section>
+ </el-form>
+
+ <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="businessData.list" stripe>
+ <el-table-column prop="orderNo" label="璁㈠崟缂栧彿" min-width="150px"></el-table-column>
+ <el-table-column prop="goodsInfo" label="鐗╁搧淇℃伅" min-width="120px"></el-table-column>
+ <el-table-column prop="type" label="绫诲瀷" min-width="80px"></el-table-column>
+ <el-table-column prop="level" label="璁㈠崟绾у埆" min-width="80px"></el-table-column>
+ <el-table-column label="鐗╁搧淇濊垂锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.insuranceAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="鍩虹鏈嶅姟璐癸紙鍏冿級" min-width="120px">
+ <template slot-scope="{row}">楼{{ (row.serviceAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="璁㈠崟鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.orderStatus === 1">寰呭彇浠�</span>
+ <span v-else-if="row.orderStatus === 2">閰嶉�佷腑</span>
+ <span v-else-if="row.orderStatus === 3">宸插畬鎴�</span>
+ <span v-else-if="row.orderStatus === 4">宸插彇娑�</span>
+ <span v-else>-</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="缁撶畻鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span :style="{ color: row.settleStatus === 1 ? '#67c23a' : '#e6a23c' }">
+ {{ row.settleStatus === 1 ? '宸茬粨绠�' : '鏈粨绠�' }}
+ </span>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleBusinessSizeChange"
+ @current-change="handleBusinessPageChange"
+ :pagination="businessData.pagination"
+ ></pagination>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import Pagination from '@/components/common/Pagination'
+import { getById } from '@/api/business/driver'
+
+export default {
+ name: 'OperaDriverDetail',
+ components: { GlobalWindow, Pagination },
+ data () {
+ return {
+ title: '鍙告満璇︽儏',
+ visible: false,
+ activeTab: 'basic',
+ detailInfo: {},
+ searchForm: {
+ orderNo: '',
+ goodsInfo: '',
+ createTime: '',
+ startTime: '',
+ endTime: '',
+ orderStatus: '',
+ settleStatus: ''
+ },
+ statistics: {
+ orderCount: 0,
+ orderAmount: 0,
+ settleAmount: 0
+ },
+ businessData: {
+ list: [],
+ pagination: { page: 1, size: 10, total: 0 }
+ }
+ }
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ this.activeTab = 'basic'
+ getById(row.id).then(res => {
+ this.detailInfo = res
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ searchBusiness () {
+ },
+ resetBusiness () {
+ this.searchForm = {
+ orderNo: '',
+ goodsInfo: '',
+ createTime: '',
+ startTime: '',
+ endTime: '',
+ orderStatus: '',
+ settleStatus: ''
+ }
+ this.searchBusiness()
+ },
+ handleDateChange (val) {
+ this.searchForm.startTime = val ? val[0] : ''
+ this.searchForm.endTime = val ? val[1] : ''
+ },
+ handleBusinessSizeChange () {
+ },
+ handleBusinessPageChange () {
+ }
+ }
+}
+</script>
+
+<style scoped>
+.driver-detail {
+ width: 100%;
+}
+.tab-content {
+ margin-top: 20px;
+}
+.section {
+ margin-bottom: 25px;
+}
+.section-header {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 15px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ padding: 0 10px;
+}
+.info-item {
+ display: flex;
+ font-size: 14px;
+}
+.info-item.full-width {
+ grid-column: span 2;
+}
+.info-item .label {
+ color: #909399;
+ min-width: 110px;
+}
+.info-item .value {
+ color: #606266;
+ word-break: break-all;
+}
+.image-list {
+ display: flex;
+ flex-wrap: wrap;
+}
+.statistics {
+ display: flex;
+ gap: 40px;
+ padding: 15px;
+ background: #f5f7fa;
+ border-radius: 4px;
+ margin-bottom: 15px;
+ font-size: 14px;
+ color: #606266;
+ margin: 20px 0;
+}
+</style>
diff --git a/admin/src/components/business/OperaGoodsCategoryEditWindow.vue b/admin/src/components/business/OperaGoodsCategoryEditWindow.vue
new file mode 100644
index 0000000..6736820
--- /dev/null
+++ b/admin/src/components/business/OperaGoodsCategoryEditWindow.vue
@@ -0,0 +1,204 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ width="500px"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form ref="form" :model="form" :rules="rules">
+ <el-form-item label="绫诲瀷鍚嶇О" prop="name" v-if="form.type === 1">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ョ被鍨嬪悕绉�"></el-input>
+ </el-form-item>
+ <el-form-item label="琛屾潕绫诲瀷" prop="name" v-if="form.type === 4">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ鏉庣被鍨�"></el-input>
+ </el-form-item>
+ <el-form-item label="鐗╁搧鍚嶇О" prop="name" v-if="form.type === 2">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ョ墿鍝佸悕绉�"></el-input>
+ </el-form-item>
+ <el-form-item label="绛夌骇鍚嶇О" prop="name" v-if="form.type === 3">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ョ瓑绾у悕绉�"></el-input>
+ </el-form-item>
+ <el-form-item label="閫氳鏂瑰紡" prop="detail" v-if="form.type === 1">
+ <el-select v-model="form.detail" placeholder="璇烽�夋嫨閫氳鏂瑰紡">
+ <el-option label="鏈哄姩杞�" value="driving"></el-option>
+ <el-option label="闈炴満鍔ㄨ溅" value="bicycling"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="涓婁紶椹鹃┒璇�" prop="otherField" v-if="form.type === 1">
+ <el-radio-group v-model="form.otherField">
+ <el-radio label="1">闇�瑕�</el-radio>
+ <el-radio label="0">涓嶉渶瑕�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鏄惁鐗瑰ぇ灏哄" prop="detail" v-if="form.type === 4">
+ <el-radio-group v-model="form.detail">
+ <el-radio label="0">鍚�</el-radio>
+ <el-radio label="1">鏄�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鍥炬爣" prop="iconFull" v-if="form.type === 4">
+ <UploadImages
+ :fileList="form.iconFull ? [{ url: form.iconFull }] : []"
+ :uploadData="{ folder: 'category' }"
+ :maxCount="1"
+ @getFileList="e => { form.icon = e.fileurl; form.iconFull = e.url }"
+ @deleteRow="form.icon = ''; form.iconFull = ''" />
+ </el-form-item>
+ <el-form-item label="鐗╁搧绛夌骇" prop="relationId" v-if="form.type === 2">
+ <el-select v-model="form.relationId" placeholder="璇烽�夋嫨鐗╁搧绛夌骇">
+ <el-option
+ v-for="item in list"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎵�闇�鍙告満璇勭骇" prop="detail" v-if="form.type === 3">
+ <el-select v-model="form.detail" placeholder="璇烽�夋嫨鍙告満璇勭骇">
+ <el-option label="S" :value="5"></el-option>
+ <el-option label="A" :value="4"></el-option>
+ <el-option label="B" :value="3"></el-option>
+ <el-option label="C" :value="2"></el-option>
+ <el-option label="D" :value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="瀵勫瓨璇存槑" prop="detail" v-if="form.type === 2">
+ <el-input v-model="form.detail" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ瘎瀛樿鏄�"></el-input>
+ </el-form-item>
+ <el-form-item label="澶囨敞璇存槑" prop="remark" v-if="form.type === 3 || form.type === 4">
+ <el-input v-model="form.remark" type="textarea" :rows="3" placeholder="璇疯緭鍏ュ娉ㄨ鏄�"></el-input>
+ </el-form-item>
+ <el-form-item label="鎺掑簭" prop="sortnum">
+ <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴�"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <div style="display: flex; align-items: center;">
+ <el-switch
+ v-model="form.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ <span v-if="form.type === 2" style="margin-left: 5px; font-size: 12px; color: #909399;">寮�鍚悗锛岃鍩庡競涓嬮棬搴楀彲琚細鍛樻煡鐪�</span>
+ </div>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById, fetchList } from '@/api/business/goodsCategory'
+import UploadImages from '@/components/common/uploadImages'
+export default {
+ name: 'OperaGoodsCategoryEditWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow, UploadImages },
+ data () {
+ return {
+ form: {
+ id: null,
+ name: '',
+ relationId: '',
+ detail: '',
+ sortnum: '',
+ status: 0,
+ type: '',
+ remark: '',
+ icon: '',
+ iconFull: '',
+ otherField: '1'
+ },
+ rules: {},
+ list: []
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/goodsCategory',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, row, type) {
+ this.title = title
+ if (type === 2) {
+ fetchList({
+ capacity: 99999,
+ page: 1,
+ model: {
+ type: 3
+ }
+ }).then(res => {
+ this.list = res.records || []
+ })
+ }
+ if (row && row.id) {
+ getById(row.id).then(res => {
+ this.form = {
+ id: res.id,
+ name: res.name || '',
+ relationId: res.relationId || '',
+ detail: res.detail || '',
+ sortnum: res.sortnum || '',
+ status: res.status ?? 0,
+ type: res.type ?? 2,
+ remark: res.remark || '',
+ icon: res.icon || '',
+ iconFull: res.iconFull || '',
+ otherField: res.otherField || ''
+ }
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ } else {
+ this.form = {
+ id: null,
+ name: '',
+ relationId: '',
+ detail: '',
+ sortnum: '',
+ status: 0,
+ type: '',
+ remark: '',
+ icon: '',
+ iconFull: '',
+ otherField: '1'
+ }
+ if (type === 4) {
+ this.form.detail = '0'
+ }
+ this.form.type = type
+ this.visible = true
+ }
+ if (this.form.type === 2) {
+ this.rules = {
+ name: [{ required: true, message: '璇疯緭鍏ョ墿鍝佸悕绉�', trigger: 'blur' }],
+ relationId: [{ required: true, message: '璇烽�夋嫨鐗╁搧绛夌骇', trigger: 'blur' }]
+ }
+ } else if (this.form.type === 3) {
+ this.rules = {
+ name: [{ required: true, message: '璇疯緭鍏ョ瓑绾у悕绉�', trigger: 'blur' }],
+ detail: [{ required: true, message: '璇烽�夋嫨鍙告満璇勭骇', trigger: 'blur' }]
+ }
+ } else if (this.form.type === 4) {
+ this.rules = {
+ name: [{ required: true, message: '璇疯緭鍏ヨ鏉庣被鍨�', trigger: 'blur' }],
+ detail: [{ required: true, message: '璇烽�夋嫨鏄惁鐗瑰ぇ灏哄', trigger: 'blur' }],
+ icon: [{ required: true, message: '璇蜂笂浼犲浘鏍�', trigger: 'blur' }]
+ }
+ } else if (this.form.type === 1) {
+ this.rules = {
+ name: [{ required: true, message: '璇疯緭鍏ョ被鍨嬪悕绉�', trigger: 'blur' }],
+ detail: [{ required: true, message: '璇烽�夋嫨閫氳鏂瑰紡', trigger: 'blur' }],
+ otherField: [{ required: true, message: '璇烽�夋嫨閫氳鏂瑰紡', trigger: 'blur' }]
+ }
+ }
+ }
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaMemberDetail.vue b/admin/src/components/business/OperaMemberDetail.vue
new file mode 100644
index 0000000..6ad3abb
--- /dev/null
+++ b/admin/src/components/business/OperaMemberDetail.vue
@@ -0,0 +1,185 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ width="600px"
+ :withFooter="false"
+ >
+ <div class="detail-container">
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鐢ㄦ埛淇℃伅</span>
+ <span class="status-tag">
+ <el-tag type="success" v-if="detailInfo.telephone">宸叉巿鏉冩墜鏈哄彿</el-tag>
+ <el-tag type="warning" v-else>鏈巿鏉冩墜鏈哄彿</el-tag>
+ </span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">寰俊openid锛�</span>
+ <span class="value">{{ detailInfo.openId }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐢ㄦ埛鏄电О锛�</span>
+ <span class="value">{{ detailInfo.nickName }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">浼氬憳濮撳悕锛�</span>
+ <span class="value">{{ detailInfo.name }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎺堟潈鎵嬫満鍙凤細</span>
+ <span class="value">{{ detailInfo.telephone }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐘舵�侊細</span>
+ <span class="value">{{ detailInfo.status === 0 ? '姝e父' : detailInfo.status === 1 ? '鍋滅敤' : '宸叉敞閿�' }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById } from '@/api/business/memberManage'
+import BaseOpera from '@/components/base/BaseOpera'
+export default {
+ name: 'OperaMemberDetail',
+ extends: BaseOpera,
+ components: { GlobalWindow, BaseOpera },
+ data () {
+ return {
+ detailInfo: {
+ id: null,
+ openId: '',
+ nickName: '',
+ name: '',
+ phone: '',
+ status: 1
+ }
+ }
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ getById(row.id).then(res => {
+ this.detailInfo = {
+ id: res.id,
+ openId: res.openId,
+ nickName: res.nickName,
+ name: res.name,
+ phone: res.phone,
+ status: res.status
+ }
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.detail-container {
+ padding: 20px;
+}
+.section {
+ margin-bottom: 30px;
+}
+.section-header {
+ display: flex;
+ align-items: center;
+ gap: 15px;
+ margin-bottom: 15px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.status-tag {
+ padding: 4px 12px;
+ border-radius: 4px;
+ font-size: 12px;
+}
+.status-pending {
+ background: #fdf6ec;
+ color: #E6A23C;
+}
+.status-success {
+ background: #f0f9eb;
+ color: #67C23A;
+}
+.status-reject {
+ background: #fef0f0;
+ color: #F56C6C;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ padding: 0 10px;
+}
+.info-item {
+ display: flex;
+ font-size: 14px;
+}
+.info-item .label {
+ color: #909399;
+ min-width: 90px;
+}
+.info-item .value {
+ color: #606266;
+}
+.info-item .amount {
+ color: #f56c6c;
+ font-weight: bold;
+}
+.info-item.full-width {
+ grid-column: span 2;
+}
+.timeline-content {
+ padding: 10px;
+ background: #f5f7fa;
+ border-radius: 4px;
+}
+.timeline-title {
+ font-size: 14px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 8px;
+}
+.timeline-info {
+ display: flex;
+ gap: 20px;
+ font-size: 13px;
+ color: #606266;
+ margin-bottom: 5px;
+}
+.timeline-remark {
+ font-size: 13px;
+ color: #909399;
+}
+.approval-form {
+ padding: 20px;
+ background: #f5f7fa;
+ border-top: 1px solid #eee;
+}
+.approval-form /deep/ .el-form-item {
+ margin-bottom: 15px;
+}
+.approval-form /deep/ .el-form-item:last-child {
+ margin-bottom: 0;
+}
+.approval-buttons {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 15px;
+}
+</style>
diff --git a/admin/src/components/business/OperaOrderDetail.vue b/admin/src/components/business/OperaOrderDetail.vue
new file mode 100644
index 0000000..b150cf9
--- /dev/null
+++ b/admin/src/components/business/OperaOrderDetail.vue
@@ -0,0 +1,399 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ width="900px"
+ :withFooter="false"
+ >
+ <div class="order-detail" v-if="detailInfo">
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">璁㈠崟璇︽儏</span>
+ <el-tag v-if="detailInfo.status === 1" type="warning">寰呭彇浠�</el-tag>
+ <el-tag v-else-if="detailInfo.status === 2" type="primary">閰嶉�佷腑</el-tag>
+ <el-tag v-else-if="detailInfo.status === 3" type="success">宸插畬鎴�</el-tag>
+ <el-tag v-else-if="detailInfo.status === 4" type="info">宸插彇娑�</el-tag>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">璁㈠崟缂栧彿锛�</span>
+ <span class="value">{{ detailInfo.order.code || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鍒涘缓鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.order.createTime || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">璁㈠崟绫诲瀷锛�</span>
+ <span class="value">
+ <span v-if="detailInfo.order.type === 0">灏卞湴瀛樺彇</span>
+ <span v-else-if="detailInfo.order.type === 1">寮傚湴瀛樺彇</span>
+ <span v-else>-</span>
+ </span>
+ </div>
+
+ <div class="info-item">
+ <span class="label">鏀粯鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.order.payTime || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鏀粯鏂瑰紡锛�</span>
+ <span class="value">
+ <span>寰俊鏀粯</span>
+ </span>
+ </div>
+ <div class="info-item">
+ <span class="label">瀹炰粯閲戦锛�</span>
+ <span class="value">
+ <span>楼{{ (detailInfo.order.payAmount / 100).toFixed(2) }}</span>
+ </span>
+ </div>
+
+ <div class="info-item">
+ <span class="label">璁㈠崟绾у埆锛�</span>
+ <span class="value">{{ detailInfo.order.orderLevel || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">棰勮鍒板簵鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.order.expectedDepositTime || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">棰勮鍙栦欢鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.order.expectedTakeTime || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">璁㈠崟鎬讳环锛�</span>
+ <span class="value">楼{{ (detailInfo.order.totalAmount / 100).toFixed(2) }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">淇濅环閲戦锛�</span>
+ <span class="value">楼{{ (detailInfo.order.declaredAmount / 100).toFixed(2) }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐗╁搧淇濊垂锛�</span>
+ <span class="value">楼{{ (detailInfo.order.declaredFee / 100).toFixed(2) }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">棰勮瀵勫瓨澶╂暟/閰嶉�侀噷绋嬶細</span>
+ <span class="value">{{ detailInfo.order.estimatedDepositDays || '-' }}澶�/{{ detailInfo.order.distance || '-' }}鍏噷</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">瀹㈡埛澶囨敞锛�</span>
+ <span class="value">{{ detailInfo.order.remark || '-' }}</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">鐗╁搧鎷嶇収锛�</span>
+ <div v-if="detailInfo.depositImages && detailInfo.depositImages.length" class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.depositImages"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img"
+ :preview-src-list="detailInfo.depositImages"
+ fit="cover"
+ ></el-image>
+ </div>
+ <span v-else>-</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">浼氬憳淇℃伅</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">濮撳悕锛�</span>
+ <span class="value">{{ detailInfo.memberName || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎵嬫満鍙风爜锛�</span>
+ <span class="value">{{ detailInfo.memberPhone || '-' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">閰嶉�佷俊鎭�</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">鏀朵欢浜猴細</span>
+ <span class="value">{{ detailInfo.order.takeUser || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鏀朵欢浜虹數璇濓細</span>
+ <span class="value">{{ detailInfo.order.takePhone || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">瀵勪欢鍦板潃锛�</span>
+ <span class="value">{{ detailInfo.order.depositLocation || '' }}{{ detailInfo.order.depositLocationRemark || '' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鏀朵欢鍦板潃锛�</span>
+ <span class="value">{{ detailInfo.order.takeLocation || '' }}{{ detailInfo.order.takeLocationRemark || '' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鏄惁鏀朵欢鏈嶅姟鐐癸細</span>
+ <span class="value">{{ detailInfo.order.takeShopId ? '鏄�' : '鍚�' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閰嶉�佸徃鏈猴細</span>
+ <span class="value">{{ detailInfo.driverName || '-' }}</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">闂ㄥ簵鏀朵欢鎷嶇収锛�</span>
+ <div v-if="detailInfo.storeInImages && detailInfo.storeInImages.length" class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.storeInImages"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img"
+ :preview-src-list="detailInfo.storeInImages"
+ fit="cover"
+ ></el-image>
+ </div>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">鍙告満鍙栦欢鎷嶇収锛�</span>
+ <div v-if="detailInfo.driverTakeImages && detailInfo.driverTakeImages.length" class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.driverTakeImages"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img"
+ :preview-src-list="detailInfo.driverTakeImages"
+ fit="cover"
+ ></el-image>
+ </div>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">鍙告満閫佽揪鎷嶇収/闂ㄥ簵鍏ュ簱鎷嶇収锛�</span>
+ <div v-if="detailInfo.driverDoneImages && detailInfo.driverDoneImages.length" class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.driverDoneImages"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img"
+ :preview-src-list="detailInfo.driverDoneImages"
+ fit="cover"
+ ></el-image>
+ </div>
+ <span v-else>-</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">闂ㄥ簵鍑哄簱鎷嶇収锛�</span>
+ <div v-if="detailInfo.storeOutImages && detailInfo.storeOutImages.length" class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.storeOutImages"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img"
+ :preview-src-list="detailInfo.storeOutImages"
+ fit="cover"
+ ></el-image>
+ </div>
+ <span v-else>-</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鍙栨秷淇℃伅</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">鍙栨秷鎿嶄綔浜猴細</span>
+ <span class="value">{{ detailInfo.platformUserName || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鍙栨秷鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.order.cancelTime || '-' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" v-if="detailInfo.ordersRefund">
+ <div class="section-header">
+ <span class="section-title">閫�娆句俊鎭�</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">閫�娆剧悊鐢憋細</span>
+ <span class="value">{{ detailInfo.ordersRefund.cancelInfo || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閫�娆剧敵璇锋椂闂达細</span>
+ <span class="value">{{ detailInfo.ordersRefund.createTime || '-' }}</span>
+ </div>
+
+
+ <div class="info-item">
+ <span class="label">閫�娆鹃噾棰濓細</span>
+ <span class="value">{{ detailInfo.ordersRefund.createTime || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閫�娆惧鐞嗘椂闂达細</span>
+ <span class="value">{{ detailInfo.ordersRefund.refundTime || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閫�娆炬柟寮忥細</span>
+ <span class="value" v-if="detailInfo.ordersRefund.type === 0">鏈瓨浠剁洿鎺ュ彇娑�</span>
+ <span class="value" v-else-if="detailInfo.ordersRefund.type === 1">骞冲彴鐩存帴鍙栨秷</span>
+ <span class="value" v-else-if="detailInfo.ordersRefund.type === 2">宸插瓨浠剁敵璇峰彇娑�</span>
+ </div>
+ <div class="info-item">
+ <span class="label">閫�娆惧娉細</span>
+ <span class="value">{{ detailInfo.ordersRefund.remark || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎿嶄綔浜猴細</span>
+ <span class="value">{{ detailInfo.platformUserName || '-' }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎿嶄綔鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.ordersRefund.updateTime || '-' }}</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">闂ㄥ簵閫�娆炬媿鐓э細</span>
+ <div v-if="detailInfo.refundTakeImages && detailInfo.refundTakeImages.length" class="image-list">
+ <el-image
+ v-for="(img, index) in detailInfo.refundTakeImages"
+ :key="index"
+ style="width: 80px; height: 80px; margin-right: 10px"
+ :src="img"
+ :preview-src-list="detailInfo.refundTakeImages"
+ fit="cover"
+ ></el-image>
+ </div>
+ <span v-else>-</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鐗╁搧淇℃伅</span>
+ </div>
+ <el-table :data="detailInfo.detailList" stripe class="goods-table">
+ <el-table-column prop="typeName" label="鐗╁搧鍚嶇О" min-width="80px"></el-table-column>
+ <el-table-column prop="luggageName" label="鐗╁搧灏哄" min-width="80px"></el-table-column>
+ <el-table-column label="鍗曚环锛堝厓锛�" min-width="100px">
+ <template slot-scope="{row}">
+ 楼{{ (row.unitPriceYuan / 100).toFixed(2) }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="num" label="鏁伴噺" min-width="60px"></el-table-column>
+ <el-table-column label="灏忚锛堝厓锛�" min-width="100px">
+ <template slot-scope="{row}">
+ 楼{{ (row.subtotal / 100).toFixed(2) }}
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="price-summary">
+ <span>鍩虹鏈嶅姟璐癸細楼{{ (detailInfo.order.price / 100).toFixed(2) }}</span>
+ <span>鐗╁搧淇濊垂锛毬{ (detailInfo.order.declaredFee / 100).toFixed(2) }}</span>
+ <span>璁㈠崟鎬讳环锛毬{ (detailInfo.order.totalAmount / 100).toFixed(2) }}</span>
+ <span>瀹為檯鏀粯锛毬{ (detailInfo.order.payAmount / 100).toFixed(2) }}</span>
+ <span>閫�娆鹃噾棰濓細楼{{ (detailInfo.order.refundAmount / 100).toFixed(2) }}</span>
+ <span>瓒呮椂閲戦锛毬{ (detailInfo.order.overdueAmount / 100).toFixed(2) }}</span>
+ <span>寮傚父閲戦锛毬{ (detailInfo.order.exceptionAmount / 100).toFixed(2) }}</span>
+ </div>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById } from '@/api/business/orderManagement'
+
+export default {
+ name: 'OperaOrderDetail',
+ components: { GlobalWindow },
+ data () {
+ return {
+ title: '璁㈠崟璇︽儏',
+ visible: false,
+ detailInfo: null
+ }
+ },
+ methods: {
+ open (row) {
+ this.title = '璁㈠崟璇︽儏'
+ getById(row.id).then(res => {
+ console.log(res)
+ this.detailInfo = res
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.order-detail {
+
+}
+.section {
+ margin-bottom: 25px;
+}
+.section-header {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 15px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ padding: 0 10px;
+}
+.info-item {
+ display: flex;
+ font-size: 14px;
+}
+.info-item.full-width {
+ grid-column: span 2;
+}
+.info-item .label {
+ color: #909399;
+ min-width: 140px;
+}
+.info-item .value {
+ color: #606266;
+ word-break: break-all;
+}
+.image-list {
+ display: flex;
+ flex-wrap: wrap;
+}
+.goods-table {
+ margin-bottom: 15px;
+}
+.price-summary {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 11px;
+ padding: 15px;
+ background: #f5f7fa;
+ border-radius: 4px;
+ font-size: 14px;
+ color: #606266;
+}
+</style>
diff --git a/admin/src/components/business/OperaShopApprovalWindow.vue b/admin/src/components/business/OperaShopApprovalWindow.vue
new file mode 100644
index 0000000..cf67cd7
--- /dev/null
+++ b/admin/src/components/business/OperaShopApprovalWindow.vue
@@ -0,0 +1,450 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :withFooter="false"
+ :visible.sync="visible"
+ width="80%"
+ >
+ <div class="store-header" v-if="storeInfo">
+ <div class="store-header-left">
+ <el-image :src="storeInfo.payMemberCoverImage ? storeInfo.imgPrefix + storeInfo.payMemberCoverImage : ''" fit="cover" class="store-avatar">
+ <div slot="error" class="image-slot">
+ <i class="el-icon-picture-outline"></i>
+ </div>
+ </el-image>
+ </div>
+ <div class="store-header-right">
+ <div class="store-name">{{ storeInfo.name }}</div>
+ <div class="store-info-row">
+ <span class="info-item">
+ <span class="label">闂ㄥ簵绫诲瀷锛�</span>
+ <span class="value">{{ storeInfo.companyType === 1 ? '浼佷笟' : '涓汉' }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">鑱旂郴浜猴細</span>
+ <span class="value">{{ storeInfo.linkName }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">鑱旂郴鐢佃瘽锛�</span>
+ <span class="value">{{ storeInfo.linkPhone }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">韬唤璇佸彿锛�</span>
+ <span class="value">{{ storeInfo.idcard }}</span>
+ </span>
+ </div>
+ </div>
+ </div>
+
+ <div class="qualification-content" v-if="storeInfo">
+ <div class="qualification-section">
+ <h4 class="section-title">鍩烘湰淇℃伅</h4>
+ <div class="info-grid">
+ <div class="info-row">
+ <span class="label">鎵�鍦ㄧ渷甯傚尯锛�</span>
+ <span class="value">{{ storeInfo.provinceName || '' }} {{ storeInfo.cityName || '' }} {{ storeInfo.areaName || '' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">闂ㄥ簵鍦板潃锛�</span>
+ <span class="value">{{ storeInfo.address }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">闂ㄥ簵鐘舵�侊細</span>
+ <span class="value">{{ storeInfo.auditStatus === 0 ? '寰呭鎵�' : storeInfo.auditStatus === 1 ? '瀹℃壒閫氳繃' : '瀹℃壒鏈�氳繃' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">閰嶉�佽寖鍥达細</span>
+ <span class="value">{{ storeInfo.deliveryRange || '鏆傛棤' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="qualification-section">
+ <h4 class="section-title">涓讳綋璧勮川</h4>
+ <template v-if="storeInfo.companyType === 1">
+ <div class="info-grid">
+ <div class="info-row">
+ <span class="label">娉曚汉濮撳悕锛�</span>
+ <span class="value">{{ storeInfo.legalPersonName }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">娉曚汉鎵嬫満鍙凤細</span>
+ <span class="value">{{ storeInfo.legalPersonPhone }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">娉曚汉韬唤璇佸彿鐮侊細</span>
+ <span class="value">{{ storeInfo.legalPersonCard }}</span>
+ </div>
+ </div>
+ <div class="image-section">
+ <div class="image-item">
+ <span class="label">娉曚汉韬唤璇佹闈細</span>
+ <el-image :src="storeInfo.idcardImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item">
+ <span class="label">娉曚汉韬唤璇佸弽闈細</span>
+ <el-image :src="storeInfo.idcardImgBack" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgBack]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item">
+ <span class="label">钀ヤ笟鎵х収锛�</span>
+ <el-image :src="storeInfo.businessImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.businessImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </template>
+ <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]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item-row">
+ <span class="label">韬唤璇佸弽闈細</span>
+ <el-image :src="storeInfo.idcardImgBack" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgBack]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item-row">
+ <span class="label">鏈夋晥鍔冲姩鍚堝悓锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.laborContractImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.laborContractImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">绀句繚缂寸撼璇佹槑锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.socialSecurityImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.socialSecurityImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </template>
+ </div>
+
+ <div class="qualification-section" v-if="storeInfo.companyType === 1">
+ <h4 class="section-title">闂ㄥ簵鐓х墖鍙婂叾浠栨潗鏂�</h4>
+ <div class="image-item-row">
+ <span class="label">闂ㄥ簵闂ㄥご鐓э細</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.storeFrontImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.storeFrontImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">闂ㄥ簵鍐呴儴鐓х墖锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.storeInteriorImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.storeInteriorImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">鍏跺畠鏉愭枡锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.otherMaterialImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.otherMaterialImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="approval-section" v-if="storeInfo && storeInfo.auditStatus !== 0">
+ <div class="approval-result" :class="storeInfo.auditStatus === 1 ? 'approval-pass' : 'approval-reject'">
+ <div class="approval-status" v-if="storeInfo.auditStatus === 1">
+ <i class="el-icon-circle-check"></i>
+ <span>瀹℃牳閫氳繃</span>
+ </div>
+ <div class="approval-status" v-else>
+ <i class="el-icon-circle-close"></i>
+ <span>瀹℃牳鎷掔粷</span>
+ </div>
+ <div class="approval-info" v-if="storeInfo.auditStatus === 1">
+ <span class="info-item">瀹℃牳鏃堕棿锛歿{ storeInfo.auditTime }}</span>
+ <span class="info-item">瀹℃牳浜猴細{{ storeInfo.auditName }}</span>
+ </div>
+ <div class="approval-info" v-else>
+ <div class="info-item" v-if="storeInfo.auditRemark">澶囨敞锛歿{ storeInfo.auditRemark }}</div>
+ <div class="info-item">瀹℃牳鏃堕棿锛歿{ storeInfo.auditTime }}</div>
+ <div class="info-item">瀹℃牳浜猴細{{ storeInfo.auditName }}</div>
+ </div>
+ </div>
+ </div>
+
+ <div class="approval-form" v-if="storeInfo && storeInfo.auditStatus === 0">
+ <el-form ref="approvalForm" :model="approvalForm" :rules="approvalRules">
+ <el-form-item label="瀹℃壒缁撴灉" prop="auditStatus">
+ <el-radio-group v-model="approvalForm.auditStatus" @change="handleAuditStatusChange">
+ <el-radio :label="0">閫氳繃</el-radio>
+ <el-radio :label="1">鎷掔粷</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="瀹℃壒鎰忚" prop="auditRemark">
+ <el-input
+ v-model="approvalForm.auditRemark"
+ type="textarea"
+ :rows="2"
+ :placeholder="approvalForm.auditStatus === 2 ? '璇疯緭鍏ユ嫆缁濆師鍥狅紙蹇呭~锛�' : '璇疯緭鍏ュ鎵规剰瑙�'"
+ style="width: 300px"
+ ></el-input>
+ </el-form-item>
+ <section class="approval-buttons">
+ <el-button type="primary" @click="handleSubmit" :loading="isWorking.submit">鎻愪氦</el-button>
+ <el-button @click="handleCancel">鍙栨秷</el-button>
+ </section>
+ </el-form>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { detail, audit } from '@/api/business/shopInfo'
+
+export default {
+ name: 'OperaShopApprovalWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ storeInfo: null,
+ approvalForm: {
+ id: null,
+ auditStatus: 0,
+ auditRemark: ''
+ },
+ approvalRules: {
+ auditRemark: [
+ { required: true, message: '璇疯緭鍏ユ嫆缁濆師鍥�', trigger: 'blur' }
+ ]
+ },
+ isWorking: {
+ submit: false
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/shopInfo',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ this.approvalForm = {
+ id: row.id,
+ auditStatus: 1,
+ auditRemark: ''
+ }
+ detail(row.id)
+ .then(res => {
+ this.storeInfo = res
+ this.visible = true
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleAuditStatusChange (val) {
+ if (val === 1) {
+ this.approvalRules.auditRemark = []
+ } else {
+ this.approvalRules.auditRemark = [{ required: true, message: '璇疯緭鍏ユ嫆缁濆師鍥�', trigger: 'blur' }]
+ }
+ },
+ handleSubmit () {
+ this.$refs.approvalForm.validate(valid => {
+ if (!valid) return
+ this.isWorking.submit = true
+ audit(this.approvalForm)
+ .then(res => {
+ this.$tip.apiSuccess(res || '鎻愪氦鎴愬姛')
+ this.visible = false
+ this.$emit('success')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.submit = false
+ })
+ })
+ },
+ handleCancel () {
+ this.visible = false
+ }
+ }
+}
+</script>
+
+<style scoped>
+.store-header {
+ display: flex;
+ background: #f5f7fa;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+}
+.store-header-left {
+ margin-right: 20px;
+}
+.store-avatar {
+ width: 80px;
+ height: 80px;
+ border-radius: 50%;
+}
+.store-header-right {
+ flex: 1;
+}
+.store-name {
+ font-size: 18px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 10px;
+}
+.store-info-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+.info-item {
+ font-size: 14px;
+ color: #606266;
+}
+.info-item .label {
+ color: #909399;
+}
+.qualification-content {
+ padding: 20px;
+}
+.qualification-section {
+ margin-bottom: 30px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 15px;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ margin-bottom: 20px;
+}
+.info-row {
+ display: flex;
+ font-size: 14px;
+}
+.info-row .label {
+ color: #909399;
+ min-width: 100px;
+}
+.info-row .value {
+ color: #606266;
+}
+.image-section {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 30px;
+}
+.image-item {
+ display: flex;
+ flex-direction: column;
+}
+.image-item-row {
+ display: flex;
+ align-items: flex-start;
+ margin-bottom: 20px;
+}
+.image-item-row .label {
+ color: #909399;
+ font-size: 14px;
+ min-width: 120px;
+}
+.image-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+.image-item .label {
+ color: #909399;
+ font-size: 14px;
+ margin-bottom: 8px;
+}
+.qualification-image {
+ width: 150px;
+ height: 100px;
+ border-radius: 4px;
+ border: 1px solid #eee;
+}
+.image-slot {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ background: #f5f7fa;
+ color: #909399;
+ font-size: 20px;
+}
+.approval-section {
+ padding: 20px;
+}
+.approval-result {
+ border-radius: 8px;
+ padding: 20px;
+}
+.approval-pass {
+ background: #f0f9eb;
+ border: 1px solid #67c23a;
+}
+.approval-reject {
+ background: #fef0f0;
+ border: 1px solid #f56c6c;
+}
+.approval-status {
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 15px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+.approval-pass .approval-status {
+ color: #67c23a;
+}
+.approval-reject .approval-status {
+ color: #f56c6c;
+}
+.approval-info {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 30px;
+ font-size: 14px;
+ color: #606266;
+}
+.approval-form {
+ padding: 20px;
+ border-top: 1px solid #eee;
+ background: #f5f7fa;
+ border-radius: 8px;
+ margin-top: 20px;
+}
+.approval-buttons {
+ margin-top: 20px;
+}
+</style>
diff --git a/admin/src/components/business/OperaShopEditWindow.vue b/admin/src/components/business/OperaShopEditWindow.vue
index f9e942c..7c3855d 100644
--- a/admin/src/components/business/OperaShopEditWindow.vue
+++ b/admin/src/components/business/OperaShopEditWindow.vue
@@ -2,11 +2,11 @@
<GlobalWindow
title="缂栬緫闂ㄥ簵"
:visible.sync="visible"
- width="60%"
+ width="600px"
:confirm-working="isWorking.save"
@confirm="handleConfirm"
>
- <el-form ref="form" :model="form" label-width="120px" :rules="rules" class="inline-form">
+ <el-form ref="form" :model="form" :rules="rules">
<div class="form-section">
<h4 class="section-title">璐﹀彿淇℃伅</h4>
<el-form-item label="娉ㄥ唽鎵嬫満鍙�" prop="telephone">
@@ -307,12 +307,17 @@
this.$refs.form.validate(valid => {
if (!valid) return
this.isWorking.save = true
- const imageFields = ['businessImg', 'idcardImg', 'idcardImgBack', 'laborContractImgs', 'socialSecurityImgs', 'storeFrontImgs', 'storeInteriorImgs', 'otherMaterialImgs']
+ const imageFields = ['laborContractImgs', 'socialSecurityImgs', 'storeFrontImgs', 'storeInteriorImgs', 'otherMaterialImgs']
+ const singleImageFields = ['businessImg', 'idcardImg', 'idcardImgBack']
const data = { ...this.form }
+ singleImageFields.forEach(field => {
+ if (data[field] && Array.isArray(data[field])) {
+ data[field] = data[field].map(item => typeof item === 'object' ? item.fileurl : item).join(',')
+ }
+ })
imageFields.forEach(field => {
- if (data[field]) {
- const list = Array.isArray(data[field]) ? data[field] : [data[field]]
- data[field] = list.map(item => typeof item === 'object' ? item.fileurl : item).join(',')
+ if (data[field] && Array.isArray(data[field])) {
+ data[field] = data[field].map(item => typeof item === 'object' ? item.fileurl : item)
}
})
data.provinceId = this.form.areaCode[0] || ''
@@ -352,7 +357,7 @@
.password-tip {
color: #909399;
font-size: 12px;
- margin: -10px 0 15px 120px;
+ margin: -10px 0 15px 0;
}
.longitude-latitude {
display: flex;
diff --git a/admin/src/components/business/OperaShopInfoSeeWindow.vue b/admin/src/components/business/OperaShopInfoSeeWindow.vue
new file mode 100644
index 0000000..4797669
--- /dev/null
+++ b/admin/src/components/business/OperaShopInfoSeeWindow.vue
@@ -0,0 +1,416 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :withFooter="false"
+ :visible.sync="visible"
+ width="80%"
+ >
+ <div class="store-header" v-if="storeInfo">
+ <div class="store-header-left">
+ <el-image :src="storeInfo.payMemberCoverImage ? storeInfo.imgPrefix + storeInfo.payMemberCoverImage : ''" fit="cover" class="store-avatar">
+ <div slot="error" class="image-slot">
+ <i class="el-icon-picture-outline"></i>
+ </div>
+ </el-image>
+ </div>
+ <div class="store-header-right">
+ <div class="store-name">{{ storeInfo.name }}</div>
+ <div class="store-info-row">
+ <span class="info-item">
+ <span class="label">闂ㄥ簵绫诲瀷锛�</span>
+ <span class="value">{{ storeInfo.companyType === 1 ? '浼佷笟' : '涓汉' }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">鑱旂郴浜猴細</span>
+ <span class="value">{{ storeInfo.linkName }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">鑱旂郴鐢佃瘽锛�</span>
+ <span class="value">{{ storeInfo.linkPhone }}</span>
+ </span>
+ <span class="info-item">
+ <span class="label">韬唤璇佸彿锛�</span>
+ <span class="value">{{ storeInfo.idcard }}</span>
+ </span>
+ </div>
+ </div>
+ </div>
+
+ <div class="approval-section" v-if="storeInfo && storeInfo.auditStatus !== 0">
+ <div class="approval-result" :class="storeInfo.auditStatus === 1 ? 'approval-pass' : 'approval-reject'">
+ <div class="approval-status" v-if="storeInfo.auditStatus === 1">
+ <i class="el-icon-circle-check"></i>
+ <span>瀹℃牳閫氳繃</span>
+ </div>
+ <div class="approval-status" v-else>
+ <i class="el-icon-circle-close"></i>
+ <span>瀹℃牳鎷掔粷</span>
+ </div>
+ <div class="approval-info" v-if="storeInfo.auditStatus === 1">
+ <span class="info-item">瀹℃牳鏃堕棿锛歿{ storeInfo.auditTime }}</span>
+ <span class="info-item">瀹℃牳浜猴細{{ storeInfo.auditName }}</span>
+ </div>
+ <div class="approval-info" v-else>
+ <div class="info-item" v-if="storeInfo.auditRemark">澶囨敞锛歿{ storeInfo.auditRemark }}</div>
+ <div class="info-item">瀹℃牳鏃堕棿锛歿{ storeInfo.auditTime }}</div>
+ <div class="info-item">瀹℃牳浜猴細{{ storeInfo.auditName }}</div>
+ </div>
+ </div>
+ </div>
+
+ <div class="qualification-content" v-if="storeInfo">
+ <div class="qualification-section">
+ <h4 class="section-title">鍩烘湰淇℃伅</h4>
+ <div class="info-grid">
+ <div class="info-row">
+ <span class="label">鎵�鍦ㄧ渷甯傚尯锛�</span>
+ <span class="value">{{ storeInfo.provinceName || '' }} {{ storeInfo.cityName || '' }} {{ storeInfo.areaName || '' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">闂ㄥ簵鍦板潃锛�</span>
+ <span class="value">{{ storeInfo.address }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">闂ㄥ簵鐘舵�侊細</span>
+ <span class="value">{{ storeInfo.auditStatus === 0 ? '寰呭鎵�' : storeInfo.auditStatus === 1 ? '瀹℃壒閫氳繃' : '瀹℃壒鏈�氳繃' }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">閰嶉�佽寖鍥达細</span>
+ <span class="value">{{ storeInfo.deliveryRange || '鏆傛棤' }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="qualification-section">
+ <h4 class="section-title">涓讳綋璧勮川</h4>
+ <template v-if="storeInfo.companyType === 1">
+ <div class="info-grid">
+ <div class="info-row">
+ <span class="label">娉曚汉濮撳悕锛�</span>
+ <span class="value">{{ storeInfo.legalPersonName }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">娉曚汉鎵嬫満鍙凤細</span>
+ <span class="value">{{ storeInfo.legalPersonPhone }}</span>
+ </div>
+ <div class="info-row">
+ <span class="label">娉曚汉韬唤璇佸彿鐮侊細</span>
+ <span class="value">{{ storeInfo.legalPersonCard }}</span>
+ </div>
+ </div>
+ <div class="image-section">
+ <div class="image-item">
+ <span class="label">娉曚汉韬唤璇佹闈細</span>
+ <el-image :src="storeInfo.idcardImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item">
+ <span class="label">娉曚汉韬唤璇佸弽闈細</span>
+ <el-image :src="storeInfo.idcardImgBack" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgBack]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item">
+ <span class="label">钀ヤ笟鎵х収锛�</span>
+ <el-image :src="storeInfo.businessImg" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.businessImg]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </template>
+ <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]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item-row">
+ <span class="label">韬唤璇佸弽闈細</span>
+ <el-image :src="storeInfo.idcardImgBack" fit="cover" class="qualification-image" :preview-src-list="[storeInfo.idcardImgBack]">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ <div class="image-item-row">
+ <span class="label">鏈夋晥鍔冲姩鍚堝悓锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.laborContractImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.laborContractImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">绀句繚缂寸撼璇佹槑锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.socialSecurityImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.socialSecurityImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </template>
+ </div>
+
+ <div class="qualification-section" v-if="storeInfo.companyType === 1">
+ <h4 class="section-title">闂ㄥ簵鐓х墖鍙婂叾浠栨潗鏂�</h4>
+ <div class="image-item-row">
+ <span class="label">闂ㄥ簵闂ㄥご鐓э細</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.storeFrontImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.storeFrontImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">闂ㄥ簵鍐呴儴鐓х墖锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.storeInteriorImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.storeInteriorImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ <div class="image-item-row">
+ <span class="label">鍏跺畠鏉愭枡锛�</span>
+ <div class="image-list">
+ <el-image v-for="(img, index) in storeInfo.otherMaterialImgs" :key="index" :src="img" fit="cover" class="qualification-image" :preview-src-list="storeInfo.otherMaterialImgs">
+ <div slot="error" class="image-slot"><i class="el-icon-picture-outline"></i></div>
+ </el-image>
+ </div>
+ </div>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { detail, audit } from '@/api/business/shopInfo'
+
+export default {
+ name: 'OperaShopInfoSeeWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ storeInfo: null,
+ approvalForm: {
+ id: null,
+ auditStatus: 0,
+ auditRemark: ''
+ },
+ approvalRules: {
+ auditRemark: [
+ { required: true, message: '璇疯緭鍏ユ嫆缁濆師鍥�', trigger: 'blur' }
+ ]
+ },
+ isWorking: {
+ submit: false
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/shopInfo',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ this.approvalForm = {
+ id: row.id,
+ auditStatus: 1,
+ auditRemark: ''
+ }
+ detail(row.id)
+ .then(res => {
+ this.storeInfo = res
+ this.visible = true
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleAuditStatusChange (val) {
+ if (val === 1) {
+ this.approvalRules.auditRemark = []
+ } else {
+ this.approvalRules.auditRemark = [{ required: true, message: '璇疯緭鍏ユ嫆缁濆師鍥�', trigger: 'blur' }]
+ }
+ },
+ handleSubmit () {
+ this.$refs.approvalForm.validate(valid => {
+ if (!valid) return
+ this.isWorking.submit = true
+ audit(this.approvalForm)
+ .then(res => {
+ this.$tip.apiSuccess(res || '鎻愪氦鎴愬姛')
+ this.visible = false
+ this.$emit('success')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.submit = false
+ })
+ })
+ },
+ handleCancel () {
+ this.visible = false
+ }
+ }
+}
+</script>
+
+<style scoped>
+.store-header {
+ display: flex;
+ background: #f5f7fa;
+ border-radius: 8px;
+ padding: 20px;
+ margin-bottom: 20px;
+}
+.store-header-left {
+ margin-right: 20px;
+}
+.store-avatar {
+ width: 80px;
+ height: 80px;
+ border-radius: 50%;
+}
+.store-header-right {
+ flex: 1;
+}
+.store-name {
+ font-size: 18px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 10px;
+}
+.store-info-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+.info-item {
+ font-size: 14px;
+ color: #606266;
+}
+.info-item .label {
+ color: #909399;
+}
+.qualification-content {
+ padding: 20px;
+}
+.qualification-section {
+ margin-bottom: 30px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 15px;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ margin-bottom: 20px;
+}
+.info-row {
+ display: flex;
+ font-size: 14px;
+}
+.info-row .label {
+ color: #909399;
+ min-width: 100px;
+}
+.info-row .value {
+ color: #606266;
+}
+.image-section {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 30px;
+}
+.image-item {
+ display: flex;
+ flex-direction: column;
+}
+.image-item-row {
+ display: flex;
+ align-items: flex-start;
+ margin-bottom: 20px;
+}
+.image-item-row .label {
+ color: #909399;
+ font-size: 14px;
+ min-width: 120px;
+}
+.image-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+.image-item .label {
+ color: #909399;
+ font-size: 14px;
+ margin-bottom: 8px;
+}
+.qualification-image {
+ width: 150px;
+ height: 100px;
+ border-radius: 4px;
+ border: 1px solid #eee;
+}
+.image-slot {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ background: #f5f7fa;
+ color: #909399;
+ font-size: 20px;
+}
+.approval-section {
+ padding: 20px;
+}
+.approval-result {
+ border-radius: 8px;
+ padding: 20px;
+}
+.approval-pass {
+ background: #f0f9eb;
+ border: 1px solid #67c23a;
+}
+.approval-reject {
+ background: #fef0f0;
+ border: 1px solid #f56c6c;
+}
+.approval-status {
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 15px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+.approval-pass .approval-status {
+ color: #67c23a;
+}
+.approval-reject .approval-status {
+ color: #f56c6c;
+}
+.approval-info {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 30px;
+ font-size: 14px;
+ color: #606266;
+}
+</style>
diff --git a/admin/src/components/business/OperaShopInfoWindow.vue b/admin/src/components/business/OperaShopInfoWindow.vue
index 55322fc..98d7223 100644
--- a/admin/src/components/business/OperaShopInfoWindow.vue
+++ b/admin/src/components/business/OperaShopInfoWindow.vue
@@ -1,16 +1,17 @@
<template>
<GlobalWindow
:title="title"
+ :withFooter="false"
:visible.sync="visible"
width="80%"
>
<div class="store-header" v-if="storeInfo">
<div class="store-header-left">
- <!-- <el-image :src="storeInfo.headImage || defaultAvatar" fit="cover" class="store-avatar">
+ <el-image :src="storeInfo.payMemberCoverImage ? storeInfo.imgPrefix + storeInfo.payMemberCoverImage : ''" fit="cover" class="store-avatar">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
- </el-image> -->
+ </el-image>
</div>
<div class="store-header-right">
<div class="store-name">{{ storeInfo.name }}</div>
@@ -38,14 +39,14 @@
<el-tabs v-model="activeTab" class="store-tabs">
<el-tab-pane label="闂ㄥ簵涓氱哗" name="performance">
<el-form ref="searchForm" :model="searchForm" inline>
- <el-form-item label="浜ゆ槗鍙�" prop="transactionId">
- <el-input v-model="searchForm.transactionId" clearable placeholder="璇疯緭鍏ヤ氦鏄撳彿"></el-input>
+ <el-form-item label="浜ゆ槗鍙�" prop="orderNo">
+ <el-input v-model="searchForm.orderNo" clearable placeholder="璇疯緭鍏ヤ氦鏄撳彿"></el-input>
</el-form-item>
- <el-form-item label="鏀舵敮绫诲瀷" prop="type">
- <el-select v-model="searchForm.type" clearable placeholder="璇烽�夋嫨绫诲瀷">
- <el-option label="鍏ㄩ儴" :value="0"></el-option>
+ <el-form-item label="鏀舵敮绫诲瀷" prop="optType">
+ <el-select v-model="searchForm.optType" clearable placeholder="璇烽�夋嫨绫诲瀷">
+ <el-option label="鍏ㄩ儴" value=""></el-option>
<el-option label="鏀跺叆" :value="1"></el-option>
- <el-option label="鏀嚭" :value="2"></el-option>
+ <el-option label="鏀嚭" :value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="鏀舵敮鏃堕棿" prop="createTime">
@@ -62,26 +63,32 @@
<el-table :data="tableData.list" border stripe v-loading="isWorking.search" class="performance-table">
<el-table-column label="鏀跺叆/鏀嚭" min-width="100px">
<template slot-scope="{row}">
- <span :class="row.type === 1 ? 'income' : 'expense'">{{ row.type === 1 ? '鏀跺叆' : '鏀嚭' }}</span>
+ <span :class="row.optType === 1 ? 'income' : 'expense'">{{ row.optType === 1 ? '鏀跺叆' : '鏀嚭' }}</span>
</template>
</el-table-column>
<el-table-column prop="amount" label="閲戦锛堝厓锛�" min-width="100px">
<template slot-scope="{row}">
- <span :class="row.type === 1 ? 'income' : 'expense'">{{ row.amount }}</span>
+ <span :class="row.optType === 1 ? 'income' : 'expense'">{{ row.amount }}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="鏀舵敮鏃堕棿" min-width="160px"></el-table-column>
- <el-table-column prop="businessType" label="涓氬姟绫诲瀷" min-width="100px"></el-table-column>
- <el-table-column prop="transactionId" label="浜ゆ槗鍙�" min-width="180px"></el-table-column>
+ <el-table-column 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>
+ </template>
+ </el-table-column>
+ <el-table-column prop="orderNo" label="浜ゆ槗鍙�" min-width="180px"></el-table-column>
<el-table-column label="鐘舵��" min-width="100px">
<template slot-scope="{row}">
- <span :class="row.status === 1 ? 'status-success' : 'status-pending'">
- {{ row.status === 1 ? '宸插埌璐�' : '鎻愮幇涓�' }}
+ <span :class="row.vaildStatus === 1 ? 'status-success' : 'status-pending'">
+ {{ row.vaildStatus === 1 ? '宸插埌璐�' : '鎻愮幇涓�' }}
</span>
</template>
</el-table-column>
</el-table>
-
<pagination
@size-change="handleSizeChange"
@current-change="handlePageChange"
@@ -221,6 +228,7 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import Pagination from '@/components/common/Pagination'
import { detail } from '@/api/business/shopInfo'
+import { fetchList, exportExcel } from '@/api/business/revenue'
export default {
name: 'OperaShopInfoWindow',
extends: BaseOpera,
@@ -230,9 +238,11 @@
activeTab: 'performance',
storeInfo: null,
searchForm: {
- transactionId: '',
- type: 0,
- createTime: ''
+ orderNo: '',
+ optType: 0,
+ createTime: '',
+ memberId: '',
+ memberType: 2
},
tableData: {
list: [],
@@ -257,14 +267,17 @@
},
methods: {
open (title, row) {
+ this.searchForm.memberId = row.id
detail(row.id)
.then(res => {
this.storeInfo = res
this.activeTab = 'performance'
this.searchForm = {
- transactionId: '',
- type: 0,
- createTime: ''
+ orderNo: '',
+ optType: '',
+ createTime: '',
+ memberId: '',
+ memberType: 2
}
this.title = title
this.visible = true
@@ -277,15 +290,18 @@
search () {
this.isWorking.search = true
const data = {
- pageIndex: this.tableData.pagination.pageIndex,
- pageSize: this.tableData.pagination.pageSize,
- shopId: this.storeInfo?.id,
- transactionId: this.searchForm.transactionId,
- type: this.searchForm.type,
- startTime: this.searchForm.createTime?.[0] || '',
- endTime: this.searchForm.createTime?.[1] || ''
+ 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 || ''
+ }
}
- this.api.fetchPerformance(data)
+ fetchList(data)
.then(res => {
this.tableData.list = res.list || []
this.tableData.pagination.total = res.total || 0
@@ -299,9 +315,11 @@
},
reset () {
this.searchForm = {
- transactionId: '',
- type: 0,
- createTime: ''
+ orderNo: '',
+ optType: '',
+ createTime: '',
+ memberId: '',
+ memberType: 2
}
this.search()
},
@@ -316,14 +334,20 @@
exportExcel () {
this.isWorking.export = true
const data = {
- shopId: this.storeInfo?.id,
- transactionId: this.searchForm.transactionId,
- type: this.searchForm.type,
- startTime: this.searchForm.createTime?.[0] || '',
- endTime: this.searchForm.createTime?.[1] || ''
+ 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 || ''
+ }
}
- this.api.exportPerformance(data)
+ exportExcel(data)
.then(res => {
+ this.download(res)
this.$tip.apiSuccess('瀵煎嚭鎴愬姛')
})
.catch(e => {
diff --git a/admin/src/components/business/OperaWithdrawDetailWindow.vue b/admin/src/components/business/OperaWithdrawDetailWindow.vue
new file mode 100644
index 0000000..0d60c66
--- /dev/null
+++ b/admin/src/components/business/OperaWithdrawDetailWindow.vue
@@ -0,0 +1,297 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :withFooter="false"
+ width="70%"
+ :confirm-working="isWorking.submit"
+ @confirm="handleConfirm"
+ >
+ <div class="detail-container">
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鍩烘湰淇℃伅</span>
+ <span class="status-tag" :class="getStatusClass(detailInfo.status)">
+ {{ getStatusText(detailInfo.status) }}
+ </span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">闂ㄥ簵鍚嶇О锛�</span>
+ <span class="value">{{ detailInfo.shopName }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">闂ㄥ簵鑱旂郴浜猴細</span>
+ <span class="value">{{ detailInfo.linkName }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鐢宠鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.createTime }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section">
+ <div class="section-header">
+ <span class="section-title">鎻愮幇淇℃伅</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">鎻愮幇閲戦锛�</span>
+ <span class="value amount">楼{{ detailInfo.amount / 100 }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">鎻愮幇璐︽埛锛�</span>
+ <span class="value">{{ detailInfo.aliAccount }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">瀹℃牳浜猴細</span>
+ <span class="value">{{ detailInfo.updateUserName }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">瀹℃牳鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.updateTime }}</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">瀹℃牳澶囨敞锛�</span>
+ <span class="value">{{ detailInfo.approveRemark }}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="section" v-if="detailInfo.status !== 0">
+ <div class="section-header">
+ <span class="section-title">瀹℃壒淇℃伅</span>
+ </div>
+ <div class="info-grid">
+ <div class="info-item">
+ <span class="label">瀹℃牳浜猴細</span>
+ <span class="value">{{ detailInfo.updateUserName }}</span>
+ </div>
+ <div class="info-item">
+ <span class="label">瀹℃牳鏃堕棿锛�</span>
+ <span class="value">{{ detailInfo.updateTime }}</span>
+ </div>
+ <div class="info-item full-width">
+ <span class="label">瀹℃牳澶囨敞锛�</span>
+ <span class="value">{{ detailInfo.approveRemark }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="approval-form" v-if="detailInfo.status === 0">
+ <el-form ref="approvalForm" :model="approvalForm" :rules="approvalRules">
+ <el-form-item label="瀹℃壒缁撴灉" prop="status">
+ <el-radio-group v-model="approvalForm.status">
+ <el-radio :label="1">閫氳繃</el-radio>
+ <el-radio :label="2">椹冲洖</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="澶囨敞" prop="approveRemark">
+ <el-input
+ v-model="approvalForm.approveRemark"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ュ娉�"
+ style="width: 100%"
+ ></el-input>
+ </el-form-item>
+ </el-form>
+ <div class="approval-buttons">
+ <el-button @click="visible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleConfirm" :loading="isWorking.submit">纭畾</el-button>
+ </div>
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById, approve } from '@/api/business/shopWithdraw'
+
+export default {
+ name: 'OperaWithdrawDetailWindow',
+ components: { GlobalWindow },
+ data () {
+ return {
+ title: '鎻愮幇璇︽儏',
+ visible: false,
+ detailInfo: {
+ status: '',
+ shopName: '',
+ linkName: '',
+ createTime: '',
+ amount: '',
+ bankCardNo: '',
+ auditLogs: []
+ },
+ approvalForm: {
+ id: null,
+ status: 1,
+ approveRemark: ''
+ },
+ approvalRules: {
+ status: [{ required: true, message: '璇烽�夋嫨瀹℃壒缁撴灉', trigger: 'change' }]
+ },
+ isWorking: {
+ submit: false
+ }
+ }
+ },
+ methods: {
+ open (title, row) {
+ this.title = title
+ this.approvalForm.id = row.id
+ this.approvalForm.status = 1
+ this.approvalForm.approveRemark = ''
+ getById(row.id).then(res => {
+ this.detailInfo = {
+ status: res.status,
+ shopName: res.shopName,
+ linkName: res.linkName,
+ createTime: res.createTime,
+ amount: res.amount,
+ bankCardNo: res.bankCardNo,
+ auditLogs: res.auditLogs || [],
+ updateUserName: res.updateUserName,
+ updateTime: res.updateTime,
+ approveRemark: res.approveRemark
+ }
+ this.visible = true
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ getStatusText (status) {
+ const map = { 0: '鎻愮幇鐢宠涓�', 1: '鎻愮幇鎴愬姛', 2: '鎻愮幇澶辫触' }
+ return map[status] || '-'
+ },
+ getStatusClass (status) {
+ const map = { 0: 'status-pending', 1: 'status-success', 2: 'status-reject' }
+ return map[status] || ''
+ },
+ handleConfirm () {
+ if (this.detailInfo.status !== 0) {
+ this.visible = false
+ return
+ }
+ this.$refs.approvalForm.validate(valid => {
+ if (!valid) return
+ this.isWorking.submit = true
+ approve(this.approvalForm).then(res => {
+ this.$tip.apiSuccess(res || '鎻愪氦鎴愬姛')
+ this.visible = false
+ this.$emit('success')
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ }).finally(() => {
+ this.isWorking.submit = false
+ })
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.detail-container {
+ padding: 20px;
+}
+.section {
+ margin-bottom: 30px;
+}
+.section-header {
+ display: flex;
+ align-items: center;
+ gap: 15px;
+ margin-bottom: 15px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.status-tag {
+ padding: 4px 12px;
+ border-radius: 4px;
+ font-size: 12px;
+}
+.status-pending {
+ background: #fdf6ec;
+ color: #E6A23C;
+}
+.status-success {
+ background: #f0f9eb;
+ color: #67C23A;
+}
+.status-reject {
+ background: #fef0f0;
+ color: #F56C6C;
+}
+.info-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 15px;
+ padding: 0 10px;
+}
+.info-item {
+ display: flex;
+ font-size: 14px;
+}
+.info-item .label {
+ color: #909399;
+ min-width: 90px;
+}
+.info-item .value {
+ color: #606266;
+}
+.info-item .amount {
+ color: #f56c6c;
+ font-weight: bold;
+}
+.info-item.full-width {
+ grid-column: span 2;
+}
+.timeline-content {
+ padding: 10px;
+ background: #f5f7fa;
+ border-radius: 4px;
+}
+.timeline-title {
+ font-size: 14px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 8px;
+}
+.timeline-info {
+ display: flex;
+ gap: 20px;
+ font-size: 13px;
+ color: #606266;
+ margin-bottom: 5px;
+}
+.timeline-remark {
+ font-size: 13px;
+ color: #909399;
+}
+.approval-form {
+ padding: 20px;
+ background: #f5f7fa;
+ border-top: 1px solid #eee;
+}
+.approval-form /deep/ .el-form-item {
+ margin-bottom: 15px;
+}
+.approval-form /deep/ .el-form-item:last-child {
+ margin-bottom: 0;
+}
+.approval-buttons {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 15px;
+}
+</style>
diff --git a/admin/src/views/business/baggageType.vue b/admin/src/views/business/baggageType.vue
new file mode 100644
index 0000000..b210bae
--- /dev/null
+++ b/admin/src/views/business/baggageType.vue
@@ -0,0 +1,96 @@
+<template>
+ <TableLayout :permissions="['business:category:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary" @click="$refs.operaGoodsCategoryEditWindow.open('鏂板缓鐗╁搧绛夌骇', null, 4)" icon="el-icon-plus">鏂板缓</el-button></li>
+ </ul>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="id" label="ID" min-width="80px"></el-table-column>
+ <el-table-column prop="name" label="琛屾潕绫诲瀷" min-width="120px"></el-table-column>
+ <el-table-column prop="remark" label="澶囨敞璇存槑" min-width="200px"></el-table-column>
+ <el-table-column prop="sortnum" label="鎺掑簭" min-width="100px"></el-table-column>
+ <el-table-column prop="createTime" label="鎻愪氦鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="150" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row.id)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaGoodsCategoryEditWindow ref="operaGoodsCategoryEditWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaGoodsCategoryEditWindow from '@/components/business/OperaGoodsCategoryEditWindow'
+import { updateStatus } from '@/api/business/goodsCategory'
+
+export default {
+ name: 'BaggageTypeList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaGoodsCategoryEditWindow },
+ data () {
+ return {
+ searchForm: {
+ name: '',
+ type: 4
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/goodsCategory',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleEdit (row) {
+ this.$refs.operaGoodsCategoryEditWindow.open('缂栬緫鐗╁搧绛夌骇', row, 4)
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/bannerList.vue b/admin/src/views/business/bannerList.vue
new file mode 100644
index 0000000..3fca071
--- /dev/null
+++ b/admin/src/views/business/bannerList.vue
@@ -0,0 +1,138 @@
+<template>
+ <TableLayout :permissions="['business:banner:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鏍囬" prop="title">
+ <el-input v-model="searchForm.title" clearable placeholder="璇疯緭鍏ユ爣棰�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:banner:create']">
+ <li><el-button type="primary" @click="$refs.operaBannerEditWindow.open('鏂板缓杞挱鍥�',null,searchForm.type)" icon="el-icon-plus" v-permissions="['business:banner:create']">鏂板缓</el-button></li>
+ </ul>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="title" label="鏍囬" min-width="120px"></el-table-column>
+ <el-table-column prop="position" label="灞曠ず浣嶇疆" min-width="100px">
+ <template slot-scope="{row}">
+ {{ positionOptions[row.position] || '-' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鍥剧墖" min-width="120px">
+ <template slot-scope="{row}">
+ <el-image
+ v-if="row.imgurlFull"
+ style="width: 80px; height: 40px"
+ :src="row.imgurlFull"
+ fit="contain"
+ ></el-image>
+ <span v-else>-</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="璺宠浆鏂瑰紡" min-width="100px">
+ <template slot-scope="{row}">
+ {{ jumpTypeOptions[row.type] || '-' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="80px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column prop="updateTime" label="淇敼鏃堕棿" min-width="160px"></el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="150" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row.id)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaBannerEditWindow ref="operaBannerEditWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaBannerEditWindow from '@/components/business/OperaBannerEditWindow'
+import { updateById, deleteById } from '@/api/business/banner'
+
+export default {
+ name: 'BannerList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaBannerEditWindow },
+ data () {
+ return {
+ positionOptions: {
+ 0: '棣栭〉',
+ 1: '搴楅摵棣栭〉'
+ },
+ jumpTypeOptions: {
+ 0: '鏃�',
+ 1: '浼氬憳绔椤佃疆鎾�',
+ 2: '鍙告満APP寮曞椤�'
+ },
+ searchForm: {
+ title: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/banner',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ loadTableData (resolve) {
+ this.isWorking.search = true
+ list(this.getTableParams())
+ .then(data => {
+ this.tableData.list = data.list || []
+ this.tableData.pagination.total = data.total || 0
+ if (resolve) resolve(data)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e, '鍔犺浇澶辫触')
+ })
+ .finally(() => {
+ this.isWorking.search = false
+ })
+ },
+ handleEdit (row) {
+ this.$refs.operaBannerEditWindow.open('缂栬緫杞挱鍥�', row)
+ },
+ handleStatusChange (val, row) {
+ updateById({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/driverList.vue b/admin/src/views/business/driverList.vue
new file mode 100644
index 0000000..4ae814c
--- /dev/null
+++ b/admin/src/views/business/driverList.vue
@@ -0,0 +1,155 @@
+<template>
+ <TableLayout :permissions="['business:driverInfo:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍙告満淇℃伅" prop="keyword">
+ <el-input v-model="searchForm.keyword" clearable placeholder="璇疯緭鍏ュ徃鏈哄鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="杞︾墝鍙�" prop="carNo">
+ <el-input v-model="searchForm.carNo" clearable placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨鐘舵��" @change="search">
+ <el-option label="绂佺敤" :value="1"></el-option>
+ <el-option label="鍚敤" :value="0"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-select v-model="searchForm.sex" clearable placeholder="璇烽�夋嫨鎬у埆" @change="search">
+ <el-option label="鐢�" :value="1"></el-option>
+ <el-option label="濂�" :value="2"></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"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <section>
+ <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>
+ <template v-slot:table-wrap>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="name" label="鍙告満濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column label="鎬у埆" min-width="60px">
+ <template slot-scope="{row}">{{ row.gender === 1 ? '鐢�' : row.gender === 2 ? '濂�' : '-' }}</template>
+ </el-table-column>
+ <el-table-column prop="telephone" label="娉ㄥ唽鎵嬫満鍙�" min-width="120px"></el-table-column>
+ <el-table-column prop="idcard" label="韬唤璇佸彿" min-width="160px"></el-table-column>
+ <el-table-column label="璐︽埛浣欓" min-width="100px">
+ <template slot-scope="{row}">楼{{ (row.memberAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column prop="carCode" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="160px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="100" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaDriverDetail ref="operaDriverDetail" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDriverDetail from '@/components/business/OperaDriverDetail'
+import { updateStatus, exportExcel } from '@/api/business/driver'
+
+export default {
+ name: 'DriverList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaDriverDetail },
+ data () {
+ return {
+ searchForm: {
+ keyword: '',
+ carNo: '',
+ status: '',
+ sex: '',
+ createTime: '',
+ startTime: '',
+ endTime: '',
+ auditStatus: 1
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/driver',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleDateChange (val) {
+ this.searchForm.startTime = val ? val[0] : ''
+ this.searchForm.endTime = val ? val[1] : ''
+ this.search()
+ },
+ reset () {
+ this.searchForm = {
+ keyword: '',
+ carNo: '',
+ status: '',
+ sex: '',
+ createTime: '',
+ startTime: '',
+ endTime: ''
+ }
+ this.search()
+ },
+ handleDetail (row) {
+ this.$refs.operaDriverDetail.open('鍙告満璇︽儏', row)
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleExport () {
+ this.isWorking.export = true
+ exportExcel(this.getTableParams())
+ .then(res => {
+ this.download(res)
+ this.$tip.apiSuccess('瀵煎嚭鎴愬姛')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.export = false
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/driverVerification.vue b/admin/src/views/business/driverVerification.vue
new file mode 100644
index 0000000..00678e0
--- /dev/null
+++ b/admin/src/views/business/driverVerification.vue
@@ -0,0 +1,160 @@
+<template>
+ <TableLayout :permissions="['business:driverInfo:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍙告満淇℃伅" prop="keyword">
+ <el-input v-model="searchForm.keyword" clearable placeholder="璇疯緭鍏ュ徃鏈哄鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="杞︾墝鍙�" prop="carNo">
+ <el-input v-model="searchForm.carNo" clearable placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃牳鐘舵��" prop="auditStatus">
+ <el-select v-model="searchForm.auditStatus" clearable placeholder="璇烽�夋嫨鐘舵��" @change="search">
+ <el-option label="寰呭鎵�" :value="0"></el-option>
+ <el-option label="瀹℃壒閫氳繃" :value="1"></el-option>
+ <el-option label="瀹℃壒椹冲洖" :value="2"></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"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <section>
+ <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>
+ <template v-slot:table-wrap>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="name" label="鍙告満濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column label="鎬у埆" min-width="60px">
+ <template slot-scope="{row}">{{ row.gender === 1 ? '鐢�' : row.gender === 2 ? '濂�' : '-' }}</template>
+ </el-table-column>
+ <el-table-column prop="telephone" label="娉ㄥ唽鎵嬫満鍙�" min-width="120px"></el-table-column>
+ <el-table-column prop="idcard" label="韬唤璇佸彿" min-width="160px"></el-table-column>
+ <el-table-column label="濠氬Щ鐘跺喌" min-width="100px">
+ <template slot-scope="{row}">{{ row.maritalStatus === 0 ? '鏈' : row.maritalStatus === 1 ? '宸插' : row.maritalStatus === 2 ? '绂诲紓' : '涓у伓' }}</template>
+ </el-table-column>
+ <el-table-column prop="carCode" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="160px"></el-table-column>
+ <el-table-column label="瀹℃牳鐘舵��">
+ <template slot-scope="{row}">
+ <span style="color: #e6a23c;" v-if="row.auditStatus === 0">寰呭鎵�</span>
+ <span style="color: #13ce66;" v-else-if="row.auditStatus === 1">瀹℃壒閫氳繃</span>
+ <span style="color: #ff4949;" v-else>瀹℃壒椹冲洖</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="100" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaDriverApproval ref="operaDriverApproval" @success="handleApprovalSuccess" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDriverApproval from '@/components/business/OperaDriverApproval'
+import { updateStatus, exportExcel } from '@/api/business/driver'
+
+export default {
+ name: 'DriverVerification',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaDriverApproval },
+ data () {
+ return {
+ searchForm: {
+ keyword: '',
+ carNo: '',
+ auditStatus: '',
+ sex: '',
+ createTime: '',
+ startTime: '',
+ endTime: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/driver',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleDateChange (val) {
+ this.searchForm.startTime = val ? val[0] : ''
+ this.searchForm.endTime = val ? val[1] : ''
+ this.search()
+ },
+ reset () {
+ this.searchForm = {
+ keyword: '',
+ carNo: '',
+ status: '',
+ sex: '',
+ createTime: '',
+ startTime: '',
+ endTime: ''
+ }
+ this.search()
+ },
+ handleDetail (row) {
+ this.$refs.operaDriverApproval.open('鍙告満瀹℃牳', row)
+ },
+ handleApprovalSuccess (data) {
+ this.$tip.apiSuccess('瀹℃牳鎻愪氦鎴愬姛')
+ this.search()
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleExport () {
+ this.isWorking.export = true
+ exportExcel(this.getTableParams())
+ .then(res => {
+ this.download(res)
+ this.$tip.apiSuccess('瀵煎嚭鎴愬姛')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.export = false
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/goodsCategoryList.vue b/admin/src/views/business/goodsCategoryList.vue
new file mode 100644
index 0000000..d09308c
--- /dev/null
+++ b/admin/src/views/business/goodsCategoryList.vue
@@ -0,0 +1,96 @@
+<template>
+ <TableLayout :permissions="['business:category:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary" @click="$refs.operaGoodsCategoryEditWindow.open('鏂板缓鐗╁搧鍒嗙被', null, 2)" icon="el-icon-plus">鏂板缓</el-button></li>
+ </ul>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="id" label="ID" min-width="80px"></el-table-column>
+ <el-table-column prop="name" label="鐗╁搧鍚嶇О" min-width="120px"></el-table-column>
+ <el-table-column prop="detail" label="瀵勫瓨璇存槑" min-width="200px"></el-table-column>
+ <el-table-column prop="sortnum" label="鍒嗙被鎺掑簭" min-width="100px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="150" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row.id)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaGoodsCategoryEditWindow ref="operaGoodsCategoryEditWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaGoodsCategoryEditWindow from '@/components/business/OperaGoodsCategoryEditWindow'
+import { fetchList, updateStatus, deleteById } from '@/api/business/goodsCategory'
+
+export default {
+ name: 'GoodsCategoryList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaGoodsCategoryEditWindow },
+ data () {
+ return {
+ searchForm: {
+ name: '',
+ status: '',
+ type: 2
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/goodsCategory',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleEdit (row) {
+ this.$refs.operaGoodsCategoryEditWindow.open('缂栬緫鐗╁搧鍒嗙被', row, 2)
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/itemLevel.vue b/admin/src/views/business/itemLevel.vue
new file mode 100644
index 0000000..65a47b6
--- /dev/null
+++ b/admin/src/views/business/itemLevel.vue
@@ -0,0 +1,96 @@
+<template>
+ <TableLayout :permissions="['business:category:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary" @click="$refs.operaGoodsCategoryEditWindow.open('鏂板缓鐗╁搧绛夌骇', null, 3)" icon="el-icon-plus">鏂板缓</el-button></li>
+ </ul>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="id" label="ID" min-width="80px"></el-table-column>
+ <el-table-column prop="name" label="绛夌骇鍚嶇О" min-width="120px"></el-table-column>
+ <el-table-column prop="detail" label="澶囨敞璇存槑" min-width="200px"></el-table-column>
+ <el-table-column prop="sortnum" label="鎺掑簭" min-width="100px"></el-table-column>
+ <el-table-column prop="createTime" label="鎻愪氦鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="150" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row.id)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaGoodsCategoryEditWindow ref="operaGoodsCategoryEditWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaGoodsCategoryEditWindow from '@/components/business/OperaGoodsCategoryEditWindow'
+import { updateStatus } from '@/api/business/goodsCategory'
+
+export default {
+ name: 'ItemLevelList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaGoodsCategoryEditWindow },
+ data () {
+ return {
+ searchForm: {
+ name: '',
+ type: 3
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/goodsCategory',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleEdit (row) {
+ this.$refs.operaGoodsCategoryEditWindow.open('缂栬緫鐗╁搧绛夌骇', row, 3)
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/memberList.vue b/admin/src/views/business/memberList.vue
new file mode 100644
index 0000000..ea79fa8
--- /dev/null
+++ b/admin/src/views/business/memberList.vue
@@ -0,0 +1,105 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="浼氬憳淇℃伅" prop="keyword">
+ <el-input v-model="searchForm.keyword" clearable placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨鐘舵��" @change="search">
+ <el-option label="姝e父" :value="0"></el-option>
+ <el-option label="鍋滅敤" :value="1"></el-option>
+ <el-option label="宸叉敞閿�" :value="2"></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"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <section>
+ <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>
+ <template v-slot:table-wrap>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="nickName" label="鐢ㄦ埛鏄电О" min-width="120px"></el-table-column>
+ <el-table-column prop="name" label="浼氬憳濮撳悕" min-width="120px"></el-table-column>
+ <el-table-column prop="telephone" label="鎺堟潈鎵嬫満鍙�" min-width="130px"></el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="160px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ {{ row.status === 0 ? '姝e父' : row.status === 1 ? '鍋滅敤' : '宸叉敞閿�' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="100" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaMemberDetailWindow ref="operaMemberDetailWindow" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaMemberDetailWindow from '@/components/business/OperaMemberDetail'
+
+export default {
+ name: 'MemberList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaMemberDetailWindow },
+ data () {
+ return {
+ searchForm: {
+ keyword: '',
+ status: '',
+ createTime: '',
+ startTime: '',
+ endTime: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/memberManage',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleDateChange (val) {
+ this.searchForm.startTime = val ? val[0] : ''
+ this.searchForm.endTime = val ? val[1] : ''
+ this.search()
+ },
+ reset () {
+ this.searchForm = {
+ keyword: '',
+ status: '',
+ createTime: '',
+ startTime: '',
+ endTime: ''
+ }
+ this.search()
+ },
+ handleDetail (row) {
+ this.$refs.operaMemberDetailWindow.open('浼氬憳璇︽儏', row)
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/memberManage.vue b/admin/src/views/business/memberManage.vue
new file mode 100644
index 0000000..bcb2923
--- /dev/null
+++ b/admin/src/views/business/memberManage.vue
@@ -0,0 +1,149 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="浼氬憳淇℃伅" prop="keyword">
+ <el-input v-model="searchForm.keyword" clearable placeholder="璇疯緭鍏ョ敤鎴锋樀绉�/浼氬憳濮撳悕/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨鐘舵��" @change="search">
+ <el-option label="绂佺敤" :value="0"></el-option>
+ <el-option label="鍚敤" :value="1"></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"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ <el-button :loading="isWorking.export" @click="handleExport">瀵煎嚭</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="nickName" label="鐢ㄦ埛鏄电О" min-width="120px"></el-table-column>
+ <el-table-column prop="name" label="浼氬憳濮撳悕" min-width="120px"></el-table-column>
+ <el-table-column prop="phone" label="鎺堟潈鎵嬫満鍙�" min-width="130px"></el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="160px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="100" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)">璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaMemberDetail ref="operaMemberDetail" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaMemberDetail from '@/components/business/OperaMemberDetail'
+import { fetchList, updateStatus, exportExcel } from '@/api/business/memberManage'
+
+export default {
+ name: 'MemberManage',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaMemberDetail },
+ data () {
+ return {
+ searchForm: {
+ keyword: '',
+ status: '',
+ createTime: '',
+ createStartTime: '',
+ createEndTime: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/member',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ loadTableData (resolve) {
+ this.isWorking.search = true
+ fetchList(this.getTableParams())
+ .then(data => {
+ this.tableData.list = data.list || []
+ this.tableData.pagination.total = data.total || 0
+ if (resolve) resolve(data)
+ })
+ .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 = {
+ keyword: '',
+ status: '',
+ createTime: '',
+ createStartTime: '',
+ createEndTime: ''
+ }
+ this.search()
+ },
+ handleDetail (row) {
+ this.$refs.operaMemberDetail.open('浼氬憳璇︽儏', row)
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleExport () {
+ this.isWorking.export = true
+ exportExcel(this.getTableParams())
+ .then(res => {
+ this.download(res)
+ this.$tip.apiSuccess('瀵煎嚭鎴愬姛')
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking.export = false
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/orderManagement.vue b/admin/src/views/business/orderManagement.vue
new file mode 100644
index 0000000..94ecf6f
--- /dev/null
+++ b/admin/src/views/business/orderManagement.vue
@@ -0,0 +1,190 @@
+<template>
+ <TableLayout :permissions="['business:orders:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="璁㈠崟缂栧彿" prop="code">
+ <el-input v-model="searchForm.code" clearable placeholder="璇疯緭鍏ヨ鍗曠紪鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鐗╁搧淇℃伅" prop="goodsInfo">
+ <el-input v-model="searchForm.goodsInfo" clearable placeholder="璇疯緭鍏ョ墿鍝佷俊鎭�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <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>
+ <el-form-item label="瀵勪欢闂ㄥ簵" prop="depositShopName">
+ <el-input v-model="searchForm.depositShopName" clearable placeholder="璇疯緭鍏ュ瘎浠堕棬搴�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鏀朵欢闂ㄥ簵" prop="takeShopName">
+ <el-input v-model="searchForm.takeShopName" clearable placeholder="璇疯緭鍏ユ敹浠堕棬搴�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="绫诲瀷" prop="type">
+ <el-select v-model="searchForm.type" clearable placeholder="璇烽�夋嫨绫诲瀷" @change="search">
+ <el-option label="灏卞湴瀛樺彇" :value="0"></el-option>
+ <el-option label="寮傚湴瀛樺彇" :value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璁㈠崟鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨璁㈠崟鐘舵��" @change="search">
+ <el-option label="鍏ㄩ儴" value=""></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="6"></el-option>
+ <el-option label="宸插畬鎴�" :value="7"></el-option>
+ <el-option label="璁㈠崟鍏抽棴锛堥��娆撅級" :value="96"></el-option>
+ <el-option label="鍙栨秷閫炬湡" :value="97"></el-option>
+ <el-option label="鍙栨秷涓�" :value="98"></el-option>
+ <el-option label="宸插彇娑�" :value="99"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="缁撶畻鐘舵��" prop="settlementStatus">
+ <el-select v-model="searchForm.settlementStatus" 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-button @click="reset">閲嶇疆</el-button>
+ <el-button :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="code" label="璁㈠崟缂栧彿" min-width="150px">
+ <template slot-scope="{row}">
+ <span class="order-no" @click="handleOrderDetail(row)">{{ row.code }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="goodsInfo" label="鐗╁搧淇℃伅" min-width="120px"></el-table-column>
+ <el-table-column label="绫诲瀷" min-width="80px">
+ <template slot-scope="{row}">
+ <span v-if="row.type === 0">灏卞湴瀛樺彇</span>
+ <span v-else-if="row.type === 1">寮傚湴瀛樺彇</span>
+ <span v-else>-</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="orderLevel" label="璁㈠崟绾у埆" min-width="80px"></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}">楼{{ (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 label="寮傚父閲戦" min-width="100px">
+ <template slot-scope="{row}">楼{{ (row.exceptionAmount / 100).toFixed(2) }}</template>
+ </el-table-column>
+ <el-table-column label="缁撶畻鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span :style="{ color: row.settlementStatus === 1 ? '#67c23a' : '#e6a23c' }">
+ {{ row.settlementStatus === 1 ? '宸茬粨绠�' : '鏈粨绠�' }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="120" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDispatch(row)">鎵嬪姩娲惧崟</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaDispatch ref="operaDispatch" />
+ <OperaOrderDetail ref="operaOrderDetail" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDispatch from '@/components/business/OperaDispatch'
+import OperaOrderDetail from '@/components/business/OperaOrderDetail'
+export default {
+ name: 'OrderManagement',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaDispatch, OperaOrderDetail },
+ data () {
+ return {
+ searchForm: {
+ code: '',
+ goodsInfo: '',
+ createTime1: '',
+ createStartTime: '',
+ createEndTime: '',
+ depositShopName: '',
+ takeShopName: '',
+ type: '',
+ status: '',
+ settlementStatus: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/orderManagement',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleDateChange (val) {
+ this.searchForm.createStartTime = val ? val[0] : ''
+ this.searchForm.createEndTime = val ? val[1] : ''
+ this.search()
+ },
+ reset () {
+ this.searchForm = {
+ orderNo: '',
+ goodsInfo: '',
+ createTime1: '',
+ createStartTime: '',
+ createEndTime: '',
+ sendShopName: '',
+ receiveShopName: '',
+ type: '',
+ orderStatus: '',
+ settleStatus: ''
+ }
+ this.search()
+ },
+ handleDispatch (row) {
+ this.$refs.operaDispatch.open(row)
+ },
+ handleOrderDetail (row) {
+ this.$refs.operaOrderDetail.open(row)
+ }
+ }
+}
+</script>
+<style scoped>
+.order-no {
+ color: #2E68EC;
+ text-decoration: underline;
+ cursor: pointer;
+}
+</style>
diff --git a/admin/src/views/business/shopQualificationList.vue b/admin/src/views/business/shopQualificationList.vue
new file mode 100644
index 0000000..44c62c9
--- /dev/null
+++ b/admin/src/views/business/shopQualificationList.vue
@@ -0,0 +1,155 @@
+<template>
+ <TableLayout :permissions="['business:shopInfo:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="闂ㄥ簵鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ラ棬搴楀悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="绫诲瀷" prop="companyType">
+ <el-select v-model="searchForm.companyType" clearable placeholder="璇烽�夋嫨绫诲瀷" @change="search">
+ <el-option label="浼佷笟" :value="1"></el-option>
+ <el-option label="涓汉" :value="0"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="闂ㄥ簵鍦板潃" prop="address">
+ <el-input v-model="searchForm.address" clearable placeholder="璇疯緭鍏ラ棬搴楀湴鍧�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鑱旂郴浜�" prop="linkName">
+ <el-input v-model="searchForm.linkName" clearable placeholder="璇疯緭鍏ヨ仈绯讳汉" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鑱旂郴鐢佃瘽" prop="linkPhone">
+ <el-input v-model="searchForm.linkPhone" clearable placeholder="璇疯緭鍏ヨ仈绯荤數璇�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎻愪氦鏃堕棿" prop="createTime">
+ <el-date-picker type="daterange" v-model="searchForm.createTime" clearable value-format="yyyy-MM-dd"
+ range-separator="-" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" @change="handleDateChange" />
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="auditStatus">
+ <el-select v-model="searchForm.auditStatus" clearable placeholder="璇烽�夋嫨鐘舵��" @change="search">
+ <el-option label="寰呭鎵�" :value="0"></el-option>
+ <el-option label="瀹℃壒閫氳繃" :value="1"></el-option>
+ <el-option label="瀹℃壒鏈�氳繃" :value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="闂ㄥ簵鍚嶇О" min-width="120px">
+ <template slot-scope="{row}">
+ <span class="link-name" @click="openShopInfo(row)">{{ row.name }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="companyType" label="绫诲瀷" min-width="80px">
+ <template slot-scope="{row}">
+ {{row.companyType == 1 ? '浼佷笟' : '涓汉'}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="address" label="闂ㄥ簵鍦板潃" min-width="200px"></el-table-column>
+ <el-table-column prop="linkName" label="鑱旂郴浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="linkPhone" label="鑱旂郴鐢佃瘽" min-width="120px"></el-table-column>
+ <el-table-column prop="createTime" label="鎻愪氦鏃ユ湡" min-width="160px"></el-table-column>
+ <el-table-column label="瀹℃壒鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span style="color: yellow;" v-if="row.auditStatus == 0">寰呭鎵�</span>
+ <span style="color: #13ce66;" v-else-if="row.auditStatus == 1">瀹℃壒閫氳繃</span>
+ <span style="color: #ff4949;" v-else-if="row.auditStatus == 2">瀹℃壒鏈�氳繃</span>
+ <span style="color: #13ce66;" v-else-if="row.auditStatus == 3">宸叉敮浠樻娂閲�</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="150" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" v-if="row.auditStatus == 0" @click="handleAudit(row)">瀹℃牳</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 闂ㄥ簵璇︽儏 -->
+ <OperaShopInfoSeeWindow ref="operaShopInfoSeeWindow" />
+ <OperaShopApprovalWindow ref="operaShopApprovalWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaShopInfoSeeWindow from '@/components/business/OperaShopInfoSeeWindow'
+import OperaShopApprovalWindow from '@/components/business/OperaShopApprovalWindow'
+
+export default {
+ name: 'ShopQualificationList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaShopInfoSeeWindow, OperaShopApprovalWindow },
+ data () {
+ return {
+ searchForm: {
+ name: '',
+ companyType: '',
+ address: '',
+ linkName: '',
+ linkPhone: '',
+ createTime: '',
+ createStartTime: '',
+ createEndTime: '',
+ auditStatusList: [0,1,2]
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '闂ㄥ簵鍒楄〃',
+ api: '/business/shopInfo',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ reset () {
+ this.searchForm = {
+ name: '',
+ companyType: '',
+ address: '',
+ linkName: '',
+ linkPhone: '',
+ createTime: '',
+ status: ''
+ }
+ this.search()
+ },
+ handleDateChange (val) {
+ this.searchForm.createStartTime = val ? val[0] : ''
+ this.searchForm.createEndTime = val ? val[1] : ''
+ },
+ handleAudit (row) {
+ this.$refs.operaShopApprovalWindow.open('闂ㄥ簵瀹℃壒', row)
+ },
+ openShopInfo (row) {
+ this.$refs.operaShopInfoSeeWindow.open('闂ㄥ簵淇℃伅', row)
+ }
+ }
+}
+</script>
+<style scoped>
+.link-name {
+ color: #2E68EC;
+ text-decoration: underline;
+ cursor: pointer;
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/views/business/shopWithdrawList.vue b/admin/src/views/business/shopWithdrawList.vue
new file mode 100644
index 0000000..da28849
--- /dev/null
+++ b/admin/src/views/business/shopWithdrawList.vue
@@ -0,0 +1,156 @@
+<template>
+ <TableLayout :permissions="['business:withdrawalorders:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="闂ㄥ簵鍚嶇О" prop="shopName">
+ <el-input v-model="searchForm.shopName" clearable placeholder="璇疯緭鍏ラ棬搴楀悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <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>
+ <el-form-item label="瀹℃壒鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨鐘舵��" @change="search">
+ <el-option label="鎻愮幇鐢宠涓�" :value="0"></el-option>
+ <el-option label="鎻愮幇鎴愬姛" :value="1"></el-option>
+ <el-option label="鎻愮幇澶辫触" :value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <div class="total-amount">
+ <span>绱鎻愮幇锛毬{ totalAmount }}</span>
+ </div>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="shopName" label="闂ㄥ簵鍚嶇О" min-width="120px"></el-table-column>
+ <el-table-column prop="linkName" label="闂ㄥ簵鑱旂郴浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="amount" label="鎻愮幇閲戦锛堝厓锛�" min-width="120px">
+ <template slot-scope="{row}">
+ <span class="amount">楼{{ row.amount / 100 }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createTime" label="鐢宠鏃堕棿" min-width="160px"></el-table-column>
+ <el-table-column label="瀹℃牳鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span :style="{ color: getStatusColor(row.status) }">
+ {{ getStatusText(row.status) }}
+ </span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="100" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleView(row)">鏌ョ湅</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaWithdrawDetailWindow ref="operaWithdrawDetailWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaWithdrawDetailWindow from '@/components/business/OperaWithdrawDetailWindow'
+import { fetchList, getTotalAmount } from '@/api/business/shopWithdraw'
+
+export default {
+ name: 'ShopWithdrawList',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaWithdrawDetailWindow },
+ data () {
+ return {
+ totalAmount: '0.00',
+ searchForm: {
+ shopName: '',
+ createTime1: '',
+ createStartTime: '',
+ createEndTime: '',
+ status: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/shopWithdraw',
+ 'field.id': 'id'
+ })
+ this.loadTotalAmount()
+ this.search()
+ },
+ methods: {
+ loadTotalAmount () {
+ getTotalAmount({
+ capacity: 99999,
+ pageNum: 1,
+ model: {
+ shopName: this.searchForm.shopName,
+ createStartTime: this.searchForm.createStartTime,
+ createEndTime: this.searchForm.createEndTime,
+ status: this.searchForm.status
+ }
+ }).then(res => {
+ this.totalAmount = res / 100 || '0.00'
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ getStatusText (status) {
+ const map = { 0: '鎻愮幇鐢宠涓�', 1: '鎻愮幇鎴愬姛', 2: '鎻愮幇澶辫触' }
+ return map[status] || '-'
+ },
+ getStatusColor (status) {
+ const map = { 0: '#E6A23C', 1: '#67C23A', 2: '#F56C6C' }
+ return map[status] || '#606266'
+ },
+ handleDateChange (val) {
+ this.searchForm.createStartTime = val ? val[0] : ''
+ this.searchForm.createEndTime = val ? val[1] : ''
+ this.search()
+ },
+ reset () {
+ this.searchForm = {
+ shopName: '',
+ createTime1: '',
+ createStartTime: '',
+ createEndTime: '',
+ auditStatus: ''
+ }
+ this.search()
+ },
+ handleView (row) {
+ this.$refs.operaWithdrawDetailWindow.open('鎻愮幇璇︽儏', row)
+ }
+ }
+}
+</script>
+
+<style scoped>
+.total-amount {
+ padding: 15px 20px;
+ background: #f5f7fa;
+ border-radius: 8px;
+ margin-bottom: 15px;
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+}
+.amount {
+ color: #f56c6c;
+ font-weight: bold;
+}
+</style>
diff --git a/admin/src/views/business/storeList.vue b/admin/src/views/business/storeList.vue
index 5d5dd4e..f60485d 100644
--- a/admin/src/views/business/storeList.vue
+++ b/admin/src/views/business/storeList.vue
@@ -108,7 +108,7 @@
createTime: '',
createStartTime: '',
createEndTime: '',
- auditStatus: ''
+ auditStatus: 3
}
}
},
@@ -130,7 +130,8 @@
linkName: '',
linkPhone: '',
createTime: '',
- status: ''
+ status: '',
+ auditStatus: 3
}
this.search()
},
diff --git a/admin/src/views/business/sysParams.vue b/admin/src/views/business/sysParams.vue
new file mode 100644
index 0000000..5fbf631
--- /dev/null
+++ b/admin/src/views/business/sysParams.vue
@@ -0,0 +1,169 @@
+<template>
+ <TableLayout>
+ <template v-slot:table-wrap>
+ <div class="params-container">
+ <div class="section">
+ <h3 class="section-title">鍙告満瑙勫垯</h3>
+ <div class="form-item">
+ <span class="label">鍙告満姣忔棩鍙彇娑堣鍗曟鏁颁负</span>
+ <el-input-number v-model="form.driverDailyCancelLimit" :min="0" controls-position="right"></el-input-number>
+ <span class="label">娆★紝瓒呰繃娆℃暟鍚庯紝浠婃棩涓嶅彲鎶㈠崟</span>
+ </div>
+ <div class="form-item">
+ <span class="label">鍙告満鏈�澶у悓鏃惰繘琛屼腑璁㈠崟鏁伴噺涓�</span>
+ <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
+ <span class="label">涓紝瓒呰繃璇ユ暟閲忎笉鍏佽鎶㈠崟<span class="red">锛堝嵆璁㈠崟鐘舵��=寰呭彇浠�/閰嶉�佷腑锛�</span></span>
+ </div>
+ <div class="form-item">
+ <span class="label">瀹㈡埛涓嬪崟鍚庢瘡闅�</span>
+ <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
+ <span class="label">鍒嗛挓鏈湁鍙告満鎶㈠崟锛岀郴缁熸帹閫佸钩鍙扮鐞嗗憳</span>
+ <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
+ <span class="label">鎻愰啋鍔犳�ユ淳鍗曞鐞嗐��</span>
+ </div>
+ </div>
+
+ <div class="section">
+ <h3 class="section-title">璁㈠崟瑙勫垯</h3>
+ <div class="form-item">
+ <span class="label">瓒呮椂</span>
+ <el-input-number v-model="form.autoCancelTime" :min="0" controls-position="right"></el-input-number>
+ <span class="label">鍒嗛挓鏈敮浠橈紝璁㈠崟鑷姩鍙栨秷</span>
+ </div>
+ <div class="form-item">
+ <span class="label">鎬ラ�熻揪璁㈠崟璁′环绯绘暟</span>
+ <el-input-number v-model="form.urgentCoefficient" :min="0" :precision="2" controls-position="right"></el-input-number>
+ </div>
+ <div class="form-item">
+ <span class="label">鐗╁搧淇濊垂姣斾緥</span>
+ <el-input-number v-model="form.insuranceRate" :min="0" :precision="2" controls-position="right"></el-input-number>
+ <span class="desc">%</span>
+ </div>
+ <div class="form-item">
+ <span class="label">寮傚湴瀵勯�佹ā寮忎笅锛岃嫢鐗╁搧宸查�佽揪锛岃�屽鎴峰綋澶╂湭鍙栦欢锛屽垯鍚庣画绯荤粺鎸�</span>
+ <el-input-number v-model="form.unpickedDiscount" :min="0" :precision="2" controls-position="right"></el-input-number>
+ <span class="desc">鎶樻墸绯绘暟璁$畻</span>
+ </div>
+ <div class="form-item">
+ <span class="label">璁㈠崟閫佽揪鍚庨粯璁�</span>
+ <el-input-number v-model="form.autoConfirmReceipt" :min="0" controls-position="right"></el-input-number>
+ <span class="label">澶╁悗鑷姩纭鏀惰揣<span class="red">锛堜粎闄愭敹浠跺湴鍧�涓嶆槸鏈嶅姟鐐圭殑鎯呭喌锛�</span></span>
+ </div>
+ <div class="form-item">
+ <span class="label">璁㈠崟瀹屾垚鍚�</span>
+ <el-input-number v-model="form.settlementDate" :min="0" controls-position="right"></el-input-number>
+ <span class="label">澶╁悗绯荤粺缁撶畻璁㈠崟锛屽苟缁欎笌鍙備笌瑙掕壊鎸夋瘮渚嬪垎鎴�</span>
+ </div>
+ </div>
+
+ <div class="footer">
+ <el-button type="primary" @click="handleSave" :loading="isWorking.save">淇濆瓨</el-button>
+ </div>
+ </div>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import TableLayout from '@/layouts/TableLayout'
+import { getParams, saveParams } from '@/api/business/sysParams'
+
+export default {
+ name: 'SysParams',
+ components: { TableLayout },
+ data () {
+ return {
+ form: {
+ autoCancelTime: '',
+ autoConfirmReceipt: '',
+ driverDailyCancelLimit: '',
+ insuranceRate: '',
+ orderAcceptLimit: '',
+ settlementDate: '',
+ unpickedDiscount: '',
+ urgentCoefficient: ''
+ },
+ isWorking: {
+ save: false
+ }
+ }
+ },
+ created () {
+ this.loadData()
+ },
+ methods: {
+ loadData () {
+ getParams().then(res => {
+ this.form = {
+ autoCancelTime: res.autoCancelTime || '',
+ autoConfirmReceipt: res.autoConfirmReceipt || '',
+ driverDailyCancelLimit: res.driverDailyCancelLimit || '',
+ insuranceRate: res.insuranceRate || '',
+ orderAcceptLimit: res.orderAcceptLimit || '',
+ settlementDate: res.settlementDate || '',
+ unpickedDiscount: res.unpickedDiscount || '',
+ urgentCoefficient: res.urgentCoefficient || ''
+ }
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ },
+ handleSave () {
+ this.isWorking.save = true
+ saveParams(this.form).then(res => {
+ this.$tip.apiSuccess(res || '淇濆瓨鎴愬姛')
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ }).finally(() => {
+ this.isWorking.save = false
+ })
+ }
+ }
+}
+</script>
+
+<style scoped>
+.params-container {
+ padding: 20px;
+}
+.section {
+ margin-bottom: 40px;
+}
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 20px;
+ padding-left: 10px;
+ border-left: 4px solid #2E68EC;
+}
+.form-item {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ flex-wrap: wrap;
+}
+.form-item .label {
+ color: #606266;
+ font-size: 14px;
+ white-space: nowrap;
+}
+.form-item .desc {
+ color: #909399;
+ font-size: 14px;
+ margin-left: 10px;
+}
+.form-item .red {
+ color: #f56c6c;
+}
+.form-item /deep/ .el-input-number {
+ margin: 0 10px;
+}
+.form-item /deep/ .el-input-number .el-input__inner {
+ text-align: center;
+}
+.footer {
+ padding-top: 20px;
+ border-top: 1px solid #eee;
+}
+</style>
diff --git a/admin/src/views/business/vehicleType.vue b/admin/src/views/business/vehicleType.vue
new file mode 100644
index 0000000..c28dab4
--- /dev/null
+++ b/admin/src/views/business/vehicleType.vue
@@ -0,0 +1,99 @@
+<template>
+ <TableLayout :permissions="['business:category:query']">
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary" @click="$refs.operaGoodsCategoryEditWindow.open('鏂板缓鐗╁搧绛夌骇', null, 1)" icon="el-icon-plus">鏂板缓</el-button></li>
+ </ul>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="id" label="ID" min-width="80px"></el-table-column>
+ <el-table-column prop="name" label="绫诲瀷鍚嶇О" min-width="120px"></el-table-column>
+ <el-table-column prop="detail" label="閫氳鏂瑰紡" min-width="200px">
+ <template slot-scope="{row}">
+ {{ row.otherField === 'driving' ? '鏈哄姩杞�' : '闈炴満鍔ㄨ溅' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="sortnum" label="鍒嗙被鎺掑簭" min-width="100px"></el-table-column>
+ <el-table-column label="鐘舵��" min-width="80px">
+ <template slot-scope="{row}">
+ <el-switch
+ @change="handleStatusChange($event, row)"
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="0"
+ :inactive-value="1"
+ ></el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="150" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row.id)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ ></pagination>
+ </template>
+ <OperaGoodsCategoryEditWindow ref="operaGoodsCategoryEditWindow" @success="search" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaGoodsCategoryEditWindow from '@/components/business/OperaGoodsCategoryEditWindow'
+import { updateStatus } from '@/api/business/goodsCategory'
+
+export default {
+ name: 'VehicleType',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaGoodsCategoryEditWindow },
+ data () {
+ return {
+ searchForm: {
+ name: '',
+ type: 1
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/goodsCategory',
+ 'field.id': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ handleEdit (row) {
+ this.$refs.operaGoodsCategoryEditWindow.open('缂栬緫鐗╁搧绛夌骇', row, 1)
+ },
+ handleStatusChange (val, row) {
+ updateStatus({ id: row.id, status: val }).then(res => {
+ this.$tip.apiSuccess(res || '淇敼鎴愬姛')
+ }).catch(e => {
+ row.status = val === 1 ? 0 : 1
+ this.$tip.apiFailed(e)
+ })
+ }
+ }
+}
+</script>
diff --git a/small-program/main.js b/small-program/main.js
index a7204b7..32f5de1 100644
--- a/small-program/main.js
+++ b/small-program/main.js
@@ -14,13 +14,9 @@
Vue.prototype.$isResolve = resolve;
})
-// Vue.prototype.$baseUrl = 'http://192.168.1.54:10011/'
-// Vue.prototype.$baseUrl = 'http://192.168.1.54:10011/'
-
// Vue.prototype.$baseUrl = 'https://test.doumee.cn/jinkuai_web/'
Vue.prototype.$baseUrl = 'https://jinkuai.832smartfarm.com/jinkuai_web/'
-import shareMixin from '@/utils/shareMixin'
-Vue.mixin(shareMixin)
+
const app = new Vue({
store,
...App
diff --git a/small-program/pages.json b/small-program/pages.json
index 6b9adf1..aa1d901 100644
--- a/small-program/pages.json
+++ b/small-program/pages.json
@@ -11,13 +11,6 @@
}
},
{
- "path": "pages/demand-hall/demand-hall",
- "style": {
- "navigationBarTitleText": "鎴戠殑璁㈠崟",
- "navigationStyle": "custom"
- }
- },
- {
"path": "pages/mine/mine",
"style": {
"navigationBarTitleText": "鎴戠殑",
@@ -25,137 +18,18 @@
}
},
{
- "path": "pages/seleCity/seleCity",
+ "path": "pages/itinerary/itinerary",
"style": {
- "navigationBarTitleText": "鍩庡競閫夋嫨"
+ "navigationBarTitleText": ""
}
},
{
- "path" : "pages/using-workers/using-workers",
- "style" :
- {
- "navigationBarTitleText" : "閲囨憳宸�"
- }
- },
- {
- "path" : "pages/sorting/sorting",
- "style" :
- {
- "navigationBarTitleText" : "鍒嗘嫞宸�"
- }
- },
- {
- "path" : "pages/packaging-worker/packaging-worker",
- "style" :
- {
- "navigationBarTitleText" : "鍖呰宸�"
- }
- },
- {
- "path" : "pages/success/success",
- "style" :
- {
- "navigationBarTitleText" : "鍙戝崟鎴愬姛"
- }
- },
- {
- "path" : "pages/freight/freight",
- "style" :
- {
- "navigationBarTitleText" : "杩愯揣"
- }
- },
- {
- "path" : "pages/order-details/order-details",
- "style" :
- {
- "navigationBarTitleText" : "璁㈠崟璇︽儏"
- }
- },
- {
- "path" : "pages/freight-order/freight-order",
- "style" :
- {
- "navigationBarTitleText" : "璁㈠崟璇︽儏"
- }
- },
- {
- "path" : "pages/order-food/order-food",
- "style" :
- {
- "navigationBarTitleText" : "璁㈠崟璇︽儏"
- }
- },
- {
- "path" : "pages/login/login",
- "style" :
- {
- "navigationBarTitleText" : "鐧诲綍椤�"
- }
- },
- {
- "path" : "pages/balance-details/balance-details",
- "style" :
- {
- "navigationBarTitleText" : "浣欓鏄庣粏"
- }
- },
-
- {
- "path" : "pages/rich-text-page/rich-text-page",
- "style" :
- {
- "navigationBarTitleText" : "瀵屾枃鏈〉闈�"
+ "path": "pages/message/message",
+ "style": {
+ "navigationBarTitleText": "娑堟伅"
}
}
- ],
- "subPackages": [{
- "root": "packageA", // 鍒嗗寘鐨勬牴鐩綍
- "name": "packageA", // 鍒嗗寘鐨勬牴鐩綍
- "pages":[
- {
- "path" : "pages/withdrawal/withdrawal",
- "style" :
- {
- "navigationBarTitleText" : "鎻愮幇"
- }
- },
- {
- "path" : "pages/withdrawal-successful/withdrawal-successful",
- "style" :
- {
- "navigationBarTitleText" : "鎻愮幇鎴愬姛"
- }
- },
- {
- "path" : "pages/set-up/set-up",
- "style" :
- {
- "navigationBarTitleText" : "璁剧疆"
- }
- },
- {
- "path" : "pages/employment-certification/employment-certification",
- "style" :
- {
- "navigationBarTitleText" : "鐢ㄥ伐璁よ瘉"
- }
- },
- {
- "path" : "pages/certification-results/certification-results",
- "style" :
- {
- "navigationBarTitleText" : "璁よ瘉缁撴灉"
- }
- }
- ]
- }],
- "preloadRule":{
- "pages/mine/mine":{
- "network": "all",
- "packages": ["packageA"]
- }
- },
+ ],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "",
@@ -170,15 +44,21 @@
"list": [
{
"pagePath": "pages/index/index",
- "iconPath": "static/icon/nav_home_sel@2x (1).png",
+ "iconPath": "static/icon/nav_home@2x.png",
"selectedIconPath": "static/icon/nav_home_sel@2x.png",
"text": "棣栭〉"
},
{
- "pagePath": "pages/demand-hall/demand-hall",
- "iconPath": "static/icon/nav_order@2x.png",
- "selectedIconPath": "static/icon/nav_order_sel@2x.png",
- "text": "璁㈠崟"
+ "pagePath": "pages/itinerary/itinerary",
+ "iconPath": "static/icon/nav_xingcheng@2x.png",
+ "selectedIconPath": "static/icon/nav_xingcheng_sel@2x.png",
+ "text": "琛岀▼"
+ },
+ {
+ "pagePath": "pages/message/message",
+ "iconPath": "static/icon/nav_xiaoxi@2x.png",
+ "selectedIconPath": "static/icon/nav_xiaoxi_sel@2x.png",
+ "text": "娑堟伅"
},
{
"pagePath": "pages/mine/mine",
diff --git a/small-program/pages/balance-details/balance-details.vue b/small-program/pages/balance-details/balance-details.vue
deleted file mode 100644
index 7cabd71..0000000
--- a/small-program/pages/balance-details/balance-details.vue
+++ /dev/null
@@ -1,218 +0,0 @@
-<template>
- <view class="mx">
- <view class="index-search" :style="{ top: (statusbarHeight + navHeight) + 'px' }">
- <view :class="item.id === type ? 'index-search-item active' : 'index-search-item'" v-for="(item, index) in list" :key="index" @click="changeType(item.id,item.optType)">
- <text>{{item.name}}</text>
- <view class="index-search-item-x" v-if="item.id === type"></view>
- </view>
- </view>
- <view class="mx-list">
- <view v-if="dataList && dataList.length" class="mx-list-item" v-for="(item, index) in dataList" :key="index">
- <view class="mx-list-item-a">
- <text>{{item.remark || ''}}</text>
- <text>{{((item.optType||1) * (item.amount||0)/100).toFixed(2) }}鍏�</text>
- </view>
- <view class="mx-list-item-b">
- <text>浜ゆ槗鍙凤細{{item.transactionNo || '-'}}</text>
- <text v-if="item.status ==0">宸插埌璐�</text>
- <text v-if="item.status ==1">浜ゆ槗澶辫触</text>
- <text v-if="item.status ==2" class="redtxt">澶勭悊涓�</text>
- </view>
- <view class="mx-list-item-c">
- {{item.createTime}}
- </view>
- </view>
- <view class="mx-list-item-d">
- <text v-if="!hasMore">{{loadTxt}}</text>
- </view>
- </view>
- </view>
-</template>
-
-<script>
- export default {
- data() {
- return {
- type: 1,
- list: [
- { name: '鍏ㄩ儴', id: 1, optType:null },
- { name: '鏀跺叆', id: 2, optType:1 },
- { name: '鏀嚭', id: 3 , optType:-1}
- ],
- searchForm:{
- optType:null
- },
- capacity:10,
- page:1,
- hasMore: true,
- dataList:[],
- changing1:false,
- loadTxt:'宸插姞杞藉叏閮�'
- };
- },
- onReachBottom() {
- if(this.hasMore){
- this.getPageData(this.page+1)
- }
- console.log("鎴戣瑙﹀彂浜�")
- },
- onShow(){
- this.changeType(1,'')
- },
- methods: {
- changeType(id,optType) {
- if(this.changing1){
- return
- }
- this.type = id
- this.searchForm.optType = optType
- this.getPageData(1)
- },
- getPageData(page){
- this.page = page
- if(this.page ==1){
- this.hasMore=true
- this.dataList=[]
- }
- if(this.changing1){
- return
- }
- this.changing1 = true
- var that = this
- var param ={
- capacity:this.capacity,
- page : this.page,
- model:{
- optType:this.searchForm.optType
- }
- }
- that.$u.api.revenuePage(param)
- .then(res =>{
- if(res.code ===200) {
- if(res.data && res.data.records && res.data.records.length && res.data.page == that.page) {
- that.dataList = [...that.dataList,...(res.data.records)]
- }
- if(that.dataList.length == (res.data.total||0)){
- that.hasMore = false
- }
- if(res.data.total ==0){
- that.loadTxt='鏈煡璇㈠埌璁板綍'
- }else{
- that.loadTxt='宸插姞杞藉叏閮�'
- }
- }
- }).finally(() => {
- that.changing1 = false
- })
- }
- }
- }
-</script>
-
-<style lang="scss" scoped>
- .mx {
- width: 100%;
- .mx-list {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- .mx-list-item-d{
- padding: 20px;
- width: 100%;
- text-align: center;
- font-size: 24rpx;
- color: #999999;
- }
- .mx-list-item {
- width: 100%;
- height: 208rpx;
- display: flex;
- flex-direction: column;
- justify-content: space-evenly;
- border-bottom: 1rpx solid #E5E5E5;
-
- .mx-list-item-a {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- &:nth-child(2) {
- font-weight: 600;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .mx-list-item-b {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- }
- }
- .mx-list-item-c {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- }
- }
- }
- .index-search {
- width: 100%;
- height: 100rpx;
- padding: 0 30rpx;
- position: sticky;
- left: 0;
- top: 0;
- z-index: 9;
- box-sizing: border-box;
- background-color: #FFFFFF;
- display: flex;
- align-items: center;
- border-bottom: 1rpx solid #E5E5E5;
- .active {
- text {
- font-weight: 500 !important;
- font-size: 32rpx !important;
- color: #222222 !important;
- }
- }
- .index-search-item {
- flex: 1;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- position: relative;
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #666666;
- }
- .index-search-item-x {
- position: absolute;
- bottom: 0;
- left: 50%;
- transform: translate(-50%, 0);
- width: 40rpx;
- height: 6rpx;
- background: #00BC12;
- border-radius: 3rpx;
- }
- }
- }
- }
- .redtxt{
- color: #FF0000 !important;
- }
-</style>
diff --git a/small-program/pages/demand-hall/demand-hall.vue b/small-program/pages/demand-hall/demand-hall.vue
deleted file mode 100644
index 49f3a7c..0000000
--- a/small-program/pages/demand-hall/demand-hall.vue
+++ /dev/null
@@ -1,867 +0,0 @@
-<template>
- <view class="index">
- <view class="index-j-head">
- <view :style="{ width: '100%', height: statusbarHeight + 'px' }"></view>
- <view class="index-c-title" :style="{ height: navHeight + 'px' }">
- <text>鎴戠殑璁㈠崟</text>
- </view>
- </view>
- <!-- 鏈櫥褰� -->
- <view class="index-wu" v-if="!isLogin">
- <image src="/static/icon/default_login@2x.png" mode="widthFix"></image>
- <text>鎮ㄨ繕娌℃湁鐧诲綍锛岃鐧诲綍鍚庢煡鐪嬭鍗�</text>
- <button @click="toLogin">鐧诲綍</button>
- </view>
-
- <!-- 宸茬櫥闄� -->
- <template v-else>
- <!-- 鍙戝崟鏂� -->
- <view class="index-labs" v-if="typeViewId === 0" :style="{ top: statusbarHeight + navHeight + 'px' }">
- <scroll-view scroll-x class="scroll-view_H" :scroll-into-view="'view'+status">
- <view :class=" item.id === status ? 'index-labs-row active' : 'index-labs-row'" v-for="(item, index) in list1" :id="'view'+item.id" :key="item.id" @click="clickOrderType(item.id)">
- {{item.name}}
- <view class="index-labs-row-x" v-if=" item.id === status"></view>
- </view>
- </scroll-view>
- </view>
- <!-- 鎺ュ崟鏂� -->
- <view class="index-labs" v-if="typeViewId === 1" :style="{ top: statusbarHeight + navHeight + 'px' }">
- <scroll-view scroll-x class="scroll-view_H" :scroll-into-view="'view'+status">
- <view :class=" item.id === status ? 'index-labs-row active' : 'index-labs-row'" v-for="(item, index) in list" :id="'view'+item.id" :key="item.id" @click="clickOrderType(item.id)">
- {{item.name}}
- <view class="index-labs-row-x" v-if=" item.id === status "></view>
- </view>
- </scroll-view>
- </view>
- <!-- 鍙戝崟鏂� -->
- <view class="index-list" v-if="typeViewId === 0">
- <view class="index-list-wu" v-if="orderList.length === 0">
- <text>宸插姞杞藉叏閮ㄦ暟鎹�</text>
- </view>
- <view class="index-list-item" v-for="(item, index) in orderList" :key="index" @click="jumpDesc(item)" v-else>
- <view class="index-list-item-head">
- <view class="index-list-item-head-l">
- <view class="xoam"></view>
- <text v-if="item.type === 0 && item.workType === 0">鐢ㄥ伐鍗� - 閲囨憳宸�</text>
- <text v-else-if="item.type === 0 && item.workType === 1">鐢ㄥ伐鍗� - 鍒嗘嫞宸�</text>
- <text v-else-if="item.type === 0 && item.workType === 2">鐢ㄥ伐鍗� - 鍖呰宸�</text>
- <text v-else-if="item.type === 1">杩愯揣鍗� - {{item.categoryName}}</text>
- <text v-else-if="item.type === 2">璁㈤鍗�</text>
- </view>
- <view class="index-list-item-head-r" v-if="item.status === 0 || item.status === 5">寰呮敮浠�</view>
- <view class="index-list-item-head-r" v-if="item.status === 1">寰呮帴鍗�</view>
- <view class="index-list-item-head-r" v-if="item.status === 2">宸叉帴鍗�</view>
- <view class="index-list-item-head-r" v-if="item.status === 3">杩涜涓�</view>
- <view class="index-list-item-head-r hui" v-if="item.status === 4 && item.commentStatus !== 0">宸插畬鎴�</view>
- <view class="index-list-item-head-r hui" v-if="item.status === 99">宸插彇娑�</view>
- <view class="index-list-item-head-r" v-if="item.status === 4 && item.commentStatus === 0">寰呰瘎浠�</view>
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 0">
- {{item.categoryName}}锝渰{item.priceNum1}}鏂�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 1">
- {{item.categoryName}}锝渰{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 2&& item.carType === 0">
- {{item.categoryName}}锝渰{item.priceNum1}}澶� | {{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 2&& item.carType === 1">
- {{item.categoryName}}锝渰{item.priceNum1}}灏忔椂 | {{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 2&& item.carType === 2">
- {{item.categoryName}}锝渰{item.priceNum1}}鏂� | {{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 1">
- {{item.carUnit}} | {{item.transportTypeName}} | {{item.transportNum}}{{item.transportUnit}}锝滅敤杞{item.priceNum1}}{{item.carType === 0?"澶�":"娆�"}}
- </view>
- <view class="index-list-item-info" v-if="item.type === 2">
- {{item.wayInfoCopy}}
- </view>
- <view class="address" v-if="item.type === 1">
- <view class="address-xian"></view>
- <view class="address-row" v-for="(address, i) in item.wayInfo" :key="i">
- <image src="/static/icon/ic_qidian@2x.png" mode="widthFix" v-if="i === 0"></image>
- <image src="/static/icon/ic_jingguo@2x.png" mode="widthFix" v-else-if="i !== 0 && i !== item.wayInfo.length - 1"></image>
- <image src="/static/icon/ic_zhongdian@2x.png" mode="widthFix" v-else-if="i === item.wayInfo.length - 1"></image>
- <text>{{address.location}}</text>
- </view>
- </view>
- <template v-if="[0, 2].includes(item.type)">
- <view class="index-list-item-dz">
- <image src="/static/icon/order_ic_location@2x.png" mode="widthFix"></image>
- <text>{{item.location}}</text>
- </view>
- <view class="index-list-item-dz">
- <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image>
- <text>{{item.startDate}} 鑷� {{item.endDate}}锛坽{item.totalDays}}澶╋級</text>
- </view>
- </template>
- <view class="index-list-item-price">
- <text v-if="item.status==4 || item.type==2">宸叉敮浠橈細</text>
- <text v-if="item.status!=4&& item.type!=2">棰勪及锛�</text>
- <text>楼{{item.payAccount / 100}}</text>
- </view>
- <view class="eidt">
- <view>
- <view class="eidt-tips" v-if="item.status === 2 && item.isUpdate == 1"><text>宸蹭慨鏀癸紝寰呮帴鍗曟柟纭</text></view>
- <view class="eidt-tips" v-if="item.status === 5">
- <image src="/static/icon/ic_tip@2x.png" mode="widthFix"></image>
- <text>鎺ュ崟鏂瑰凡纭璐圭敤锛岃鏀粯</text>
- </view>
- </view>
- <view class="eidt-right">
- <view class="eidt-close" v-if="[0,1,2].includes(item.status)" @click.stop="orderId = item.id, show = true">鍙栨秷璁㈠崟</view>
- <view class="eidt-phone" v-if="[2].includes(item.status)">鑱旂郴甯堝倕</view>
- <view class="eidt-phone" v-if="item.status === 4 && item.commentStatus === 0">璇勪环璁㈠崟</view>
- <view class="eidt-btn" v-if="[0,1,2].includes(item.status) && item.type !== 2 && item.isUpdate!=1" @click.stop="jumpEdit(item)">淇敼璁㈠崟</view>
- <view class="eidt-btn" v-if="(item.type == 2 && item.status === 0)" @click.stop="jumpDesc(item,1)">缁х画鏀粯</view>
- <!-- <view class="eidt-btn" v-if="item.status === 2" @click.stop="startJobs(item.id)">寮�濮嬩綔涓�</view> -->
- <view class="eidt-btn" v-if="item.type != 2 && item.status === 5" @click.stop="jumpDesc(item,2)">绔嬪嵆鏀粯</view>
- <view class="eidt-btn" v-if="item.type == 2 && item.status === 3" @click.stop="jumpDesc(item)">瀹屾垚浣滀笟</view>
- </view>
- </view>
- </view>
- </view>
- <!-- 鎺ュ崟鏂� -->
- <view class="index-list" v-if="typeViewId === 1">
- <view class="index-list-wu" v-if="orderList.length === 0">
- <text>宸插姞杞藉叏閮ㄦ暟鎹�</text>
- </view>
- <view class="index-list-item" v-for="(item, index) in orderList" :key="index" @click="jumpDesc(item)" v-else>
- <view class="index-list-item-head">
- <view class="index-list-item-head-l">
- <view class="xoam"></view>
- <text v-if="item.type === 0 && item.workType === 0">鐢ㄥ伐鍗� - 閲囨憳宸�</text>
- <text v-else-if="item.type === 0 && item.workType === 1">鐢ㄥ伐鍗� - 鍒嗘嫞宸�</text>
- <text v-else-if="item.type === 0 && item.workType === 2">鐢ㄥ伐鍗� - 鍖呰宸�</text>
- <text v-else-if="item.type === 1">杩愯揣鍗� - {{item.categoryName}}</text>
- <text v-else-if="item.type === 2">璁㈤鍗�</text>
- <view class="tips" v-if="item.acceptType === 1">娲惧崟</view>
- <view class="tips1" v-if="item.acceptType === 0">鎶㈠崟</view>
- </view>
- <view class="index-list-item-head-r" v-if="item.status === 0 || item.status === 5">寰呮敮浠�</view>
- <view class="index-list-item-head-r" v-if="item.status === 2">宸叉帴鍗�</view>
- <view class="index-list-item-head-r" v-if="item.status === 3">杩涜涓�</view>
- <view class="index-list-item-head-r hui" v-if="item.status === 4">宸插畬鎴�</view>
- <view class="index-list-item-head-r hui" v-if="item.status === 99">宸插彇娑�</view>
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 0">
- {{item.categoryName}}锝渰{item.priceNum1}}鏂�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 1">
- {{item.categoryName}}锝渰{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 2&& item.carType === 0">
- {{item.categoryName}}锝渰{item.priceNum1}}澶� 锝渰{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 2&& item.carType === 1">
- {{item.categoryName}}锝渰{item.priceNum1}}灏忔椂 锝渰{item.priceNum2}}浜�
- </view>
- <view class="index-list-item-info" v-if="item.type === 0 && item.workType === 2&& item.carType === 2">
- {{item.categoryName}}锝渰{item.priceNum1}}鏂�
- </view>
- <view class="index-list-item-info" v-if="item.type === 1">
- {{item.carUnit}} | {{item.transportTypeName}} | {{item.transportNum}}{{item.transportUnit}}锝滅敤杞{item.priceNum1}}{{item.carType === 0?"澶�":"娆�"}}
- </view>
- <view class="index-list-item-info" v-if="item.type === 2">
- {{item.wayInfoCopy}}
- </view>
- <view class="address" v-if="item.type === 1">
- <view class="address-xian"></view>
- <view class="address-row" v-for="(address, i) in item.wayInfo" :key="i">
- <image src="/static/icon/ic_qidian@2x.png" mode="widthFix" v-if="i === 0"></image>
- <image src="/static/icon/ic_jingguo@2x.png" mode="widthFix" v-else-if="i !== 0 && i !== item.wayInfo.length - 1"></image>
- <image src="/static/icon/ic_zhongdian@2x.png" mode="widthFix" v-else-if="i === item.wayInfo.length - 1"></image>
- <text>{{address.location}}</text>
- </view>
- </view>
- <template v-if="[0, 2].includes(item.type)">
- <view class="index-list-item-dz">
- <image src="/static/icon/order_ic_location@2x.png" mode="widthFix"></image>
- <text>{{item.location}}</text>
- </view>
- <view class="index-list-item-dz">
- <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image>
- <text>{{item.startDate}} 鑷� {{item.endDate}}锛坽{item.priceNum1}}澶╋級</text>
- </view>
- </template>
- <view class="index-list-item-price">
- <text v-if="item.status==4">宸叉敮浠橈細</text>
- <text v-if="item.status!=4">棰勪及锛�</text>
- <text>楼{{item.payAccount / 100}}</text>
- </view>
- <view class="eidt">
- <view class="eidt-tips" v-if="item.isUpdate === 1">
- <image src="/static/icon/ic_tip@2x.png" mode="widthFix"></image>
- <text>璁㈠崟宸蹭慨鏀�</text>
- </view>
- <view class="eidt-tips" v-else></view>
-
- <view class="eidt-right">
- <view class="eidt-close" v-if="item.status === 2" @click.stop="orderId = item.id, show = true">鍙栨秷璁㈠崟</view>
- <view class="eidt-phone" v-if="[2,3].includes(item.status)" @click.stop="phoneCall(item.linkPhone)">鑱旂郴涓氫富</view>
- </view>
- </view>
- </view>
- </view>
- </template>
-
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 纭鍙栨秷璁㈠崟鍚楋紵
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="cancelOrder">纭鍙栨秷</view>
- </view>
- </u-modal>
-
- </view>
-</template>
-
-<script>
- import { mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['navHeight', 'statusbarHeight','userInfo','token','openid', 'latitude', 'longitude'])
- },
- async onShow(options) {
- var flag = getApp().globalData.orderStatus
- console.log(getApp().globalData,"=====================================")
- // this.status = ''
- // this.commentStatus=''
- // status: this.status === 5 ? 4 : this.status,
- // commentStatus: this.status === 5 ? 0 : '',
- if(flag =='1'){//鍙戝崟鏂瑰緟鎺ュ崟
- this.status = 1
- }else if(flag =='2'){//鍙戝崟鏂硅繘琛屼腑
- this.status = 3
- }else if(flag =='3'){//鍙戝崟鏂瑰緟璇勪环
- this.status = 6
- }else if(flag =='4'){//鎺ュ崟鏂瑰凡鎺ュ崟
- this.status =2
- }else if(flag =='5'){//鎺ュ崟鏂硅繘琛屼腑
- this.status =3
- }else if(flag =='6'){//鎺ュ崟鏂瑰凡瀹屾垚
- this.status =4
- }else if(flag =='0'){
- this.status = -1
- }
- console.log(getApp().globalData,this.status ,"=====================================")
- // this.typeViewId = 0
- if(this.token && this.token != '' && this.userInfo && JSON.stringify(this.userInfo) != '{}'){
- console.log('宸茬櫥闄�')
- this.isLogin = true
- /* this.getOrderList()
- if (!this.isOnce) {
- this.commentStatus = ''
- this.orderList = []
- this.next = true
- this.page = 1
- this.getOrderList()
- } */
- } else {
- this.isLogin = false
- this.typeViewId = 0
- console.log('鏈櫥闄�')
- }
- if(this.isLogin){
- if(this.typeViewId !== this.userInfo.useIdentity || flag !=null){
- this.typeViewId = this.userInfo.useIdentity || 0
- //濡傛灉鍙戠敓
- this.initOrderList()
- }else{
- //濡傛灉鏈彂鐢熷彉鍖栦笉鍒锋柊
- this.typeViewId = this.userInfo.useIdentity || 0
- if(!this.orderList || !this.orderList.length){
- this.initOrderList()
- }else{
- if( this.tempOrderId){
- this.getOrderData()
- }
- }
- console.log('this.tempOrderId',this.tempOrderId)
- }
- }
- getApp().globalData.orderStatus =null
- },
- data() {
- return {
- show: false,
- isLogin: false,
- typeViewId: -1,
- tempOrderId:null,
- list: [
- { name: '鍏ㄩ儴', id: -1 },
- { name: '宸叉帴鍗�', id: 2 },
- { name: '杩涜涓�', id: 3 },
- { name: '寰呮敮浠�', id: 5 },
- { name: '宸插畬鎴�', id: 4 },
- // { name: '宸插彇娑�', id: 99 },
- ],
- list1: [
- { name: '鍏ㄩ儴', id: -1 },
- { name: '寰呮敮浠�', id: 0 },
- { name: '寰呮帴鍗�', id: 1 },
- { name: '宸叉帴鍗�', id: 2 },
- { name: '杩涜涓�', id: 3 },
- { name: '宸插畬鎴�', id: 4 },
- { name: '宸插彇娑�', id: 99 },
- { name: '寰呰瘎浠�', id: 6 }
- ],
- orderId: null,
- status: -1,
- commentStatus: '',
- next: true,
- page: 1,
- orderList: [],
- isOnce: true
- };
- },
- async onLoad() {
- await this.$onLaunched;
- /* uni.$on('refresh', (data) => {
- console.log('鎴戠殑璁㈠崟椤靛埛鏂�');
- this.status = ''
- this.commentStatus = ''
- this.orderList = []
- this.next = true
- this.page = 1
- this.getOrderList()
- }) */
-
- },
- onReachBottom() {
- if(this.isLogin){
- this.getOrderList()
- }
- },
- methods: {
- toLogin() {
- uni.navigateTo({
- url: '/pages/login/login'
- })
- },
- initOrderList() {
- this.commentStatus = ''
- this.orderList = []
- this.next = true
- this.page = 1
- this.getOrderList()
- },
- startJobs(orderId) {
- this.$u.api.begin({ orderId })
- .then(res => {
- if (res.code === 200) {
- this.status = ''
- this.commentStatus = ''
- this.orderList = []
- this.next = true
- this.page = 1
- this.getOrderList()
- }
-
- })
- },
- jumpDesc(item,flag) {
- uni.navigateTo({
- url: `/pages/order-details/order-details?id=${item.id}&flag=${flag}`
- })
- this.tempOrderId = item.id
- },
- // 淇敼
- jumpEdit(item) {
- this.tempOrderId =item.id
- if (item.type === 0 && item.workType === 0) {
- uni.navigateTo({
- url: `/pages/using-workers/using-workers?id=${item.id}`
- })
- } else if (item.type === 0 && item.workType === 1) {
- uni.navigateTo({
- url: `/pages/sorting/sorting?id=${item.id}`
- })
- } else if (item.type === 0 && item.workType === 2) {
- uni.navigateTo({
- url: `/pages/packaging-worker/packaging-worker?id=${item.id}`
- })
- } else if (item.type === 1) {
- uni.navigateTo({
- url: `/pages/freight/freight?id=${item.id}`
- })
- }
- },
- cancelOrder() {
- this.$u.api.cancelOrder({
- orderId: this.orderId
- }).then(res => {
- if (res.code === 200) {
- this.show = false
- this.orderList = []
- this.next = true
- this.page = 1
- this.getOrderList()
- }
- })
- },
- phoneCall(phoneNumber) {
- uni.makePhoneCall({
- phoneNumber
- });
- },
- getOrderData(){
- var that = this
- var param ={ orderId:that.tempOrderId}
- this.$u.api.getDetail(param).then(res =>{
- if(res.code ===200 && res.data){
- var isDel = false
- var tempIndex = -1
- that.orderList.forEach((item,index) =>{
- if(item.id == res.data.id){
- item.status = res.data.status
- item.isUpdate = res.data.isUpdate
- item.commentStatus = res.data.commentStatus
- tempIndex = index
- }
-
- })
- if(tempIndex > -1 ){
- console.log(tempIndex,that.status,res.data.status,"===================")
- if(that.status >=0 ){
- //濡傛灉鏈夋爣绛鹃〉
- if(that.status ===6 && res.data.commentStatus == 1){
- isDel =true
- console.log(tempIndex,that.status,res.data.status,"==================1")
- }else if(that.status !=6 && that.status !== res.data.status){
- isDel =true
- console.log(tempIndex,that.status,res.data.status,"===================2")
- }
- }
- if(isDel){
- console.log(tempIndex,that.status,res.data.status,"===================3")
- that.orderList.splice(tempIndex,1)
- }
- }
- }
- })
- },
- // 璁㈠崟鍒嗛〉
- getOrderList() {
- if (!this.next) return;
- this.$u.api.orderPage({
- capacity: 10,
- page: this.page,
- model: {
- queryMyOrderType: this.userInfo.useIdentity,
- status: this.status === 6 ? 4 : (this.status ==-1?"":this.status),
- commentStatus: this.status === 6 ? 0 : '',
- queryLat: this.latitude,
- queryLgt: this.longitude
- }
- }).then(res => {
- if (res.code !== 200) return;
- this.isOnce = false
- res.data.records.forEach(item => {
- // 璁㈤鍗�
- if (item.type === 2) {
- item.wayInfoCopy = JSON.parse(item.wayInfo).map(item => {
- return `${item.name}${item.price / 100}鍏�(${item.num}浠�)`
- }).join(' | ')
- // 杩愯揣
- } else if (item.type === 1) {
- item.wayInfo = JSON.parse(item.wayInfo)
- }
- })
- this.orderList = [...this.orderList, ...res.data.records]
- if (this.orderList.length >= res.data.total) {
- this.next = false
- } else {
- this.page += 1
- }
- })
- },
- clickOrderType(id) {
- this.commentStatus = ''
- this.status = id
- this.orderList = []
- this.next = true
- this.page = 1
- this.getOrderList()
- }
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7;
- }
-</style>
-
-<style lang="scss" scoped>
- .index {
- width: 100%;
- .slot-content {
- width: 100%;
- text-align: center;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- margin: 30rpx 0;
- }
- .btn1 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 400;
- font-size: 32rpx;
- color: #666666;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .btn2 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- .index-j-head {
- width: 100%;
- background-color: #ffffff;
- position: sticky;
- top: 0;
- left: 0;
- z-index: 9;
- .index-c-title {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- text {
- font-weight: bold;
- font-size: 36rpx;
- color: #111111;
- }
- }
- }
- .index-list {
- width: 100%;
- padding: 20rpx 30rpx;
- box-sizing: border-box;
- .index-list-wu {
- width: 100%;
- margin-top: 40rpx;
- text-align: center;
- text {
- font-size: 24rpx;
- color: #666666;
- }
- }
- .index-list-item {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background: #FFFFFF;
- border-radius: 20rpx;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .eidt {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .eidt-tips {
- flex-shrink: 0;
- display: flex;
- align-items: center;
- image {
- width: 26rpx;
- height: 26rpx;
- margin-right: 12rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #FF0000;
- }
- }
- .eidt-right {
- flex: 1;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- flex-wrap: wrap;
- .eidt-close {
- width: 160rpx;
- height: 64rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- line-height: 64rpx;
- text-align: center;
- border-radius: 34rpx;
- border: 1rpx solid #B2B2B2;
- margin-left: 20rpx;
- }
- .eidt-phone {
- width: 160rpx;
- height: 64rpx;
- line-height: 64rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- border-radius: 34rpx;
- border: 1rpx solid #00BC12;
- margin-left: 20rpx;
- }
- .eidt-btn {
- width: 160rpx;
- height: 64rpx;
- line-height: 64rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 34rpx;
- margin-left: 20rpx;
- }
- }
- }
- .index-list-item-price {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- margin-bottom: 20rpx;
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 26rpx;
- color: #333333;
- }
- &:nth-child(2) {
- font-weight: 600;
- font-size: 36rpx;
- color: #FF0000;
- }
- }
- }
- .index-list-item-dz {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- image {
- width: 32rpx;
- height: 32rpx;
- flex-shrink: 0;
- margin-right: 16rpx;
- }
- text {
- flex: 1;
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- }
- }
- .index-list-item-info {
- font-weight: 400;
- font-size: 28rpx;
- color: #888888;
- margin-bottom: 20rpx;
- }
- .address {
- width: 100%;
- background: #F7F7F7;
- border-radius: 16rpx;
- padding: 30rpx;
- box-sizing: border-box;
- margin-bottom: 24rpx;
- position: relative;
- .address-xian {
- position: absolute;
- top: 17px;
- left: 24px;
- width: 1rpx;
- height: calc(100% - 60rpx);
- border-right: 2rpx dashed #B2B2B2;
- }
- .address-row {
- position: relative;
- z-index: 2;
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- image {
- width: 36rpx;
- height: 36rpx;
- flex-shrink: 0;
- margin-right: 24rpx;
- }
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- }
- }
- }
- .index-list-item-date {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- image {
- flex-shrink: 0;
- width: 28rpx;
- height: 28rpx;
- margin-right: 18rpx;
- }
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- }
- }
- .index-list-item-head {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20rpx;
- .index-list-item-head-l {
- display: flex;
- align-items: center;
- .xoam {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- margin-right: 12rpx;
- }
- .tips {
- padding: 4rpx 12rpx;
- border-radius: 8rpx;
- font-weight: 400;
- font-size: 24rpx;
- color: #00BC12;
- border: 2rpx solid #00BC12;
- }
- .tips1 {
- padding: 4rpx 12rpx;
- border-radius: 8rpx;
- font-weight: 400;
- font-size: 24rpx;
- color: #FD9E24;
- border: 2rpx solid #FD9E24;
- }
- }
- .hui {
- color: #999999 !important;
- }
- .index-list-item-head-r {
- font-weight: 400;
- font-size: 28rpx;
- color: #FF0000;
- }
- }
- }
- }
- .index-labs {
- width: 100%;
- height: 90rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- background: #FFFFFF;
- position: sticky;
- left: 0;
- .scroll-view_H {
- width: 100%;
- height: 100%;
- white-space: nowrap;
- .active {
- font-weight: 500 !important;
- font-size: 32rpx !important;
- color: #00BC12 !important;
- }
- .index-labs-row {
- display: inline-block;
- height: 100%;
- line-height: 90rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #666666;
- position: relative;
- margin-right: 50rpx;
- &:last-child {
- margin: 0 !important;
- }
- .index-labs-row-x {
- position: absolute;
- bottom: 0;
- left: 50%;
- width: 40rpx;
- height: 4rpx;
- background-color: #00BC12;
- transform: translate(-50%, 0);
- }
- }
- }
- }
- .index-wu {
- width: 100%;
- margin-top: 286rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 300rpx;
- height: 300rpx;
- }
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #999999;
- margin-bottom: 40rpx;
- }
- button {
- width: 160rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #00BC12;
- border-radius: 36rpx;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- }
- }
- }
-</style>
diff --git a/small-program/pages/freight-order/freight-order.vue b/small-program/pages/freight-order/freight-order.vue
deleted file mode 100644
index fcde6d6..0000000
--- a/small-program/pages/freight-order/freight-order.vue
+++ /dev/null
@@ -1,824 +0,0 @@
-<template>
- <view class="order">
- <!-- <view class="order-quxiaole">
- 宸插彇娑�
- </view> -->
- <view class="order-head" :style="{ backgroundImage: 'url(' + bgImg + ')' }">
- <view class="order-head-status">寰呮帴鍗�</view>
- <view class="order-head-info">鎮ㄥ凡缁忔垚鍔熷彂璧风敤宸ュ崟锛岃鑰愬績绛夊緟鎺ュ崟</view>
- </view>
- <view class="order-quxiao">
- <view class="order-quxiao-btn">鍙栨秷璁㈠崟</view>
- </view>
- <view class="order-user">
- <view class="order-user-info">
- <view class="user-info-l">
- <view class="user-info-l-image">
- <image src="/static/logo.png" mode="widthFix"></image>
- </view>
- <view class="user-info-l-i">
- <view class="user-info-l-i-top">鑾茶姳鍔冲姟鍏徃</view>
- <view class="user-info-l-i-bottom">
- <view class="user-info-l-i-bottom-item">
- <text>璇勫垎锛�</text>
- <text>90</text>
- </view>
- <view class="user-info-l-i-bottom-item">
- <text>鍗曟暟锛�</text>
- <text>100</text>
- </view>
- </view>
- </view>
- </view>
- <view class="user-info-r">
- <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
- <text>鑱旂郴甯堝倕</text>
- </view>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <view class="x"></view>
- <text>杩愯揣鍗�-灏忚揣杞�-鍘㈠紡</text>
- </view>
- <view class="order-info-wz">钁¤悇锝�2000鏂わ綔闇�2杈�</view>
- <view class="index-list-item-dz">
- <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image>
- <text>07-26 鑷� 07-27锛�2澶╋級</text>
- </view>
- <view class="address">
- <view class="address-xian"></view>
- <view class="address-row">
- <image src="/static/icon/ic_qidian@2x.png" mode="widthFix"></image>
- <text>闀挎睙瑗胯矾澶ц渶灞辨.鏋楀叕鍥タ闂ㄤ繚瀹夊</text>
- </view>
- <view class="address-row">
- <image src="/static/icon/ic_jingguo@2x.png" mode="widthFix"></image>
- <text>闀挎睙瑗胯矾澶ц渶灞辨.鏋楀叕鍥笢闂ㄤ繚瀹夊</text>
- </view>
- <view class="address-row">
- <image src="/static/icon/ic_zhongdian@2x.png" mode="widthFix"></image>
- <text>瀹夊窘鑾茶姳绉戞妧浜т笟鍥眴绫崇鎶�鏈夐檺鍏徃</text>
- </view>
- </view>
- <view class="order-info-x"></view>
- <view class="order-info-supplement">
- <view class="order-info-supplement-title">闇�姹傝ˉ鍏咃細</view>
- <view class="order-info-supplement-val">鐢峰コ閮藉彲锛屽寘鍗堥キ锛屽共娲婚夯鍒╋紝鏃╀笂9鐐瑰埌涓嬪崍4鐐癸紝鍙厤璐瑰甫1鏂よ憽钀勫洖瀹�</view>
- <view class="order-info-supplement-list">
- <view class="order-info-supplement-list-item" v-for="(item,index) in 4" :key="index">
- <image src="/static/logo.png" mode="widthFix"></image>
- </view>
- <view style="width: 156rpx; height: 0;"></view>
- <view style="width: 156rpx; height: 0;"></view>
- </view>
- </view>
- <view class="order-info-price">
- <view class="price-row">
- <view class="price-row-label">璐圭敤鏍囧噯</view>
- <view class="price-row-val">2000鍏�/杈�*澶�</view>
- </view>
- <view class="price-row">
- <view class="price-row-label">棰勪及鎬昏垂鐢�</view>
- <view class="price-row-val" style="color: #FF0000;">楼1000.00</view>
- </view>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <text>璇勪环</text>
- </view>
- <u-rate :count="count" activeColor="#FFC331" size="26" v-model="value"></u-rate>
- <view class="order-info-remark">
- 骞叉椿鍒╄惤鏁堢巼楂樺共娲诲埄钀芥晥鐜囬珮骞叉椿鍒╄惤鏁堢巼楂樺共娲诲埄钀芥晥鐜囬珮骞叉椿鍒╄惤鏁堢巼楂�
- </view>
- </view>
- <view class="order-ren">
- <view class="order-ren-left">
- <view class="order-ren-left-img">
- <image src="/static/logo.png" mode="widthFix"></image>
- </view>
- <text>鍙插ぉ鏁�</text>
- <view class="order-ren-left-tip">涓氫富</view>
- </view>
- <view class="order-ren-x"></view>
- <view class="order-ren-lx">
- <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
- <text>鑱旂郴涓氫富</text>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <text>璁㈠崟淇℃伅</text>
- </view>
- <view class="order-info-list">
- <view class="order-info-list-item">
- <text>璁㈠崟缂栧彿锛�</text>
- <text>202107131742520001</text>
- </view>
- <view class="order-info-list-item">
- <text>涓嬪崟鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>鎺ュ崟鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>寮�濮嬫椂闂达細</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>瀹屾垚鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>鏀粯鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>鏀粯鏂瑰紡锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>浜ゆ槗鍗曞彿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- </view>
- </view>
- <view style="width: 100%; height: calc(108rpx + env(safe-area-inset-bottom));"></view>
- <view class="order-footer">
- <view class="order-footer-btn">
- <view class="order-footer-btn-a" @click="show = true">鍙栨秷璁㈠崟</view>
- <view class="order-footer-btn-b">淇敼璁㈠崟</view>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
-
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 纭鍙栨秷璁㈠崟鍚楋紵
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="show = false">纭鍙栨秷</view>
- </view>
- </u-modal>
-
- <!-- 鏀粯寮圭獥 -->
- <u-popup :show="show1" round="15" mode="bottom">
- <view class="zhifu">
- <view class="zhifu-head">
- <view></view>
- <text>鏀粯璁㈠崟</text>
- <image @click="show1 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="zhifu-c">
- <view class="zhifu-c-info">
- 璇风‘璁ら噾棰濆苟鏀粯璐圭敤缁� <text>鑾茶姳鍔冲姟鍏徃</text>
- </view>
- <view class="zhifu-c-info1">鏀粯閲戦锛�</view>
- <view class="zhifu-c-input">
- <image src="/static/icon/楼@2x.png" mode="widthFix"></image>
- <input type="number" placeholder="璇疯緭鍏�" />
- </view>
- </view>
- <view class="zhifu-botton">纭鏀粯</view>
- </view>
- </u-popup>
-
- <!-- 璇勪环 -->
- <u-popup :show="show2" round="15" mode="bottom">
- <view class="zhifu">
- <view class="zhifu-head">
- <view></view>
- <text>璇勪环</text>
- <image @click="show2 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="zhifu-pj">
- <view class="zhifu-pj-label">鏈嶅姟璇勪环</view>
- <view class="zhifu-pj-val">
- <u-rate :count="count" activeColor="#FFC331" size="26" v-model="value"></u-rate>
- </view>
- </view>
- <view class="zhifu-textarea">
- <image src="/static/icon/ic_pingjia@2x.png" mode="widthFix"></image>
- <u--textarea placeholder="璇疯璇存偍瀵规湰娆′氦鏄撶殑鎰熷彈" border="none" count></u--textarea>
- </view>
- <view class="zhifu-botton" style="margin-top: 60rpx;">绔嬪嵆璇勪环</view>
- </view>
- </u-popup>
-
- </view>
-</template>
-
-<script>
- export default {
- data() {
- return {
- show: false,
- show1: false,
- show2: false,
- count: 4,
- value: 2,
- bgImg: require('@/static/image/bg_green@2x.png')
- };
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7;
- }
- .u-textarea__count {
- background-color: rgba(0, 0, 0, 0) !important;
- }
- .u-textarea {
- width: 100% !important;
- height: 100% !important;
- padding: 0 !important;
- background-color: rgba(0, 0, 0, 0) !important;
- }
- textarea {
- width: 100% !important;
- height: 100% !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .order {
- width: 100%;
- .zhifu {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- .zhifu-textarea {
- width: 100%;
- height: 364rpx;
- padding: 30rpx;
- box-sizing: border-box;
- background: #F7F7F7;
- border-radius: 16rpx;
- border: 1rpx solid #EEEEEE;
- margin-top: 48rpx;
- display: flex;
- align-items: start;
- image {
- flex-shrink: 0;
- width: 29rpx;
- height: 29rpx;
- margin-right: 10rpx;
- }
- }
- .zhifu-pj {
- width: 100%;
- display: flex;
- align-items: center;
- margin-top: 40rpx;
- .zhifu-pj-label {
- flex-shrink: 0;
- margin-right: 40rpx;
- }
- .zhifu-pj-val {
- flex: 1;
-
- }
- }
- .zhifu-head {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- image {
- width: 28rpx;
- height: 28rpx;
- }
- text {
- font-weight: 500;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .zhifu-c {
- width: 100%;
- margin-top: 46rpx;
- .zhifu-c-info {
- display: flex;
- align-items: center;
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 30rpx;
- text {
- color: #00BC12;
- margin-left: 10rpx;
- }
- }
- .zhifu-c-info1 {
- font-weight: 400;
- font-size: 30rpx;
- color: #666666;
- margin-bottom: 20rpx;
- }
- .zhifu-c-input {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- height: 112rpx;
- background: #F7F7F7;
- border-radius: 10rpx;
- border: 1rpx solid #EEEEEE;
- display: flex;
- align-items: center;
- image {
- flex-shrink: 0;
- width: 28rpx;
- height: 60rpx;
- margin-right: 24rpx;
- }
- input {
- flex: 1;
- height: 100%;
- font-weight: 500;
- font-size: 50rpx;
- color: #222222;
- }
- }
- }
- .zhifu-botton {
- width: 100%;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- margin-top: 264rpx;
- }
- }
- .slot-content {
- width: 100%;
- text-align: center;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- margin: 30rpx 0;
- }
- .btn1 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 400;
- font-size: 32rpx;
- color: #666666;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .btn2 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- .order-footer {
- width: 100%;
- position: fixed;
- bottom: 0;
- left: 0;
- background-color: #ffffff;
- z-index: 9;
- height: calc(108rpx + env(safe-area-inset-bottom));
- .order-footer-btn {
- width: 100%;
- height: 108rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .order-footer-btn-a {
- width: 334rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #666666;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .order-footer-btn-b {
- width: 334rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- }
- }
- .order-ren {
- width: 100%;
- height: 150rpx;
- background: #FFFFFF;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 30rpx;
- box-sizing: border-box;
- margin-bottom: 20rpx;
- .order-ren-left {
- display: flex;
- align-items: center;
- flex: 1;
- .order-ren-left-img {
- width: 80rpx;
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- border-radius: 50%;
- margin-right: 15rpx;
- image {
- width: 100%;
- }
- }
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- margin-right: 15rpx;
- }
- .order-ren-left-tip {
- padding: 4rpx 12rpx;
- border-radius: 8rpx;
- border: 2rpx solid #FD9E24;
- font-weight: 400;
- font-size: 24rpx;
- color: #FF7200;
- }
- }
- .order-ren-x {
- width: 1rpx;
- height: 90rpx;
- margin-right: 50rpx;
- background-color: #E5E5E5;
- }
- .order-ren-lx {
- flex-shrink: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 34rpx;
- height: 34rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #222222;
- }
- }
- }
- .order-info {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .order-info-list {
- width: 100%;
- .order-info-list-item {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #777777;
- }
- }
- }
- .order-info-remark {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- margin-top: 36rpx;
- }
- .order-info-title {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- .x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .order-info-wz {
- font-weight: 400;
- font-size: 28rpx;
- color: #888888;
- margin-bottom: 30rpx;
- }
- .address {
- width: 100%;
- background: #F7F7F7;
- border-radius: 16rpx;
- padding: 30rpx;
- box-sizing: border-box;
- margin-bottom: 24rpx;
- position: relative;
- .address-xian {
- position: absolute;
- top: 17px;
- left: 24px;
- width: 1rpx;
- height: calc(100% - 60rpx);
- border-right: 2rpx dashed #B2B2B2;
- }
- .address-row {
- position: relative;
- z-index: 2;
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- image {
- width: 36rpx;
- height: 36rpx;
- flex-shrink: 0;
- margin-right: 24rpx;
- }
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- }
- }
- }
- .index-list-item-dz {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- image {
- width: 32rpx;
- height: 32rpx;
- flex-shrink: 0;
- margin-right: 16rpx;
- }
- text {
- flex: 1;
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- }
- }
- .order-info-x {
- width: 100%;
- height: 1rpx;
- margin: 20rpx 0 30rpx 0;
- background-color: #E5E5E5;
- }
- .order-info-price {
- width: 100%;
- display: flex;
- flex-direction: column;
- .price-row {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .price-row-label {
- font-weight: 400;
- font-size: 30rpx;
- color: #777777;
- }
- .price-row-val {
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .order-info-supplement {
- width: 100%;
- margin-bottom: 40rpx;
- .order-info-supplement-title {
- font-weight: 600;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 16rpx;
- }
- .order-info-supplement-val {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- margin-bottom: 20rpx;
- }
- .order-info-supplement-list {
- width: 100%;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- justify-content: space-between;
- .order-info-supplement-list-item {
- width: 156rpx;
- height: 156rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 8rpx;
- overflow: hidden;
- image {
- width: 100%;
- }
- }
- }
- }
- }
- .order-quxiaole {
- padding: 20rpx 0;
- box-sizing: border-box;
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: 600;
- font-size: 40rpx;
- color: #111111;
- background-color: #ffffff;
- }
- .order-head {
- width: 100%;
- height: 172rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- background-repeat: no-repeat;
- background-size: 100% 100%;
- .order-head-status {
- font-weight: 600;
- font-size: 40rpx;
- color: #111111;
- }
- .order-head-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #777777;
- margin-top: 18rpx;
- }
- }
- .order-user {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- .order-user-info {
- width: 100%;
- height: 150rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- background: #F7F8F5;
- border-radius: 16rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .user-info-l {
- flex: 1;
- display: flex;
- align-items: center;
- .user-info-l-image {
- flex-shrink: 0;
- width: 80rpx;
- height: 80rpx;
- border-radius: 50%;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: 20rpx;
- image {
- width: 100%;
- }
- }
- .user-info-l-i {
- flex: 1;
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- .user-info-l-i-top {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .user-info-l-i-bottom {
- display: flex;
- align-items: center;
- margin-top: 14rpx;
- .user-info-l-i-bottom-item {
- display: flex;
- align-items: center;
- margin-right: 60rpx;
- &:last-child {
- margin: 0 !important;
- }
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 24rpx;
- color: #777777;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- }
- }
- }
- }
- }
- }
- .user-info-r {
- flex-shrink: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 33rpx;
- height: 33rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #222222;
- margin-top: 12rpx;
- }
- }
- }
- }
- .order-quxiao {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: #ffffff;
- .order-quxiao-btn {
- width: 160rpx;
- height: 64rpx;
- line-height: 64rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- border-radius: 34rpx;
- border: 1rpx solid #B2B2B2;
- }
- }
- }
-</style>
diff --git a/small-program/pages/freight/freight.vue b/small-program/pages/freight/freight.vue
deleted file mode 100644
index d0f17e9..0000000
--- a/small-program/pages/freight/freight.vue
+++ /dev/null
@@ -1,1029 +0,0 @@
-<template>
- <view class="index">
- <view class="list">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>杞﹁締鍙婅矾绾�</text>
- </view>
-
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item-row" @click="show = true">
- <view class="list-item-row-label">杞﹁締绫诲瀷<b>*</b></view>
- <view class="list-item-row-val">
- <text :style="{ color: form.categoryName ? '#111111' : '' }">{{form.categoryName ? form.categoryName : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row" @click="show3 = true">
- <view class="list-item-row-label">璐ц溅鍨嬪彿<b>*</b></view>
- <view class="list-item-row-val">
- <text :style="{ color: form.carUnit ? '#111111' : '' }">{{form.carUnit ? form.carUnit : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- </template>
-
- <view class="list-item-row" @click="show2 = true">
- <view class="list-item-row-label">鐢ㄨ溅鏃堕棿<b>*</b></view>
- <view class="list-item-row-val">
- <text :style="{ color: form.startDate ? '#111111' : '' }">{{form.startDate ? form.startDate + ' 鑷� ' + form.endDate + ' (' + form.totalDays + '澶�) ' : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
-
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item-row">
- <view class="list-item-row-label">
- 杩愯揣鍦板潃<b>*</b>
- <view class="list-item-row-label-add" @click="addAddr">+澧炲姞閫旂粡鐐�</view>
- </view>
- <view class="address">
- <view class="address-item" @click="selectAddress(2)">
- <view class="address-item-img">
- <image src="/static/icon/ic_qidian@2x.png" mode="widthFix"></image>
- <text :style="{color: form.location ? '#111111' : ''}">{{form.location ? form.location : '璇烽�夋嫨璧风偣'}}</text>
- </view>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- <view class="address-item" v-for="(item, index) in form.wayInfoDTOList" :key="index" @click="selectAddress(4, index)">
- <view class="address-item-img">
- <image src="/static/icon/ic_jingguo@2x.png" mode="widthFix"></image>
- <text :style="{color: item.location ? '#111111' : ''}">{{item.location ? item.location : '璇烽�夋嫨閫旂粡鍦扮偣'}}</text>
- </view>
- <view style="display: flex; align-items: center; flex-shrink: 0;">
- <image src="/static/icon/ic_delete@2x.png" style="margin-right: 22rpx; width: 32rpx; height: 32rpx;" @click.stop="form.wayInfoDTOList.splice(index, 1)" mode="widthFix"></image>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="address-item" @click="selectAddress(3)">
- <view class="address-item-img">
- <image src="/static/icon/ic_zhongdian@2x.png" mode="widthFix"></image>
- <text :style="{color: form.locationEnd ? '#111111' : ''}">{{form.locationEnd ? form.locationEnd : '璇烽�夋嫨缁堢偣'}}</text>
- </view>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- </view>
- </template>
-
- </view>
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>闇�姹�</text>
- </view>
- <view class="list-item-row" @click="show1 = true">
- <view class="list-item-row-label">杩愯緭鍝佺<b>*</b></view>
- <view class="list-item-row-val">
- <text :style="{ color: form.transportTypeName ? '#111111' : '' }">{{form.transportTypeName ? form.transportTypeName : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鐢ㄨ溅鏁伴噺<b>*</b></view>
- <view class="list-item-row-val">
- <input type="number" v-model="form.priceNum2" disabled placeholder="1" />
- <text>杈�</text>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">杩愯緭閲嶉噺/鏁伴噺<b>*</b></view>
- <view class="list-item-row-val">
- <input type="digit" style="flex: 3;" v-model="form.transportNum" placeholder="璇疯緭鍏�" />
- <!-- <view @click="show4 = true" style="width: 100rpx; flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end;">
- <text>{{form.transportUnit}}</text>
- <u-icon name="arrow-down" color="#111111" size="16"></u-icon>
- </view> -->
- <view style="flex: 1;" :class="form.transportUnit ==='涓�' ? 'val-cate-item val-active' : 'val-cate-item'" @click="form.transportUnit = '涓�'">涓�</view>
- <view style="flex: 1;" :class="form.transportUnit ==='鏂�' ? 'val-cate-item val-active' : 'val-cate-item'" @click="form.transportUnit = '鏂�'">鏂�</view>
- </view>
-
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">闇�姹傝ˉ鍏�</view>
- <view class="list-item-row-val">
- <textarea cols="30" v-model="form.supplement" rows="10" placeholder="璇疯緭鍏�" maxlength="200"></textarea>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">鍥剧墖</view>
- <view class="list-item-row-upload">
- <view class="upload-item" v-for="(item, index) in form.multifileList" :key="index" @click="preview(index, form.multifileList)">
- <image :src="item.url || item.fileurlFull" mode="widthFix"></image>
- <image class="upload-item-dele" @click.stop="form.multifileList.splice(index, 1)" src="/static/icon/ic_delete1@2x.png" mode="widthFix"></image>
- </view>
- <view class="upload-item" @click="uploadImg">
- <u-icon name="plus" color="#999999" size="24"></u-icon>
- <text>鐐瑰嚮涓婁紶</text>
- </view>
- <view style="width: 215rpx; height: 0;"></view>
- </view>
- </view>
- <!-- <view class="list-item-zk" @click="viewStatus = !viewStatus">
- <text>{{viewStatus ? '鏀惰捣' : '琛ュ厖闇�姹�'}}</text>
- <u-icon :name="viewStatus ? 'arrow-up' : 'arrow-down'" color="#00BC12" size="16"></u-icon>
- </view> -->
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>璐圭敤</text>
- </view>
- <view class="list-item-cate">
- <view :class="item.id === form.carType ? 'list-item-cate-item active' : 'list-item-cate-item'" v-for="(item, index) in ff" :key="index" @click="form.carType = item.id">{{item.name}}</view>
- </view>
- <view class="list-item-row" v-if="form.carType==0">
- <view class="list-item-row-label">鐢ㄨ溅澶╂暟</view>
- <view class="list-item-row-val">
- <input type="digit" v-model="form.totalDays" disabled placeholder="" />
- <text>澶�</text>
- </view>
- </view>
- <view class="list-item-row" v-if="form.carType==1">
- <view class="list-item-row-label">鐢ㄨ溅娆℃暟<b>*</b></view>
- <view class="list-item-row-val">
- <input type="digit" v-model="form.priceNum1" @input="getPrice" placeholder="璇疯緭鍏�" />
- <text>娆�</text>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">璐圭敤鏍囧噯<b>*</b></view>
- <view class="list-item-row-val">
- <input type="digit" @input="getPrice" v-model="form.price" placeholder="璇疯緭鍏�" />
- <text>{{form.priceUnit}}</text>
- </view>
- </view>
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鑱旂郴浜轰俊鎭�</text>
- <text class="list-item-label-info">榛樿鍙戝崟鏂硅仈绯绘柟寮忥紝鍙慨鏀硅仈绯讳汉</text>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴浜哄鍚�</view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkName" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴鐢佃瘽<b>*</b></view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkPhone" maxlength="11" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- </view>
- </template>
- </view>
- <view style="width: 100%; height: calc(214rpx + env(safe-area-inset-bottom));"></view>
- <view class="footer">
- <view class="footer-price">
- <view class="footer-price-info">棰勪及鎬昏垂鐢�</view>
- <view class="footer-price-num">
- <text>{{totalPrice || 0}}</text>
- <text>鍏�</text>
- </view>
- </view>
- <view class="footer-bottom">
- <div class="footer-bottom-btn" @click="submit" >
- <text>{{form.id?'纭淇敼':'绔嬪嵆涓嬪崟'}}</text>
- <text v-if="!form.id">锛堟湇鍔″畬鎴愬悗浠樻锛�</text>
- </div>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
-
- <!-- 閫夋嫨杞﹁締绫诲瀷 -->
- <u-picker
- :show="show"
- :columns="car"
- confirmColor="#00BC12"
- keyName="name"
- @confirm="confirmCategary"
- @cancel="show = false"/>
-
- <!-- 閫夋嫨鍝佺 -->
- <u-picker
- :show="show1"
- :columns="variety"
- confirmColor="#00BC12"
- keyName="name"
- @confirm="confirmVariety"
- @cancel="show1 = false"/>
-
- <!-- 璐ц溅鍨嬪彿 -->
- <u-picker
- :show="show3"
- :columns="carArr"
- confirmColor="#00BC12"
- @confirm="confirmCarArr"
- @cancel="show3 = false"/>
-
- <!-- 鍗曚綅 -->
- <u-picker
- :show="show4"
- :columns="dw"
- confirmColor="#00BC12"
- @confirm="confirmDw"
- @cancel="show4 = false"/>
-
- <!-- 閫夋嫨鏃ユ湡鑼冨洿 -->
- <u-calendar
- :show="show2"
- color="#00BC12"
- :allowSameDay="true"
- mode="range"
- @close="show2 = false"
- @confirm="confirmDate" />
-
- </view>
-</template>
-
-<script>
- import { mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['userInfo']),
- totalPrice() {
- return this.form.estimatedAccount / 100
- }
- },
- data() {
- return {
- info: {},
- show: false,
- show1: false,
- show2: false,
- show3: false,
- show4: false,
- form: {
- id: null,
- startDate: '',
- endDate: '',
- lat: '',
- lgt: '',
- location: '',
- latEnd: '',
- lgtEnd: '',
- locationEnd: '',
- carUnit: '',
- categoryId: '',
- categoryName: '',
- wayInfoDTOList: [],
- priceNum1: '',
- totalDays:null,
- priceNum2: 1,
- transportNum: '',
- transportTypeId: '',
- transportTypeName: '',
- carType: 0,
- supplement: '',
- multifileList: [],
- priceUnit: '鍏�/澶�',
- linkName: '',
- linkPhone: '',
- price: '',
- type: 1,
- transportUnit: '涓�',
- estimatedAccount: ''
- },
- car: [],
- variety: [],
- ff: [
- { name: '鎸夊ぉ浠樿垂', id: 0 },
- { name: '鎸夋浠樿垂', id: 1 }
- ],
- dw: [['涓�', '鏂�']],
- carArr: [],
- viewStatus: true
- };
- },
- watch: {
- 'form.carType': {
- handler(news, olds) {
- if (news === 0) {
- this.form.priceUnit = '鍏�/澶�'
- } else if (news === 1) {
- this.form.priceUnit = '鍏�/娆�'
- }
- this.getPrice()
- }
- }
- },
- onLoad(option) {
- if (option.id) {
- this.form.id = option.id
- this.$u.api.getDetail({
- orderId: option.id
- }).then(res => {
- if (res.code === 200) {
- this.info = res.data
- console.log(res.data.totalDays)
- for (const key in this.form) {
- this.form[key] = res.data[key]
- }
- this.form.price = Number(this.form.price) / 100
- if (!this.form.multifileList) {
- this.form.multifileList = []
- }
- if (!this.form.wayInfoDTOList) {
- this.form.wayInfoDTOList = []
- }
- }
- })
- } else {
- const res = uni.getStorageSync('carData');
- console.log(res)
- this.form.linkPhone = this.userInfo.telephone
- this.form.linkName = this.userInfo.name
- this.form.startDate = res.startDate
- this.form.endDate = res.endDate
- this.form.lat = res.lat
- this.form.lgt = res.lgt
- this.form.totalDays = res.days
- this.form.priceNum1=res.days
- this.form.categoryId = res.categoryId
- this.form.categoryName = res.categoryName
- this.form.location = res.location
- this.form.latEnd = res.latEnd
- this.form.lgtEnd = res.lgtEnd
- this.form.locationEnd = res.locationEnd
- this.form.wayInfoDTOList = res.wayInfoDTOList
- uni.removeStorageSync('carData');
- }
- this.getCategoryLists()
- },
- methods: {
- preview(current, arr) {
- let urls = arr.map(item => item.url || item.fileurlFull)
- uni.previewImage({ current, urls })
- },
- handleInputPrice(e) {
- try{
- this.form.price = Number(this.form.price).toFixed(3)
- }catch(e){
- this.form.price =null
- }
- },
- confirmDw(e) {
- this.form.transportUnit = e.value[0]
- this.show4 = false
- },
- // 鎻愪氦璁㈠崟
- submit() {
- var that = this;
- if (!this.form.carUnit) {
- return uni.showToast({ title: '璇烽�夋嫨璐ц溅鍨嬪彿', icon: 'none' })
- }
- if (!this.form.transportTypeName) {
- return uni.showToast({ title: '璇烽�夋嫨杩愯緭鍝佺', icon: 'none' })
- }
- if (!this.form.priceNum2) {
- return uni.showToast({ title: '璇疯緭鍏ョ敤杞︽暟閲�', icon: 'none' })
- }
- if (!this.form.transportNum) {
- return uni.showToast({ title: '璇疯緭鍏ヨ繍杈撻噸閲�/鏁伴噺', icon: 'none' })
- }
- if (!this.form.price) {
- return uni.showToast({ title: '璇疯緭鍏ヨ垂鐢ㄦ爣鍑�', icon: 'none' })
- }
- if (!this.form.linkPhone) {
- return uni.showToast({ title: '璇疯緭鍏ヨ仈绯荤數璇�', icon: 'none' })
- }
- if (!that.form.id) {
- uni.requestSubscribeMessage({
- tmplIds: ['oVjOBLcHxIlGzOMJsdInmgI5CHGXh-UTvMzQqfFOnIg','AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8'],
- success(res) {
- if(that.form.carType == 0){
- that.form.priceNum1 = that.form.totalDays
- }
- that.$u.api.release({
- ...that.form,
- price: Number(that.form.price) * 100,
- wayInfoDTOList: [
- {
- lat: that.form.lat,
- lgt: that.form.lgt,
- location: that.form.location
- },
- ...that.form.wayInfoDTOList,
- {
- lat: that.form.latEnd,
- lgt: that.form.lgtEnd,
- location: that.form.locationEnd
- }
- ]
- }).then(res => {
- if (res.code == 200) {
- uni.navigateTo({
- url: `/pages/success/success?orderId=${res.data.id}`
- })
- }
- })
- }
- })
- } else {
- // uni.requestSubscribeMessage({
- // tmplIds: ['3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk','AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8'],
- // success(res) {
- that.$u.api.updateOrder({
- ...that.form,
- price: Number(that.form.price) * 100,
- wayInfoDTOList: [
- {
- lat: that.form.lat,
- lgt: that.form.lgt,
- location: that.form.location
- },
- ...that.form.wayInfoDTOList,
- {
- lat: that.form.latEnd,
- lgt: that.form.lgtEnd,
- location: that.form.locationEnd
- }
- ]
- }).then(res => {
- if (res.code == 200) {
- uni.showToast({
- title: '淇敼鎴愬姛',
- icon: 'success',
- mask: true,
- duration: 2000
- })
- setTimeout(() => {
- uni.navigateBack({ delta: 1 });
- // uni.$emit('refresh')
- }, 1500)
- }
- })
- // }
- // })
- }
- },
- uploadImg() {
- var that = this;
- uni.chooseImage({
- success: (chooseImageRes) => {
- for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
- uni.uploadFile({
- url: this.$baseUrl + '/web/public/upload',
- filePath: chooseImageRes.tempFilePaths[i],
- name: 'file',
- formData: {
- 'folder': 'orders'
- },
- success: (uploadFileRes) => {
- const res = JSON.parse(uploadFileRes.data)
- that.form.multifileList.push({
- fileurl: res.data.imgaddr,
- name: res.data.originname,
- url: res.data.url,
- type: 0
- })
- }
- });
- }
- }
- });
- },
- // 璁$畻閲戦
- getPrice() {
- if (this.form.price && this.form.priceNum1 && this.form.priceNum2) {
- this.$u.api.getTotal({
- price: Number(this.form.price).toFixed(2) * 100,
- priceUnit: this.form.priceUnit,
- priceNum1: this.form.carType!=1?this.form.totalDays:this.form.priceNum1,
- priceNum2: this.form.priceNum2,
- carType:this.form.carType ,
- type: 1
- }).then(res => {
- if (res.code === 200) {
- this.form.estimatedAccount = res.data
- }
-
- })
- }
- },
- getCategoryLists() {
- this.$u.api.getCategoryList({ type: 1 })
- .then(res => {
- if (res.code === 200) {
- this.car = [res.data]
- res.data.forEach(item => {
- if (item.id === this.form.categoryId) {
- this.carArr = [item.detailList]
- }
- })
- }
-
- })
- this.$u.api.getCategoryList({ type: 0 })
- .then(res => {
- if (res.code === 200) {
- this.variety = [res.data]
- }
- })
- },
- confirmCategary(e) {
- this.form.categoryId = e.value[0].id
- this.form.categoryName = e.value[0].name
- this.carArr = [e.value[0].detailList]
- this.form.carUnit = ''
- this.show = false
- },
- confirmVariety(e) {
- this.form.transportTypeId = e.value[0].id
- this.form.transportTypeName = e.value[0].name
- this.show1 = false
- },
- confirmCarArr(e) {
- this.form.carUnit = e.value[0]
- this.show3 = false
- },
- confirmDate(e) {
- this.form.startDate = e[0]
- this.form.endDate = e[e.length - 1]
- let time = this.form.startDate == this.form.endDate ? 1 : 0
- this.form.totalDays = e.length - time;
- this.show2 = false
- this.getPrice()
- },
- addAddr() {
- this.form.wayInfoDTOList.push({
- lat: '',
- lgt: '',
- location: ''
- })
- },
- selectAddress(type, index) {
- uni.chooseLocation({
- success: (res) => {
- if ([2].includes(type)) {
- this.form.latitude = res.latitude
- this.form.longitude = res.longitude
- this.form.location = res.name || res.address
- this.form.address = res.name || res.address
- } else if (type === 3) {
- this.form.locationEnd = res.name || res.address
- this.form.latEnd = res.latitude
- this.form.lgtEnd = res.longitude
- } else if (type === 4) {
- this.form.wayInfoDTOList[index].lat = res.latitude
- this.form.wayInfoDTOList[index].lgt = res.longitude
- this.form.wayInfoDTOList[index].location = res.name || res.address
- }
- }
- });
- },
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7 !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .index {
- width: 100%;
- .footer {
- width: 100%;
- height: calc(214rpx + env(safe-area-inset-bottom));
- padding: 20rpx 30rpx;
- box-sizing: border-box;
- position: fixed;
- bottom: 0;
- left: 0;
- z-index: 9;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- background: #FFFFFF;
- box-shadow: 0rpx -2rpx 4rpx 0rpx rgba(0,0,0,0.06);
- .footer-price {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-price-info {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .footer-price-num {
- display: flex;
- align-items: center;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 40rpx;
- color: #FF0000;
- margin-right: 20rpx;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- }
- .footer-bottom {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-bottom-kf {
- flex-shrink: 0;
- margin-right: 40rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 36rpx;
- height: 36rpx;
- }
- text {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- margin-top: 8rpx;
- }
- }
- .footer-bottom-btn {
- flex: 1;
- height: 88rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #00BC12;
- box-shadow: 0rpx 8rpx 12rpx 0rpx rgba(91,190,56,0.16);
- border-radius: 44rpx;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- }
- &:nth-child(2) {
- font-weight: 500;
- font-size: 26rpx;
- color: #FFFFFF;
- }
- }
- }
- }
- }
- .list {
- width: 100%;
- display: flex;
- flex-direction: column;
- .list-item {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- border-radius: 20rpx;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- textarea {
- width: 100%;
- height: 120rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- .list-item-cate {
- width: 100%;
- display: flex;
- align-items: center;
- margin-top: 20rpx;
- margin-bottom: 40rpx;
- .active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .list-item-cate-item {
- width: 208rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- background: #EEEEEE;
- border-radius: 36rpx;
- margin-right: 24rpx;
- &:last-child {
- margin: 0 !important;
- }
- }
- }
- .list-item-label {
- display: flex;
- align-items: center;
- margin-bottom: 28rpx;
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- .list-item-label-x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- .list-item-label-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-left: 26rpx;
- }
- }
- .list-item-zk {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- margin-right: 8rpx;
- }
- }
- .list-item-row {
- width: 100%;
- display: flex;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .address {
- width: 100%;
- background: #F7F7F7;
- border-radius: 16rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- margin-top: 20rpx;
- .address-item {
- width: 100%;
- // height: 100rpx;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .address-item-img {
- flex: 1;
- height: 100%;
- display: flex;
- align-items: center;
- image {
- flex-shrink: 0;
- width: 36rpx;
- height: 36rpx;
- margin-right: 24rpx;
- }
- text {
- flex: 1;
- height: 100%;
- display: flex;
- align-items: center;
- font-weight: 400;
- font-size: 30rpx;
- color: #999999;
- border-bottom: 1rpx solid #E5E5E5;
- }
- }
- }
- }
- .list-item-row-label {
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- display: flex;
- align-items: center;
- position: relative;
- .list-item-row-label-add {
- position: absolute;
- right: 0;
- top: 0;
- font-weight: 400;
- font-size: 26rpx;
- color: #00BC12;
- }
- b {
- color: red;
- }
- }
- .list-item-row-user {
- width: 100%;
- display: flex;
- flex-direction: column;
- .user-item {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- justify-content: space-between;
- border-bottom: 1rpx solid #E5E5E5;
- &:last-child {
- margin: 0 !important;
- }
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- flex: 1;
- text-align: center;
- margin: 0 30rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .list-item-row-radio {
- width: 100%;
- display: flex;
- padding: 30rpx 0;
- box-sizing: border-box;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- .radio-item {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .radio-item-label {
- width: 200rpx;
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- .radio-item-list {
- flex: 1;
- display: flex;
- flex-direction: column;
- .radio-item-list-l {
- width: 100%;
- display: flex;
- align-items: center;
- .active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .radio-item-list-item {
- width: 124rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #EEEEEE;
- border-radius: 36rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #111111;
- margin-right: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- }
- }
- .radio-item-list-data {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- margin-top: 42rpx;
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- width: 100rpx;
- font-weight: bold;
- font-size: 30rpx;
- color: #222222;
- text-align: right;
- margin: 0 30rpx;
- }
- }
- }
- }
- }
- .list-item-row-upload {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- flex-wrap: wrap;
- padding: 30rpx 0;
- box-sizing: border-box;
- .upload-item {
- width: 215rpx;
- height: 215rpx;
- display: flex;
- align-items: center;
- flex-direction: column;
- justify-content: center;
- background: #F8F9FB;
- border-radius: 8rpx;
- border: 2rpx solid #EEEEEE;
- position: relative;
- margin-bottom: 15rpx;
- &:last-child {
- margin: 0 !important;
- }
- image {
- width: 100%;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #666666;
- margin-top: 16rpx;
- }
- .upload-item-dele {
- position: absolute;
- top: -20rpx;
- right: -20rpx;
- width: 40rpx;
- height: 40rpx;
- z-index: 9;
- }
- }
- }
- .list-item-row-val {
- // width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- text {
- // width: 80%;
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #999999;
- }
- input {
- width: 100%;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- textarea {
- width: 100%;
- height: 90rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- .val-active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .val-cate-item {
- width: 208rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- background: #EEEEEE;
- border-radius: 36rpx;
- margin-right: 24rpx;
- &:last-child {
- margin: 0 !important;
- }
- }
- }
- }
- }
- }
- }
-</style>
diff --git a/small-program/pages/itinerary/itinerary.vue b/small-program/pages/itinerary/itinerary.vue
new file mode 100644
index 0000000..94d9b9c
--- /dev/null
+++ b/small-program/pages/itinerary/itinerary.vue
@@ -0,0 +1,19 @@
+<template>
+ <view>
+
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ };
+ }
+ }
+</script>
+
+<style lang="scss">
+
+</style>
\ No newline at end of file
diff --git a/small-program/pages/login/login.vue b/small-program/pages/login/login.vue
deleted file mode 100644
index 972aa1e..0000000
--- a/small-program/pages/login/login.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<template>
- <view class="box">
- <view class="box-title">娆㈣繋浣跨敤杩戝揩</view>
- <view class="box-tips">璇风櫥褰�</view>
- <view class="box-btn" >
- <button class="box-btn" v-if="agree" open-type="getPhoneNumber" @getphonenumber="getPhone" >鎵嬫満鍙蜂竴閿櫥褰�</button>
- <button class="box-btn" v-if="!agree" @click="tipAgree">鎵嬫満鍙蜂竴閿櫥褰�</button>
- </view>
- <view class="box-footer">
- <image src="/static/icon/ic_notagree@2x.png" mode="widthFix" v-if="!agree" @click="agreeDo"></image>
- <image src="/static/icon/ic_agree@2x.png" mode="widthFix" v-if="agree" @click="agreeDo"></image>
- <text @click="agreeDo">鎴戝凡闃呰骞跺悓鎰�<text class="bluetxt" @click="jumpService(4)">銆婄敤鎴峰崗璁��</text>锛�<text class="bluetxt" @click="jumpService(5)"> 銆婇殣绉佸崗璁斂绛栥��</text></text>
- </view>
- </view>
-</template>
-<script>
-import { mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['userInfo','openid'])
- },
- data() {
- return {
- agree:false
- }
- },
- methods: {
- jumpService(flag) {
- uni.navigateTo({
- url: '/pages/rich-text-page/rich-text-page?flag='+flag
- })
- },
- agreeDo(){
- this.agree = !this.agree
- },
- tipAgree(){
- uni.showToast({ title: '璇峰厛宸查槄璇诲苟鍚屾剰銆婄敤鎴峰崗璁�嬶紝銆婇殣绉佸崗璁斂绛栥��', icon: 'error', duration: 2000 });
- },
- getPhone(e) {
- console.log(e)
- if(!this.agree ){
- return
- }
- if (e.detail.errMsg !== 'getPhoneNumber:ok') {
- uni.showToast({ title: '鑾峰彇鎺堟潈鎵嬫満鍙峰け璐�', icon: 'error', duration: 2000 });
- return
- }
- var that = this;
- that.$u.api.wxAuthPhone({
- code: e.detail.code,
- openid: that.openid||''
- }).then(result => {
- if (result.code === 200) {
- that.$store.commit('setUserInfo', result.data.member)
- that.$store.commit('setToken', result.data.token)
- uni.$emit('refresh')
- uni.navigateBack({ delta: 1 });
- }
- })
- }
- }
- }
-</script>
-
-<style lang="scss" scoped>
- .box {
- width: 100%;
- padding: 0 40rpx;
- box-sizing: border-box;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- .box-title {
- font-weight: 600;
- font-size: 48rpx;
- color: #222222;
- margin-top: 310rpx;
- margin-bottom: 20rpx;
- }
- .box-tips {
- font-weight: 400;
- font-size: 28rpx;
- color: #999999;
- margin-bottom: 180rpx;
- }
- .box-btn {
- width: 100%;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- box-shadow: 0rpx 8rpx 12rpx 0rpx rgba(91,190,56,0.16);
- border-radius: 44rpx;
- margin-bottom: 72rpx;
- }
- .box-footer {
- width: 100%;
- display: flex;
- align-items: center;
- image {
- width: 36rpx;
- height: 36rpx;
- flex-shrink: 0;
- margin-right: 14rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #888888;
- }
- }
- }
- .bluetxt{
- color: royalblue !important;
- }
-</style>
diff --git a/small-program/pages/message/message.vue b/small-program/pages/message/message.vue
new file mode 100644
index 0000000..94d9b9c
--- /dev/null
+++ b/small-program/pages/message/message.vue
@@ -0,0 +1,19 @@
+<template>
+ <view>
+
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {
+
+ };
+ }
+ }
+</script>
+
+<style lang="scss">
+
+</style>
\ No newline at end of file
diff --git a/small-program/pages/order-details/order-details.vue b/small-program/pages/order-details/order-details.vue
deleted file mode 100644
index b404b25..0000000
--- a/small-program/pages/order-details/order-details.vue
+++ /dev/null
@@ -1,1702 +0,0 @@
-<template>
- <view class="order">
- <!-- <view class="order-quxiaole">
- 宸插彇娑�
- </view> -->
- <view class="order-head" :style="{ backgroundImage: 'url(' + bgImg + ')' }">
- <view class="order-head-status">{{info.statusName || ''}}</view>
- <view class="order-head-info" v-if="isAcceptor && info.isUpdate ==1" style="color: red;">
- 璁㈠崟淇℃伅宸蹭慨鏀癸紝璇峰強鏃剁‘璁わ紝{{timeInfo}}鍚庡皢鑷姩鍚屾剰
- </view>
- <view class="order-head-info" v-if="isPushlishor && info.type ==2 && info.status ==0" style="color: red;">
- 鍓╀綑鏀粯鏃堕棿锛寋{timeInfo1}}鍚庡皢鑷姩鍙栨秷
- </view>
- <view class="order-head-info" v-else >{{getStatusInfo()}}</view>
- </view>
- <view class="order-quxiao">
- <view class="order-quxiao-btn" @click="show = true" v-if="(isAcceptor && info.status ===2) || (isPushlishor && info.isUpdate!=1 && info.status ===2&& info.canStart ===1)">鍙栨秷璁㈠崟</view>
- <view class="order-quxiao-btn1" v-if="isPushlishor && info.type!=2 && info.isUpdate!=1 && info.status ===2 && info.canStart ===1" @click="jumpEdit()">淇敼璁㈠崟</view>
- </view>
- <view class="order-user" v-if="isPushlishor && info.acceptMemberId">
- <view class="order-user-info">
- <view class="user-info-l">
- <view class="user-info-l-image">
- <image v-if="info.acceptCoverImage" :src="info.acceptCoverImage" mode="widthFix"></image>
- <image v-else src="/static/icon/img@2x.png" mode="widthFix"></image>
- </view>
- <view class="user-info-l-i">
- <view class="user-info-l-i-top">
- <text>{{info.acceptName || ''}}</text>
- <view class="user-info-l-i-top-jdf">鎺ュ崟鏂�</view>
- </view>
- <view class="user-info-l-i-bottom">
- <view class="user-info-l-i-bottom-item">
- <text>璇勫垎锛�</text>
- <text>{{info.score || '-'}}</text>
- </view>
- <view class="user-info-l-i-bottom-item">
- <text>鍗曟暟锛�</text>
- <text>{{info.receiveNum ? info.receiveNum : 0}}</text>
- </view>
- </view>
- </view>
- </view>
- <view class="user-info-r" @click="contactPhone(info.acceptPhone)" v-if="info.status ==2||info.status==3||info.status==5">
- <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
- <text>鑱旂郴甯堝倕</text>
- </view>
- </view>
- </view>
- <view class="order-info" >
- <view class="order-info-title">
- <view class="x"></view>
- <text v-if="info.type===0">鐢ㄥ伐鍗�-{{(info.workType===0?'閲囨憳宸�':(info.workType===1?'鍒嗘嫞宸�':'鍖呰宸�')) }}</text>
- <text v-if="info.type===1">杩愯揣鍗�-{{info.categoryName || ''}}</text>
- <text v-if="info.type===2">璁㈤鍗�</text>
-
- </view>
- <view v-if="info.type===0" class="order-info-wz">
- {{info.categoryName || ''}}锝渰{info.priceNum1 || '' }}{{feeFrom.priceParam1.unit}}{{feeFrom.priceParam2.name!=null?(' | '+info.priceNum2+feeFrom.priceParam2.unit):''}}</view>
- <view v-if="info.type===1" class="order-info-wz">{{info.carUnit || ''}}{{' | '}}{{info.transportTypeName || ''}}{{' | '}}{{info.transportNum || '' }}{{info.transportUnit||''}}{{' | '}}闇�{{info.priceNum2 || '' }}杈�</view>
- <view class="order-info-address" v-if="info.type!==1" @click="openAddr({ lat: info.lat, lgt: info.lgt, location: info.location })">
- <image src="/static/icon/order_ic_location@2x.png" mode="widthFix"></image>
- <view class="order-info-address-info">
- <text>{{info.location || '' }}</text>
- <text>{{info.locationRemark || '' }}</text>
- </view>
- </view>
- <view class="order-info-address" v-if="info.type!==1">
- <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image>
- <view class="order-info-address-info">
- <text>{{info.startDate || ''}}{{' 鑷� '}}{{info.endDate || ''}}({{info.totalDays||0}}澶�)</text>
- </view>
- </view>
- <view class="address" v-if="info.type===1 && wayList && wayList.length>0">
- <view class="address-xian"></view>
- <view class="address-row" v-for="(item,index) in wayList" style="display: block;margin: 10px" :key="index" @click="openAddr(item)">
- <image v-if="index === 0" src="/static/icon/ic_qidian@2x.png" mode="widthFix"></image>
- <image v-if="index >0 && index < wayList.length-1" src="/static/icon/ic_jingguo@2x.png" mode="widthFix"></image>
- <image v-if="index === wayList.length-1" src="/static/icon/ic_zhongdian@2x.png" mode="widthFix"></image>
- <view class="address-row-info">
- {{item.location || ''}}
- <image class="address-row-right" src="/static/icon/ar_address@2x.png" mode="widthFix"></image>
- </view>
- </view>
- </view>
- <view class="order-info-x"></view>
- <view class="order-info-supplement">
- <view class="order-info-supplement-title">闇�姹傝ˉ鍏咃細</view>
- <view class="order-info-supplement-val">{{info.supplement || '' }}</view>
- <view class="order-info-supplement-list">
- <view class="order-info-supplement-list-item" v-for="(item,index) in info.multifileList" v-if="info.multifileList && info.multifileList.length>0" :key="item.imgurl" @click="previemImg(index, info.multifileList)">
- <image v-if="item.fileurlFull" :src="item.fileurlFull" mode="widthFix"></image>
- </view>
- <view style="width: 156rpx; height: 0;"></view>
- <view style="width: 156rpx; height: 0;"></view>
- </view>
- </view>
- <view class="order-info-price">
- <view class="price-row" v-if="feeFrom.priceParam1.name">
- <view class="price-row-label">{{feeFrom.priceParam1.name}}</view>
- <view class="price-row-val" > {{(info.originPriceNum1||0) }}{{feeFrom.priceParam1.unit}} </view>
- </view>
- <view class="price-row" v-if="feeFrom.priceParam2.name">
- <view class="price-row-label">{{feeFrom.priceParam2.name}}</view>
- <view class="price-row-val" > {{(info.originPriceNum2||0) }}{{feeFrom.priceParam2.unit}} </view>
- </view>
- <view class="price-row">
- <view class="price-row-label">璐圭敤鏍囧噯</view>
- <view class="price-row-val" v-if="info.type !==2">{{((info.price||0)/100).toFixed(2) }}{{info.priceUnit || '' }}</view>
- <view class="price-row-val" v-if="info.type ===2">
- <text v-for="(item,index) in wayList">
- {{item.name || ''}}{{((item.price||0)/100).toFixed(2)}}鍏儃{item.num||0}}浠絳{index != wayList.length-1?'|':''}}
- </text>
- </view>
- </view>
- <view class="price-row">
- <view class="price-row-label">棰勪及鎬昏垂鐢�(鍏�)</view>
- <view class="price-row-val" :style="{color: (!isPushlishor&&info.status!=4&&info.status!=5) || (isPushlishor&&info.type!=2 &&info.status!=4&&info.status!=5) ? '#FF0000' : ''}">
- 楼{{((info.originEstimatedAccount||0)/100).toFixed(2) }}
- </view>
- </view>
- </view>
- <template v-if="info.type!=2&&(info.status==5|| info.status==4)">
- <view class="order-info-x"></view>
- <view class="order-info-supplement" >
- <view class="order-info-supplement-title">宸茬‘璁よ垂鐢�</view>
- </view>
- <view class="order-info-price">
- <view class="price-row" v-if="feeFrom.priceParam1.name">
- <view class="price-row-label">瀹為檯{{feeFrom.priceParam1.name}}</view>
- <view class="price-row-val" > {{(info.priceNum1||0) }}{{feeFrom.priceParam1.unit}} </view>
- </view>
- <view class="price-row" v-if="feeFrom.priceParam2.name">
- <view class="price-row-label">瀹為檯{{feeFrom.priceParam2.name}}</view>
- <view class="price-row-val" > {{(info.priceNum2||0) }}{{feeFrom.priceParam2.unit}} </view>
- </view>
- <view class="price-row" >
- <view class="price-row-label">鍏朵粬璐圭敤</view>
- <view class="price-row-val" >楼{{((info.confirmOtherFee||0)/100).toFixed(2) }} </view>
- </view>
- <view class="price-row">
- <view class="price-row-label">瀹為檯鎬昏垂鐢�(鍏�)</view>
- <view class="price-row-val" :style="{color: info.status !=4 ? '#FF0000' : ''}">
- 楼{{((info.estimatedAccount||0)/100).toFixed(2) }}
- </view>
- </view>
- <view class="price-row" >
- <view class="price-row-label">澶囨敞</view>
- <view class="price-row-val" >
- {{ info.confirmFeeRemark ||'' }}
- </view>
- </view>
- </view>
- </template>
- <template v-if="info.type==2 || info.status==4">
- <view class="order-info-x"></view>
- <view class="order-info-supplement" >
- <view class="order-info-supplement-title">瀹為檯璐圭敤</view>
- </view>
- <view class="order-info-price">
- <view class="price-row" v-if="isPushlishor">
- <view class="price-row-label" >瀹為檯鏀粯(鍏�)</view>
- <view class="price-row-val" style="color: #FF0000;">楼{{((info.payAccount||0)/100).toFixed(2) }} </view>
- </view>
- <view class="price-row" v-if="isAcceptor && info.status==4" >
- <view class="price-row-label">瀹為檯鍒拌处(鍏�)</view>
- <view class="price-row-val" style="color: #FF0000;">楼{{((info.receiveAccount||0)/100).toFixed(2) }} </view>
- </view>
-
- </view>
- </template>
- </view>
- <view class="order-info" v-if="info.commentStatus ===1">
- <view class="order-info-title">
- <text>璇勪环</text>
- </view>
- <u-rate :count="count" readonly activeColor="#FFC331" size="26" v-model="info.commentLevel"></u-rate>
- <view class="order-info-remark">
- {{ info.commentInfo || '-'}}
- </view>
- </view>
- <view class="order-ren" v-if="isAcceptor">
- <view class="order-ren-left">
- <view class="order-ren-left-img">
- <image v-if="info.releaseCoverImage" :src="info.releaseCoverImage" mode="widthFix"></image>
- <image v-else src="/static/icon/img@2x.png" mode="widthFix"></image>
- </view>
- <text>{{info.releaseName || ''}}</text>
- <view class="order-ren-left-tip">涓氫富</view>
- </view>
- <view class="order-ren-x"></view>
- <view class="order-ren-lx" v-if="info.status ==2||info.status==3||info.status==5" @click="contactPhone(info.releasePhone)">
- <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
- <text>鍙戝崟鏂�</text>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <text>璁㈠崟淇℃伅</text>
- </view>
- <view class="order-info-list">
- <view class="order-info-list-item" v-if="info.code">
- <text>璁㈠崟缂栧彿锛�</text>
- <text>{{info.code || ''}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.createTime">
- <text>涓嬪崟鏃堕棿锛�</text>
- <text>{{info.createTime||'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.acceptTime">
- <text>鎺ュ崟鏃堕棿锛�</text>
- <text>{{info.acceptTime||'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.workStartTime">
- <text>寮�濮嬫椂闂达細</text>
- <text>{{info.workStartTime||'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.confirmFeeTime">
- <text>璐圭敤纭鏃堕棿锛�</text>
- <text>{{info.confirmFeeTime||'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.finishTime">
- <text>瀹屾垚鏃堕棿锛�</text>
- <text>{{info.finishTime||'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.payTime">
- <text>鏀粯鏃堕棿锛�</text>
- <text>{{info.payTime||'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.payMethod && info.payMethod >= 0">
- <text>鏀粯鏂瑰紡锛�</text>
- <text>{{info.payMethod==0?'寰俊鏀粯':'-'}}</text>
- </view>
- <view class="order-info-list-item" v-if="info.wxExternalNo">
- <text>浜ゆ槗鍗曞彿锛�</text>
- <text>{{info.wxExternalNo || '-'}}</text>
- </view>
- </view>
- </view>
- <view style="width: 100%; height: calc(108rpx + env(safe-area-inset-bottom));" v-if="![99].includes(info.status)"></view>
- <view class="order-footer" v-if="![99].includes(info.status)">
- <template v-if="isPushlishor && info.isUpdate != 1 && info.status === 2 && info.canStart===1">
- <sunui-mverify v-if="1==2" hint="寮�濮嬩綔涓�" @change="getaccept($event)"></sunui-mverify>
- <view class="order-footer-btn" v-if="comparisonTime(info.startDate)">
- <view class="order-footer-btn-b" @click="show8 = true">寮�濮嬩綔涓�</view>
- </view>
- </template>
- <view class="order-footer-btn" v-else >
- <view class="order-footer-btn-a" @click="show = true" v-if="1==2&& isAcceptor && info.status ===2">鍙栨秷璁㈠崟</view>
- <view class="order-footer-btn-a" @click="show = true" v-if="isPushlishor && (info.status ===0 || info.status ===1|| info.status ===2)">鍙栨秷璁㈠崟</view>
- <view class="order-footer-btn-b" @click="show2=true" v-if="isPushlishor && (info.status ===4 && info.commentStatus!=1)">鍘昏瘎浠�</view>
- <view class="order-footer-btn-b" v-if="isPushlishor&&((info.status ===5 && info.type !==2)|| (info.status ===0 && info.type===2))" @click="show1 = true">{{info.type === 2 ? '缁х画鏀粯' : '瀹屾垚骞舵敮浠�'}}</view>
- <view class="order-footer-btn-b" @click="show7 = true" v-if=" info.type!==2 &&isAcceptor && info.status ===3">纭璐圭敤</view>
- <view class="order-footer-btn-b" v-if="isPushlishor && ((info.status ===3 && info.type===2))" @click="payment1">瀹屾垚浣滀笟</view>
- <view class="order-footer-btn-b" v-if="info.type !=2 && info.isUpdate!=1&& isPushlishor && (info.status ===0 || info.status ===1|| info.status ===2)" @click="jumpEdit()">淇敼璁㈠崟</view>
- <view class="order-footer-btn-b" @click="show5 =true" v-if="isAcceptor&& (info.isUpdate==1 && info.status ===2)">淇敼纭</view>
- <view class="order-footer-btn-b" @click="show6 =true" v-if="!isPushlishor && (info.status ===1)">鎶㈠崟</view>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 纭鍙栨秷璁㈠崟鍚楋紵
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="cancelDo">纭鍙栨秷</view>
- </view>
- </u-modal>
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show4"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 纭鍙栨秷璁㈠崟鍚楋紵
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="cancelDo">纭鍙栨秷</view>
- </view>
- </u-modal>
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show6"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 纭鎶㈠崟鍚楋紵
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show6 = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="acceptDo()">纭鎺ュ崟</view>
- </view>
- </u-modal>
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show8"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 寮�濮嬩綔涓氬悧锛�
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show8 = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="beginDo()">纭寮�濮�</view>
- </view>
- </u-modal>
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show5"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 鏄惁鍚屾剰璁㈠崟淇敼鍐呭锛�
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show5=false">鎴戝啀鎯虫兂</view>
- <view style="width: 20rpx; height: 100%;"></view>
- <view class="btn2" style="background-color: #f56c6c; color: #ffffff;" @click="confirmUpdDo(1)">涓嶅悓鎰�</view>
- <view style="width: 20rpx; height: 100%;"></view>
- <view class="btn2" @click="confirmUpdDo(0)">鍚屾剰</view>
- </view>
- </u-modal>
- <!-- 鏀粯寮圭獥 -->
- <u-popup :show="show1" round="15" mode="bottom">
- <view class="zhifu">
- <view class="zhifu-head">
- <view></view>
- <text>鏀粯璁㈠崟</text>
- <image @click="show1 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="zhifu-c">
- <view class="zhifu-c-info" v-if="info.type !== 2">
- 璇风‘璁ら噾棰濆苟鏀粯璐圭敤缁� <text>{{info.acceptName}}</text>
- </view>
- <view class="zhifu-c-info1">鏀粯閲戦锛�</view>
- <view class="zhifu-c-input">
- <image src="/static/icon/ic_money@2x.png" mode="widthFix"></image>
- <input type="number" v-model="amount" :disabled="info.type === 2" placeholder="璇疯緭鍏�" />
- </view>
- </view>
- <view class="zhifu-botton" @click="payment">纭鏀粯</view>
- </view>
- </u-popup>
- <!-- 鏀粯寮圭獥 -->
- <u-popup :show="show7" round="15" mode="bottom">
- <view class="querenfee">
- <view class="querenfee-head">
- <view></view>
- <text>璐圭敤纭</text>
- <image @click="show7 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="querenfee-c">
- <view class="querenfee-c-info1">璐圭敤鏍囧噯锛�</view>
- <viem class="money">{{((info.price||0)/100).toFixed(2) }}{{info.priceUnit || '' }}</viem>
- </view>
- <view class="querenfee-c" >
- <view class="querenfee-c-info1"><text style="color: red;">*</text>瀹為檯{{feeFrom.priceParam1.name}}:</view>
- <view class="querenfee-c-input">
- <input type="number" placeholder-style="color: #999999; font-size: 50rpx; font-weight: 500;" @input="getTotal" v-model="feeFrom.priceNum1" placeholder="0" />
- </view>
- <text class="querenfee-c-danw">{{feeFrom.priceParam1.unit}}</text>
- </view>
- <view class="querenfee-c" v-if="feeFrom.priceParam2.name !=null">
- <view class="querenfee-c-info1"><text style="color: red;">*</text>瀹為檯{{feeFrom.priceParam2.name}}锛�</view>
- <view class="querenfee-c-input">
- <input type="number" v-model="feeFrom.priceNum2" placeholder-style="color: #999999; font-size: 50rpx; font-weight: 500;" @input="getTotal" placeholder="0" />
- </view>
- <text class="querenfee-c-danw" >{{feeFrom.priceParam2.unit}}</text>
- </view>
- <view class="querenfee-c">
- <view class="querenfee-c-info1">鍏朵粬璐圭敤锛�</view>
- <view class="querenfee-c-input">
- <input type="digit" v-model="feeFrom.confirmOtherFee" placeholder-style="color: #999999; font-size: 50rpx; font-weight: 500;" @input="getTotal" placeholder="0" />
- </view>
- <text class="querenfee-c-danw">鍏�</text>
- </view>
- <view class="querenfee-c" style="flex-direction: column;">
- <view class="querenfee-c-info1" style="margin-bottom: 30rpx;">澶囨敞淇℃伅锛�</view>
- <view class="querenfee-c-input" style="width: 100%; height: 200rpx; padding: 30rpx; box-sizing: border-box;">
- <u--textarea placeholder="濡傞渶澶囨敞锛岃杈撳叆" border="none" v-model="feeFrom.confirmFeeRemark" ></u--textarea>
- </view>
- </view>
- <view class="querenfee-c">
- <view class="querenfee-c-info1">瀹為檯鎬昏垂鐢細</view>
- <view class="querenfee-c-price">
- 锟{confirmPayFee}}
- </view>
- <!-- <view class="querenfee-c-input">
- <image src="/static/icon/ic_money@2x.png" mode="widthFix"></image>
- <text class="querenfee-c-input money">{{confirmPayFee}}</text>
- </view> -->
- </view>
- <view class="querenfee-c" style="margin-top: 12rpx;">
- <view class="querenfee-tips">鏈�缁堣垂鐢ㄧ敱鍙戝崟鏂规敮浠橈紝鎺ュ崟鏂规敹鍒扮殑閲戦灏嗘墸闄ゅ钩鍙版墜缁垂鐢�</view>
- </view>
- <view class="querenfee-botton" @click="confirmFee">纭璐圭敤</view>
- </view>
- </u-popup>
- <!-- 璇勪环 -->
- <u-popup :show="show2" round="15" mode="bottom">
- <view class="zhifu">
- <view class="zhifu-head">
- <view></view>
- <text>璇勪环</text>
- <image @click="show2 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="zhifu-pj">
- <view class="zhifu-pj-label">鏈嶅姟璇勪环</view>
- <view class="zhifu-pj-val">
- <u-rate :count="count" activeColor="#FFC331" size="26" v-model="value" @click=""></u-rate>
- </view>
- </view>
- <view class="zhifu-textarea">
- <image src="/static/icon/ic_pingjia@2x.png" mode="widthFix"></image>
- <u--textarea placeholder="璇疯璇存偍瀵规湰娆′氦鏄撶殑鎰熷彈" border="none" v-model="commentInfo" count></u--textarea>
- </view>
- <view class="zhifu-botton" style="margin-top: 60rpx;" @click="commentDo">绔嬪嵆璇勪环</view>
- </view>
- </u-popup>
- </view>
-</template>
-
-<script>
- import { mapState } from 'vuex'
- import sunuiMverify from '@/components/sunui-mverify/sunui-mverify.vue';
- export default {
- computed: {
- ...mapState( ['userInfo'])
- },
- data() {
- return {
- isPushlishor:false,//鏄惁鍙戝崟鏂�
- isAcceptor:false,//鏄惁鎺ュ崟鏂�
- show: false,
- show1: false,
- show2: false,
- count: 5,
- show3:false,
- timer:null,
- timer1:null,
- show4:false,
- show5:false,
- show6:false,
- show7:false,
- show8:false,
- actionFlag:null,
- timeInfo:'00:00:00',
- timeInfo1:'00:00:00',
- lessTime:null,
- lessTime1:null,
- value:0,
- wayList:[],
- bgImg: require('@/static/image/bg_green@2x.png'),
- id: null,
- loading:false,
- commentInfo:'',
- info: {},
- amount: '',
- confirmPayFee:0.00,
- feeFrom:{
- priceParam1:{
- name:null,
- unit:null
- },
- priceParam2:{
- name:null,
- unit:null
- },
- priceNum1:null,
- priceNum2:null,
- confirmFeeRemark:null,
- confirmOtherFee:null,
- }
- };
- },
- onLoad(options) {
- console.log(options)
- var id = options.id
- this.id = id
- this.actionFla=options.flag
- },
- onShow(options) {
- this.getOrderData()
- console.log(this.comparisonTime('2025-09-13'))
- },
- methods:{
- comparisonTime(start) {
- let startDate = new Date().getTime();
- let endDate = new Date(start).getTime();
-
- return startDate >= endDate;
- },
- openAddr(e) {
- uni.openLocation({
- latitude: e.lat,
- longitude: e.lgt,
- name: e.location
- })
- },
- beginDo(e) {
- var that = this
- uni.requestSubscribeMessage({
- tmplIds: ['3rOz7DAnawrkKDM8b5_XW4FLivISWYov6d7QSC4ORsg'],
- success(res) {
- that.startJobs()
- },
- fail(err) {
- that.startJobs()
- }
- })
- },
- startJobs(e) {
- var that = this
- this.$u.api.begin({ orderId: this.info.id })
- .then(res => {
- if (res.code === 200) {
- that.show8=false
- that.getOrderData()
- }
- })
- },
-
- // 淇敼
- jumpEdit() {
- if (this.info.type === 0 && this.info.workType === 0) {
- uni.navigateTo({
- url: `/pages/using-workers/using-workers?id=${this.info.id}`
- })
- } else if (this.info.type === 0 && this.info.workType === 1) {
- uni.navigateTo({
- url: `/pages/sorting/sorting?id=${this.info.id}`
- })
- } else if (this.info.type === 0 && this.info.workType === 2) {
- uni.navigateTo({
- url: `/pages/packaging-worker/packaging-worker?id=${this.info.id}`
- })
- } else if (this.info.type === 1) {
- uni.navigateTo({
- url: `/pages/freight/freight?id=${this.info.id}`
- })
- }
- },
- payment1() {
- var that = this
- this.$u.api.doneOrder({
- orderId: this.info.id
- }).then(res => {
- if (res.code === 200) {
- that.getOrderData()
- }
- })
- },
- getTotal() {
- this.$u.api.getTotal({
- price: this.info.price,
- priceUnit: this.feeFrom.priceParam1.unit,
- priceNum1: this.feeFrom.priceNum1 || 0,
- priceNum2: this.feeFrom.priceNum2 || 0,
- confirmOtherFee:(this.feeFrom.confirmOtherFee||0)*100,
- type: this.info.type,
- carType:this.info.carType ,
- workType: this.info.workType
- }).then(res => {
- if (res.code === 200) {
- this.confirmPayFee = (res.data / 100) || '0'
- }
- })
- },
- confirmFee(){
- var that =this
- if (!this.feeFrom.priceNum1) {
- return uni.showToast({
- title: '瀹為檯' + this.feeFrom.priceParam1.name + '涓嶈兘涓虹┖',
- icon: 'none'
- })
- }
- if (this.feeFrom.priceParam2.name && !this.feeFrom.priceNum2) {
- return uni.showToast({
- title: '瀹為檯' + this.feeFrom.priceParam2.name + '涓嶈兘涓虹┖',
- icon: 'none'
- })
- }
- this.$u.api.confirmFee({
- confirmFeeRemark: this.feeFrom.confirmFeeRemark,
- confirmOtherFee: (this.feeFrom.confirmOtherFee||0)*100,
- orderId: this.info.id,
- priceNum1: this.feeFrom.priceNum1,
- priceNum2: this.feeFrom.priceNum2
- }).then(res => {
- if (res.code === 200) {
- that.show7 = false
- uni.showToast({ title: '鎿嶄綔鎴愬姛', icon: 'success', duration: 2000 });
- that.getOrderData()
- }
- })
- },
- payment() {
- var that = this
- // 璁㈤
- if (this.info.type === 2) {
- this.$u.api.reusePay({
- orderId: this.info.id
- }).then(res => {
- if (res.code === 200) {
- wx.requestPayment({
- timeStamp: res.data.object.timeStamp,
- nonceStr: res.data.object.nonceStr,
- package: res.data.object.packageVal,
- signType: res.data.object.signType,
- paySign: res.data.object.paySign,
- success (res1) {
- if (res1.errMsg = 'requestPayment:ok') {
- that.show1 = false
- uni.showToast({ title: '鏀粯鎴愬姛', icon: 'success', duration: 2000 });
- that.getOrderData()
- }
- },
- fail(err) {
- console.log(err)
- }
- })
- }
- })
- } else {
- this.$u.api.doneOrder({
- orderId: this.info.id,
- amount: Number(this.amount) * 100
- }).then(res => {
- if (res.code === 200) {
- wx.requestPayment({
- timeStamp: res.data.object.timeStamp,
- nonceStr: res.data.object.nonceStr,
- package: res.data.object.packageVal,
- signType: res.data.object.signType,
- paySign: res.data.object.paySign,
- success (res1) {
- if (res1.errMsg = 'requestPayment:ok') {
- that.show1 = false
- uni.showToast({ title: '鏀粯鎴愬姛', icon: 'success', duration: 2000 });
- that.getOrderData()
- }
- },
- fail(err) {
- console.log(err)
- }
- })
- }
- })
- }
- },
- commentDo(){
- var that = this
- var param = { info: that.commentInfo,level:that.value||0,orderId: this.id}
- this.$u.api.comment(param).then(res =>{
- if(res.code ===200){
- that.show2=false
- uni.showToast({ title: '璇勪环鎴愬姛', icon: 'error', duration: 2000 });
- that.getOrderData()
- }
- })
- },
- confirmUpdDo(status){
- var that = this
- var param = {orderId: this.id,status:status}
- this.$u.api.confirmUpd(param).then(res =>{
- if(res.code ===200){
- that.show5=false
- uni.showToast({ title: '纭鎴愬姛', icon: 'error', duration: 2000 });
- if(status==1){
- uni.navigateBack({ delta: 1 })
- }else{
- that.getOrderData()
- }
- }
- })
- },
- acceptDoBiz(){
- var that = this
- var param = {orderId: this.id}
- this.$u.api.accept(param).then(res =>{
- if(res.code ===200){
- that.show6=false
- uni.showToast({ title: '鎶㈠崟鎴愬姛', icon: 'error', duration: 2000 });
- that.getOrderData()
- }
- })
- },
- acceptDo() {
- var that = this;
- uni.requestSubscribeMessage({
- tmplIds: ['AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8','3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk','tDpYImlrdv-0d3euTrHbYZ1cEZvjVHTNlqHvV0tpLHg'],
- success(res) {
- that.acceptDoBiz()
- },
- fail(err) {
- that.acceptDoBiz()
- }
- })
- },
- cancelDo(){
- var that = this
- uni.requestSubscribeMessage({
- tmplIds: ['AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8'],
- success(res) {
- var param ={ orderId:that.id}
- that.$u.api.cancelOrder(param).then(res =>{
- if(res.code ===200){
- that.show=false
- uni.showToast({ title: '璁㈠崟鍙栨秷鎴愬姛', icon: 'error', duration: 2000 });
- if(that.userInfo.id !== that.info.releaseMemberId){
- uni.navigateBack({ delta: 1 })
- }else{
- that.getOrderData()
- }
- }
- })
- },
- fail(err) {
- console.log(err)
- }
- })
-
- },
- previemImg(current, arr) {
- let urls = arr.map(item => item.fileurlFull)
- uni.previewImage({ current, urls });
- },
- contactPhone(phone){
- if(phone !=null && phone!=''){
- uni.makePhoneCall({
- phoneNumber: phone
- })
- }
- },
- //璁㈠崟鐘舵��:0=寰呮敮浠� 1=寰呮帴鍗曪紱2=宸叉帴鍗曪紱3=杩涜涓紱4=宸插畬鎴愶紱99=宸插彇娑�
- getStatusInfo(){
- if(this.isPushlishor){
- //濡傛灉鏄彂甯冩柟
- if(this.info.status === 0){
- return '璇峰敖蹇畬鎴愭敮浠橈紝鍙戝竷璁㈠崟'
- }else if(this.info.status === 1){
- return '鎮ㄨ鍗曞凡缁忔垚鍔熷彂璧凤紝璇疯�愬績绛夊緟鎺ュ崟'
- }else if(this.info.status === 5){
- return '鎺ュ崟鏂瑰凡纭璐圭敤锛岃鏀粯'
- }else if(this.info.status === 2){
- if(this.info.isUpdate==1){
- return '璁㈠崟宸蹭慨鏀癸紝璇风瓑寰呮帴鍗曟柟纭'
- }
- return '璁㈠崟宸叉帴鍗曪紝璇风偣鍑讳笅鏂光�滃紑濮嬩綔涓氣�濇寜閽�'
- }else if(this.info.status === 3){
- if(this.info.type ==2){
- return '璁㈠崟浣滀笟杩涜涓紝璇风偣鍑讳笅鏂光�滃畬鎴愨�濇寜閽畬鎴愪綔涓�'
- }
- return '璁㈠崟姝e湪杩涜涓紝绛夊緟浣滀笟瀹屾垚鎺ュ崟鏂圭‘璁よ垂鐢�'
- }else if(this.info.status === 5){
- return '鎺ュ崟鏂瑰凡纭璐圭敤锛岃鐐瑰嚮涓嬫柟鈥滃畬鎴愬苟鏀粯鈥濇寜閽�'
- }else if(this.info.status === 4){
- return this.info.commentStatus==1?'鎮ㄧ殑璁㈠崟宸插畬鎴愶紝娆㈣繋鍐嶆浣跨敤': '鎮ㄧ殑璁㈠崟宸插畬鎴愶紝璇峰強鏃惰瘎浠�'
- }else if(this.info.status === 99){
- return '璁㈠崟宸插彇娑�'
- }
- //濡傛灉鏄帴鍗曟柟
-
- }else{
- if(this.info.status === 0){
- return ''
- }else if(this.info.status === 1){
- return '鍙戝崟鏂瑰凡鎴愬姛鍙戣捣璁㈠崟锛屾偍鍙互杩涜鎺ュ崟'
- }else if(this.info.status === 2){
- if(this.info.isUpdate==1){
- return ''
- }
- return '鎮ㄥ凡鎺ュ崟锛岃鎸夋椂瀹屾垚璁㈠崟浠诲姟'
- }else if(this.info.status === 5){
- return '鎮ㄥ凡纭璐圭敤锛岀瓑寰呭彂鍗曟柟鏀粯'
- }else if(this.info.status === 3){
- return '璁㈠崟杩涜涓紝璇锋寜鏃跺畬鎴愯鍗曚换鍔�'
- }else if(this.info.status === 4){
- return '鎮ㄧ殑璁㈠崟宸插畬鎴�'
- }else if(this.info.status === 99){
- return '璁㈠崟宸插彇娑�'
- }
- }
- },
- updateTimeInfo1(){
- if(this.timer1){
- clearInterval(this.timer1)
- }
- var that =this
- this.lessTime1 = Math.floor( Number(that.info.cancelCountdown || 0)/1000) ;
- if(this.lessTime1>0){
- this.timer1 = setInterval(function(){
- let h = Math.floor(that.lessTime1/60/60) ;
- let m = Math.floor((that.lessTime1 - h*60*60)/60);
- let s= Math.floor(that.lessTime1- h*60*60 -m*60);
- that.timeInfo1 =(h<10?'0':'')+ h+":"+(m<10?'0':'')+m+":"+(s<10?'0':'')+s;
- that.lessTime1 =that.lessTime1-1;
- if(that.lessTime1 <=0){
- that.timeInfo1 ="00:00:00"
- clearInterval(that.timer1)
- }
- // console.log( that.timeInfo)
- },1000)
- }
-
- },
- updateTimeInfo(){
- if(this.timer){
- clearInterval(this.timer)
- }
- var that =this
- this.lessTime = Math.floor( Number(that.info.confirmCountdown || 0)/1000) ;
- if(this.lessTime>0){
- this.timer = setInterval(function(){
- let h = Math.floor(that.lessTime/60/60) ;
- let m = Math.floor((that.lessTime - h*60*60)/60);
- let s= Math.floor(that.lessTime- h*60*60 -m*60);
- that.timeInfo =(h<10?'0':'')+ h+":"+(m<10?'0':'')+m+":"+(s<10?'0':'')+s;
- that.lessTime =that.lessTime-1;
- // console.log( that.timeInfo)
- if(that.lessTime<=0){
- that.timeInfo ="00:00:00"
- clearInterval(that.timer)
- }
- },1000)
- }
-
- },
- getOrderData(){
- var that = this
- var param ={ orderId:that.id}
- this.isPushlishor =false
- this.isAcceptor =false
- this.$u.api.getDetail(param).then(res =>{
- if(res.code ===200){
- if(that.userInfo.id === res.data.releaseMemberId ){
- //濡傛灉鏄彂鍗曟柟
- that.isPushlishor =true
- }else if(that.userInfo.id ===res.data.acceptMemberId ){
- //濡傛灉鏄帴鍗曟柟
- that.isAcceptor =true
- }
- // if(that.isAcceptor ||that.isPushlishor ){
- that.info = res.data
- that.amount = ((that.info.estimatedAccount || 0) / 100).toFixed(2)
- if(that.info.wayInfo){
- that.wayList = JSON.parse(that.info.wayInfo)
- }
- if(res.data.isUpdate == 1){
- that.updateTimeInfo()
- }
- if(res.data.status == 0){
- that.updateTimeInfo1()
- }
- that.initPriceNumParam()
- // }else{
- // uni.showToast({ title: '璁㈠崟淇℃伅涓嶅瓨鍦�', icon: 'error', duration: 2000 });
- // }
- }
- })
- },
- initPriceNumParam(){
- this.feeFrom.priceParam1.name =null
- this.feeFrom.priceParam1.unit =null
- this.feeFrom.priceParam2.name =null
- this.feeFrom.priceParam2.unit =null
- if(this.info.type==0 && this.info.workType==1){
- //鍒嗘嫞宸�
- this.feeFrom.priceParam1.name ='鐢ㄥ伐澶╂暟'
- this.feeFrom.priceParam1.unit ='澶�'
- this.feeFrom.priceParam2.name ='鐢ㄥ伐浜烘暟'
- this.feeFrom.priceParam2.unit ='浜�'
- }else if(this.info.type==0 && this.info.workType==0){
- //閲囨憳宸�
- this.feeFrom.priceParam1.name ='閲囨憳閲嶉噺'
- this.feeFrom.priceParam1.unit ='鏂�'
- this.feeFrom.priceParam2.name =null
- this.feeFrom.priceParam2.unit =null
- }else if(this.info.type==0 && this.info.workType==2){
- //鍖呰宸�
- if(this.info.carType==0){
- //鎸夊ぉ
- this.feeFrom.priceParam1.name ='鐢ㄥ伐澶╂暟'
- this.feeFrom.priceParam1.unit ='澶�'
- this.feeFrom.priceParam2.name ='鐢ㄥ伐浜烘暟'
- this.feeFrom.priceParam2.unit ='浜�'
- }else if(this.info.carType==1){
- //鎸夊皬鏃�
- this.feeFrom.priceParam1.name ='宸ヤ綔鏃堕暱'
- this.feeFrom.priceParam1.unit ='灏忔椂'
- this.feeFrom.priceParam2.name ='鐢ㄥ伐浜烘暟'
- this.feeFrom.priceParam2.unit ='浜�'
- }else if(this.info.carType==2){
- //鎸夐噸閲�
- this.feeFrom.priceParam1.name ='鍖呰閲嶉噺'
- this.feeFrom.priceParam1.unit ='鏂�'
- this.feeFrom.priceParam2.name ='鐢ㄥ伐浜烘暟'
- this.feeFrom.priceParam2.unit ='浜�'
- }
- }else if(this.info.type==1 && this.info.carType==0){
- //杩愯揣鍗� 鎸夊ぉ鏁�
- this.feeFrom.priceParam1.name ='鐢ㄨ溅澶╂暟'
- this.feeFrom.priceParam1.unit ='澶�'
- }else if(this.info.type==1 && this.info.carType==1){
- //杩愯揣鍗� 鎸夋鏁�
- this.feeFrom.priceParam1.name ='鐢ㄨ溅娆℃暟'
- this.feeFrom.priceParam1.unit ='娆�'
- }
- }
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7;
- }
- .u-textarea__count {
- background-color: rgba(0, 0, 0, 0) !important;
- }
- .u-textarea {
- width: 100% !important;
- height: 100% !important;
- padding: 0 !important;
- background-color: rgba(0, 0, 0, 0) !important;
- }
- textarea {
- width: 100% !important;
- height: 100% !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .order {
- width: 100%;
- .querenfee {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
-
- .querenfee-textarea {
- width: 100%;
- height: 364rpx;
- padding: 30rpx;
- box-sizing: border-box;
- background: #F7F7F7;
- border-radius: 16rpx;
- border: 1rpx solid #EEEEEE;
- margin-top: 48rpx;
- display: flex;
- align-items: start;
- image {
- flex-shrink: 0;
- width: 29rpx;
- height: 29rpx;
- margin-right: 10rpx;
- }
- }
-
- .querenfee-head {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- image {
- width: 28rpx;
- height: 28rpx;
- }
- text {
- font-weight: 500;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .querenfee-c {
- width: 100%;
- margin-top: 46rpx;
- display: flex;
- justify-content: space-between;
- .querenfee-c-info {
- align-items: center;
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 30rpx;
- text {
- color: #00BC12;
- margin-left: 10rpx;
- }
- }
- .querenfee-c-danw {
- display: flex;
- align-items: center;
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- margin-left: 10rpx;
- }
- .querenfee-c-price {
- font-weight: 600;
- font-size: 44rpx;
- color: #FF0000;
- }
- .querenfee-c-info1 {
- width: 50%;
- display: flex;
- align-items: center;
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- .querenfee-tips{
- width: 100%;
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- line-height: 36rpx;
- }
- .money{
- width: 50%;
- text-align: right;
- font-weight: 600;
- font-size: 34rpx;
- color: #FF0000 !important;
- }
- .querenfee-c-input {
- width: 260rpx;
- height: 100rpx;
- padding: 10rpx 30rpx;
- box-sizing: border-box;
- background: #F7F7F7;
- border-radius: 10rpx;
- border: 1rpx solid #EEEEEE;
- display: flex;
- align-items: center;
- image {
- flex-shrink: 0;
- width: 28rpx;
- height: 60rpx;
- margin-right: 24rpx;
- }
- input {
- flex: 1;
- height: 100%;
- font-weight: 500;
- font-size: 56rpx;
- color: #222222;
- text-align: right;
- .querenfee-c-input-placeholder {
- font-size: 32rpx !important;
- }
- }
- }
- }
- .querenfee-botton {
- width: 100%;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- margin-top: 40rpx;
- }
- }
- .zhifu {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- .zhifu-textarea {
- width: 100%;
- height: 364rpx;
- padding: 30rpx;
- box-sizing: border-box;
- background: #F7F7F7;
- border-radius: 16rpx;
- border: 1rpx solid #EEEEEE;
- margin-top: 48rpx;
- display: flex;
- align-items: start;
- image {
- flex-shrink: 0;
- width: 29rpx;
- height: 29rpx;
- margin-right: 10rpx;
- }
- }
- .zhifu-pj {
- width: 100%;
- display: flex;
- align-items: center;
- margin-top: 40rpx;
- .zhifu-pj-label {
- flex-shrink: 0;
- margin-right: 40rpx;
- }
- .zhifu-pj-val {
- flex: 1;
-
- }
- }
- .zhifu-head {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- image {
- width: 28rpx;
- height: 28rpx;
- }
- text {
- font-weight: 500;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .zhifu-c {
- width: 100%;
- margin-top: 46rpx;
- .zhifu-c-info {
- display: flex;
- align-items: center;
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 30rpx;
- text {
- color: #00BC12;
- margin-left: 10rpx;
- }
- }
- .zhifu-c-info1 {
- font-weight: 400;
- font-size: 30rpx;
- color: #666666;
- margin-bottom: 20rpx;
- }
- .money{
- color: red !important;
- }
- .zhifu-c-input {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- height: 112rpx;
- background: #F7F7F7;
- border-radius: 10rpx;
- border: 1rpx solid #EEEEEE;
- display: flex;
- align-items: center;
- image {
- flex-shrink: 0;
- width: 28rpx;
- height: 60rpx;
- margin-right: 24rpx;
- }
- input {
- flex: 1;
- height: 100%;
- font-weight: 500;
- font-size: 50rpx;
- color: #222222;
- }
- }
- }
- .zhifu-botton {
- width: 100%;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- margin-top: 264rpx;
- }
- }
- .slot-content {
- width: 100%;
- text-align: center;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- margin: 30rpx 0;
- }
- .btn1 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 400;
- font-size: 32rpx;
- color: #666666;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .btn2 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- .order-footer {
- width: 100%;
- position: fixed;
- bottom: 0;
- left: 0;
- background-color: #ffffff;
- z-index: 9;
- height: calc(108rpx + env(safe-area-inset-bottom));
- .order-footer-btn {
- width: 100%;
- height: 108rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .order-footer-btn-a {
- flex: 1;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #666666;
- margin-right: 2rpx;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .order-footer-btn-b {
- flex: 1;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- }
- }
- .order-ren {
- width: 100%;
- height: 150rpx;
- background: #FFFFFF;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 30rpx;
- box-sizing: border-box;
- margin-bottom: 20rpx;
- .order-ren-left {
- display: flex;
- align-items: center;
- flex: 1;
- .order-ren-left-img {
- width: 80rpx;
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- border-radius: 50%;
- margin-right: 15rpx;
- image {
- width: 100%;
- }
- }
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- margin-right: 15rpx;
- }
- .order-ren-left-tip {
- padding: 4rpx 12rpx;
- border-radius: 8rpx;
- border: 2rpx solid #FD9E24;
- font-weight: 400;
- font-size: 24rpx;
- color: #FF7200;
- }
- }
- .order-ren-x {
- width: 1rpx;
- height: 90rpx;
- margin-right: 50rpx;
- background-color: #E5E5E5;
- }
- .order-ren-lx {
- flex-shrink: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 34rpx;
- height: 34rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #222222;
- }
- }
- }
- .order-info {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .order-info-list {
- width: 100%;
- .order-info-list-item {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #777777;
- }
- }
- }
- .order-info-remark {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- margin-top: 36rpx;
- }
- .order-info-title {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- .x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .order-info-wz {
- font-weight: 400;
- font-size: 28rpx;
- color: #888888;
- margin-bottom: 30rpx;
- }
- .order-info-x {
- width: 100%;
- height: 1rpx;
- margin: 20rpx 0 30rpx 0;
- background-color: #E5E5E5;
- }
- .order-info-price {
- width: 100%;
- display: flex;
- flex-direction: column;
- .price-row {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .price-row-label {
- flex-shrink: 0;
- margin-right: 30rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #777777;
- }
- .price-row-val {
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .order-info-supplement {
- width: 100%;
- margin-bottom: 40rpx;
- .order-info-supplement-title {
- font-weight: 600;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 16rpx;
- }
- .order-info-supplement-val {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- margin-bottom: 20rpx;
- }
- .order-info-supplement-list {
- width: 100%;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- justify-content: space-between;
- .order-info-supplement-list-item {
- width: 156rpx;
- height: 156rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 8rpx;
- overflow: hidden;
- image {
- width: 100%;
- }
- }
- }
- }
- .order-info-address {
- width: 100%;
- display: flex;
- align-items: start;
- margin-bottom: 20rpx;
- image {
- width: 28rpx;
- height: 28rpx;
- flex-shrink: 0;
- margin-right: 18rpx;
- }
- .order-info-address-info {
- flex: 1;
- display: flex;
- flex-direction: column;
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 28rpx;
- color: #222222;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-top: 16rpx;
- }
- }
- }
- }
- }
- .order-quxiaole {
- padding: 20rpx 0;
- box-sizing: border-box;
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: 600;
- font-size: 40rpx;
- color: #111111;
- background-color: #ffffff;
- }
- .order-head {
- width: 100%;
- height: 172rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- background-repeat: no-repeat;
- background-size: 100% 100%;
- .order-head-status {
- font-weight: 600;
- font-size: 40rpx;
- color: #111111;
- }
- .order-head-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #777777;
- margin-top: 18rpx;
- }
- }
- .order-user {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- .order-user-info {
- width: 100%;
- height: 150rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- background: #F7F8F5;
- border-radius: 16rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .user-info-l {
- flex: 1;
- display: flex;
- align-items: center;
- .user-info-l-image {
- flex-shrink: 0;
- width: 80rpx;
- height: 80rpx;
- border-radius: 50%;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: 20rpx;
- image {
- width: 100%;
- }
- }
- .user-info-l-i {
- flex: 1;
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- .user-info-l-i-top {
- width: 100%;
- display: flex;
- align-items: center;
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .user-info-l-i-top-jdf {
- width: 96rpx;
- height: 42rpx;
- line-height: 42rpx;
- text-align: center;
- font-weight: 400;
- font-size: 24rpx;
- color: #FF7200;
- border-radius: 8rpx;
- border: 2rpx solid #FD9E24;
- margin-left: 10rpx;
- }
- }
- .user-info-l-i-bottom {
- display: flex;
- align-items: center;
- margin-top: 14rpx;
- .user-info-l-i-bottom-item {
- display: flex;
- align-items: center;
- margin-right: 60rpx;
- &:last-child {
- margin: 0 !important;
- }
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 24rpx;
- color: #777777;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- }
- }
- }
- }
- }
- }
- .user-info-r {
- flex-shrink: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 33rpx;
- height: 33rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #222222;
- margin-top: 12rpx;
- }
- }
- }
- }
- .order-quxiao {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: #ffffff;
- .order-quxiao-btn {
- width: 160rpx;
- height: 64rpx;
- line-height: 64rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- border-radius: 34rpx;
- border: 1rpx solid #B2B2B2;
- }
- .order-quxiao-btn1 {
- width: 160rpx;
- height: 64rpx;
- line-height: 64rpx;
- text-align: center;
- border-radius: 34rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- margin-left: 20rpx;
- border: 1rpx solid #00BC12;
- }
- }
- }
- .address {
- width: 100%;
- background: #F7F7F7;
- border-radius: 16rpx;
- padding: 30rpx;
- box-sizing: border-box;
- margin-bottom: 24rpx;
- position: relative;
- .address-xian {
- position: absolute;
- top: 17px;
- left: 24px;
- width: 1rpx;
- height: calc(100% - 60rpx);
- border-right: 2rpx dashed #B2B2B2;
- }
- .address-row {
- position: relative;
- z-index: 2;
- width: 100%;
- display: flex !important;
- margin-bottom: 32rpx ;
- margin-left: 0rpx !important;
- margin-top: 0rpx !important;
- &:last-child {
- margin-bottom: 0 !important;
- }
- image {
- width: 36rpx;
- height: 36rpx;
- flex-shrink: 0;
- margin-right: 24rpx;
- }
- .address-row-info {
- width: 100%;
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- .address-row-right {
- width: 8rpx;
- height: 16rpx;
- margin-left: 12rpx;
- margin-top: 15rpx;
- }
- }
- }
- }
-</style>
diff --git a/small-program/pages/order-food/order-food.vue b/small-program/pages/order-food/order-food.vue
deleted file mode 100644
index 9e62cc0..0000000
--- a/small-program/pages/order-food/order-food.vue
+++ /dev/null
@@ -1,791 +0,0 @@
-<template>
- <view class="order">
- <!-- <view class="order-quxiaole">
- 宸插彇娑�
- </view> -->
- <view class="order-head" :style="{ backgroundImage: 'url(' + bgImg + ')' }">
- <view class="order-head-status">寰呮帴鍗�</view>
- <view class="order-head-info">鎮ㄥ凡缁忔垚鍔熷彂璧风敤宸ュ崟锛岃鑰愬績绛夊緟鎺ュ崟</view>
- </view>
- <view class="order-quxiao">
- <view class="order-quxiao-btn">鍙栨秷璁㈠崟</view>
- </view>
- <view class="order-user">
- <view class="order-user-info">
- <view class="user-info-l">
- <view class="user-info-l-image">
- <image src="/static/logo.png" mode="widthFix"></image>
- </view>
- <view class="user-info-l-i">
- <view class="user-info-l-i-top">鑾茶姳鍔冲姟鍏徃</view>
- <view class="user-info-l-i-bottom">
- <view class="user-info-l-i-bottom-item">
- <text>璇勫垎锛�</text>
- <text>90</text>
- </view>
- <view class="user-info-l-i-bottom-item">
- <text>鍗曟暟锛�</text>
- <text>100</text>
- </view>
- </view>
- </view>
- </view>
- <view class="user-info-r">
- <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
- <text>鑱旂郴甯堝倕</text>
- </view>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <view class="x"></view>
- <text>鐢ㄥ伐鍗�-閲囨憳宸�</text>
- </view>
- <view class="order-info-wz">钁¤悇锝�2000鏂�</view>
- <view class="order-info-address">
- <image src="/static/icon/order_ic_location@2x.png" mode="widthFix"></image>
- <view class="order-info-address-info">
- <text>闀挎睙瑗胯矾澶ц渶灞辨.鏋楀叕鍥タ闂ㄤ繚瀹夊</text>
- <text>鍦扮偣鎻忚堪鏂囧瓧鍦扮偣鎻忚堪鍦扮偣鎻忚堪鏂囧瓧</text>
- </view>
- </view>
- <view class="order-info-address">
- <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image>
- <view class="order-info-address-info">
- <text>闀挎睙瑗胯矾澶ц渶灞辨.鏋楀叕鍥タ闂ㄤ繚瀹夊</text>
- </view>
- </view>
- <view class="order-info-x"></view>
- <view class="order-info-supplement">
- <view class="order-info-supplement-title">闇�姹傝ˉ鍏咃細</view>
- <view class="order-info-supplement-val">鐢峰コ閮藉彲锛屽寘鍗堥キ锛屽共娲婚夯鍒╋紝鏃╀笂9鐐瑰埌涓嬪崍4鐐癸紝鍙厤璐瑰甫1鏂よ憽钀勫洖瀹�</view>
- <view class="order-info-supplement-list">
- <view class="order-info-supplement-list-item" v-for="(item,index) in 4" :key="index">
- <image src="/static/logo.png" mode="widthFix"></image>
- </view>
- <view style="width: 156rpx; height: 0;"></view>
- <view style="width: 156rpx; height: 0;"></view>
- </view>
- </view>
- <view class="order-info-price">
- <view class="price-row">
- <view class="price-row-label">璐圭敤鏍囧噯</view>
- <view class="price-row-val">0.5鍏�/鏂�</view>
- </view>
- <view class="price-row">
- <view class="price-row-label">棰勪及鎬昏垂鐢�</view>
- <view class="price-row-val" style="color: #FF0000;">楼1000.00</view>
- </view>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <text>璇勪环</text>
- </view>
- <u-rate :count="count" activeColor="#FFC331" size="26" v-model="value"></u-rate>
- <view class="order-info-remark">
- 骞叉椿鍒╄惤鏁堢巼楂樺共娲诲埄钀芥晥鐜囬珮骞叉椿鍒╄惤鏁堢巼楂樺共娲诲埄钀芥晥鐜囬珮骞叉椿鍒╄惤鏁堢巼楂�
- </view>
- </view>
- <view class="order-ren">
- <view class="order-ren-left">
- <view class="order-ren-left-img">
- <image src="/static/logo.png" mode="widthFix"></image>
- </view>
- <text>鍙插ぉ鏁�</text>
- <view class="order-ren-left-tip">涓氫富</view>
- </view>
- <view class="order-ren-x"></view>
- <view class="order-ren-lx">
- <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
- <text>鑱旂郴涓氫富</text>
- </view>
- </view>
- <view class="order-info">
- <view class="order-info-title">
- <text>璁㈠崟淇℃伅</text>
- </view>
- <view class="order-info-list">
- <view class="order-info-list-item">
- <text>璁㈠崟缂栧彿锛�</text>
- <text>202107131742520001</text>
- </view>
- <view class="order-info-list-item">
- <text>涓嬪崟鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>鎺ュ崟鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>寮�濮嬫椂闂达細</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>瀹屾垚鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>鏀粯鏃堕棿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>鏀粯鏂瑰紡锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- <view class="order-info-list-item">
- <text>浜ゆ槗鍗曞彿锛�</text>
- <text>2025-07-26 09:32:11</text>
- </view>
- </view>
- </view>
- <view style="width: 100%; height: calc(108rpx + env(safe-area-inset-bottom));"></view>
- <view class="order-footer">
- <view class="order-footer-btn">
- <view class="order-footer-btn-a" @click="show = true">鍙栨秷璁㈠崟</view>
- <view class="order-footer-btn-b">淇敼璁㈠崟</view>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
-
- <u-modal
- title="娓╅Θ鎻愮ず"
- :show="show"
- closeOnClickOverlay
- showCancelButton
- >
- <view class="slot-content">
- 纭鍙栨秷璁㈠崟鍚楋紵
- </view>
- <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
- <view class="btn1" @click="show = false">鎴戝啀鎯虫兂</view>
- <view class="btn2" @click="show = false">纭鍙栨秷</view>
- </view>
- </u-modal>
-
- <!-- 鏀粯寮圭獥 -->
- <u-popup :show="show1" round="15" mode="bottom">
- <view class="zhifu">
- <view class="zhifu-head">
- <view></view>
- <text>鏀粯璁㈠崟</text>
- <image @click="show1 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="zhifu-c">
- <view class="zhifu-c-info">
- 璇风‘璁ら噾棰濆苟鏀粯璐圭敤缁� <text>鑾茶姳鍔冲姟鍏徃</text>
- </view>
- <view class="zhifu-c-info1">鏀粯閲戦锛�</view>
- <view class="zhifu-c-input">
- <image src="/static/icon/楼@2x.png" mode="widthFix"></image>
- <input type="number" placeholder="璇疯緭鍏�" />
- </view>
- </view>
- <view class="zhifu-botton">纭鏀粯</view>
- </view>
- </u-popup>
-
- <!-- 璇勪环 -->
- <u-popup :show="show2" round="15" mode="bottom">
- <view class="zhifu">
- <view class="zhifu-head">
- <view></view>
- <text>璇勪环</text>
- <image @click="show2 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
- </view>
- <view class="zhifu-pj">
- <view class="zhifu-pj-label">鏈嶅姟璇勪环</view>
- <view class="zhifu-pj-val">
- <u-rate :count="count" activeColor="#FFC331" size="26" v-model="value"></u-rate>
- </view>
- </view>
- <view class="zhifu-textarea">
- <image src="/static/icon/ic_pingjia@2x.png" mode="widthFix"></image>
- <u--textarea placeholder="璇疯璇存偍瀵规湰娆′氦鏄撶殑鎰熷彈" border="none" count></u--textarea>
- </view>
- <view class="zhifu-botton" style="margin-top: 60rpx;">绔嬪嵆璇勪环</view>
- </view>
- </u-popup>
-
- </view>
-</template>
-
-<script>
- export default {
- data() {
- return {
- show: false,
- show1: false,
- show2: false,
- count: 4,
- value: 2,
- bgImg: require('@/static/image/bg_green@2x.png')
- };
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7;
- }
- .u-textarea__count {
- background-color: rgba(0, 0, 0, 0) !important;
- }
- .u-textarea {
- width: 100% !important;
- height: 100% !important;
- padding: 0 !important;
- background-color: rgba(0, 0, 0, 0) !important;
- }
- textarea {
- width: 100% !important;
- height: 100% !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .order {
- width: 100%;
- .zhifu {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- .zhifu-textarea {
- width: 100%;
- height: 364rpx;
- padding: 30rpx;
- box-sizing: border-box;
- background: #F7F7F7;
- border-radius: 16rpx;
- border: 1rpx solid #EEEEEE;
- margin-top: 48rpx;
- display: flex;
- align-items: start;
- image {
- flex-shrink: 0;
- width: 29rpx;
- height: 29rpx;
- margin-right: 10rpx;
- }
- }
- .zhifu-pj {
- width: 100%;
- display: flex;
- align-items: center;
- margin-top: 40rpx;
- .zhifu-pj-label {
- flex-shrink: 0;
- margin-right: 40rpx;
- }
- .zhifu-pj-val {
- flex: 1;
-
- }
- }
- .zhifu-head {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- image {
- width: 28rpx;
- height: 28rpx;
- }
- text {
- font-weight: 500;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .zhifu-c {
- width: 100%;
- margin-top: 46rpx;
- .zhifu-c-info {
- display: flex;
- align-items: center;
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 30rpx;
- text {
- color: #00BC12;
- margin-left: 10rpx;
- }
- }
- .zhifu-c-info1 {
- font-weight: 400;
- font-size: 30rpx;
- color: #666666;
- margin-bottom: 20rpx;
- }
- .zhifu-c-input {
- width: 100%;
- padding: 0 30rpx;
- box-sizing: border-box;
- height: 112rpx;
- background: #F7F7F7;
- border-radius: 10rpx;
- border: 1rpx solid #EEEEEE;
- display: flex;
- align-items: center;
- image {
- flex-shrink: 0;
- width: 28rpx;
- height: 60rpx;
- margin-right: 24rpx;
- }
- input {
- flex: 1;
- height: 100%;
- font-weight: 500;
- font-size: 50rpx;
- color: #222222;
- }
- }
- }
- .zhifu-botton {
- width: 100%;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- margin-top: 264rpx;
- }
- }
- .slot-content {
- width: 100%;
- text-align: center;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- margin: 30rpx 0;
- }
- .btn1 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 400;
- font-size: 32rpx;
- color: #666666;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .btn2 {
- width: 264rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- .order-footer {
- width: 100%;
- position: fixed;
- bottom: 0;
- left: 0;
- background-color: #ffffff;
- z-index: 9;
- height: calc(108rpx + env(safe-area-inset-bottom));
- .order-footer-btn {
- width: 100%;
- height: 108rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .order-footer-btn-a {
- width: 334rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #666666;
- border-radius: 44rpx;
- border: 1rpx solid #B2B2B2;
- }
- .order-footer-btn-b {
- width: 334rpx;
- height: 88rpx;
- line-height: 88rpx;
- text-align: center;
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- background: #00BC12;
- border-radius: 44rpx;
- }
- }
- }
- .order-ren {
- width: 100%;
- height: 150rpx;
- background: #FFFFFF;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 30rpx;
- box-sizing: border-box;
- margin-bottom: 20rpx;
- .order-ren-left {
- display: flex;
- align-items: center;
- flex: 1;
- .order-ren-left-img {
- width: 80rpx;
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: hidden;
- border-radius: 50%;
- margin-right: 15rpx;
- image {
- width: 100%;
- }
- }
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- margin-right: 15rpx;
- }
- .order-ren-left-tip {
- padding: 4rpx 12rpx;
- border-radius: 8rpx;
- border: 2rpx solid #FD9E24;
- font-weight: 400;
- font-size: 24rpx;
- color: #FF7200;
- }
- }
- .order-ren-x {
- width: 1rpx;
- height: 90rpx;
- margin-right: 50rpx;
- background-color: #E5E5E5;
- }
- .order-ren-lx {
- flex-shrink: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 34rpx;
- height: 34rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #222222;
- }
- }
- }
- .order-info {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .order-info-list {
- width: 100%;
- .order-info-list-item {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #777777;
- }
- }
- }
- .order-info-remark {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- margin-top: 36rpx;
- }
- .order-info-title {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- .x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- }
- .order-info-wz {
- font-weight: 400;
- font-size: 28rpx;
- color: #888888;
- margin-bottom: 30rpx;
- }
- .order-info-x {
- width: 100%;
- height: 1rpx;
- margin: 20rpx 0 30rpx 0;
- background-color: #E5E5E5;
- }
- .order-info-price {
- width: 100%;
- display: flex;
- flex-direction: column;
- .price-row {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .price-row-label {
- font-weight: 400;
- font-size: 30rpx;
- color: #777777;
- }
- .price-row-val {
- font-weight: 500;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .order-info-supplement {
- width: 100%;
- margin-bottom: 40rpx;
- .order-info-supplement-title {
- font-weight: 600;
- font-size: 30rpx;
- color: #222222;
- margin-bottom: 16rpx;
- }
- .order-info-supplement-val {
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- margin-bottom: 20rpx;
- }
- .order-info-supplement-list {
- width: 100%;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- justify-content: space-between;
- .order-info-supplement-list-item {
- width: 156rpx;
- height: 156rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 8rpx;
- overflow: hidden;
- image {
- width: 100%;
- }
- }
- }
- }
- .order-info-address {
- width: 100%;
- display: flex;
- align-items: start;
- margin-bottom: 20rpx;
- image {
- width: 28rpx;
- height: 28rpx;
- flex-shrink: 0;
- margin-right: 18rpx;
- }
- .order-info-address-info {
- flex: 1;
- display: flex;
- flex-direction: column;
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 28rpx;
- color: #222222;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-top: 16rpx;
- }
- }
- }
- }
- }
- .order-quxiaole {
- padding: 20rpx 0;
- box-sizing: border-box;
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: 600;
- font-size: 40rpx;
- color: #111111;
- background-color: #ffffff;
- }
- .order-head {
- width: 100%;
- height: 172rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- background-repeat: no-repeat;
- background-size: 100% 100%;
- .order-head-status {
- font-weight: 600;
- font-size: 40rpx;
- color: #111111;
- }
- .order-head-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #777777;
- margin-top: 18rpx;
- }
- }
- .order-user {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- .order-user-info {
- width: 100%;
- height: 150rpx;
- padding: 0 30rpx;
- box-sizing: border-box;
- background: #F7F8F5;
- border-radius: 16rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .user-info-l {
- flex: 1;
- display: flex;
- align-items: center;
- .user-info-l-image {
- flex-shrink: 0;
- width: 80rpx;
- height: 80rpx;
- border-radius: 50%;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: 20rpx;
- image {
- width: 100%;
- }
- }
- .user-info-l-i {
- flex: 1;
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- .user-info-l-i-top {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .user-info-l-i-bottom {
- display: flex;
- align-items: center;
- margin-top: 14rpx;
- .user-info-l-i-bottom-item {
- display: flex;
- align-items: center;
- margin-right: 60rpx;
- &:last-child {
- margin: 0 !important;
- }
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 24rpx;
- color: #777777;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- }
- }
- }
- }
- }
- }
- .user-info-r {
- flex-shrink: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 33rpx;
- height: 33rpx;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #222222;
- margin-top: 12rpx;
- }
- }
- }
- }
- .order-quxiao {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: #ffffff;
- .order-quxiao-btn {
- width: 160rpx;
- height: 64rpx;
- line-height: 64rpx;
- text-align: center;
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- border-radius: 34rpx;
- border: 1rpx solid #B2B2B2;
- }
- }
- }
-</style>
diff --git a/small-program/pages/packaging-worker/packaging-worker.vue b/small-program/pages/packaging-worker/packaging-worker.vue
deleted file mode 100644
index 75139ff..0000000
--- a/small-program/pages/packaging-worker/packaging-worker.vue
+++ /dev/null
@@ -1,751 +0,0 @@
-<template>
- <view class="index">
- <view class="list">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鏃堕棿鍦扮偣</text>
- </view>
- <view class="list-item-row" @click="show = true">
- <view class="list-item-row-label">鐢ㄥ伐鏃堕棿<b>*</b></view>
- <view class="list-item-row-val">
- <text>{{form.startDate ? form.startDate + ' 鑷� ' + form.endDate + ' (' + workDays + '澶�) ' : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
-
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item-row" @click="selectAddress()">
- <view class="list-item-row-label">鐢ㄥ伐鍦扮偣<b>*</b></view>
- <view class="list-item-row-val">
- <text style="width:80%;">{{form.location ? form.location : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鍦扮偣鎻忚堪</view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.locationRemark" placeholder="璇疯緭鍏�" />
- </view>
- </view>
- </template>
-
- </view>
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>闇�姹�</text>
- </view>
- <view class="list-item-row" @click="show1 = true">
- <view class="list-item-row-label">鍖呰鍝佺<b>*</b></view>
- <view class="list-item-row-val">
- <text>{{form.categoryName ? form.categoryName : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">闇�姹傝ˉ鍏�</view>
- <view class="list-item-row-val">
- <textarea v-model="form.supplement" cols="30" rows="10" placeholder="濡傛灉鏈夌壒娈婅姹傦紝璇峰湪姝ゅ璇存槑" maxlength="200"></textarea>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">鍥剧墖</view>
- <view class="list-item-row-upload">
- <view class="upload-item" v-for="(item, index) in form.multifileList" :key="index">
- <image :src="item.url || item.fileurlFull" mode="widthFix"></image>
- <image class="upload-item-dele" @click="form.multifileList.splice(index, 1)" src="/static/icon/ic_delete1@2x.png" mode="widthFix"></image>
- </view>
- <view class="upload-item" @click="uploadImg">
- <u-icon name="plus" color="#999999" size="24"></u-icon>
- <text>鐐瑰嚮涓婁紶</text>
- </view>
- </view>
- </view>
- <!-- <view class="list-item-zk" @click="viewStatus = !viewStatus">
- <text>{{viewStatus ? '鏀惰捣' : '琛ュ厖闇�姹�'}}</text>
- <u-icon :name="viewStatus ? 'arrow-up' : 'arrow-down'" color="#00BC12" size="16"></u-icon>
- </view> -->
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>璐圭敤</text>
- </view>
- <view class="list-item-cate">
- <view :class="form.carType === item.id ? 'list-item-cate-item active' : 'list-item-cate-item'" v-for="(item, index) in settlementType" :key="index" @click="clickType(item.id)">{{item.name}}</view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label" v-if="form.carType === 0">鐢ㄥ伐澶╂暟</view>
- <view class="list-item-row-label" v-if="form.carType === 1">宸ヤ綔鏃堕暱<b>*</b></view>
- <view class="list-item-row-label" v-if="form.carType === 2">鍖呰閲嶉噺<b>*</b></view>
- <view class="list-item-row-val">
- <input v-model="form.priceNum1" :disabled="form.carType === 0" @blur="getPrice" type="digit" placeholder="璇疯緭鍏�" />
- <text v-if="form.carType === 0">澶�</text>
- <text v-if="form.carType === 1">灏忔椂</text>
- <text v-if="form.carType === 2">鏂�</text>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鐢ㄥ伐鏁伴噺<b>*</b></view>
- <view class="list-item-row-val">
- <input type="digit" v-model="form.priceNum2" @blur="getPrice" placeholder="璇疯緭鍏�" />
- <text>浜�</text>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">璐圭敤鏍囧噯<b>*</b></view>
- <view class="list-item-row-val">
- <input v-model="form.price" type="digit" @blur="getPrice" placeholder="璇疯緭鍏�" />
- <text>{{form.priceUnit}}</text>
- </view>
- </view>
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鑱旂郴浜轰俊鎭�</text>
- <text class="list-item-label-info">榛樿鍙戝崟鏂硅仈绯绘柟寮忥紝鍙慨鏀硅仈绯讳汉</text>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴浜哄鍚�</view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkName" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴鐢佃瘽<b>*</b></view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkPhone" maxlength="11" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- </view>
- </template>
-
- </view>
- <view style="width: 100%; height: calc(214rpx + env(safe-area-inset-bottom));"></view>
- <view class="footer">
- <view class="footer-price">
- <view class="footer-price-info">棰勪及鎬昏垂鐢�</view>
- <view class="footer-price-num">
- <text>{{totalPrice}}</text>
- <text>鍏�</text>
- </view>
- </view>
- <view class="footer-bottom">
- <div class="footer-bottom-btn" @click="submit" >
- <text>{{form.id?'纭淇敼':'绔嬪嵆涓嬪崟'}}</text>
- <text v-if="!form.id">锛堟湇鍔″畬鎴愬悗浠樻锛�</text>
- </div>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
-
- <!-- 閫夋嫨鏃ユ湡鑼冨洿 -->
- <u-calendar
- :show="show"
- color="#00BC12"
- mode="range"
- :allowSameDay="true"
- @close="show = false"
- @confirm="confirmDate" />
-
- <!-- 閫夋嫨鍝佺 -->
- <u-picker
- :show="show1"
- :immediateChange="true"
- :columns="cateList"
- confirmColor="#00BC12"
- @confirm="confirmCategary"
- @cancel="show1 = false"
- keyName="name" />
- </view>
-</template>
-
-<script>
- import { mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['userInfo']),
- totalPrice() {
- return this.form.estimatedAccount / 100
- }
- },
- data() {
- return {
- info: {},
- show: false,
- show1: false,
- form: {
- id: null,
- days: '',
- startDate: '',
- endDate: '',
- lat: '',
- lgt: '',
- location: '',
- workType: 0,
- locationRemark: '',
- categoryId: '',
- categoryName: '',
- priceNum1: '',
- priceNum2: '',
- price: '',
- supplement: '',
- multifileList: [],
- linkName: '',
- linkPhone: '',
- priceUnit: '鍏�/浜�/澶�',
- estimatedAccount: '',
- carType: 0,
- type: 0
- },
- settlementType: [
- { name: '鎸夊ぉ浠樿垂', id: 0 },
- { name: '鎸夊皬鏃朵粯璐�', id: 1 },
- { name: '鎸夐噸閲忎粯璐�', id: 2 }
- ],
- cateList: [],
- viewStatus: true,
- workDays: 0
- };
- },
- onLoad(option) {
- if (option.id) {
- this.form.id = option.id
- this.$u.api.getDetail({
- orderId: option.id
- }).then(res => {
- if (res.code === 200) {
- this.info = res.data
- for (const key in this.form) {
- this.form[key] = res.data[key]
- }
- this.form.days = res.data.totalDays
- this.form.price = Number(this.form.price) / 100
- if (!this.form.multifileList) {
- this.form.multifileList = []
- }
- this.workDays = res.data.totalDays
- // this.clickType()
- }
-
- })
- } else {
- this.form.linkName = this.userInfo.name
- this.form.linkPhone = this.userInfo.telephone
- this.form.priceNum1 = option.days
- this.form.startDate = option.startDate
- this.form.endDate = option.endDate
- this.form.lat = option.latitude
- this.form.lgt = option.longitude
- this.form.location = option.address
- this.form.workType = option.workType
- this.form.days = option.days
- this.workDays = option.days
- }
- this.getCateList()
- },
- methods: {
- // 鎻愪氦璁㈠崟
- submit() {
- if (!this.form.categoryId) {
- return uni.showToast({ title: '璇烽�夋嫨鍒嗘嫞鍝佺', icon: 'none' })
- }
- if (this.form.carType !=0 && !this.form.priceNum1) {
- var t = this.form.carType ==1?"宸ヤ綔鏃堕暱":"鍖呰閲嶉噺"
- return uni.showToast({ title: '璇疯緭鍏�'+t, icon: 'none' })
- }
- if (!this.form.priceNum2) {
- return uni.showToast({ title: '璇疯緭鍏ョ敤宸ユ暟閲�', icon: 'none' })
- }
- if (!this.form.price) {
- return uni.showToast({ title: '璇疯緭鍏ヨ垂鐢ㄦ爣鍑�', icon: 'none' })
- }
- if (!this.form.linkPhone) {
- return uni.showToast({ title: '璇疯緭鍏ヨ仈绯荤數璇�', icon: 'none' })
- }
- if (!this.form.id) {
- this.$u.api.release({ ...this.form, price: Number(this.form.price) * 100 })
- .then(res => {
- if (res.code == 200) {
- uni.navigateTo({
- url: `/pages/success/success?orderId=${res.data.id}`
- })
- }
- })
- } else {
- this.$u.api.updateOrder({ ...this.form, price: Number(this.form.price) * 100 })
- .then(res => {
- if (res.code == 200) {
- if (res.code == 200) {
- uni.showToast({ title: '缂栬緫鎴愬姛', icon: 'success', mask: true, duration: 2000 })
- setTimeout(() => {
- uni.navigateBack({ delta: 1 });
- // uni.$emit('refresh')
- }, 1500)
- }
- }
- })
- }
- },
- // 璁$畻閲戦
- getPrice() {
- if (this.form.price && this.form.priceNum1 && this.form.priceNum2) {
- this.$u.api.getTotal({
- price: Number(this.form.price) * 100,
- priceNum1: this.form.priceNum1,
- priceNum2: this.form.priceNum2,
- type: this.form.type,
- carType:this.form.carType ,
- workType: this.form.workType
- }).then(res => {
- if (res.code === 200) {
- this.form.estimatedAccount = res.data
- }
-
- })
- }
- },
- confirmDate(e) {
- this.form.startDate = e[0]
- this.form.endDate = e[e.length - 1]
- let time = this.form.startDate == this.form.endDate ? 1 : 0
- this.workDays = e.length - time;
- if (this.form.carType === 0) {
- this.form.priceNum1 = e.length - time;
- }
- this.show = false
- this.getPrice()
- },
- selectAddress() {
- uni.chooseLocation({
- success: (res) => {
- this.form.lat = res.latitude
- this.form.lgt = res.longitude
- this.form.address =res.name || res.address
- }
- });
- },
- clickType(id) {
- this.form.carType = id
- if (id === 0) {
- this.form.priceUnit = '鍏�/浜�/澶�'
- this.form.priceNum1 = this.workDays
- } else if (id === 1) {
- this.form.priceUnit = '鍏�/浜�/灏忔椂'
- this.form.priceNum1 = ''
- } else {
- this.form.priceUnit = '鍏�/鏂�'
- this.form.priceNum1 = ''
- }
- },
- confirmCategary(e) {
- this.form.categoryId = e.value[0].id
- this.form.categoryName = e.value[0].name
- this.show1 = false
- },
- getCateList() {
- this.$u.api.getCategoryList({
- type: 0
- }).then(res => {
- if (res.code === 200) {
- this.cateList = [res.data]
- }
- })
- },
- uploadImg() {
- uni.chooseImage({
- success: (chooseImageRes) => {
- const tempFilePaths = chooseImageRes.tempFilePaths;
- uni.uploadFile({
- url: this.$baseUrl + '/web/public/upload',
- filePath: tempFilePaths[0],
- name: 'file',
- formData: {
- 'folder': 'orders'
- },
- success: (uploadFileRes) => {
- const res = JSON.parse(uploadFileRes.data)
- this.form.multifileList.push({
- fileurl: res.data.imgaddr,
- name: res.data.originname,
- url: res.data.url,
- type: 0
- })
- }
- });
- }
- });
- }
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7 !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .index {
- width: 100%;
- .footer {
- width: 100%;
- height: calc(214rpx + env(safe-area-inset-bottom));
- padding: 20rpx 30rpx;
- box-sizing: border-box;
- position: fixed;
- bottom: 0;
- left: 0;
- z-index: 9;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- background: #FFFFFF;
- box-shadow: 0rpx -2rpx 4rpx 0rpx rgba(0,0,0,0.06);
- .footer-price {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-price-info {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .footer-price-num {
- display: flex;
- align-items: center;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 40rpx;
- color: #FF0000;
- margin-right: 20rpx;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- }
- .footer-bottom {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-bottom-kf {
- flex-shrink: 0;
- margin-right: 40rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 36rpx;
- height: 36rpx;
- }
- text {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- margin-top: 8rpx;
- }
- }
- .footer-bottom-btn {
- flex: 1;
- height: 88rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #00BC12;
- box-shadow: 0rpx 8rpx 12rpx 0rpx rgba(91,190,56,0.16);
- border-radius: 44rpx;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- }
- &:nth-child(2) {
- font-weight: 500;
- font-size: 26rpx;
- color: #FFFFFF;
- }
- }
- }
- }
- }
- .list {
- width: 100%;
- display: flex;
- flex-direction: column;
- .list-item {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- border-radius: 20rpx;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .list-item-cate {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 30rpx;
- .active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .list-item-cate-item {
- width: 208rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #EEEEEE;
- border-radius: 36rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #333333;
- }
- }
- .list-item-label {
- display: flex;
- align-items: center;
- margin-bottom: 28rpx;
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- .list-item-label-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-left: 26rpx;
- }
- .list-item-label-x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- }
- .list-item-zk {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- margin-right: 8rpx;
- }
- }
- .list-item-row {
- width: 100%;
- display: flex;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .list-item-row-label {
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- display: flex;
- align-items: center;
- b {
- color: red;
- }
- }
- .list-item-row-user {
- width: 100%;
- display: flex;
- flex-direction: column;
- .user-item {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- justify-content: space-between;
- border-bottom: 1rpx solid #E5E5E5;
- &:last-child {
- margin: 0 !important;
- }
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- flex: 1;
- text-align: center;
- margin: 0 30rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .list-item-row-radio {
- width: 100%;
- display: flex;
- padding: 30rpx 0;
- box-sizing: border-box;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- .radio-item {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .radio-item-label {
- width: 200rpx;
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- .radio-item-list {
- flex: 1;
- display: flex;
- flex-direction: column;
- .radio-item-list-l {
- width: 100%;
- display: flex;
- align-items: center;
- .active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .radio-item-list-item {
- width: 124rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #EEEEEE;
- border-radius: 36rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #111111;
- margin-right: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- }
- }
- .radio-item-list-data {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- margin-top: 42rpx;
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- width: 100rpx;
- font-weight: bold;
- font-size: 30rpx;
- color: #222222;
- text-align: right;
- margin: 0 30rpx;
- }
- }
- }
- }
- }
- .list-item-row-upload {
- width: 100%;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- padding: 30rpx 0;
- box-sizing: border-box;
- .upload-item {
- width: 156rpx;
- height: 156rpx;
- display: flex;
- align-items: center;
- flex-direction: column;
- justify-content: center;
- background: #F8F9FB;
- border-radius: 8rpx;
- margin-right: 20rpx;
- border: 2rpx solid #EEEEEE;
- position: relative;
- &:last-child {
- margin: 0 !important;
- }
- image {
- width: 100%;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #666666;
- margin-top: 16rpx;
- }
- .upload-item-dele {
- position: absolute;
- top: -20rpx;
- right: -20rpx;
- width: 40rpx;
- height: 40rpx;
- z-index: 9;
- }
- }
- }
- .list-item-row-val {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- input {
- width: 100%;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- textarea {
- width: 100%;
- height: 90rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- }
- }
- }
- }
- }
-</style>
diff --git a/small-program/pages/rich-text-page/rich-text-page.vue b/small-program/pages/rich-text-page/rich-text-page.vue
deleted file mode 100644
index 6f45dfb..0000000
--- a/small-program/pages/rich-text-page/rich-text-page.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-<template>
- <view class="u-content">
- <u-parse :content="content"></u-parse>
- </view>
-</template>
-<script>
- export default {
- data() {
- return {
- flag:1,
- title:'',
- content: ''
- };
- },
- onLoad(options) {
- console.log(options)
- var flag = options.flag
- this.flag = flag
- this.content =''
- switch(flag){
- case '1':
- this.title = '鏈嶅姟浠嬬粛'
- break;
- case '2':
- this.title = '鏀惰垂鏍囧噯'
- break;
- case '3':
- this.title = '鍏充簬鎴戜滑'
- break;
- case '4':
- this.title = '鐢ㄦ埛鍗忚'
- break;
- case '5':
- this.title = '闅愮鍗忚鏀跨瓥'
- break;
- default:
- this.flag= 3
- this.title = '鍏充簬鎴戜滑'
- break;
- }
- uni.setNavigationBarTitle({
- title:this.title
- })
- this.getContnet()
- },
- methods:{
- getContnet() {
- var that = this;
- this.$u.api.getPlatformAboutUs({}).then(res =>{
- if (res&&res.code ===200) {
- if(this.flag == 1){
- that.content = res.data.serverIntroduce||''
- }else if(this.flag == 2){
- that.content = res.data.feeStandards||''
- } else if(this.flag == 4){
- that.content = res.data.userAgreement||''
- } else if(this.flag == 5){
- that.content = res.data.privacyAgreement||''
- } else{
- that.content = res.data.aboutUs||''
- }
- }
- })
- },
- }
- }
-</script>
-
-<style lang="scss" scoped>
- .u-content {
- padding: 30rpx;
- }
-</style>
diff --git a/small-program/pages/seleCity/seleCity.vue b/small-program/pages/seleCity/seleCity.vue
deleted file mode 100644
index e3d72b4..0000000
--- a/small-program/pages/seleCity/seleCity.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-<template>
- <view class="box">
- <view class="city-serach">
- <view class="city-serach-box">
- <image src="/static/icon/ic_search@2x.png" mode="widthFix"></image>
- <input placeholder="杈撳叆鍩庡競鍚嶇О" @confirm="search" />
- </view>
- <view class="city-serach-info">
- <text>褰撳墠鍩庡競锛�</text>
- <text>鍚堣偉</text>
- </view>
- </view>
- <tIndexAddress @select="select" ref="city"></tIndexAddress>
- </view>
-</template>
-
-<script>
- import tIndexAddress from '@/components/t-index-address/components/t-index-address/t-index-address.vue'
- export default {
- components: { tIndexAddress },
- data() {
- return {
-
- };
- },
- methods: {
- select(data) {
- console.log(data)
- },
- search() {
- this.$refs.city.search('闃�')
- }
- }
- }
-</script>
-
-<style lang="scss" scoped>
- .box {
- width: 100%;
- background-color: #ffffff;
- .city-serach {
- width: 100%;
- padding: 30rpx;
- box-sizing: border-box;
- background: #ffffff;
- .city-serach-box {
- width: 100%;
- height: 72rpx;
- background: #F9F9FB;
- border-radius: 36rpx;
- border: 1rpx solid #EEEEEE;
- display: flex;
- align-items: center;
- padding: 0 30rpx;
- box-sizing: border-box;
- justify-content: space-between;
- image {
- flex-shrink: 0;
- width: 32rpx;
- height: 32rpx;
- margin-right: 20rpx;
- }
- input {
- flex: 1;
- height: 100%;
- }
- }
- .city-serach-info {
- width: 100%;
- display: flex;
- align-items: center;
- margin-top: 30rpx;
- text {
- &:nth-child(1) {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 30rpx;
- color: #00BC12;
- }
- }
- }
- }
- }
-</style>
\ No newline at end of file
diff --git a/small-program/pages/sorting/sorting.vue b/small-program/pages/sorting/sorting.vue
deleted file mode 100644
index 590cce0..0000000
--- a/small-program/pages/sorting/sorting.vue
+++ /dev/null
@@ -1,688 +0,0 @@
-<template>
- <view class="index">
- <view class="list">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鏃堕棿鍦扮偣</text>
- </view>
- <view class="list-item-row" @click="show = true">
- <view class="list-item-row-label">鐢ㄥ伐鏃堕棿<b>*</b></view>
- <view class="list-item-row-val">
- <text>{{form.startDate ? form.startDate + ' 鑷� ' + form.endDate + ' (' + form.priceNum1 + '澶�) ' : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item-row" @click="selectAddress()">
- <view class="list-item-row-label">鐢ㄥ伐鍦扮偣<b>*</b></view>
- <view class="list-item-row-val">
- <text style="width:80%;">{{form.location ? form.location : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鍦扮偣鎻忚堪</view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.locationRemark" placeholder="璇疯緭鍏�" />
- </view>
- </view>
- </template>
-
- </view>
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>闇�姹�</text>
- </view>
- <view class="list-item-row" @click="show1 = true">
- <view class="list-item-row-label">鍒嗘嫞鍝佺<b>*</b></view>
- <view class="list-item-row-val">
- <text>{{form.categoryName ? form.categoryName : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鐢ㄥ伐鏁伴噺<b>*</b></view>
- <view class="list-item-row-val">
- <input type="number" v-model="form.priceNum2" @blur="getPrice" placeholder="璇疯緭鍏�" />
- <text>浜�</text>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">闇�姹傝ˉ鍏�</view>
- <view class="list-item-row-val">
- <textarea v-model="form.supplement" cols="30" rows="10" placeholder="濡傛灉鏈夌壒娈婅姹傦紝璇峰湪姝ゅ璇存槑" maxlength="200"></textarea>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">鍥剧墖</view>
- <view class="list-item-row-upload">
- <view class="upload-item" v-for="(item, index) in form.multifileList" :key="index">
- <image :src="item.url || item.fileurlFull" mode="widthFix"></image>
- <image class="upload-item-dele" @click="form.multifileList.splice(index, 1)" src="/static/icon/ic_delete1@2x.png" mode="widthFix"></image>
- </view>
- <view class="upload-item" @click="uploadImg">
- <u-icon name="plus" color="#999999" size="24"></u-icon>
- <text>鐐瑰嚮涓婁紶</text>
- </view>
- </view>
- </view>
- <!-- <view class="list-item-zk" @click="viewStatus = !viewStatus">
- <text>{{viewStatus ? '鏀惰捣' : '琛ュ厖闇�姹�'}}</text>
- <u-icon :name="viewStatus ? 'arrow-up' : 'arrow-down'" color="#00BC12" size="16"></u-icon>
- </view> -->
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>璐圭敤</text>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">澶╂暟</view>
- <view class="list-item-row-val">
- <input v-model="form.priceNum1" disabled @blur="getPrice" type="number" placeholder="璇疯緭鍏�" />
- <text>澶�</text>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">璐圭敤鏍囧噯<b>*</b></view>
- <view class="list-item-row-val">
- <input v-model="form.price" type="number" @blur="getPrice" placeholder="璇疯緭鍏�" />
- <text>鍏�/浜�/澶�</text>
- </view>
- </view>
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鑱旂郴浜轰俊鎭�</text>
- <text class="list-item-label-info">榛樿鍙戝崟鏂硅仈绯绘柟寮忥紝鍙慨鏀硅仈绯讳汉</text>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴浜哄鍚�</view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkName" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴鐢佃瘽<b>*</b></view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkPhone" maxlength="11" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- </view>
- </template>
-
- </view>
- <view style="width: 100%; height: calc(214rpx + env(safe-area-inset-bottom));"></view>
- <view class="footer">
- <view class="footer-price">
- <view class="footer-price-info">棰勪及鎬昏垂鐢�</view>
- <view class="footer-price-num">
- <text>{{totalPrice}}</text>
- <text>鍏�</text>
- </view>
- </view>
- <view class="footer-bottom">
- <div class="footer-bottom-btn" @click="submit" >
- <text>{{form.id?'纭淇敼':'绔嬪嵆涓嬪崟'}}</text>
- <text v-if="!form.id">锛堟湇鍔″畬鎴愬悗浠樻锛�</text>
- </div>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
-
- <!-- 閫夋嫨鏃ユ湡鑼冨洿 -->
- <u-calendar
- :show="show"
- color="#00BC12"
- mode="range"
- :allowSameDay="true"
- @close="show = false"
- @confirm="confirmDate" />
-
- <!-- 閫夋嫨鍝佺 -->
- <u-picker
- :show="show1"
- :immediateChange="true"
- :columns="cateList"
- confirmColor="#00BC12"
- @confirm="confirmCategary"
- @cancel="show1 = false"
- keyName="name" />
- </view>
-</template>
-
-<script>
- import { mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['userInfo']),
- totalPrice() {
- return this.form.estimatedAccount / 100
- }
- },
- data() {
- return {
- info: {},
- show: false,
- show1: false,
- form: {
- id: null,
- days: '',
- startDate: '',
- endDate: '',
- lat: '',
- lgt: '',
- location: '',
- workType: 0,
- locationRemark: '',
- categoryId: '',
- categoryName: '',
- priceNum1: '',
- priceNum2: '',
- price: '',
- supplement: '',
- multifileList: [],
- linkName: '',
- linkPhone: '',
- priceUnit: '鍏�/浜�/澶�',
- estimatedAccount: '',
- type: 0
- },
- cateList: [],
- viewStatus: true
- };
- },
- onLoad(option) {
- if (option.id) {
- this.form.id = option.id
- this.$u.api.getDetail({
- orderId: option.id
- }).then(res => {
- if (res.code === 200) {
- this.info = res.data
- for (const key in this.form) {
- this.form[key] = res.data[key]
- }
- this.form.days = res.data.totalDays
- this.form.price = Number(this.form.price) / 100
- if (!this.form.multifileList) {
- this.form.multifileList = []
- }
- }
-
- })
- } else {
- this.form.linkName = this.userInfo.name
- this.form.linkPhone = this.userInfo.telephone
- this.form.priceNum1 = option.days
- this.form.startDate = option.startDate
- this.form.endDate = option.endDate
- this.form.lat = option.latitude
- this.form.lgt = option.longitude
- this.form.location = option.address
- this.form.workType = option.workType
- }
- this.getCateList()
- },
- methods: {
- // 鎻愪氦璁㈠崟
- submit() {
- if (!this.form.categoryId) {
- return uni.showToast({ title: '璇烽�夋嫨鍒嗘嫞鍝佺', icon: 'none' })
- }
- if (!this.form.priceNum2) {
- return uni.showToast({ title: '璇疯緭鍏ョ敤宸ユ暟閲�', icon: 'none' })
- }
- if (!this.form.price) {
- return uni.showToast({ title: '璇疯緭鍏ヨ垂鐢ㄦ爣鍑�', icon: 'none' })
- }
- if (!this.form.linkPhone) {
- return uni.showToast({ title: '璇疯緭鍏ヨ仈绯荤數璇�', icon: 'none' })
- }
- if (!this.form.id) {
- this.$u.api.release({ ...this.form, price: Number(this.form.price) * 100 })
- .then(res => {
- if (res.code == 200) {
- uni.navigateTo({
- url: `/pages/success/success?orderId=${res.data.id}`
- })
- }
- })
- } else {
- this.$u.api.updateOrder({ ...this.form, price: Number(this.form.price) * 100 })
- .then(res => {
- if (res.code == 200) {
- uni.showToast({ title: '缂栬緫鎴愬姛', icon: 'success', mask: true, duration: 2000 })
- setTimeout(() => {
- uni.navigateBack({ delta: 1 });
- // uni.$emit('refresh')
- }, 1500)
- }
- })
- }
- },
- // 璁$畻閲戦
- getPrice() {
- if (this.form.price && this.form.priceNum1 && this.form.priceNum2) {
- this.$u.api.getTotal({
- price: Number(this.form.price) * 100,
- priceUnit: this.form.priceUnit,
- priceNum1: this.form.priceNum1,
- priceNum2: this.form.priceNum2,
- type: this.form.type,
- workType: this.form.workType
- }).then(res => {
- if (res.code === 200) {
- this.form.estimatedAccount = res.data
- }
-
- })
- }
- },
- confirmDate(e) {
- this.form.startDate = e[0]
- this.form.endDate = e[e.length - 1]
- this.form.priceNum1 = e.length;
- this.show = false
- this.getPrice()
- },
- selectAddress() {
- uni.chooseLocation({
- success: (res) => {
- this.form.lat = res.latitude
- this.form.lgt = res.longitude
- this.form.address = res.name || res.address
- }
- });
- },
- confirmCategary(e) {
- this.form.categoryId = e.value[0].id
- this.form.categoryName = e.value[0].name
- this.show1 = false
- },
- getCateList() {
- this.$u.api.getCategoryList({
- type: 0
- }).then(res => {
- if (res.code === 200) {
- this.cateList = [res.data]
- }
-
- })
- },
- uploadImg() {
- uni.chooseImage({
- success: (chooseImageRes) => {
- const tempFilePaths = chooseImageRes.tempFilePaths;
- uni.uploadFile({
- url: this.$baseUrl + '/web/public/upload',
- filePath: tempFilePaths[0],
- name: 'file',
- formData: {
- 'folder': 'orders'
- },
- success: (uploadFileRes) => {
- const res = JSON.parse(uploadFileRes.data)
- this.form.multifileList.push({
- fileurl: res.data.imgaddr,
- name: res.data.originname,
- url: res.data.url,
- type: 0
- })
- }
- });
- }
- });
- }
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7 !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .index {
- width: 100%;
- .footer {
- width: 100%;
- height: calc(214rpx + env(safe-area-inset-bottom));
- padding: 20rpx 30rpx;
- box-sizing: border-box;
- position: fixed;
- bottom: 0;
- left: 0;
- z-index: 9;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- background: #FFFFFF;
- box-shadow: 0rpx -2rpx 4rpx 0rpx rgba(0,0,0,0.06);
- .footer-price {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-price-info {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .footer-price-num {
- display: flex;
- align-items: center;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 40rpx;
- color: #FF0000;
- margin-right: 20rpx;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- }
- .footer-bottom {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-bottom-kf {
- flex-shrink: 0;
- margin-right: 40rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 36rpx;
- height: 36rpx;
- }
- text {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- margin-top: 8rpx;
- }
- }
- .footer-bottom-btn {
- flex: 1;
- height: 88rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #00BC12;
- box-shadow: 0rpx 8rpx 12rpx 0rpx rgba(91,190,56,0.16);
- border-radius: 44rpx;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- }
- &:nth-child(2) {
- font-weight: 500;
- font-size: 26rpx;
- color: #FFFFFF;
- }
- }
- }
- }
- }
- .list {
- width: 100%;
- display: flex;
- flex-direction: column;
- .list-item {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- border-radius: 20rpx;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .list-item-label {
- display: flex;
- align-items: center;
- margin-bottom: 28rpx;
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- .list-item-label-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-left: 26rpx;
- }
- .list-item-label-x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- }
- .list-item-zk {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- margin-right: 8rpx;
- }
- }
- .list-item-row {
- width: 100%;
- display: flex;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .list-item-row-label {
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- display: flex;
- align-items: center;
- b {
- color: red;
- }
- }
- .list-item-row-user {
- width: 100%;
- display: flex;
- flex-direction: column;
- .user-item {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- justify-content: space-between;
- border-bottom: 1rpx solid #E5E5E5;
- &:last-child {
- margin: 0 !important;
- }
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- flex: 1;
- text-align: center;
- margin: 0 30rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .list-item-row-radio {
- width: 100%;
- display: flex;
- padding: 30rpx 0;
- box-sizing: border-box;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- .radio-item {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .radio-item-label {
- width: 200rpx;
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- .radio-item-list {
- flex: 1;
- display: flex;
- flex-direction: column;
- .radio-item-list-l {
- width: 100%;
- display: flex;
- align-items: center;
- .active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .radio-item-list-item {
- width: 124rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #EEEEEE;
- border-radius: 36rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #111111;
- margin-right: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- }
- }
- .radio-item-list-data {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- margin-top: 42rpx;
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- width: 100rpx;
- font-weight: bold;
- font-size: 30rpx;
- color: #222222;
- text-align: right;
- margin: 0 30rpx;
- }
- }
- }
- }
- }
- .list-item-row-upload {
- width: 100%;
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- padding: 30rpx 0;
- box-sizing: border-box;
- .upload-item {
- width: 156rpx;
- height: 156rpx;
- display: flex;
- align-items: center;
- flex-direction: column;
- justify-content: center;
- background: #F8F9FB;
- border-radius: 8rpx;
- margin-right: 20rpx;
- border: 2rpx solid #EEEEEE;
- position: relative;
- &:last-child {
- margin: 0 !important;
- }
- image {
- width: 100%;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #666666;
- margin-top: 16rpx;
- }
- .upload-item-dele {
- position: absolute;
- top: -20rpx;
- right: -20rpx;
- width: 40rpx;
- height: 40rpx;
- z-index: 9;
- }
- }
- }
- .list-item-row-val {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- input {
- width: 100%;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- textarea {
- width: 100%;
- height: 90rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- }
- }
- }
- }
- }
-</style>
diff --git a/small-program/pages/success/success.vue b/small-program/pages/success/success.vue
deleted file mode 100644
index 4b954d3..0000000
--- a/small-program/pages/success/success.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
- <view class="success">
- <image src="/static/icon/ic_success@2x.png" mode="widthFix"></image>
- <text class="success-a">鍙戝崟鎴愬姛</text>
- <text class="success-b">璇风瓑寰呮帴鍗�</text>
- <view class="success-footer">
- <view class="success-footer-btn" @click="toIndex">鍥炲埌棣栭〉</view>
- <view style="width: 20rpx; height: 100%;"></view>
- <view class="success-footer-btn1" @click="toDesc">鏌ョ湅璇︽儏</view>
- </view>
- </view>
-</template>
-
-<script>
- export default {
- data() {
- return {
- orderId: null
- };
- },
- onLoad(option) {
- this.orderId = option.orderId
- },
- methods: {
- toIndex() {
- uni.$emit('clear')
- uni.switchTab({
- url: '/pages/index/index'
- });
- },
- toDesc() {
- uni.navigateTo({
- url: `/pages/order-details/order-details?id=${this.orderId}`
- })
- }
- }
- }
-</script>
-
-<style lang="scss" scoped>
- .success {
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 180rpx;
- height: 180rpx;
- margin-top: 180rpx;
- margin-bottom: 40rpx;
- }
- .success-a {
- font-weight: 500;
- font-size: 36rpx;
- color: #111111;
- margin-bottom: 20rpx;
- }
- .success-b {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-bottom: 94rpx;
- }
- .success-footer {
- display: flex;
- align-items: center;
- .success-footer-btn {
- width: 200rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- border-radius: 36rpx;
- border: 1rpx solid #00BC12;
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- }
- .success-footer-btn1 {
- width: 200rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #00BC12;
- border-radius: 36rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #FFFFFF;
- }
- }
- }
-</style>
diff --git a/small-program/pages/using-workers/using-workers.vue b/small-program/pages/using-workers/using-workers.vue
deleted file mode 100644
index e87979b..0000000
--- a/small-program/pages/using-workers/using-workers.vue
+++ /dev/null
@@ -1,706 +0,0 @@
-<template>
- <view class="index">
- <view class="list">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鏃堕棿鍦扮偣</text>
- </view>
- <view class="list-item-row" @click="show = true">
- <view class="list-item-row-label">鐢ㄥ伐鏃堕棿<b>*</b></view>
- <view class="list-item-row-val">
- <text>{{form.startDate ? form.startDate + ' 鑷� ' + form.endDate + ' (' + form.days + '澶�) ' : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item-row" @click="selectAddress()">
- <view class="list-item-row-label">鐢ㄥ伐鍦扮偣<b>*</b></view>
- <view class="list-item-row-val">
- <text style="width:80%;">{{form.location ? form.location : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鍦扮偣鎻忚堪</view>
- <!-- <view class="list-item-row-val">
- <input type="text" v-model="form.locationRemark" placeholder="璇疯緭鍏�" />
- </view> -->
- <view class="list-item-row-val">
- <textarea v-model="form.locationRemark" cols="30" rows="10" placeholder="璇疯緭鍏�" maxlength="200"></textarea>
- </view>
- </view>
- </template>
-
- </view>
- <template v-if="!(info.type !== 2 && info.status === 2)">
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>闇�姹�</text>
- </view>
- <view class="list-item-row" @click="show1 = true">
- <view class="list-item-row-label">閲囨憳鍝佺<b>*</b></view>
- <view class="list-item-row-val">
- <text>{{form.categoryName ? form.categoryName : '璇烽�夋嫨'}}</text>
- <u-icon name="arrow-right" color="#111111" size="16"></u-icon>
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">閲囨憳閲嶉噺<b>*</b></view>
- <view class="list-item-row-val">
- <input type="digit" v-model="form.priceNum1" @blur="getPrice" placeholder="璇疯緭鍏�" />
- <text>鏂�</text>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">闇�姹傝ˉ鍏�</view>
- <view class="list-item-row-val">
- <textarea v-model="form.supplement" cols="30" rows="10" placeholder="璇疯緭鍏�" maxlength="200"></textarea>
- </view>
- </view>
- <view class="list-item-row" >
- <view class="list-item-row-label">鍥剧墖</view>
- <view class="list-item-row-upload">
- <view class="upload-item" v-for="(item, index) in form.multifileList" :key="index" @click="preview(index, form.multifileList)">
- <image :src="item.url || item.fileurlFull" mode="widthFix"></image>
- <image class="upload-item-dele" @click.stop="form.multifileList.splice(index, 1)" src="/static/icon/ic_delete1@2x.png" mode="widthFix"></image>
- </view>
- <view class="upload-item" @click="uploadImg">
- <u-icon name="plus" color="#999999" size="24"></u-icon>
- <text>鐐瑰嚮涓婁紶</text>
- </view>
- <view style="width: 215rpx; height: 0;"></view>
- </view>
- </view>
- <!-- <view class="list-item-zk" @click="viewStatus = !viewStatus">
- <text>{{viewStatus ? '鏀惰捣' : '琛ュ厖闇�姹�'}}</text>
- <u-icon :name="viewStatus ? 'arrow-up' : 'arrow-down'" color="#00BC12" size="16"></u-icon>
- </view> -->
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>璐圭敤</text>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">璐圭敤鏍囧噯<b>*</b></view>
- <view class="list-item-row-val">
- <input v-model="form.price" type="digit" @blur="getPrice" placeholder="璇疯緭鍏�" />
- <text>鍏�/鏂�</text>
- </view>
- </view>
- </view>
- <view class="list-item">
- <view class="list-item-label">
- <view class="list-item-label-x"></view>
- <text>鑱旂郴浜轰俊鎭�</text>
- <text class="list-item-label-info">榛樿鍙戝崟鏂硅仈绯绘柟寮忥紝鍙慨鏀硅仈绯讳汉</text>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴浜哄鍚�</view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkName" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- <view class="list-item-row">
- <view class="list-item-row-label">鑱旂郴鐢佃瘽<b>*</b></view>
- <view class="list-item-row-val">
- <input type="text" v-model="form.linkPhone" maxlength="11" placeholder="璇疯ˉ鍏�" />
- </view>
- </view>
- </view>
- </template>
-
- </view>
- <view style="width: 100%; height: calc(214rpx + env(safe-area-inset-bottom));"></view>
- <view class="footer">
- <view class="footer-price">
- <view class="footer-price-info">棰勪及鎬昏垂鐢�</view>
- <view class="footer-price-num">
- <text>{{totalPrice}}</text>
- <text>鍏�</text>
- </view>
- </view>
- <view class="footer-bottom">
- <div class="footer-bottom-btn" @click="submit" >
- <text>{{form.id?'纭淇敼':'绔嬪嵆涓嬪崟'}}</text>
- <text v-if="!form.id">锛堟湇鍔″畬鎴愬悗浠樻锛�</text>
- </div>
- </view>
- <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
- </view>
-
- <!-- 閫夋嫨鏃ユ湡鑼冨洿 -->
- <u-calendar
- :show="show"
- color="#00BC12"
- mode="range"
- :allowSameDay="true"
- @close="show = false"
- @confirm="confirmDate" />
-
- <!-- 閫夋嫨鍝佺 -->
- <u-picker
- :show="show1"
- :immediateChange="true"
- :columns="cateList"
- confirmColor="#00BC12"
- @confirm="confirmCategary"
- @cancel="show1 = false"
- keyName="name" />
- </view>
-</template>
-
-<script>
- import { mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['userInfo']),
- totalPrice() {
- return this.form.estimatedAccount / 100
- }
- },
- data() {
- return {
- info: {},
- show: false,
- show1: false,
- form: {
- id: null,
- days: '',
- startDate: '',
- endDate: '',
- lat: '',
- lgt: '',
- location: '',
- workType: 0,
- locationRemark: '',
- categoryId: '',
- categoryName: '',
- priceNum1: '',
- price: '',
- supplement: '',
- multifileList: [],
- linkName: '',
- linkPhone: '',
- priceUnit: '鏂�',
- estimatedAccount: '',
- type: 0
- },
- modify: false,
- cateList: [],
- viewStatus: true
- };
- },
- onLoad(option) {
- // 缂栬緫
- if (option.id) {
- this.form.id = option.id
- this.$u.api.getDetail({
- orderId: option.id
- }).then(res => {
- if (res.code === 200) {
- this.info = res.data
- for (const key in this.form) {
- this.form[key] = res.data[key]
- }
- this.form.days = res.data.totalDays
- this.form.price = Number(this.form.price) / 100
- if (!this.form.multifileList) {
- this.form.multifileList = []
- }
- }
-
- })
- } else {
- this.form.linkPhone = this.userInfo.telephone
- this.form.linkName = this.userInfo.name
- this.form.days = option.days
- this.form.startDate = option.startDate
- this.form.endDate = option.endDate
- this.form.lat = option.latitude
- this.form.lgt = option.longitude
- this.form.location = option.address
- this.form.workType = option.workType
- }
- this.getCateList()
- },
- methods: {
- preview(current, arr) {
- let urls = arr.map(item => item.url || item.fileurlFull)
- uni.previewImage({ current, urls })
- },
- // 鎻愪氦璁㈠崟
- submit() {
- var that = this;
- if (!this.form.categoryId) {
- return uni.showToast({ title: '璇烽�夋嫨閲囨憳鍝佺', icon: 'none' })
- }
- if (!this.form.priceNum1) {
- return uni.showToast({ title: '璇疯緭鍏ラ噰鎽橀噸閲�', icon: 'none' })
- }
- if (!this.form.price) {
- return uni.showToast({ title: '璇疯緭鍏ヨ垂鐢ㄦ爣鍑�', icon: 'none' })
- }
- if (!this.form.linkPhone) {
- return uni.showToast({ title: '璇疯緭鍏ヨ仈绯荤數璇�', icon: 'none' })
- }
- if (!that.form.id) {
- uni.requestSubscribeMessage({
- tmplIds: ['oVjOBLcHxIlGzOMJsdInmgI5CHGXh-UTvMzQqfFOnIg','AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8'],
- success(res) {
- that.$u.api.release({ ...that.form, price: Number(that.form.price) * 100 })
- .then(res => {
- if (res.code == 200) {
- uni.navigateTo({
- url: `/pages/success/success?orderId=${res.data.id}`
- })
- }
- })
- }
- })
- } else {
- // uni.requestSubscribeMessage({
- // tmplIds: ['3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk'],
- // success(res) {
- that.$u.api.updateOrder({ ...that.form, price: Number(that.form.price) * 100 })
- .then(res => {
- if (res.code == 200) {
- uni.showToast({
- title: '缂栬緫鎴愬姛',
- icon: 'success',
- mask: true,
- duration: 2000
- })
- setTimeout(() => {
- uni.navigateBack({ delta: 1 });
- // uni.$emit('refresh')
- }, 1500)
- }
- })
- // }
- // })
- }
- },
- // 璁$畻閲戦
- getPrice() {
- if (this.form.price && this.form.priceNum1) {
- this.$u.api.getTotal({
- price: Number(this.form.price) * 100,
- priceUnit: this.form.priceUnit,
- priceNum1: this.form.priceNum1,
- priceNum2: 1,
- type: this.form.type,
- workType: this.form.workType
- }).then(res => {
- if (res.code === 200) {
- this.modify = true
- this.form.estimatedAccount = res.data
- }
- })
- }
- },
- confirmDate(e) {
- this.form.startDate = e[0]
- this.form.endDate = e[e.length - 1]
- this.form.days = e.length;
- this.show = false
- },
- selectAddress() {
- uni.chooseLocation({
- success: (res) => {
- this.form.lat = res.latitude
- this.form.lgt = res.longitude
- this.form.address = res.name || res.address
- }
- });
- },
- confirmCategary(e) {
- this.form.categoryId = e.value[0].id
- this.form.categoryName = e.value[0].name
- this.show1 = false
- },
- getCateList() {
- this.$u.api.getCategoryList({
- type: 0
- }).then(res => {
- if (res.code === 200) {
- this.cateList = [res.data]
- }
- })
- },
- uploadImg() {
- uni.chooseImage({
- success: (chooseImageRes) => {
- for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
- uni.uploadFile({
- url: this.$baseUrl + '/web/public/upload',
- filePath: chooseImageRes.tempFilePaths[i],
- name: 'file',
- formData: {
- 'folder': 'orders'
- },
- success: (uploadFileRes) => {
- const res = JSON.parse(uploadFileRes.data)
- this.form.multifileList.push({
- fileurl: res.data.imgaddr,
- name: res.data.originname,
- url: res.data.url,
- type: 0
- })
- }
- });
- }
- }
- });
- }
- }
- }
-</script>
-
-<style>
- page {
- background-color: #F7F7F7 !important;
- }
-</style>
-
-<style lang="scss" scoped>
- .index {
- width: 100%;
- .footer {
- width: 100%;
- height: calc(214rpx + env(safe-area-inset-bottom));
- padding: 20rpx 30rpx;
- box-sizing: border-box;
- position: fixed;
- bottom: 0;
- left: 0;
- z-index: 9;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- background: #FFFFFF;
- box-shadow: 0rpx -2rpx 4rpx 0rpx rgba(0,0,0,0.06);
- .footer-price {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-price-info {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- .footer-price-num {
- display: flex;
- align-items: center;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 40rpx;
- color: #FF0000;
- margin-right: 20rpx;
- }
- &:nth-child(2) {
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- }
- .footer-bottom {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .footer-bottom-kf {
- flex-shrink: 0;
- margin-right: 40rpx;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- image {
- width: 36rpx;
- height: 36rpx;
- }
- text {
- font-weight: 400;
- font-size: 24rpx;
- color: #222222;
- margin-top: 8rpx;
- }
- }
- .footer-bottom-btn {
- flex: 1;
- height: 88rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #00BC12;
- box-shadow: 0rpx 8rpx 12rpx 0rpx rgba(91,190,56,0.16);
- border-radius: 44rpx;
- text {
- &:nth-child(1) {
- font-weight: 500;
- font-size: 32rpx;
- color: #FFFFFF;
- }
- &:nth-child(2) {
- font-weight: 500;
- font-size: 26rpx;
- color: #FFFFFF;
- }
- }
- }
- }
- }
- .list {
- width: 100%;
- display: flex;
- flex-direction: column;
- .list-item {
- width: 100%;
- padding: 40rpx 30rpx;
- box-sizing: border-box;
- background-color: #ffffff;
- border-radius: 20rpx;
- margin-bottom: 20rpx;
- &:last-child {
- margin: 0 !important;
- }
- .list-item-label {
- display: flex;
- align-items: center;
- margin-bottom: 28rpx;
- text {
- font-weight: 600;
- font-size: 32rpx;
- color: #222222;
- }
- .list-item-label-info {
- font-weight: 400;
- font-size: 26rpx;
- color: #999999;
- margin-left: 26rpx;
- }
- .list-item-label-x {
- width: 6rpx;
- height: 30rpx;
- background: #00BC12;
- border-radius: 4rpx;
- margin-right: 20rpx;
- }
- }
- .list-item-zk {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- text {
- font-weight: 400;
- font-size: 28rpx;
- color: #00BC12;
- margin-right: 8rpx;
- }
- }
- .list-item-row {
- width: 100%;
- display: flex;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .list-item-row-label {
- font-weight: 400;
- font-size: 28rpx;
- color: #666666;
- display: flex;
- align-items: center;
- b {
- color: red;
- }
- }
- .list-item-row-user {
- width: 100%;
- display: flex;
- flex-direction: column;
- .user-item {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- justify-content: space-between;
- border-bottom: 1rpx solid #E5E5E5;
- &:last-child {
- margin: 0 !important;
- }
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- flex: 1;
- text-align: center;
- margin: 0 30rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- }
- }
- .list-item-row-radio {
- width: 100%;
- display: flex;
- padding: 30rpx 0;
- box-sizing: border-box;
- flex-direction: column;
- border-bottom: 1rpx solid #E5E5E5;
- .radio-item {
- width: 100%;
- display: flex;
- align-items: center;
- margin-bottom: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- .radio-item-label {
- width: 200rpx;
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- .radio-item-list {
- flex: 1;
- display: flex;
- flex-direction: column;
- .radio-item-list-l {
- width: 100%;
- display: flex;
- align-items: center;
- .active {
- background: #00BC12 !important;
- color: #ffffff !important;
- }
- .radio-item-list-item {
- width: 124rpx;
- height: 72rpx;
- line-height: 72rpx;
- text-align: center;
- background: #EEEEEE;
- border-radius: 36rpx;
- font-weight: 400;
- font-size: 28rpx;
- color: #111111;
- margin-right: 30rpx;
- &:last-child {
- margin: 0 !important;
- }
- }
- }
- .radio-item-list-data {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: flex-end;
- margin-top: 42rpx;
- text {
- font-weight: 400;
- font-size: 30rpx;
- color: #333333;
- }
- input {
- width: 100rpx;
- font-weight: bold;
- font-size: 30rpx;
- color: #222222;
- text-align: right;
- margin: 0 30rpx;
- }
- }
- }
- }
- }
- .list-item-row-upload {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- flex-wrap: wrap;
- padding: 30rpx 0;
- box-sizing: border-box;
- .upload-item {
- width: 215rpx;
- height: 215rpx;
- display: flex;
- align-items: center;
- flex-direction: column;
- justify-content: center;
- background: #F8F9FB;
- border-radius: 8rpx;
- border: 2rpx solid #EEEEEE;
- position: relative;
- margin-bottom: 15rpx;
- &:last-child {
- margin: 0 !important;
- }
- image {
- width: 100%;
- }
- text {
- font-weight: 400;
- font-size: 26rpx;
- color: #666666;
- margin-top: 16rpx;
- }
- .upload-item-dele {
- position: absolute;
- top: -20rpx;
- right: -20rpx;
- width: 40rpx;
- height: 40rpx;
- z-index: 9;
- }
- }
- }
- .list-item-row-val {
- width: 100%;
- padding: 30rpx 0;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- text {
- flex-shrink: 0;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- input {
- width: 100%;
- font-weight: 400;
- font-size: 30rpx;
- color: #222222;
- }
- textarea {
- width: 100%;
- height: 90rpx;
- font-weight: 400;
- font-size: 30rpx;
- color: #111111;
- }
- }
- }
- }
- }
- }
-</style>
diff --git a/small-program/static/icon/ar_address@2x.png b/small-program/static/icon/ar_address@2x.png
deleted file mode 100644
index dafc78e..0000000
--- a/small-program/static/icon/ar_address@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/default_login@2x.png b/small-program/static/icon/default_login@2x.png
deleted file mode 100644
index be12541..0000000
--- a/small-program/static/icon/default_login@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/home_ar_next@2x.png b/small-program/static/icon/home_ar_next@2x.png
deleted file mode 100644
index d991cbf..0000000
--- a/small-program/static/icon/home_ar_next@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/home_ic_location@2x.png b/small-program/static/icon/home_ic_location@2x.png
deleted file mode 100644
index 525bf81..0000000
--- a/small-program/static/icon/home_ic_location@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_agree@2x.png b/small-program/static/icon/ic_agree@2x.png
deleted file mode 100644
index 2c9c027..0000000
--- a/small-program/static/icon/ic_agree@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_call@2x.png b/small-program/static/icon/ic_call@2x.png
deleted file mode 100644
index 6a64ff7..0000000
--- a/small-program/static/icon/ic_call@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_camera@2x.png b/small-program/static/icon/ic_camera@2x.png
deleted file mode 100644
index 088671a..0000000
--- a/small-program/static/icon/ic_camera@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_change@2x.png b/small-program/static/icon/ic_change@2x.png
deleted file mode 100644
index 76f8c32..0000000
--- a/small-program/static/icon/ic_change@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_close@2x.png b/small-program/static/icon/ic_close@2x.png
deleted file mode 100644
index 29468f1..0000000
--- a/small-program/static/icon/ic_close@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_delete1@2x.png b/small-program/static/icon/ic_delete1@2x.png
deleted file mode 100644
index 4ebc8fe..0000000
--- a/small-program/static/icon/ic_delete1@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_delete@2x.png b/small-program/static/icon/ic_delete@2x.png
deleted file mode 100644
index cd74219..0000000
--- a/small-program/static/icon/ic_delete@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_fail@2x.png b/small-program/static/icon/ic_fail@2x.png
deleted file mode 100644
index 122d69a..0000000
--- a/small-program/static/icon/ic_fail@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_huakuai@2x.png b/small-program/static/icon/ic_huakuai@2x.png
deleted file mode 100644
index 9cedfde..0000000
--- a/small-program/static/icon/ic_huakuai@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_jingguo@2x.png b/small-program/static/icon/ic_jingguo@2x.png
deleted file mode 100644
index 3b9d302..0000000
--- a/small-program/static/icon/ic_jingguo@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_kefu.png b/small-program/static/icon/ic_kefu.png
deleted file mode 100644
index ef1a9ea..0000000
--- a/small-program/static/icon/ic_kefu.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_location@2x.png b/small-program/static/icon/ic_location@2x.png
deleted file mode 100644
index 8a7c81b..0000000
--- a/small-program/static/icon/ic_location@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_money@2x.png b/small-program/static/icon/ic_money@2x.png
deleted file mode 100644
index d0c28a3..0000000
--- a/small-program/static/icon/ic_money@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_notagree@2x.png b/small-program/static/icon/ic_notagree@2x.png
deleted file mode 100644
index 6d65b97..0000000
--- a/small-program/static/icon/ic_notagree@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_pass@2x.png b/small-program/static/icon/ic_pass@2x.png
deleted file mode 100644
index 2367d43..0000000
--- a/small-program/static/icon/ic_pass@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_pingjia@2x.png b/small-program/static/icon/ic_pingjia@2x.png
deleted file mode 100644
index 91a27ec..0000000
--- a/small-program/static/icon/ic_pingjia@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_qidian@2x.png b/small-program/static/icon/ic_qidian@2x.png
deleted file mode 100644
index 424e47d..0000000
--- a/small-program/static/icon/ic_qidian@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_renzhengzhong@2x.png b/small-program/static/icon/ic_renzhengzhong@2x.png
deleted file mode 100644
index 14adb81..0000000
--- a/small-program/static/icon/ic_renzhengzhong@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_search@2x.png b/small-program/static/icon/ic_search@2x.png
deleted file mode 100644
index 5ed9fc5..0000000
--- a/small-program/static/icon/ic_search@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_success@2x.png b/small-program/static/icon/ic_success@2x.png
deleted file mode 100644
index 28c715d..0000000
--- a/small-program/static/icon/ic_success@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_time@2x.png b/small-program/static/icon/ic_time@2x.png
deleted file mode 100644
index b0a1a61..0000000
--- a/small-program/static/icon/ic_time@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_tip@2x.png b/small-program/static/icon/ic_tip@2x.png
deleted file mode 100644
index 2dd1a9f..0000000
--- a/small-program/static/icon/ic_tip@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/ic_zhongdian@2x.png b/small-program/static/icon/ic_zhongdian@2x.png
deleted file mode 100644
index 5753757..0000000
--- a/small-program/static/icon/ic_zhongdian@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/img@2x.png b/small-program/static/icon/img@2x.png
deleted file mode 100644
index 52909a1..0000000
--- a/small-program/static/icon/img@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/nav_home@2x.png b/small-program/static/icon/nav_home@2x.png
new file mode 100644
index 0000000..d0a4c6d
--- /dev/null
+++ b/small-program/static/icon/nav_home@2x.png
Binary files differ
diff --git "a/small-program/static/icon/nav_home_sel@2x \0501\051.png" "b/small-program/static/icon/nav_home_sel@2x \0501\051.png"
deleted file mode 100644
index a6e909e..0000000
--- "a/small-program/static/icon/nav_home_sel@2x \0501\051.png"
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/nav_home_sel@2x.png b/small-program/static/icon/nav_home_sel@2x.png
index 488eed0..5e306dc 100644
--- a/small-program/static/icon/nav_home_sel@2x.png
+++ b/small-program/static/icon/nav_home_sel@2x.png
Binary files differ
diff --git a/small-program/static/icon/nav_mine@2x.png b/small-program/static/icon/nav_mine@2x.png
deleted file mode 100644
index 7df9bf5..0000000
--- a/small-program/static/icon/nav_mine@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/nav_mine_sel@2x.png b/small-program/static/icon/nav_mine_sel@2x.png
deleted file mode 100644
index 9220656..0000000
--- a/small-program/static/icon/nav_mine_sel@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/nav_order@2x.png b/small-program/static/icon/nav_order@2x.png
deleted file mode 100644
index 6a292c9..0000000
--- a/small-program/static/icon/nav_order@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/nav_order_sel@2x.png b/small-program/static/icon/nav_order_sel@2x.png
deleted file mode 100644
index 6357216..0000000
--- a/small-program/static/icon/nav_order_sel@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/nav_wode@2x.png b/small-program/static/icon/nav_wode@2x.png
new file mode 100644
index 0000000..d8afffd
--- /dev/null
+++ b/small-program/static/icon/nav_wode@2x.png
Binary files differ
diff --git a/small-program/static/icon/nav_wode_sel@2x.png b/small-program/static/icon/nav_wode_sel@2x.png
new file mode 100644
index 0000000..6f84696
--- /dev/null
+++ b/small-program/static/icon/nav_wode_sel@2x.png
Binary files differ
diff --git a/small-program/static/icon/nav_xiaoxi@2x.png b/small-program/static/icon/nav_xiaoxi@2x.png
new file mode 100644
index 0000000..668e3f1
--- /dev/null
+++ b/small-program/static/icon/nav_xiaoxi@2x.png
Binary files differ
diff --git a/small-program/static/icon/nav_xiaoxi_sel@2x.png b/small-program/static/icon/nav_xiaoxi_sel@2x.png
new file mode 100644
index 0000000..3d1c086
--- /dev/null
+++ b/small-program/static/icon/nav_xiaoxi_sel@2x.png
Binary files differ
diff --git a/small-program/static/icon/nav_xingcheng@2x.png b/small-program/static/icon/nav_xingcheng@2x.png
new file mode 100644
index 0000000..516eba5
--- /dev/null
+++ b/small-program/static/icon/nav_xingcheng@2x.png
Binary files differ
diff --git a/small-program/static/icon/nav_xingcheng_sel@2x.png b/small-program/static/icon/nav_xingcheng_sel@2x.png
new file mode 100644
index 0000000..e592817
--- /dev/null
+++ b/small-program/static/icon/nav_xingcheng_sel@2x.png
Binary files differ
diff --git a/small-program/static/icon/order_ic_location@2x.png b/small-program/static/icon/order_ic_location@2x.png
deleted file mode 100644
index e7a569c..0000000
--- a/small-program/static/icon/order_ic_location@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/icon/order_ic_time@2x.png b/small-program/static/icon/order_ic_time@2x.png
deleted file mode 100644
index fd7c818..0000000
--- a/small-program/static/icon/order_ic_time@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/bg_green@2x.png b/small-program/static/image/bg_green@2x.png
deleted file mode 100644
index 3903c70..0000000
--- a/small-program/static/image/bg_green@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/bg_renzheng_gongcan@2x.png b/small-program/static/image/bg_renzheng_gongcan@2x.png
deleted file mode 100644
index 89b996a..0000000
--- a/small-program/static/image/bg_renzheng_gongcan@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/bg_renzheng_huoyun@2x.png b/small-program/static/image/bg_renzheng_huoyun@2x.png
deleted file mode 100644
index 2261f41..0000000
--- a/small-program/static/image/bg_renzheng_huoyun@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/bg_renzheng_yonggong@2x.png b/small-program/static/image/bg_renzheng_yonggong@2x.png
deleted file mode 100644
index 36e75e6..0000000
--- a/small-program/static/image/bg_renzheng_yonggong@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/btn.png b/small-program/static/image/btn.png
deleted file mode 100644
index c3dcb3b..0000000
--- a/small-program/static/image/btn.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/btn_guohui@2x.png b/small-program/static/image/btn_guohui@2x.png
deleted file mode 100644
index bfe1caf..0000000
--- a/small-program/static/image/btn_guohui@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/btn_renxiang@2x.png b/small-program/static/image/btn_renxiang@2x.png
deleted file mode 100644
index 4364042..0000000
--- a/small-program/static/image/btn_renxiang@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/image/share@2x.png b/small-program/static/image/share@2x.png
deleted file mode 100644
index f5a6f9d..0000000
--- a/small-program/static/image/share@2x.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/logo.png b/small-program/static/logo.png
deleted file mode 100644
index b5771e2..0000000
--- a/small-program/static/logo.png
+++ /dev/null
Binary files differ
diff --git a/small-program/static/share.png b/small-program/static/share.png
deleted file mode 100644
index 6f91df1..0000000
--- a/small-program/static/share.png
+++ /dev/null
Binary files differ
diff --git a/small-program/utils/shareMixin.js b/small-program/utils/shareMixin.js
deleted file mode 100644
index d3fecdd..0000000
--- a/small-program/utils/shareMixin.js
+++ /dev/null
@@ -1,26 +0,0 @@
-export default {
- data() {
- return {
- // 鍙叏灞�瑕嗙洊鐨勯粯璁ゅ弬鏁�
- shareConfig: {
- title: '閲囨灉涓婅繎蹇紝鐢ㄥ伐鏉ュ緱蹇�',
- path: '/pages/index/index',
- imageUrl: '/static/share.png'
- }
- }
- },
- onShareAppMessage() {
- return {
- title: this.shareConfig.title,
- path: `${this.shareConfig.path}?ref=${Date.now()}`,
- imageUrl: this.shareConfig.imageUrl
- }
- },
- onShareTimeline() {
- return {
- title: this.shareConfig.title,
- query: `ref=${Date.now()}`,
- imageUrl: this.shareConfig.imageUrl
- }
- }
-}
\ No newline at end of file
--
Gitblit v1.9.3