From c6d20c6e1db82b204cf59e058bc3ba2a9cd84a1e Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 24 十月 2023 09:24:17 +0800
Subject: [PATCH] Merge branch 'dev' of http://139.186.142.91:10010/r/productDev/parkBike into dev

---
 admin/src/components/business/OperaBaseParamWindow.vue                                       |   82 +
 server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java    |    3 
 admin/src/api/business/bikes.js                                                              |   23 
 admin/src/views/business/goodsorder.vue                                                      |   30 
 admin/src/components/business/OperaGoodsorderWindow.vue                                      |  126 +
 admin/src/components/business/OperaLocksWindow.vue                                           |   82 +
 server/services/src/main/java/com/doumee/dao/business/model/ActionLog.java                   |    7 
 server/services/src/main/java/com/doumee/service/business/PricingParamService.java           |    2 
 admin/src/api/business/multifile.js                                                          |   23 
 admin/src/components/system/dict/OperaDictDataWindow.vue                                     |    2 
 admin/src/views/business/actionLog.vue                                                       |   38 
 admin/src/views/business/pricingParam.vue                                                    |    4 
 server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java   |    3 
 admin/src/views/business/memberRides.vue                                                     |   39 
 server/platform/src/main/java/com/doumee/api/business/PricingParamController.java            |    8 
 admin/src/views/business/bikes.vue                                                           |  145 +
 admin/src/components/business/OperaRentSiteWindow.vue                                        |    8 
 admin/src/views/business/baseParam.vue                                                       |  130 +
 admin/src/components/business/RepairDetailWindow.vue                                         |  124 +
 admin/src/views/business/mqttLog.vue                                                         |  130 +
 server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java              |   10 
 server/services/src/main/java/com/doumee/service/business/impl/PricingDetailServiceImpl.java |    6 
 admin/src/components/business/OperaAliBillDetailWindow.vue                                   |  142 +
 admin/src/views/business/aliBillDetail.vue                                                   |  205 ++
 admin/.env.development                                                                       |    2 
 admin/src/components/business/OperaMultifileWindow.vue                                       |   86 +
 admin/src/components/business/OperaReductionWindow.vue                                       |    2 
 admin/src/views/business/reductionReason.vue                                                 |    4 
 admin/src/api/business/locks.js                                                              |   23 
 admin/src/api/business/mqttLog.js                                                            |   23 
 admin/src/components/business/OperaRefundWindow.vue                                          |  106 +
 admin/src/views/business/wxBill.vue                                                          |    5 
 server/services/src/main/java/com/doumee/core/utils/DateUtil.java                            |    2 
 admin/src/views/business/member.vue                                                          |  185 ++
 admin/src/api/business/aliBill.js                                                            |   23 
 admin/src/api/business/aliBillDetail.js                                                      |   23 
 admin/src/views/business/backgroundRefund.vue                                                |   49 
 server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java                 |    1 
 admin/src/api/business/ad.js                                                                 |   23 
 admin/src/components/business/goodsOrderDetail.vue                                           |   11 
 admin/src/api/business/pricingDetail.js                                                      |   23 
 server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java    |   28 
 admin/src/api/business/memberRides.js                                                        |    2 
 admin/src/api/business/transactions.js                                                       |   23 
 admin/src/components/business/OperaReturnReasonWindow.vue                                    |    2 
 admin/src/views/business/pricingDetail.vue                                                   |  160 ++
 admin/src/views/business/ad.vue                                                              |   96 +
 admin/src/views/business/onlinePayStatistics.vue                                             |    7 
 server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java        |   24 
 admin/src/components/business/OperaAliBillWindow.vue                                         |   82 +
 admin/src/api/business/bikeRepair.js                                                         |    5 
 admin/src/views/business/wxBillDetail.vue                                                    |    5 
 admin/src/components/business/OperaBikeRepairWindow.vue                                      |  114 +
 server/services/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java      |    6 
 admin/src/components/business/OperaRepairDealWindow.vue                                      |    2 
 admin/src/components/business/OperaWxBillDetailWindow.vue                                    |  158 ++
 admin/src/views/business/bikeRetakeRecord.vue                                                |   50 
 server/services/src/main/resources/mappers/SystemUserMapper.xml                              |    3 
 server/services/src/main/java/com/doumee/dao/business/web/response/BikeLogDTO.java           |   17 
 server/services/src/main/java/com/doumee/service/business/impl/ActionLogServiceImpl.java     |   11 
 admin/src/views/business/returnReason.vue                                                    |    4 
 admin/src/api/business/pricingParam.js                                                       |    7 
 admin/src/components/business/OperaPricingDetailWindow.vue                                   |  106 +
 admin/src/views/business/transactions.vue                                                    |  165 ++
 server/services/src/main/java/com/doumee/service/business/impl/AdServiceImpl.java            |   11 
 admin/src/components/business/OperaPriceConfigWindow.vue                                     |    4 
 admin/src/views/business/multifile.vue                                                       |  135 +
 admin/src/views/business/miniproSetting.vue                                                  |   90 
 admin/src/views/business/bikeRepair.vue                                                      |   48 
 admin/src/components/business/OperaBikesWindow.vue                                           |   94 +
 server/services/src/main/resources/application-dev.yml                                       |    4 
 admin/src/views/business/refund.vue                                                          |  160 ++
 admin/src/components/business/OperaMemberRidesWindow.vue                                     |  182 ++
 admin/src/views/business/locks.vue                                                           |  130 +
 admin/src/components/business/OperaWxBillWindow.vue                                          |   82 +
 admin/src/utils/util.js                                                                      |   28 
 admin/src/api/business/refund.js                                                             |   23 
 admin/src/components/business/priceConfiguration.vue                                         |    2 
 admin/src/views/business/aliBill.vue                                                         |  130 +
 admin/src/components/business/OperaMqttLogWindow.vue                                         |   82 +
 server/platform/src/main/java/com/doumee/api/system/SystemUserController.java                |    1 
 admin/src/components/business/OperaTransactionsWindow.vue                                    |  110 +
 server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java                  |    9 
 admin/src/components/business/backGoodsorderWindow.vue                                       |    8 
 admin/src/components/business/OperaAdWindow.vue                                              |  113 +
 admin/src/views/business/rentSite.vue                                                        |    6 
 admin/src/components/business/OperaActionLogWindow.vue                                       |  114 +
 server/services/src/main/java/com/doumee/dao/business/model/Member.java                      |    2 
 server/services/src/main/java/com/doumee/service/business/impl/PricingParamServiceImpl.java  |   64 
 89 files changed, 4,513 insertions(+), 159 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 6e828ff..bbc103c 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -7,7 +7,7 @@
 
 #鐒︽澗鏈湴
 # http://192.168.0.36:10012/doc.html#/home
-VUE_APP_API_BASE_URL='http://192.168.0.36:10026'
+VUE_APP_API_BASE_URL='http://192.168.0.188:10026'
 
 # # 娴嬭瘯鏈嶅姟
 # VUE_APP_API_PREFIX='/bike_admin_api'
diff --git a/admin/src/api/business/ad.js b/admin/src/api/business/ad.js
new file mode 100644
index 0000000..1623b44
--- /dev/null
+++ b/admin/src/api/business/ad.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/ad/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/ad/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/ad/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/ad/delete/${id}`)
+}
diff --git a/admin/src/api/business/aliBill.js b/admin/src/api/business/aliBill.js
new file mode 100644
index 0000000..1683fd8
--- /dev/null
+++ b/admin/src/api/business/aliBill.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/aliBill/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/aliBill/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/aliBill/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/aliBill/delete/${id}`)
+}
diff --git a/admin/src/api/business/aliBillDetail.js b/admin/src/api/business/aliBillDetail.js
new file mode 100644
index 0000000..8228573
--- /dev/null
+++ b/admin/src/api/business/aliBillDetail.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/aliBillDetail/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/aliBillDetail/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/aliBillDetail/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/aliBillDetail/delete/${id}`)
+}
diff --git a/admin/src/api/business/bikeRepair.js b/admin/src/api/business/bikeRepair.js
index 1d233e6..2a3f99f 100644
--- a/admin/src/api/business/bikeRepair.js
+++ b/admin/src/api/business/bikeRepair.js
@@ -11,3 +11,8 @@
 export function updateById (data) {
   return request.post('/business/bikeRepair/updateById', data)
 }
+
+// 淇敼
+export function getFileList (id) {
+  return request.post(`/business/bikeRepair/getFileList/${id}`)
+}
diff --git a/admin/src/api/business/bikes.js b/admin/src/api/business/bikes.js
new file mode 100644
index 0000000..656464d
--- /dev/null
+++ b/admin/src/api/business/bikes.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/bikes/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/bikes/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/bikes/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/bikes/delete/${id}`)
+}
diff --git a/admin/src/api/business/locks.js b/admin/src/api/business/locks.js
new file mode 100644
index 0000000..a4ba570
--- /dev/null
+++ b/admin/src/api/business/locks.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/locks/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/locks/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/locks/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/locks/delete/${id}`)
+}
diff --git a/admin/src/api/business/memberRides.js b/admin/src/api/business/memberRides.js
index 2f3d499..dc1baca 100644
--- a/admin/src/api/business/memberRides.js
+++ b/admin/src/api/business/memberRides.js
@@ -9,7 +9,7 @@
 
 // 瀵煎嚭Excel
 export function exportExcel (data) {
-  return request.post('/business/memberRides/exportExcel', data, {
+  return request.post('/business/memberRides/exportMemberRidesExcel', data, {
     trim: true,
     download: true
   })
diff --git a/admin/src/api/business/mqttLog.js b/admin/src/api/business/mqttLog.js
new file mode 100644
index 0000000..90bba10
--- /dev/null
+++ b/admin/src/api/business/mqttLog.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/mqttLog/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/mqttLog/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/mqttLog/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/mqttLog/delete/${id}`)
+}
diff --git a/admin/src/api/business/multifile.js b/admin/src/api/business/multifile.js
new file mode 100644
index 0000000..4bdc449
--- /dev/null
+++ b/admin/src/api/business/multifile.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/multifile/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/multifile/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/multifile/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/multifile/delete/${id}`)
+}
diff --git a/admin/src/api/business/pricingDetail.js b/admin/src/api/business/pricingDetail.js
new file mode 100644
index 0000000..b1b1c78
--- /dev/null
+++ b/admin/src/api/business/pricingDetail.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/pricingDetail/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/pricingDetail/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/pricingDetail/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/pricingDetail/delete/${id}`)
+}
diff --git a/admin/src/api/business/pricingParam.js b/admin/src/api/business/pricingParam.js
index 17037e9..1ad96d2 100644
--- a/admin/src/api/business/pricingParam.js
+++ b/admin/src/api/business/pricingParam.js
@@ -17,6 +17,11 @@
   return request.post('/business/pricingParam/updateById', data)
 }
 
+// 淇敼
+export function updateStatusById (data) {
+  return request.post('/business/pricingParam/updateStatusById', data)
+}
+
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/business/pricingParam/delete/${id}`)
@@ -28,5 +33,5 @@
 }
 // 鏍规嵁ID淇敼閰嶇疆
 export function updatePricingDetailById (data) {
-  return request.post('/business/pricingDetail/updateById', data)
+  return request.post('/business/pricingDetail/create', data)
 }
\ No newline at end of file
diff --git a/admin/src/api/business/refund.js b/admin/src/api/business/refund.js
new file mode 100644
index 0000000..e4cfc6f
--- /dev/null
+++ b/admin/src/api/business/refund.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/refund/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/refund/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/refund/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/refund/delete/${id}`)
+}
diff --git a/admin/src/api/business/transactions.js b/admin/src/api/business/transactions.js
new file mode 100644
index 0000000..580e263
--- /dev/null
+++ b/admin/src/api/business/transactions.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/transactions/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/transactions/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/transactions/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/transactions/delete/${id}`)
+}
diff --git a/admin/src/components/business/OperaActionLogWindow.vue b/admin/src/components/business/OperaActionLogWindow.vue
new file mode 100644
index 0000000..34b78e7
--- /dev/null
+++ b/admin/src/components/business/OperaActionLogWindow.vue
@@ -0,0 +1,114 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏍囬" prop="title">
+        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍐呭" prop="content">
+        <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 " prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ョ被鍨� " v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏宠仈瀵硅薄缂栫爜" prop="objId">
+        <el-input v-model="form.objId" placeholder="璇疯緭鍏ュ叧鑱斿璞$紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏宠仈瀵硅薄绫诲瀷  " prop="objType">
+        <el-input v-model="form.objType" placeholder="璇疯緭鍏ュ叧鑱斿璞$被鍨�  " v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜" prop="userId">
+        <el-input v-model="form.userId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛绫诲瀷 0浼氬憳 1绯荤粺鐢ㄦ埛" prop="userType">
+        <el-input v-model="form.userType" placeholder="璇疯緭鍏ョ敤鎴风被鍨� 0浼氬憳 1绯荤粺鐢ㄦ埛" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎿嶄綔鍓嶅唴瀹�" prop="beforeContent">
+        <el-input v-model="form.beforeContent" placeholder="璇疯緭鍏ユ搷浣滃墠鍐呭" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎿嶄綔鍚庡唴瀹�" prop="afterContent">
+        <el-input v-model="form.afterContent" placeholder="璇疯緭鍏ユ搷浣滃悗鍐呭" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍙傛暟1" prop="param">
+        <el-input v-model="form.param" placeholder="璇疯緭鍏ュ弬鏁�1" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍙傛暟2" prop="param2">
+        <el-input v-model="form.param2" placeholder="璇疯緭鍏ュ弬鏁�2" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍙傛暟3" prop="param3">
+        <el-input v-model="form.param3" placeholder="璇疯緭鍏ュ弬鏁�3" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎿嶄綔缁撴灉 0鎴愬姛 1澶辫触" prop="result">
+        <el-input v-model="form.result" placeholder="璇疯緭鍏ユ搷浣滅粨鏋� 0鎴愬姛 1澶辫触" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaActionLogWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        title: '',
+        content: '',
+        type: '',
+        objId: '',
+        objType: '',
+        userId: '',
+        userType: '',
+        beforeContent: '',
+        afterContent: '',
+        param: '',
+        param2: '',
+        param3: '',
+        result: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/actionLog',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaAdWindow.vue b/admin/src/components/business/OperaAdWindow.vue
new file mode 100644
index 0000000..7588601
--- /dev/null
+++ b/admin/src/components/business/OperaAdWindow.vue
@@ -0,0 +1,113 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+    width="600px"
+  >
+    <el-form :model="form" ref="form" :rules="rules" label-width="125px" label-suffix="锛�">
+      <el-form-item label="鏍囬" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ユ爣棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="灞曠ず鍥剧墖" prop="imgfullurl">
+        <UploadAvatarImage
+          :file="{ 'imgurlfull': form.imgfullurl, 'imgurl': form.imgurl }"
+          :uploadData="uploadData" tipsLabel="" @uploadSuccess="uploadOutSuccess" @uploadEnd="isUploading=false"
+          @uploadBegin="isUploading=true" />
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮侊紙鍗囧簭锛�" prop="sortnum">
+        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜锛堝崌搴忥級" v-trim/>
+      </el-form-item>
+
+      
+      <!-- <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 0鍥炬枃 1澶栭摼 2鍏朵粬" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ョ被鍨� 0鍥炬枃 1澶栭摼 2鍏朵粬" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍐呭" prop="content">
+        <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�" v-trim/>
+      </el-form-item> -->
+      
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage.vue'
+export default {
+  name: 'OperaAdWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow, UploadAvatarImage },
+  data () {
+    return {
+      isUploading: false,
+      uploadData: {folder: 'bike'},
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        name: '',
+        sortnum: '',
+        imgfullurl: '',
+        imgurl: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        imgfullurl: [
+          { required: true, message:'璇蜂笂浼犲睍绀哄浘鐗�', tigger:'change' }
+        ]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/ad',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+          this.form.imgurl = ''
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    },
+    uploadOutSuccess(file) {
+      this.form.imgurl = file.imgurl;
+      this.form.imgfullurl = file.imgurlfull;
+    },
+  },
+}
+/**
+ *
+ */
+</script>
diff --git a/admin/src/components/business/OperaAliBillDetailWindow.vue b/admin/src/components/business/OperaAliBillDetailWindow.vue
new file mode 100644
index 0000000..392895a
--- /dev/null
+++ b/admin/src/components/business/OperaAliBillDetailWindow.vue
@@ -0,0 +1,142 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="瀵硅处鍗旾D" prop="pid">
+        <el-input v-model="form.pid" placeholder="璇疯緭鍏ュ璐﹀崟ID" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鏃堕棿" prop="billDate">
+        <el-date-picker v-model="form.billDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ヤ氦鏄撴椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛鍙�" prop="mchId">
+        <el-input v-model="form.mchId" placeholder="璇疯緭鍏ュ晢鎴峰彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="寰俊璁㈠崟鍙�" prop="transactionId">
+        <el-input v-model="form.transactionId" placeholder="璇疯緭鍏ュ井淇¤鍗曞彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛璁㈠崟鍙�" prop="outTradeNo">
+        <el-input v-model="form.outTradeNo" placeholder="璇疯緭鍏ュ晢鎴疯鍗曞彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛鏍囪瘑" prop="openid">
+        <el-input v-model="form.openid" placeholder="璇疯緭鍏ョ敤鎴锋爣璇�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗绫诲瀷" prop="billType">
+        <el-input v-model="form.billType" placeholder="璇疯緭鍏ヤ氦鏄撶被鍨�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍒告牳閿�閲戦锛堝厓锛�" prop="couponFee">
+        <el-input v-model="form.couponFee" placeholder="璇疯緭鍏ュ埜鏍搁攢閲戦锛堝厓锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆炬壒娆″彿/璇锋眰鍙�" prop="refundId">
+        <el-input v-model="form.refundId" placeholder="璇疯緭鍏ラ��娆炬壒娆″彿/璇锋眰鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗搧鍚嶇О" prop="body">
+        <el-input v-model="form.body" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎵嬬画璐�" prop="cmmsAmt">
+        <el-input v-model="form.cmmsAmt" placeholder="璇疯緭鍏ユ墜缁垂" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁㈠崟閲戦" prop="totalFee">
+        <el-input v-model="form.totalFee" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢宠閫�娆鹃噾棰�" prop="applyRefundFee">
+        <el-input v-model="form.applyRefundFee" placeholder="璇疯緭鍏ョ敵璇烽��娆鹃噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗瀹炴敹锛堝厓锛�" prop="receipts">
+        <el-input v-model="form.receipts" placeholder="璇疯緭鍏ュ晢瀹跺疄鏀讹紙鍏冿級" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏀粯瀹濈孩鍖咃紙鍏冿級" prop="aliRedEnvelope">
+        <el-input v-model="form.aliRedEnvelope" placeholder="璇疯緭鍏ユ敮浠樺疂绾㈠寘锛堝厓锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="闆嗗垎瀹濓紙鍏冿級" prop="jifenbao">
+        <el-input v-model="form.jifenbao" placeholder="璇疯緭鍏ラ泦鍒嗗疂锛堝厓锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏀粯瀹濅紭鎯狅紙鍏冿級" prop="aliOfferFee">
+        <el-input v-model="form.aliOfferFee" placeholder="璇疯緭鍏ユ敮浠樺疂浼樻儬锛堝厓锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗浼樻儬锛堝厓锛�" prop="offerFee">
+        <el-input v-model="form.offerFee" placeholder="璇疯緭鍏ュ晢瀹朵紭鎯狅紙鍏冿級" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍒稿悕绉�" prop="couponName">
+        <el-input v-model="form.couponName" placeholder="璇疯緭鍏ュ埜鍚嶇О" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗绾㈠寘娑堣垂閲戦锛堝厓锛�" prop="redEnvelope">
+        <el-input v-model="form.redEnvelope" placeholder="璇疯緭鍏ュ晢瀹剁孩鍖呮秷璐归噾棰濓紙鍏冿級" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍗℃秷璐归噾棰濓紙鍏冿級" prop="cardFee">
+        <el-input v-model="form.cardFee" placeholder="璇疯緭鍏ュ崱娑堣垂閲戦锛堝厓锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍒嗘鼎" prop="shareProfit">
+        <el-input v-model="form.shareProfit" placeholder="璇疯緭鍏ュ垎娑�" v-trim/>
+      </el-form-item>
+      <el-form-item label="闂ㄥ簵鍚嶇О" prop="mchName">
+        <el-input v-model="form.mchName" placeholder="璇疯緭鍏ラ棬搴楀悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎿嶄綔鍛�" prop="opName">
+        <el-input v-model="form.opName" placeholder="璇疯緭鍏ユ搷浣滃憳" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁堢鍙�" prop="tty">
+        <el-input v-model="form.tty" placeholder="璇疯緭鍏ョ粓绔彿" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaAliBillDetailWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        pid: '',
+        billDate: '',
+        mchId: '',
+        transactionId: '',
+        outTradeNo: '',
+        openid: '',
+        billType: '',
+        couponFee: '',
+        refundId: '',
+        body: '',
+        cmmsAmt: '',
+        totalFee: '',
+        applyRefundFee: '',
+        remark: '',
+        receipts: '',
+        aliRedEnvelope: '',
+        jifenbao: '',
+        aliOfferFee: '',
+        offerFee: '',
+        couponName: '',
+        redEnvelope: '',
+        cardFee: '',
+        shareProfit: '',
+        mchName: '',
+        opName: '',
+        tty: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/aliBillDetail',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaAliBillWindow.vue b/admin/src/components/business/OperaAliBillWindow.vue
new file mode 100644
index 0000000..9c7c96f
--- /dev/null
+++ b/admin/src/components/business/OperaAliBillWindow.vue
@@ -0,0 +1,82 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鎬讳氦鏄撳崟鏁�" prop="sumBill">
+        <el-input v-model="form.sumBill" placeholder="璇疯緭鍏ユ�讳氦鏄撳崟鏁�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆剧殑璁㈠崟鏁�" prop="sumRefundBill">
+        <el-input v-model="form.sumRefundBill" placeholder="璇疯緭鍏ラ��娆剧殑璁㈠崟鏁�" v-trim/>
+      </el-form-item>
+      <el-form-item label="搴旂粨璁㈠崟鎬婚噾棰�" prop="sumSuccessFee">
+        <el-input v-model="form.sumSuccessFee" placeholder="璇疯緭鍏ュ簲缁撹鍗曟�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆炬�婚噾棰�" prop="sumRefundFee">
+        <el-input v-model="form.sumRefundFee" placeholder="璇疯緭鍏ラ��娆炬�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏呭�煎埜閫�娆炬�婚噾棰�" prop="sumCouponRefundFee">
+        <el-input v-model="form.sumCouponRefundFee" placeholder="璇疯緭鍏ュ厖鍊煎埜閫�娆炬�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎵嬬画璐规�婚噾棰�" prop="sumCmmsAmt">
+        <el-input v-model="form.sumCmmsAmt" placeholder="璇疯緭鍏ユ墜缁垂鎬婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁㈠崟鎬婚噾棰�" prop="sumTotalFee">
+        <el-input v-model="form.sumTotalFee" placeholder="璇疯緭鍏ヨ鍗曟�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢宠閫�娆炬�婚噾棰�" prop="sumApplyRefundFee">
+        <el-input v-model="form.sumApplyRefundFee" placeholder="璇疯緭鍏ョ敵璇烽��娆炬�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆炬墜缁垂鎬婚噾棰�" prop="sumRefundCmmsAmt">
+        <el-input v-model="form.sumRefundCmmsAmt" placeholder="璇疯緭鍏ラ��娆炬墜缁垂鎬婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻閲戦" prop="total">
+        <el-input v-model="form.total" placeholder="璇疯緭鍏ョ粨绠楅噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑷杞︽敹鍏�" prop="bikeFee">
+        <el-input v-model="form.bikeFee" placeholder="璇疯緭鍏ヨ嚜琛岃溅鏀跺叆" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaAliBillWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        sumBill: '',
+        sumRefundBill: '',
+        sumSuccessFee: '',
+        sumRefundFee: '',
+        sumCouponRefundFee: '',
+        sumCmmsAmt: '',
+        sumTotalFee: '',
+        sumApplyRefundFee: '',
+        sumRefundCmmsAmt: '',
+        total: '',
+        bikeFee: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/aliBill',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaBaseParamWindow.vue b/admin/src/components/business/OperaBaseParamWindow.vue
new file mode 100644
index 0000000..f598cc0
--- /dev/null
+++ b/admin/src/components/business/OperaBaseParamWindow.vue
@@ -0,0 +1,82 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮侊紙鍗囧簭锛�" prop="sortnum">
+        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜锛堝崌搴忥級" v-trim/>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 0杞﹁締淇濅慨鍘熷洜 1寮哄埗杩樿溅鍘熷洜 2鏃堕暱鍑忓厤鍘熷洜 3鍗曡溅绫诲瀷" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ョ被鍨� 0杞﹁締淇濅慨鍘熷洜 1寮哄埗杩樿溅鍘熷洜 2鏃堕暱鍑忓厤鍘熷洜 3鍗曡溅绫诲瀷" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞鏄惁蹇呭~ 0鍚� 1鏄�" prop="required">
+        <el-input v-model="form.required" placeholder="璇疯緭鍏ュ娉ㄦ槸鍚﹀繀濉� 0鍚� 1鏄�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaBaseParamWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        sortnum: '',
+        type: '',
+        status: '',
+        info: '',
+        required: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/baseParam',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaBikeRepairWindow.vue b/admin/src/components/business/OperaBikeRepairWindow.vue
new file mode 100644
index 0000000..a7001e3
--- /dev/null
+++ b/admin/src/components/business/OperaBikeRepairWindow.vue
@@ -0,0 +1,114 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締缂栫爜" prop="binkeId">
+        <el-input v-model="form.binkeId" placeholder="璇疯緭鍏ヨ溅杈嗙紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁忓害" prop="longitude">
+        <el-input v-model="form.longitude" placeholder="璇疯緭鍏ョ粡搴�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绾害" prop="latitude">
+        <el-input v-model="form.latitude" placeholder="璇疯緭鍏ョ含搴�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璇︾粏鍦板潃" prop="addr">
+        <el-input v-model="form.addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締闂鍘熷洜缂栫爜锛堝叧鑱攂ase_param)" prop="paramId">
+        <el-input v-model="form.paramId" placeholder="璇疯緭鍏ヨ溅杈嗛棶棰樺師鍥犵紪鐮侊紙鍏宠仈base_param)" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締闂" prop="param">
+        <el-input v-model="form.param" placeholder="璇疯緭鍏ヨ溅杈嗛棶棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0寰呭鐞� 1宸插鐞� 2鍏朵粬" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0寰呭鐞� 1宸插鐞� 2鍏朵粬" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑱旂郴浜�" prop="linkname">
+        <el-input v-model="form.linkname" placeholder="璇疯緭鍏ヨ仈绯讳汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑱旂郴鐢佃瘽" prop="linkphone">
+        <el-input v-model="form.linkphone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶勭悊浜虹紪鐮侊紙鍏宠仈system_user)" prop="dealUser">
+        <el-input v-model="form.dealUser" placeholder="璇疯緭鍏ュ鐞嗕汉缂栫爜锛堝叧鑱攕ystem_user)" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶勭悊鏃堕棿" prop="dealDate">
+        <el-date-picker v-model="form.dealDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ鐞嗘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="澶勭悊澶囨敞" prop="dealInfo">
+        <el-input v-model="form.dealInfo" placeholder="璇疯緭鍏ュ鐞嗗娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐜板満鎻忚堪" prop="content">
+        <el-input v-model="form.content" placeholder="璇疯緭鍏ョ幇鍦烘弿杩�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaBikeRepairWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        binkeId: '',
+        longitude: '',
+        latitude: '',
+        addr: '',
+        paramId: '',
+        param: '',
+        status: '',
+        info: '',
+        linkname: '',
+        linkphone: '',
+        dealUser: '',
+        dealDate: '',
+        dealInfo: '',
+        content: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/bikeRepair',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaBikesWindow.vue b/admin/src/components/business/OperaBikesWindow.vue
new file mode 100644
index 0000000..9ad53dc
--- /dev/null
+++ b/admin/src/components/business/OperaBikesWindow.vue
@@ -0,0 +1,94 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締绫诲瀷缂栫爜锛堝叧鑱攂ase_param)" prop="paramId">
+        <el-input v-model="form.paramId" placeholder="璇疯緭鍏ヨ溅杈嗙被鍨嬬紪鐮侊紙鍏宠仈base_param)" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栧彿" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0鍋滆溅鍙嚭鍊� 1鍑哄�熶腑 3绂佺敤 " prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍋滆溅鍙嚭鍊� 1鍑哄�熶腑 3绂佺敤 " v-trim/>
+      </el-form-item>
+      <el-form-item label="褰撳墠绔欑偣缂栫爜锛堝叧鑱攕ites)" prop="siteId">
+        <el-input v-model="form.siteId" placeholder="璇疯緭鍏ュ綋鍓嶇珯鐐圭紪鐮侊紙鍏宠仈sites)" v-trim/>
+      </el-form-item>
+      <el-form-item label="褰撳墠閿佸ご缂栫爜锛堝叧鑱攍ocks)" prop="lockId">
+        <el-input v-model="form.lockId" placeholder="璇疯緭鍏ュ綋鍓嶉攣澶寸紪鐮侊紙鍏宠仈locks)" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏈�杩戠鍊熸椂闂�" prop="lastRentData">
+        <el-date-picker v-model="form.lastRentData" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶杩戠鍊熸椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍑哄敭鏃堕棿" prop="soldoutDate">
+        <el-date-picker v-model="form.soldoutDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ嚭鍞椂闂�"></el-date-picker>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaBikesWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        info: '',
+        paramId: '',
+        code: '',
+        status: '',
+        siteId: '',
+        lockId: '',
+        lastRentData: '',
+        soldoutDate: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/bikes',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaGoodsorderWindow.vue b/admin/src/components/business/OperaGoodsorderWindow.vue
new file mode 100644
index 0000000..72b4ee9
--- /dev/null
+++ b/admin/src/components/business/OperaGoodsorderWindow.vue
@@ -0,0 +1,126 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁㈠崟缂栫爜" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ鍗曠紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" prop="memberId">
+        <el-input v-model="form.memberId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮侊紙鍏宠仈member琛級" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗閲戦" prop="money">
+        <el-input v-model="form.money" placeholder="璇疯緭鍏ヤ氦鏄撻噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0寰呮敮浠� 1宸叉敮浠� 2宸插彇娑� 3鏀粯澶辫触 4宸茬粨绠�" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0寰呮敮浠� 1宸叉敮浠� 2宸插彇娑� 3鏀粯澶辫触 4宸茬粨绠�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗棰勮鍗曞彿" prop="preOrderid">
+        <el-input v-model="form.preOrderid" placeholder="璇疯緭鍏ヤ氦鏄撻璁㈠崟鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍦ㄧ嚎浜ゆ槗鍗曞彿" prop="onlineOrderid">
+        <el-input v-model="form.onlineOrderid" placeholder="璇疯緭鍏ュ湪绾夸氦鏄撳崟鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏀粯鐘舵�� 0寰呮敮浠� 1宸叉敮浠� " prop="payStatus">
+        <el-input v-model="form.payStatus" placeholder="璇疯緭鍏ユ敮浠樼姸鎬� 0寰呮敮浠� 1宸叉敮浠� " v-trim/>
+      </el-form-item>
+      <el-form-item label="鏀粯鏂瑰紡 0寰俊 1鏀粯瀹�" prop="payWay">
+        <el-input v-model="form.payWay" placeholder="璇疯緭鍏ユ敮浠樻柟寮� 0寰俊 1鏀粯瀹�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏀粯鏃堕棿" prop="payDate">
+        <el-input v-model="form.payDate" placeholder="璇疯緭鍏ユ敮浠樻椂闂�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ヤ氦鏄撶被鍨� 0绉熻溅鎶奸噾" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻閲戦(鍒嗭級" prop="closeMoney">
+        <el-input v-model="form.closeMoney" placeholder="璇疯緭鍏ョ粨绠楅噾棰�(鍒嗭級" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻閫�娆惧崟鍙�(鍏宠仈refund)" prop="closeId">
+        <el-input v-model="form.closeId" placeholder="璇疯緭鍏ョ粨绠楅��娆惧崟鍙�(鍏宠仈refund)" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻鏃堕棿" prop="closeDate">
+        <el-date-picker v-model="form.closeDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨绠楁椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缁撶畻澶囨敞" prop="closeInfo">
+        <el-input v-model="form.closeInfo" placeholder="璇疯緭鍏ョ粨绠楀娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻鎿嶄綔浜虹紪鐮侊紙鍏宠仈system_user)" prop="closeUserId">
+        <el-input v-model="form.closeUserId" placeholder="璇疯緭鍏ョ粨绠楁搷浣滀汉缂栫爜锛堝叧鑱攕ystem_user)" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻绫诲瀷 0鑷姩缁撶畻 1骞冲彴浜哄伐缁撶畻 2绯荤粺鑷姩缁撶畻" prop="closeType">
+        <el-input v-model="form.closeType" placeholder="璇疯緭鍏ョ粨绠楃被鍨� 0鑷姩缁撶畻 1骞冲彴浜哄伐缁撶畻 2绯荤粺鑷姩缁撶畻" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaGoodsorderWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        code: '',
+        memberId: '',
+        money: '',
+        status: '',
+        preOrderid: '',
+        onlineOrderid: '',
+        payStatus: '',
+        payWay: '',
+        payDate: '',
+        type: '',
+        closeMoney: '',
+        closeId: '',
+        closeDate: '',
+        closeInfo: '',
+        closeUserId: '',
+        closeType: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/goodsorder',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaLocksWindow.vue b/admin/src/components/business/OperaLocksWindow.vue
new file mode 100644
index 0000000..c2bfb6c
--- /dev/null
+++ b/admin/src/components/business/OperaLocksWindow.vue
@@ -0,0 +1,82 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栧彿" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0姝e父 1寮傚父" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0姝e父 1寮傚父" v-trim/>
+      </el-form-item>
+      <el-form-item label="绔欑偣缂栫爜(鍏宠仈sites)" prop="siteId">
+        <el-input v-model="form.siteId" placeholder="璇疯緭鍏ョ珯鐐圭紪鐮�(鍏宠仈sites)" v-trim/>
+      </el-form-item>
+      <el-form-item label="褰撳墠閿佸畾鑷杞︾紪鍙�" prop="bikeCode">
+        <el-input v-model="form.bikeCode" placeholder="璇疯緭鍏ュ綋鍓嶉攣瀹氳嚜琛岃溅缂栧彿" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaLocksWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        name: '',
+        code: '',
+        status: '',
+        siteId: '',
+        bikeCode: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/locks',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaMemberRidesWindow.vue b/admin/src/components/business/OperaMemberRidesWindow.vue
new file mode 100644
index 0000000..602c591
--- /dev/null
+++ b/admin/src/components/business/OperaMemberRidesWindow.vue
@@ -0,0 +1,182 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜" prop="memberId">
+        <el-input v-model="form.memberId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締缂栫爜" prop="bikeCode">
+        <el-input v-model="form.bikeCode" placeholder="璇疯緭鍏ヨ溅杈嗙紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="褰撳墠璐︽埛浣欓" prop="balance">
+        <el-input v-model="form.balance" placeholder="璇疯緭鍏ュ綋鍓嶈处鎴蜂綑棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締绫诲瀷缂栫爜" prop="paramId">
+        <el-input v-model="form.paramId" placeholder="璇疯緭鍏ヨ溅杈嗙被鍨嬬紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绉熻溅绔欑偣缂栫爜" prop="rentSiteId">
+        <el-input v-model="form.rentSiteId" placeholder="璇疯緭鍏ョ杞︾珯鐐圭紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绉熻溅閿佸ご缂栫爜" prop="rentLockId">
+        <el-input v-model="form.rentLockId" placeholder="璇疯緭鍏ョ杞﹂攣澶寸紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绉熻溅鏃堕棿" prop="rentDate">
+        <el-date-picker v-model="form.rentDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ杞︽椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="绉熻溅鎸囦护缂栫爜" prop="rentCommondD">
+        <el-input v-model="form.rentCommondD" placeholder="璇疯緭鍏ョ杞︽寚浠ょ紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杩樿溅绔欑偣缂栫爜" prop="backSiteId">
+        <el-input v-model="form.backSiteId" placeholder="璇疯緭鍏ヨ繕杞︾珯鐐圭紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杩樿溅閿佸ご缂栫爜" prop="backLockId">
+        <el-input v-model="form.backLockId" placeholder="璇疯緭鍏ヨ繕杞﹂攣澶寸紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杩樿溅鏃堕棿" prop="backDate">
+        <el-date-picker v-model="form.backDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ヨ繕杞︽椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="杩樿溅鎸囦护缂栫爜" prop="backCommondId">
+        <el-input v-model="form.backCommondId" placeholder="璇疯緭鍏ヨ繕杞︽寚浠ょ紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璧锋浠�" prop="basePrice">
+        <el-input v-model="form.basePrice" placeholder="璇疯緭鍏ヨ捣姝ヤ环" v-trim/>
+      </el-form-item>
+      <el-form-item label="璧锋浠锋椂闂�" prop="baseTime">
+        <el-input v-model="form.baseTime" placeholder="璇疯緭鍏ヨ捣姝ヤ环鏃堕棿" v-trim/>
+      </el-form-item>
+      <el-form-item label="瓒呭嚭鍗曚环" prop="unitPrice">
+        <el-input v-model="form.unitPrice" placeholder="璇疯緭鍏ヨ秴鍑哄崟浠�" v-trim/>
+      </el-form-item>
+      <el-form-item label="瓒呭嚭鏃堕棿鍗曚綅" prop="unitTime">
+        <el-input v-model="form.unitTime" placeholder="璇疯緭鍏ヨ秴鍑烘椂闂村崟浣�" v-trim/>
+      </el-form-item>
+      <el-form-item label="楠戣浠锋牸" prop="price">
+        <el-input v-model="form.price" placeholder="璇疯緭鍏ラ獞琛屼环鏍�" v-trim/>
+      </el-form-item>
+      <el-form-item label="楠戣瀹為檯浠锋牸" prop="actualPrice">
+        <el-input v-model="form.actualPrice" placeholder="璇疯緭鍏ラ獞琛屽疄闄呬环鏍�" v-trim/>
+      </el-form-item>
+      <el-form-item label="楠戣璁¤垂鏃堕暱" prop="duration">
+        <el-input v-model="form.duration" placeholder="璇疯緭鍏ラ獞琛岃璐规椂闀�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻鏃堕棿" prop="closeDate">
+        <el-date-picker v-model="form.closeDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨绠楁椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缁撶畻鐘舵�� 0鏈粨绠� 1宸茬粨鏉�" prop="closeStatus">
+        <el-input v-model="form.closeStatus" placeholder="璇疯緭鍏ョ粨绠楃姸鎬� 0鏈粨绠� 1宸茬粨鏉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏宠仈璁㈠崟缂栫爜(鍏宠仈goodsorder锛�" prop="ordreId">
+        <el-input v-model="form.ordreId" placeholder="璇疯緭鍏ュ叧鑱旇鍗曠紪鐮�(鍏宠仈goodsorder锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁缁撶畻璁¤垂杞﹀瀷 0鍚� 1鏄�" prop="isStandard">
+        <el-input v-model="form.isStandard" placeholder="璇疯緭鍏ユ槸鍚︾粨绠楄璐硅溅鍨� 0鍚� 1鏄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁′环鏂规缂栫爜(鍏宠仈pricing_detail)" prop="pricingDetailId">
+        <el-input v-model="form.pricingDetailId" placeholder="璇疯緭鍏ヨ浠锋柟妗堢紪鐮�(鍏宠仈pricing_detail)" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁鑺傚亣鏃� 0涓嶆槸 1鏄�" prop="isHoliday">
+        <el-input v-model="form.isHoliday" placeholder="璇疯緭鍏ユ槸鍚﹁妭鍋囨棩 0涓嶆槸 1鏄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0璇锋眰寮�閿佷腑 1楠戣涓� 2宸茶繕杞�  3寮�閿佸け璐�" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0璇锋眰寮�閿佷腑 1楠戣涓� 2宸茶繕杞�  3寮�閿佸け璐�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杩樿溅绫诲瀷 0姝e父杩樿溅 1寮哄埗杩樿溅" prop="backType">
+        <el-input v-model="form.backType" placeholder="璇疯緭鍏ヨ繕杞︾被鍨� 0姝e父杩樿溅 1寮哄埗杩樿溅" v-trim/>
+      </el-form-item>
+      <el-form-item label="杩樿溅鍘熷洜" prop="backReason">
+        <el-input v-model="form.backReason" placeholder="璇疯緭鍏ヨ繕杞﹀師鍥�" v-trim/>
+      </el-form-item>
+      <el-form-item label="杩樿溅澶囨敞" prop="backInfo">
+        <el-input v-model="form.backInfo" placeholder="璇疯緭鍏ヨ繕杞﹀娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="寮哄埗杩樿溅鎿嶄綔浜�(鍏宠仈system_user)" prop="backUserid">
+        <el-input v-model="form.backUserid" placeholder="璇疯緭鍏ュ己鍒惰繕杞︽搷浣滀汉(鍏宠仈system_user)" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaMemberRidesWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        memberId: '',
+        bikeCode: '',
+        balance: '',
+        paramId: '',
+        rentSiteId: '',
+        rentLockId: '',
+        rentDate: '',
+        rentCommondD: '',
+        backSiteId: '',
+        backLockId: '',
+        backDate: '',
+        backCommondId: '',
+        basePrice: '',
+        baseTime: '',
+        unitPrice: '',
+        unitTime: '',
+        price: '',
+        actualPrice: '',
+        duration: '',
+        closeDate: '',
+        closeStatus: '',
+        ordreId: '',
+        isStandard: '',
+        pricingDetailId: '',
+        isHoliday: '',
+        status: '',
+        backType: '',
+        backReason: '',
+        backInfo: '',
+        backUserid: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/memberRides',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaMqttLogWindow.vue b/admin/src/components/business/OperaMqttLogWindow.vue
new file mode 100644
index 0000000..d56c68d
--- /dev/null
+++ b/admin/src/components/business/OperaMqttLogWindow.vue
@@ -0,0 +1,82 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 0璁㈤槄 1鍙戝竷" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ョ被鍨� 0璁㈤槄 1鍙戝竷" v-trim/>
+      </el-form-item>
+      <el-form-item label="瀹㈡埛绔紪鐮�" prop="clientid">
+        <el-input v-model="form.clientid" placeholder="璇疯緭鍏ュ鎴风缂栫爜" v-trim/>
+      </el-form-item>
+      <el-form-item label="涓婚" prop="topic">
+        <el-input v-model="form.topic" placeholder="璇疯緭鍏ヤ富棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="娑堟伅鍐呭" prop="msg">
+        <el-input v-model="form.msg" placeholder="璇疯緭鍏ユ秷鎭唴瀹�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撴灉 0鎴愬姛 1澶辫触" prop="result">
+        <el-input v-model="form.result" placeholder="璇疯緭鍏ョ粨鏋� 0鎴愬姛 1澶辫触" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaMqttLogWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        type: '',
+        clientid: '',
+        topic: '',
+        msg: '',
+        result: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/mqttLog',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaMultifileWindow.vue b/admin/src/components/business/OperaMultifileWindow.vue
new file mode 100644
index 0000000..bd766e6
--- /dev/null
+++ b/admin/src/components/business/OperaMultifileWindow.vue
@@ -0,0 +1,86 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏂囦欢鍚�" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ユ枃浠跺悕" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏宠仈瀵硅薄缂栫爜" prop="objId">
+        <el-input v-model="form.objId" placeholder="璇疯緭鍏ュ叧鑱斿璞$紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ョ被鍨�0鍥剧墖 1瑙嗛 2鍏朵粬" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏宠仈瀵硅薄绫诲瀷 0杞﹁締淇濅慨" prop="objType">
+        <el-input v-model="form.objType" placeholder="璇疯緭鍏ュ叧鑱斿璞$被鍨� 0杞﹁締淇濅慨" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏂囦欢鍦板潃" prop="fileurl">
+        <el-input v-model="form.fileurl" placeholder="璇疯緭鍏ユ枃浠跺湴鍧�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaMultifileWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        info: '',
+        objId: '',
+        type: '',
+        objType: '',
+        fileurl: '',
+        sortnum: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/multifile',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaPriceConfigWindow.vue b/admin/src/components/business/OperaPriceConfigWindow.vue
index 7c4b835..0015476 100644
--- a/admin/src/components/business/OperaPriceConfigWindow.vue
+++ b/admin/src/components/business/OperaPriceConfigWindow.vue
@@ -66,7 +66,7 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
-import { create } from '@/api/business/pricingParam'
+import { updatePricingDetailById } from '@/api/business/pricingParam'
 // import { findList } from '@/api/business/roomTime'
 import { numRule } from '@/utils/form'
 export default {
@@ -162,7 +162,7 @@
           return
         }
         this.isWorking = true
-        create(this.form)
+        updatePricingDetailById(this.form)
           .then(res => {
             this.visible = false
             this.$tip.apiSuccess('淇敼鎴愬姛')
diff --git a/admin/src/components/business/OperaPricingDetailWindow.vue b/admin/src/components/business/OperaPricingDetailWindow.vue
new file mode 100644
index 0000000..b793164
--- /dev/null
+++ b/admin/src/components/business/OperaPricingDetailWindow.vue
@@ -0,0 +1,106 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="瀹氫环鏂规缂栫爜(鍏宠仈price_param)" prop="pricePramId">
+        <el-input v-model="form.pricePramId" placeholder="璇疯緭鍏ュ畾浠锋柟妗堢紪鐮�(鍏宠仈price_param)" v-trim/>
+      </el-form-item>
+      <el-form-item label="杞﹁締绫诲瀷缂栫爜(鍏宠仈bike_types琛級" prop="bikeTypeId">
+        <el-input v-model="form.bikeTypeId" placeholder="璇疯緭鍏ヨ溅杈嗙被鍨嬬紪鐮�(鍏宠仈bike_types琛級" v-trim/>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ捣姝ユ椂闂达紙鍒嗛挓锛�" prop="baseTime">
+        <el-input v-model="form.baseTime" placeholder="璇疯緭鍏ュ伐浣滄棩璧锋鏃堕棿锛堝垎閽燂級" v-trim/>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ捣姝ヤ环鏍硷紙鍒嗭級" prop="basePrice">
+        <el-input v-model="form.basePrice" placeholder="璇疯緭鍏ュ伐浣滄棩璧锋浠锋牸锛堝垎锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ秴鍑烘椂闂达紙鍒嗛挓锛�" prop="unitTime">
+        <el-input v-model="form.unitTime" placeholder="璇疯緭鍏ュ伐浣滄棩瓒呭嚭鏃堕棿锛堝垎閽燂級" v-trim/>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ秴鍑轰环鏍硷紙鍒嗭級" prop="unitPrice">
+        <el-input v-model="form.unitPrice" placeholder="璇疯緭鍏ュ伐浣滄棩瓒呭嚭浠锋牸锛堝垎锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ捣姝ユ椂闂达紙鍒嗛挓锛�" prop="holidayBaseTime">
+        <el-input v-model="form.holidayBaseTime" placeholder="璇疯緭鍏ヨ妭鍋囨棩璧锋鏃堕棿锛堝垎閽燂級" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ捣姝ヤ环鏍硷紙鍒嗭級" prop="holidayBasePrice">
+        <el-input v-model="form.holidayBasePrice" placeholder="璇疯緭鍏ヨ妭鍋囨棩璧锋浠锋牸锛堝垎锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ秴鍑烘椂闂达紙鍒嗛挓锛�" prop="holidayUnitTime">
+        <el-input v-model="form.holidayUnitTime" placeholder="璇疯緭鍏ヨ妭鍋囨棩瓒呭嚭鏃堕棿锛堝垎閽燂級" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ秴鍑烘椂闂村崟浠凤紙鍒嗭級" prop="holidayUnitPrice">
+        <el-input v-model="form.holidayUnitPrice" placeholder="璇疯緭鍏ヨ妭鍋囨棩瓒呭嚭鏃堕棿鍗曚环锛堝垎锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="瑙勫垯鍚嶇О" prop="title">
+        <el-input v-model="form.title" placeholder="璇疯緭鍏ヨ鍒欏悕绉�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaPricingDetailWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        pricePramId: '',
+        bikeTypeId: '',
+        baseTime: '',
+        basePrice: '',
+        unitTime: '',
+        unitPrice: '',
+        holidayBaseTime: '',
+        holidayBasePrice: '',
+        holidayUnitTime: '',
+        holidayUnitPrice: '',
+        info: '',
+        title: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/pricingDetail',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaReductionWindow.vue b/admin/src/components/business/OperaReductionWindow.vue
index c29a620..2133490 100644
--- a/admin/src/components/business/OperaReductionWindow.vue
+++ b/admin/src/components/business/OperaReductionWindow.vue
@@ -42,7 +42,7 @@
         
         status: '',
         info: '',
-        required: ''
+        required: 0
       },
       // 楠岃瘉瑙勫垯
       rules: {
diff --git a/admin/src/components/business/OperaRefundWindow.vue b/admin/src/components/business/OperaRefundWindow.vue
new file mode 100644
index 0000000..c71a7ef
--- /dev/null
+++ b/admin/src/components/business/OperaRefundWindow.vue
@@ -0,0 +1,106 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆剧紪鐮�" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ラ��娆剧紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" prop="memberId">
+        <el-input v-model="form.memberId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮侊紙鍏宠仈member琛級" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗閲戦" prop="money">
+        <el-input v-model="form.money" placeholder="璇疯緭鍏ヤ氦鏄撻噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0棰勯��娆� 1閫�娆惧け璐� 2閫�娆惧畬鎴�" prop="status">
+        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0棰勯��娆� 1閫�娆惧け璐� 2閫�娆惧畬鎴�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗棰勮鍗曞彿" prop="preOrderid">
+        <el-input v-model="form.preOrderid" placeholder="璇疯緭鍏ヤ氦鏄撻璁㈠崟鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍦ㄧ嚎浜ゆ槗鍗曞彿" prop="onlineOrderid">
+        <el-input v-model="form.onlineOrderid" placeholder="璇疯緭鍏ュ湪绾夸氦鏄撳崟鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆炬柟寮� 0寰俊 1鏀粯瀹�" prop="payWay">
+        <el-input v-model="form.payWay" placeholder="璇疯緭鍏ラ��娆炬柟寮� 0寰俊 1鏀粯瀹�" v-trim/>
+      </el-form-item>
+      <el-form-item label="瀹屾垚鏃堕棿" prop="doneDate">
+        <el-date-picker v-model="form.doneDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ畬鎴愭椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="閫�娆剧被鍨� 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆�" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ラ��娆剧被鍨� 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆惧叧鑱旇鍗曠紪鐮�" prop="objId">
+        <el-input v-model="form.objId" placeholder="璇疯緭鍏ラ��娆惧叧鑱旇鍗曠紪鐮�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆惧師鍥�" prop="reason">
+        <el-input v-model="form.reason" placeholder="璇疯緭鍏ラ��娆惧師鍥�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaRefundWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        code: '',
+        memberId: '',
+        money: '',
+        status: '',
+        preOrderid: '',
+        onlineOrderid: '',
+        payWay: '',
+        doneDate: '',
+        type: '',
+        objId: '',
+        reason: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/refund',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaRentSiteWindow.vue b/admin/src/components/business/OperaRentSiteWindow.vue
index 05fc3f6..aba4ca0 100644
--- a/admin/src/components/business/OperaRentSiteWindow.vue
+++ b/admin/src/components/business/OperaRentSiteWindow.vue
@@ -62,8 +62,8 @@
   data () {
     const longAndLatVal = (rule, value, callback) => {
       let longAndLat = value.split(',')
-      this.form.longitude = longAndLat[0]
-      this.form.latitude = longAndLat.length==2 ? longAndLat[1] : ''
+      this.form.latitude = longAndLat[0]
+      this.form.longitude = longAndLat.length==2 ? longAndLat[1] : ''
       if (!this.form.longitude || !this.form.latitude) {
         callback(new Error())
       } else {
@@ -131,8 +131,8 @@
     changeLongAndLat(v) {
       let longAndLat = v.split(',')
       // console.log(longAndLat);
-      this.form.longitude = longAndLat[0]
-      this.form.latitude = longAndLat.length==2 ? longAndLat[1] : ''
+      this.form.latitude = longAndLat[0]
+      this.form.longitude = longAndLat.length==2 ? longAndLat[1] : ''
     }
   },
 }
diff --git a/admin/src/components/business/OperaRepairDealWindow.vue b/admin/src/components/business/OperaRepairDealWindow.vue
index 2bfe2e7..27427a2 100644
--- a/admin/src/components/business/OperaRepairDealWindow.vue
+++ b/admin/src/components/business/OperaRepairDealWindow.vue
@@ -13,7 +13,7 @@
           type="textarea"
           :autosize="{ minRows: 2, maxRows: 4}"
           v-model="form.dealInfo"
-          placeholder="璇疯緭鍏ヨ皟鏁村娉�"
+          placeholder="璇疯緭鍏ュ鐞嗚鏄�"
           v-trim
         />
       </el-form-item>
diff --git a/admin/src/components/business/OperaReturnReasonWindow.vue b/admin/src/components/business/OperaReturnReasonWindow.vue
index 560bdb0..8da69bf 100644
--- a/admin/src/components/business/OperaReturnReasonWindow.vue
+++ b/admin/src/components/business/OperaReturnReasonWindow.vue
@@ -42,7 +42,7 @@
         
         status: '',
         info: '',
-        required: ''
+        required: 0
       },
       // 楠岃瘉瑙勫垯
       rules: {
diff --git a/admin/src/components/business/OperaTransactionsWindow.vue b/admin/src/components/business/OperaTransactionsWindow.vue
new file mode 100644
index 0000000..db2e20c
--- /dev/null
+++ b/admin/src/components/business/OperaTransactionsWindow.vue
@@ -0,0 +1,110 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="form.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁㈠崟缂栫爜锛堝叧鑱攇oodsorder)" prop="orderId">
+        <el-input v-model="form.orderId" placeholder="璇疯緭鍏ヨ鍗曠紪鐮侊紙鍏宠仈goodsorder)" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" prop="memberId">
+        <el-input v-model="form.memberId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮侊紙鍏宠仈member琛級" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗閲戦" prop="money">
+        <el-input v-model="form.money" placeholder="璇疯緭鍏ヤ氦鏄撻噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾 1缁撶畻瀹為檯娑堣垂 2缁撶畻閫�娆� 3骞冲彴閫�娆�" prop="type">
+        <el-input v-model="form.type" placeholder="璇疯緭鍏ヤ氦鏄撶被鍨� 0绉熻溅鎶奸噾 1缁撶畻瀹為檯娑堣垂 2缁撶畻閫�娆� 3骞冲彴閫�娆�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璇︾粏鍦板潃" prop="preOrderid">
+        <el-input v-model="form.preOrderid" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璇︾粏鍦板潃" prop="onlineOrderid">
+        <el-input v-model="form.onlineOrderid" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗瀹屾垚鏃堕棿" prop="doneDate">
+        <el-input v-model="form.doneDate" placeholder="璇疯緭鍏ヤ氦鏄撳畬鎴愭椂闂�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鏍囬" prop="title">
+        <el-input v-model="form.title" placeholder="璇疯緭鍏ヤ氦鏄撴爣棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鍐呭" prop="content">
+        <el-input v-model="form.content" placeholder="璇疯緭鍏ヤ氦鏄撳唴瀹�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛褰撳墠浣欓(鍒嗭級" prop="balance">
+        <el-input v-model="form.balance" placeholder="璇疯緭鍏ョ敤鎴峰綋鍓嶄綑棰�(鍒嗭級" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鍏宠仈瀵硅薄绫诲瀷 0璁㈠崟 1閫�娆惧崟" prop="objType">
+        <el-input v-model="form.objType" placeholder="璇疯緭鍏ヤ氦鏄撳叧鑱斿璞$被鍨� 0璁㈠崟 1閫�娆惧崟" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鍏宠仈瀵硅薄缂栫爜" prop="objId">
+        <el-input v-model="form.objId" placeholder="璇疯緭鍏ヤ氦鏄撳叧鑱斿璞$紪鐮�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaTransactionsWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        orderId: '',
+        memberId: '',
+        money: '',
+        type: '',
+        preOrderid: '',
+        onlineOrderid: '',
+        doneDate: '',
+        title: '',
+        content: '',
+        balance: '',
+        objType: '',
+        objId: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/transactions',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaWxBillDetailWindow.vue b/admin/src/components/business/OperaWxBillDetailWindow.vue
new file mode 100644
index 0000000..0c6c3c2
--- /dev/null
+++ b/admin/src/components/business/OperaWxBillDetailWindow.vue
@@ -0,0 +1,158 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="瀵硅处鍗旾D" prop="pid">
+        <el-input v-model="form.pid" placeholder="璇疯緭鍏ュ璐﹀崟ID" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鏃堕棿" prop="billDate">
+        <el-date-picker v-model="form.billDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ヤ氦鏄撴椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="鍏紬璐﹀彿ID" prop="appid">
+        <el-input v-model="form.appid" placeholder="璇疯緭鍏ュ叕浼楄处鍙稩D" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛鍙�" prop="mchId">
+        <el-input v-model="form.mchId" placeholder="璇疯緭鍏ュ晢鎴峰彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐗圭害鍟嗘埛鍙�" prop="subMchid">
+        <el-input v-model="form.subMchid" placeholder="璇疯緭鍏ョ壒绾﹀晢鎴峰彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁惧鍙�" prop="deviceInfo">
+        <el-input v-model="form.deviceInfo" placeholder="璇疯緭鍏ヨ澶囧彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="寰俊璁㈠崟鍙�" prop="transactionId">
+        <el-input v-model="form.transactionId" placeholder="璇疯緭鍏ュ井淇¤鍗曞彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛璁㈠崟鍙�" prop="outTradeNo">
+        <el-input v-model="form.outTradeNo" placeholder="璇疯緭鍏ュ晢鎴疯鍗曞彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛鏍囪瘑" prop="openid">
+        <el-input v-model="form.openid" placeholder="璇疯緭鍏ョ敤鎴锋爣璇�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗绫诲瀷" prop="billType">
+        <el-input v-model="form.billType" placeholder="璇疯緭鍏ヤ氦鏄撶被鍨�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鐘舵��" prop="billStatus">
+        <el-input v-model="form.billStatus" placeholder="璇疯緭鍏ヤ氦鏄撶姸鎬�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浠樻閾惰" prop="bankType">
+        <el-input v-model="form.bankType" placeholder="璇疯緭鍏ヤ粯娆鹃摱琛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璐у竵绉嶇被" prop="feeType">
+        <el-input v-model="form.feeType" placeholder="璇疯緭鍏ヨ揣甯佺绫�" v-trim/>
+      </el-form-item>
+      <el-form-item label="搴旂粨璁㈠崟閲戦" prop="settlementTotalFee">
+        <el-input v-model="form.settlementTotalFee" placeholder="璇疯緭鍏ュ簲缁撹鍗曢噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="浠i噾鍒搁噾棰�" prop="couponFee">
+        <el-input v-model="form.couponFee" placeholder="璇疯緭鍏ヤ唬閲戝埜閲戦" v-trim/>
+      </el-form-item>
+      <el-form-item label="寰俊閫�娆惧崟鍙�" prop="refundId">
+        <el-input v-model="form.refundId" placeholder="璇疯緭鍏ュ井淇¢��娆惧崟鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛閫�娆惧崟鍙�" prop="outRefundNo">
+        <el-input v-model="form.outRefundNo" placeholder="璇疯緭鍏ュ晢鎴烽��娆惧崟鍙�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆鹃噾棰�" prop="refundFee">
+        <el-input v-model="form.refundFee" placeholder="璇疯緭鍏ラ��娆鹃噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏呭�煎埜閫�娆鹃噾棰�" prop="couponRefundFee">
+        <el-input v-model="form.couponRefundFee" placeholder="璇疯緭鍏ュ厖鍊煎埜閫�娆鹃噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆剧被鍨�" prop="refundType">
+        <el-input v-model="form.refundType" placeholder="璇疯緭鍏ラ��娆剧被鍨�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆剧敵璇锋椂闂�" prop="refundApplyDate">
+        <el-date-picker v-model="form.refundApplyDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ラ��娆剧敵璇锋椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="閫�娆炬垚鍔熸椂闂�" prop="refundSuccessDate">
+        <el-date-picker v-model="form.refundSuccessDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ラ��娆炬垚鍔熸椂闂�"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="閫�娆剧姸鎬�" prop="refundSuccessStatus">
+        <el-input v-model="form.refundSuccessStatus" placeholder="璇疯緭鍏ラ��娆剧姸鎬�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗗搧鍚嶇О" prop="body">
+        <el-input v-model="form.body" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛鏁版嵁鍖�" prop="attach">
+        <el-input v-model="form.attach" placeholder="璇疯緭鍏ュ晢鎴锋暟鎹寘" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎵嬬画璐�" prop="cmmsAmt">
+        <el-input v-model="form.cmmsAmt" placeholder="璇疯緭鍏ユ墜缁垂" v-trim/>
+      </el-form-item>
+      <el-form-item label="璐圭巼" prop="rate">
+        <el-input v-model="form.rate" placeholder="璇疯緭鍏ヨ垂鐜�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁㈠崟閲戦" prop="totalFee">
+        <el-input v-model="form.totalFee" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢宠閫�娆鹃噾棰�" prop="applyRefundFee">
+        <el-input v-model="form.applyRefundFee" placeholder="璇疯緭鍏ョ敵璇烽��娆鹃噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璐圭巼澶囨敞" prop="rateRemark">
+        <el-input v-model="form.rateRemark" placeholder="璇疯緭鍏ヨ垂鐜囧娉�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaWxBillDetailWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        pid: '',
+        billDate: '',
+        appid: '',
+        mchId: '',
+        subMchid: '',
+        deviceInfo: '',
+        transactionId: '',
+        outTradeNo: '',
+        openid: '',
+        billType: '',
+        billStatus: '',
+        bankType: '',
+        feeType: '',
+        settlementTotalFee: '',
+        couponFee: '',
+        refundId: '',
+        outRefundNo: '',
+        refundFee: '',
+        couponRefundFee: '',
+        refundType: '',
+        refundApplyDate: '',
+        refundSuccessDate: '',
+        refundSuccessStatus: '',
+        body: '',
+        attach: '',
+        cmmsAmt: '',
+        rate: '',
+        totalFee: '',
+        applyRefundFee: '',
+        rateRemark: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/wxBillDetail',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaWxBillWindow.vue b/admin/src/components/business/OperaWxBillWindow.vue
new file mode 100644
index 0000000..325a8df
--- /dev/null
+++ b/admin/src/components/business/OperaWxBillWindow.vue
@@ -0,0 +1,82 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鎬讳氦鏄撳崟鏁�" prop="sumBill">
+        <el-input v-model="form.sumBill" placeholder="璇疯緭鍏ユ�讳氦鏄撳崟鏁�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆剧殑璁㈠崟鏁�" prop="sumRefundBill">
+        <el-input v-model="form.sumRefundBill" placeholder="璇疯緭鍏ラ��娆剧殑璁㈠崟鏁�" v-trim/>
+      </el-form-item>
+      <el-form-item label="搴旂粨璁㈠崟鎬婚噾棰�" prop="sumSuccessFee">
+        <el-input v-model="form.sumSuccessFee" placeholder="璇疯緭鍏ュ簲缁撹鍗曟�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆炬�婚噾棰�" prop="sumRefundFee">
+        <el-input v-model="form.sumRefundFee" placeholder="璇疯緭鍏ラ��娆炬�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍏呭�煎埜閫�娆炬�婚噾棰�" prop="sumCouponRefundFee">
+        <el-input v-model="form.sumCouponRefundFee" placeholder="璇疯緭鍏ュ厖鍊煎埜閫�娆炬�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎵嬬画璐规�婚噾棰�" prop="sumCmmsAmt">
+        <el-input v-model="form.sumCmmsAmt" placeholder="璇疯緭鍏ユ墜缁垂鎬婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁㈠崟鎬婚噾棰�" prop="sumTotalFee">
+        <el-input v-model="form.sumTotalFee" placeholder="璇疯緭鍏ヨ鍗曟�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鐢宠閫�娆炬�婚噾棰�" prop="sumApplyRefundFee">
+        <el-input v-model="form.sumApplyRefundFee" placeholder="璇疯緭鍏ョ敵璇烽��娆炬�婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫�娆炬墜缁垂鎬婚噾棰�" prop="sumRefundCmmsAmt">
+        <el-input v-model="form.sumRefundCmmsAmt" placeholder="璇疯緭鍏ラ��娆炬墜缁垂鎬婚噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁撶畻閲戦" prop="total">
+        <el-input v-model="form.total" placeholder="璇疯緭鍏ョ粨绠楅噾棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑷杞︽敹鍏�" prop="bikeFee">
+        <el-input v-model="form.bikeFee" placeholder="璇疯緭鍏ヨ嚜琛岃溅鏀跺叆" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaWxBillWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        sumBill: '',
+        sumRefundBill: '',
+        sumSuccessFee: '',
+        sumRefundFee: '',
+        sumCouponRefundFee: '',
+        sumCmmsAmt: '',
+        sumTotalFee: '',
+        sumApplyRefundFee: '',
+        sumRefundCmmsAmt: '',
+        total: '',
+        bikeFee: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/wxBill',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/admin/src/components/business/RepairDetailWindow.vue b/admin/src/components/business/RepairDetailWindow.vue
new file mode 100644
index 0000000..f0a1c6c
--- /dev/null
+++ b/admin/src/components/business/RepairDetailWindow.vue
@@ -0,0 +1,124 @@
+<template>
+  <GlobalAlertWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" width="600px" @confirm="confirm">
+
+    <el-form :model="form" ref="form" :rules="rules" label-suffix="锛�">
+      <el-form-item label="闂鎻忚堪" prop="dealInfo">
+        <div>{{ form.content }}</div>
+      </el-form-item>
+      <el-form-item label="鍥剧墖/瑙嗛" prop="dealInfo">
+        <el-image v-for="(url, index) in form.imgList" :key="index"
+          style="width: 100px; height: 100px; margin-right: 5px;" :src="url" fit="contain"
+          :prediv-src-list="form.imgList"></el-image>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button @click="visible = false">杩斿洖</el-button>
+    </div>
+  </GlobalAlertWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+// import { findList } from '@/api/business/roomTime'
+import { numRule } from '@/utils/form'
+export default {
+  name: 'OperaSuggestWindow',
+  extends: BaseOpera,
+  components: { GlobalAlertWindow },
+  data() {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        content: '',
+        imgList: [],
+
+      },
+      backInfoRequired: false,
+      // 楠岃瘉瑙勫垯
+      rules: {
+        duration: [
+          { required: true, validator: numRule, message: '璇疯緭鍏ヨ璐规椂闀�', tigger: 'blur' }
+        ],
+        backReason: [
+          { required: true, message: '璇烽�夋嫨璋冩暣鍘熷洜', tigger: 'change' },
+        ]
+      }
+    }
+  },
+  created() {
+    this.config({
+      api: '/business/bikeRepair',
+      'field.id': 'id',
+    })
+
+  },
+  methods: {
+    /**
+     * 鎵撳紑绐楀彛
+     * @title 绐楀彛鏍囬
+     * @target 缂栬緫鐨勫璞�
+     */
+    open(title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.form.imgList = this.form.imgList || []
+      })
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/style/alertstyle.scss";
+@import "@/assets/style/variables.scss";
+
+::v-deep .el-input.is-disabled .el-input__inner {
+  background-color: #fff !important;
+  cursor: pointer;
+  color: aqua;
+}
+
+.time-style {
+  display: flex;
+  flex-wrap: wrap;
+  cursor: pointer;
+
+  .time-item {
+    margin-right: 8px;
+    margin-bottom: 8px;
+    border: #111 solid 1px;
+    font-size: 14px;
+    line-height: 14px;
+    padding: 5px;
+    border-radius: 5px;
+    color: #111;
+  }
+
+  .time-item-sel {
+    border-color: $primary-color;
+    background-color: $primary-color;
+    color: #fff;
+  }
+
+  .time-item-disable {
+    border-color: #999;
+    background-color: #999;
+    color: #111;
+  }
+}
+</style>
diff --git a/admin/src/components/business/backGoodsorderWindow.vue b/admin/src/components/business/backGoodsorderWindow.vue
index 6579b5f..cb98785 100644
--- a/admin/src/components/business/backGoodsorderWindow.vue
+++ b/admin/src/components/business/backGoodsorderWindow.vue
@@ -7,10 +7,10 @@
     @confirm="confirm"
   >
     <el-descriptions title="" :column="2" >
-      <el-descriptions-item label="鍏呭�兼娂閲�">{{ form.goodsorderMoney }}</el-descriptions-item>
-      <el-descriptions-item label="缁撶畻閲戦">{{ form.closeMoney }}</el-descriptions-item>
-      <el-descriptions-item label="宸查��閲戦">{{ form.hasRefundMoney }}</el-descriptions-item>
-      <el-descriptions-item label="鍙��閲戦">{{ form.canBanlanceMoney }}</el-descriptions-item>
+      <el-descriptions-item label="鍏呭�兼娂閲�">{{ form.goodsorderMoney }}鍏�</el-descriptions-item>
+      <el-descriptions-item label="缁撶畻閲戦">{{ form.closeMoney }}鍏�</el-descriptions-item>
+      <el-descriptions-item label="宸查��閲戦">{{ form.hasRefundMoney }}鍏�</el-descriptions-item>
+      <el-descriptions-item label="鍙��閲戦">{{ form.canBanlanceMoney }}鍏�</el-descriptions-item>
     </el-descriptions>
     <el-form :model="form" ref="form" :rules="rules" label-suffix="锛�">
       <el-form-item label="閫�娆鹃噾棰�" prop="money">
diff --git a/admin/src/components/business/goodsOrderDetail.vue b/admin/src/components/business/goodsOrderDetail.vue
index da7671e..f5c68fc 100644
--- a/admin/src/components/business/goodsOrderDetail.vue
+++ b/admin/src/components/business/goodsOrderDetail.vue
@@ -2,8 +2,8 @@
   <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking">
     <div class="title">鏀粯鏄庣粏</div>
     <el-table :data="list" stripe border>
-      <el-table-column prop="id" label="璁㈠崟缂栧彿" min-width="120px" align="center"></el-table-column>
-      <el-table-column prop="onlineorderId" label="浜ゆ槗鍗曞彿" min-width="100px" align="center"></el-table-column>
+      <el-table-column prop="id" label="璁㈠崟缂栧彿" min-width="120px" show-overflow-tooltip align="center"></el-table-column>
+      <el-table-column prop="onlineorderId" label="浜ゆ槗鍗曞彿" min-width="100px" show-overflow-tooltip align="center"></el-table-column>
       <el-table-column prop="refundType" label="浜ゆ槗绫诲瀷" min-width="100px" align="center">
         <template slot-scope="{row}">
           {{ typeToStr(row.refundType) }}
@@ -24,7 +24,7 @@
       stripe
       border
     >
-      <el-table-column prop="openid" label="鐢ㄦ埛" min-width="120px" align="center"></el-table-column>
+      <el-table-column prop="openid" label="鐢ㄦ埛" min-width="120px" show-overflow-tooltip align="center"></el-table-column>
       <el-table-column prop="bikeCode" label="杞﹁締缂栧彿" min-width="100px" align="center"></el-table-column>
       <el-table-column prop="bikeType" label="杞︾被鍨�" min-width="100px" align="center"></el-table-column>
       <el-table-column prop="rideTime" label="鍊熷嚭鏃堕暱(鍒�)" min-width="100px" align="center"></el-table-column>
@@ -63,8 +63,9 @@
       // 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆� [99: 铏氭嫙type 鏀粯鎶奸噾]
       type: [
         { label: '缁撶畻閫�娆�', id: 0 },
-        { label: '寮哄埗缁撶畻閫�娆�', id: 1 },
-        { label: '缁撶畻鍚庨��娆�', id: 2 },
+        { label: '骞冲彴鑷姩缁撶畻閫�娆�', id: 1 },
+        { label: '寮哄埗缁撶畻閫�娆�', id: 2 },
+        { label: '缁撶畻鍚庨��娆�', id: 3 },
         { label: '鏀粯鎶奸噾', id: 99 },
       ],
     }
diff --git a/admin/src/components/business/priceConfiguration.vue b/admin/src/components/business/priceConfiguration.vue
index 87edbb5..6855b2d 100644
--- a/admin/src/components/business/priceConfiguration.vue
+++ b/admin/src/components/business/priceConfiguration.vue
@@ -7,7 +7,7 @@
         <template slot-scope="{row}">
           <div style="text-align: left;">
             <div>鏂瑰紡锛歿{ row.baseTime == -1 ? '涓�鍙d环' : '闃舵浠锋牸' }}</div>
-            <div>{{ row.title || '-' }}</div>
+            <div>瑙勫垯锛歿{ row.title || '-' }}</div>
             <!-- <div v-if="row.baseTime == -1">瑙勫垯锛歿{ row.basePrice }}鍏冪晠鐜╀竴鏁村ぉ</div>
             <div v-else>瑙勫垯锛歿{ `璧锋${row.baseTime}鍒嗛挓${row.basePrice }鍏冿紝瓒呰繃鍚�${row.unitPrice}鍏�/${row.unitTime}鍒嗛挓` }}</div> -->
           </div>
diff --git a/admin/src/components/system/dict/OperaDictDataWindow.vue b/admin/src/components/system/dict/OperaDictDataWindow.vue
index 600e0ae..9074086 100644
--- a/admin/src/components/system/dict/OperaDictDataWindow.vue
+++ b/admin/src/components/system/dict/OperaDictDataWindow.vue
@@ -42,7 +42,7 @@
         label: '',
         disabled: false
       },
-      richs: ['PRIVACY_AGREEMENT', 'ABOUT_US', 'SKIN_TIP', 'PRIVACY_POLICY', 'SET_SHOP_EXPLAIN', 'AFTERSALE_TIPS'],
+      richs: ['PRIVACY_AGREEMENT', 'ABOUT_US', 'SKIN_TIP', 'PRIVACY_POLICY', 'SET_SHOP_EXPLAIN', 'AFTERSALE_TIPS', 'LEASE_NOTICE'],
       // 楠岃瘉瑙勫垯
       rules: {
         label: [
diff --git a/admin/src/utils/util.js b/admin/src/utils/util.js
index c52e471..d1b2aff 100644
--- a/admin/src/utils/util.js
+++ b/admin/src/utils/util.js
@@ -37,3 +37,31 @@
     return 3
   }
 }
+
+//涓嬮潰鏄竴涓�氱敤杈冮珮鐨勮嚜瀹氫箟鏃ユ湡鏃堕棿鏍煎紡鍖栧嚱鏁扮殑绀轰緥锛�
+export function formatDateTime(date, format) {
+  const o = {
+    'M+': date.getMonth() + 1, // 鏈堜唤
+    'd+': date.getDate(), // 鏃�
+    'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 灏忔椂
+    'H+': date.getHours(), // 灏忔椂
+    'm+': date.getMinutes(), // 鍒�
+    's+': date.getSeconds(), // 绉�
+    'q+': Math.floor((date.getMonth() + 3) / 3), // 瀛e害
+    S: date.getMilliseconds(), // 姣
+    a: date.getHours() < 12 ? '涓婂崍' : '涓嬪崍', // 涓婂崍/涓嬪崍
+    A: date.getHours() < 12 ? 'AM' : 'PM', // AM/PM
+  };
+  if (/(y+)/.test(format)) {
+    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+  }
+  for (let k in o) {
+    if (new RegExp('(' + k + ')').test(format)) {
+      format = format.replace(
+        RegExp.$1,
+        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
+      );
+    }
+  }
+  return format;
+}
diff --git a/admin/src/views/business/actionLog.vue b/admin/src/views/business/actionLog.vue
index 5eded99..9b6d040 100644
--- a/admin/src/views/business/actionLog.vue
+++ b/admin/src/views/business/actionLog.vue
@@ -9,13 +9,8 @@
       <el-form-item label="杞﹁締缂栫爜" prop="bikeCode">
         <el-input v-model="searchForm.bikeCode" placeholder="璇疯緭鍏ヨ溅杈嗙紪鐮�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鎿嶄綔浜�" prop="creator">
-        <el-select v-model="searchForm.userId" placeholder="璇烽�夋嫨">
-          <el-option label="鏈綊杩�" :value="1">
-          </el-option>
-          <el-option label="宸插綊杩�" :value="1">
-          </el-option>
-        </el-select>
+      <el-form-item label="鎿嶄綔浜�" prop="creatorName">
+        <el-input v-model="searchForm.creatorName" placeholder="璇疯緭鍏ユ搷浣滀汉" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
@@ -31,19 +26,35 @@
         </li>
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe border>
-        <el-table-column prop="openid" label="鐢ㄦ埛" min-width="180px" align="center"></el-table-column>
-        <el-table-column prop="bikeCode" label="杞﹁締缂栫爜" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="rentSiteId" label="鍊熷嚭绔欑偣" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="rentDate" label="鍊熷嚭鏃堕棿" min-width="140px" align="center"></el-table-column>
+        <el-table-column prop="ridesObj.memberId" label="鐢ㄦ埛" min-width="180px" align="center">
+          <template slot-scope="{row}">
+            {{ row.ridesObj ? row.ridesObj.memberId : '' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="bikeCode" label="杞﹁締缂栫爜" min-width="100px" align="center">
+          <template slot-scope="{row}">
+            {{ row.ridesObj ? row.ridesObj.bikeCode : '' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="rentSiteId" label="鍊熷嚭绔欑偣" min-width="100px" align="center">
+          <template slot-scope="{row}">
+            {{ row.ridesObj ? row.ridesObj.rentSiteId : '' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="rentDate" label="鍊熷嚭鏃堕棿" min-width="140px" align="center">
+          <template slot-scope="{row}">
+            {{ row.ridesObj ? row.ridesObj.rentDate : '' }}
+          </template>
+        </el-table-column>
         <el-table-column prop="type" label="璋冩暣绫诲瀷" min-width="100px" align="center">
           <template slot-scope="{row}">
             <div>{{ row.type == 0 ? '寮哄埗杩樿溅' : '楠戣鏃堕暱淇敼' }}</div>
           </template>
         </el-table-column>
         <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140px" align="center"></el-table-column>
-        <el-table-column prop="creator" label="鎿嶄綔浜�" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="creatorName" label="鎿嶄綔浜�" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="actReason" label="鍘熷洜" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="paactInforamId" label="澶囨敞" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px" align="center"></el-table-column>
       </el-table>
       <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
       </pagination>
@@ -66,6 +77,7 @@
         openid: '',
         creator: '',
         bikeCode: '',
+        typeList: [0, 1]
       },
     }
   },
diff --git a/admin/src/views/business/ad.vue b/admin/src/views/business/ad.vue
new file mode 100644
index 0000000..99bd558
--- /dev/null
+++ b/admin/src/views/business/ad.vue
@@ -0,0 +1,96 @@
+<template>
+  <TableLayout :permissions="['business:ad: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" 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:ad:create']">
+        <li><el-button type="primary" @click="$refs.operaAdWindow.open('鏂板缓骞垮憡')" icon="el-icon-plus"
+            v-permissions="['business:ad:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table v-loading="isWorking.search" :data="tableData.list" stripe border>
+        <el-table-column prop="name" label="鏍囬" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="imgfullurl" label="骞垮憡鍥�" min-width="100px" align="center">
+          <template slot-scope="{row}">
+            <el-image style="width: 80px; height: 60px; margin-right: 5px;" :src="row.imgfullurl" fit="contain"
+              :prediv-src-list="[row.imgfullurl]"></el-image>
+          </template>
+        </el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮侊紙鍗囧簭锛�" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px" align="center"></el-table-column>
+
+
+        <!-- <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷 0鍥炬枃 1澶栭摼 2鍏朵粬" min-width="100px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵�� 0鍚敤 1绂佺敤" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="content" label="鍐呭" min-width="100px"></el-table-column> -->
+        <el-table-column v-if="containPermissions(['business:ad:update', 'business:ad:delete'])" label="鎿嶄綔"
+          min-width="120" fixed="right" align="center">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaAdWindow.open('缂栬緫骞垮憡', row)" icon="el-icon-edit"
+              v-permissions="['business:ad:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
+              v-permissions="['business:ad:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaAdWindow ref="operaAdWindow" @success="handlePageChange" />
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaAdWindow from '@/components/business/OperaAdWindow'
+export default {
+  name: 'Ad',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaAdWindow },
+  data() {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        sortnum: '',
+        type: '',
+        status: '',
+        info: '',
+        content: '',
+        imgurl: ''
+      }
+    }
+  },
+  created() {
+    this.config({
+      module: '骞垮憡淇℃伅琛�',
+      api: '/business/ad',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/aliBill.vue b/admin/src/views/business/aliBill.vue
new file mode 100644
index 0000000..55e3a86
--- /dev/null
+++ b/admin/src/views/business/aliBill.vue
@@ -0,0 +1,130 @@
+<template>
+  <TableLayout :permissions="['business:alibill:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鎬讳氦鏄撳崟鏁�" prop="sumBill">
+        <el-input v-model="searchForm.sumBill" placeholder="璇疯緭鍏ユ�讳氦鏄撳崟鏁�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆剧殑璁㈠崟鏁�" prop="sumRefundBill">
+        <el-input v-model="searchForm.sumRefundBill" placeholder="璇疯緭鍏ラ��娆剧殑璁㈠崟鏁�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="搴旂粨璁㈠崟鎬婚噾棰�" prop="sumSuccessFee">
+        <el-input v-model="searchForm.sumSuccessFee" placeholder="璇疯緭鍏ュ簲缁撹鍗曟�婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆炬�婚噾棰�" prop="sumRefundFee">
+        <el-input v-model="searchForm.sumRefundFee" placeholder="璇疯緭鍏ラ��娆炬�婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍏呭�煎埜閫�娆炬�婚噾棰�" prop="sumCouponRefundFee">
+        <el-input v-model="searchForm.sumCouponRefundFee" placeholder="璇疯緭鍏ュ厖鍊煎埜閫�娆炬�婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鎵嬬画璐规�婚噾棰�" prop="sumCmmsAmt">
+        <el-input v-model="searchForm.sumCmmsAmt" placeholder="璇疯緭鍏ユ墜缁垂鎬婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璁㈠崟鎬婚噾棰�" prop="sumTotalFee">
+        <el-input v-model="searchForm.sumTotalFee" placeholder="璇疯緭鍏ヨ鍗曟�婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢宠閫�娆炬�婚噾棰�" prop="sumApplyRefundFee">
+        <el-input v-model="searchForm.sumApplyRefundFee" placeholder="璇疯緭鍏ョ敵璇烽��娆炬�婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆炬墜缁垂鎬婚噾棰�" prop="sumRefundCmmsAmt">
+        <el-input v-model="searchForm.sumRefundCmmsAmt" placeholder="璇疯緭鍏ラ��娆炬墜缁垂鎬婚噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缁撶畻閲戦" prop="total">
+        <el-input v-model="searchForm.total" placeholder="璇疯緭鍏ョ粨绠楅噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鑷杞︽敹鍏�" prop="bikeFee">
+        <el-input v-model="searchForm.bikeFee" 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:alibill:create']">
+        <li><el-button type="primary" @click="$refs.operaAliBillWindow.open('鏂板缓')" icon="el-icon-plus" v-permissions="['business:alibill:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="" min-width="100px"></el-table-column>
+        <el-table-column prop="sumBill" label="鎬讳氦鏄撳崟鏁�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumRefundBill" label="閫�娆剧殑璁㈠崟鏁�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumSuccessFee" label="搴旂粨璁㈠崟鎬婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumRefundFee" label="閫�娆炬�婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumCouponRefundFee" label="鍏呭�煎埜閫�娆炬�婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumCmmsAmt" label="鎵嬬画璐规�婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumTotalFee" label="璁㈠崟鎬婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumApplyRefundFee" label="鐢宠閫�娆炬�婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="sumRefundCmmsAmt" label="閫�娆炬墜缁垂鎬婚噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="total" label="缁撶畻閲戦" min-width="100px"></el-table-column>
+        <el-table-column prop="bikeFee" label="鑷杞︽敹鍏�" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:alibill:update', 'business:alibill:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaAliBillWindow.open('缂栬緫', row)" icon="el-icon-edit" v-permissions="['business:alibill:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:alibill:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaAliBillWindow ref="operaAliBillWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaAliBillWindow from '@/components/business/OperaAliBillWindow'
+export default {
+  name: 'AliBill',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaAliBillWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        sumBill: '',
+        sumRefundBill: '',
+        sumSuccessFee: '',
+        sumRefundFee: '',
+        sumCouponRefundFee: '',
+        sumCmmsAmt: '',
+        sumTotalFee: '',
+        sumApplyRefundFee: '',
+        sumRefundCmmsAmt: '',
+        total: '',
+        bikeFee: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '',
+      api: '/business/aliBill',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/aliBillDetail.vue b/admin/src/views/business/aliBillDetail.vue
new file mode 100644
index 0000000..506dc76
--- /dev/null
+++ b/admin/src/views/business/aliBillDetail.vue
@@ -0,0 +1,205 @@
+<template>
+  <TableLayout :permissions="['business:alibilldetail:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀵硅处鍗旾D" prop="pid">
+        <el-input v-model="searchForm.pid" placeholder="璇疯緭鍏ュ璐﹀崟ID" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鏃堕棿" prop="billDate">
+        <el-date-picker v-model="searchForm.billDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ヤ氦鏄撴椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛鍙�" prop="mchId">
+        <el-input v-model="searchForm.mchId" placeholder="璇疯緭鍏ュ晢鎴峰彿" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="寰俊璁㈠崟鍙�" prop="transactionId">
+        <el-input v-model="searchForm.transactionId" placeholder="璇疯緭鍏ュ井淇¤鍗曞彿" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍟嗘埛璁㈠崟鍙�" prop="outTradeNo">
+        <el-input v-model="searchForm.outTradeNo" placeholder="璇疯緭鍏ュ晢鎴疯鍗曞彿" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛鏍囪瘑" prop="openid">
+        <el-input v-model="searchForm.openid" placeholder="璇疯緭鍏ョ敤鎴锋爣璇�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗绫诲瀷" prop="billType">
+        <el-input v-model="searchForm.billType" placeholder="璇疯緭鍏ヤ氦鏄撶被鍨�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒告牳閿�閲戦锛堝厓锛�" prop="couponFee">
+        <el-input v-model="searchForm.couponFee" placeholder="璇疯緭鍏ュ埜鏍搁攢閲戦锛堝厓锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆炬壒娆″彿/璇锋眰鍙�" prop="refundId">
+        <el-input v-model="searchForm.refundId" placeholder="璇疯緭鍏ラ��娆炬壒娆″彿/璇锋眰鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍟嗗搧鍚嶇О" prop="body">
+        <el-input v-model="searchForm.body" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鎵嬬画璐�" prop="cmmsAmt">
+        <el-input v-model="searchForm.cmmsAmt" placeholder="璇疯緭鍏ユ墜缁垂" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璁㈠崟閲戦" prop="totalFee">
+        <el-input v-model="searchForm.totalFee" placeholder="璇疯緭鍏ヨ鍗曢噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢宠閫�娆鹃噾棰�" prop="applyRefundFee">
+        <el-input v-model="searchForm.applyRefundFee" placeholder="璇疯緭鍏ョ敵璇烽��娆鹃噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input v-model="searchForm.remark" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍟嗗瀹炴敹锛堝厓锛�" prop="receipts">
+        <el-input v-model="searchForm.receipts" placeholder="璇疯緭鍏ュ晢瀹跺疄鏀讹紙鍏冿級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏀粯瀹濈孩鍖咃紙鍏冿級" prop="aliRedEnvelope">
+        <el-input v-model="searchForm.aliRedEnvelope" placeholder="璇疯緭鍏ユ敮浠樺疂绾㈠寘锛堝厓锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="闆嗗垎瀹濓紙鍏冿級" prop="jifenbao">
+        <el-input v-model="searchForm.jifenbao" placeholder="璇疯緭鍏ラ泦鍒嗗疂锛堝厓锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏀粯瀹濅紭鎯狅紙鍏冿級" prop="aliOfferFee">
+        <el-input v-model="searchForm.aliOfferFee" placeholder="璇疯緭鍏ユ敮浠樺疂浼樻儬锛堝厓锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍟嗗浼樻儬锛堝厓锛�" prop="offerFee">
+        <el-input v-model="searchForm.offerFee" placeholder="璇疯緭鍏ュ晢瀹朵紭鎯狅紙鍏冿級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒稿悕绉�" prop="couponName">
+        <el-input v-model="searchForm.couponName" placeholder="璇疯緭鍏ュ埜鍚嶇О" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍟嗗绾㈠寘娑堣垂閲戦锛堝厓锛�" prop="redEnvelope">
+        <el-input v-model="searchForm.redEnvelope" placeholder="璇疯緭鍏ュ晢瀹剁孩鍖呮秷璐归噾棰濓紙鍏冿級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍗℃秷璐归噾棰濓紙鍏冿級" prop="cardFee">
+        <el-input v-model="searchForm.cardFee" placeholder="璇疯緭鍏ュ崱娑堣垂閲戦锛堝厓锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒嗘鼎" prop="shareProfit">
+        <el-input v-model="searchForm.shareProfit" placeholder="璇疯緭鍏ュ垎娑�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="闂ㄥ簵鍚嶇О" prop="mchName">
+        <el-input v-model="searchForm.mchName" placeholder="璇疯緭鍏ラ棬搴楀悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鎿嶄綔鍛�" prop="opName">
+        <el-input v-model="searchForm.opName" placeholder="璇疯緭鍏ユ搷浣滃憳" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缁堢鍙�" prop="tty">
+        <el-input v-model="searchForm.tty" 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:alibilldetail:create']">
+        <li><el-button type="primary" @click="$refs.operaAliBillDetailWindow.open('鏂板缓')" icon="el-icon-plus" v-permissions="['business:alibilldetail:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="" min-width="100px"></el-table-column>
+        <el-table-column prop="pid" label="瀵硅处鍗旾D" min-width="100px"></el-table-column>
+        <el-table-column prop="billDate" label="浜ゆ槗鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="mchId" label="鍟嗘埛鍙�" min-width="100px"></el-table-column>
+        <el-table-column prop="transactionId" label="寰俊璁㈠崟鍙�" min-width="100px"></el-table-column>
+        <el-table-column prop="outTradeNo" label="鍟嗘埛璁㈠崟鍙�" min-width="100px"></el-table-column>
+        <el-table-column prop="openid" label="鐢ㄦ埛鏍囪瘑" min-width="100px"></el-table-column>
+        <el-table-column prop="billType" label="浜ゆ槗绫诲瀷" min-width="100px"></el-table-column>
+        <el-table-column prop="couponFee" label="鍒告牳閿�閲戦锛堝厓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="refundId" label="閫�娆炬壒娆″彿/璇锋眰鍙�" min-width="100px"></el-table-column>
+        <el-table-column prop="body" label="鍟嗗搧鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="cmmsAmt" label="鎵嬬画璐�" min-width="100px"></el-table-column>
+        <el-table-column prop="totalFee" label="璁㈠崟閲戦" min-width="100px"></el-table-column>
+        <el-table-column prop="applyRefundFee" label="鐢宠閫�娆鹃噾棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="receipts" label="鍟嗗瀹炴敹锛堝厓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="aliRedEnvelope" label="鏀粯瀹濈孩鍖咃紙鍏冿級" min-width="100px"></el-table-column>
+        <el-table-column prop="jifenbao" label="闆嗗垎瀹濓紙鍏冿級" min-width="100px"></el-table-column>
+        <el-table-column prop="aliOfferFee" label="鏀粯瀹濅紭鎯狅紙鍏冿級" min-width="100px"></el-table-column>
+        <el-table-column prop="offerFee" label="鍟嗗浼樻儬锛堝厓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="couponName" label="鍒稿悕绉�" min-width="100px"></el-table-column>
+        <el-table-column prop="redEnvelope" label="鍟嗗绾㈠寘娑堣垂閲戦锛堝厓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="cardFee" label="鍗℃秷璐归噾棰濓紙鍏冿級" min-width="100px"></el-table-column>
+        <el-table-column prop="shareProfit" label="鍒嗘鼎" min-width="100px"></el-table-column>
+        <el-table-column prop="mchName" label="闂ㄥ簵鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="opName" label="鎿嶄綔鍛�" min-width="100px"></el-table-column>
+        <el-table-column prop="tty" label="缁堢鍙�" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:alibilldetail:update', 'business:alibilldetail:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaAliBillDetailWindow.open('缂栬緫', row)" icon="el-icon-edit" v-permissions="['business:alibilldetail:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:alibilldetail:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaAliBillDetailWindow ref="operaAliBillDetailWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaAliBillDetailWindow from '@/components/business/OperaAliBillDetailWindow'
+export default {
+  name: 'AliBillDetail',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaAliBillDetailWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        pid: '',
+        billDate: '',
+        mchId: '',
+        transactionId: '',
+        outTradeNo: '',
+        openid: '',
+        billType: '',
+        couponFee: '',
+        refundId: '',
+        body: '',
+        cmmsAmt: '',
+        totalFee: '',
+        applyRefundFee: '',
+        remark: '',
+        receipts: '',
+        aliRedEnvelope: '',
+        jifenbao: '',
+        aliOfferFee: '',
+        offerFee: '',
+        couponName: '',
+        redEnvelope: '',
+        cardFee: '',
+        shareProfit: '',
+        mchName: '',
+        opName: '',
+        tty: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '',
+      api: '/business/aliBillDetail',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/backgroundRefund.vue b/admin/src/views/business/backgroundRefund.vue
index 607889c..786037b 100644
--- a/admin/src/views/business/backgroundRefund.vue
+++ b/admin/src/views/business/backgroundRefund.vue
@@ -3,24 +3,26 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
 
-      <el-form-item label="鐢ㄦ埛" prop="openid">
+      <el-form-item label="鎿嶄綔鏃堕棿">
         <el-date-picker
           v-model="value1"
           type="daterange"
           range-separator="鑷�"
           start-placeholder="寮�濮嬫棩鏈�"
           end-placeholder="缁撴潫鏃ユ湡"
-          format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd HH:mm:ss"
           @change="selectDate"
         ></el-date-picker>
       </el-form-item>
-      <el-form-item label="鎿嶄綔浜�" prop="creator">
-        <el-select v-model="searchForm.creator" placeholder="璇烽�夋嫨">
+      <el-form-item label="鎿嶄綔浜�" prop="creatorName">
+        <el-input v-model="searchForm.creatorName" placeholder="璇疯緭鍏ユ搷浣滀汉" v-trim/>
+        <!-- <el-select v-model="searchForm.creator" placeholder="璇烽�夋嫨">
           <el-option label="鏈綊杩�" :value="1">
           </el-option>
           <el-option label="宸插綊杩�" :value="1">
           </el-option>
-        </el-select>
+        </el-select> -->
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
@@ -36,17 +38,37 @@
         </li>
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe border>
-        <el-table-column prop="openid" label="鐢ㄦ埛" min-width="180px" align="center"></el-table-column>
-        <el-table-column prop="payOnlineOrderid" label="绯荤粺鍗曞彿" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="openid" label="鐢ㄦ埛" min-width="140px" align="center" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <div class="long-title-style">{{ row.openid }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="id" label="绯荤粺鍗曞彿" min-width="140px" align="center" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <div class="long-title-style">{{ row.id }}</div>
+          </template>
+        </el-table-column>
         <!-- payOnlineOrderid  鏀粯鎶奸噾浜ゆ槗鍗曞彿 -->
         <!-- onlineOrderid 鍦ㄧ嚎浜ゆ槗鍗曞彿 -->
         <!-- preOrderid 浜ゆ槗棰勮鍗曞彿 -->
-        <el-table-column prop="onlineOrderid" label="浜ゆ槗鍗曞彿" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="canBalance" label="褰撳墠鍙��鍥炴娂閲�(鍏�)" min-width="140px" align="center"></el-table-column>
-        <el-table-column prop="money" label="閫�鍥炴娂閲�(鍏�)" min-width="140px" align="center"></el-table-column>
+        <el-table-column prop="onlineOrderid" label="浜ゆ槗鍗曞彿" min-width="140px" align="center" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <div class="long-title-style">{{ row.onlineOrderid }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="canBalance" label="褰撳墠鍙��鍥炴娂閲�(鍏�)" min-width="140px" align="center">
+          <template slot-scope="{row}">
+            {{ (row.canBalance / 100).toFixed(2) }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="money" label="閫�鍥炴娂閲�(鍏�)" min-width="140px" align="center">
+          <template slot-scope="{row}">
+            {{ (row.money / 100).toFixed(2) }}
+          </template>
+        </el-table-column>
         <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140px" align="center"></el-table-column>
-        <el-table-column prop="creator" label="鎿嶄綔浜�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="actReason" label="鍘熷洜" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="creatorName" label="鎿嶄綔浜�" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="reason" label="鍘熷洜" min-width="100px" align="center"></el-table-column>
       </el-table>
       <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
       </pagination>
@@ -69,7 +91,7 @@
       searchForm: {
         startDate: '',
         endDate: '',
-        creator: '',
+        creatorName: '',
       },
     }
   },
@@ -96,6 +118,7 @@
       this.searchForm.startDate = ''
       this.searchForm.endDate = ''
       this.value1 = []
+      this.$refs.searchForm.resetFields()
       this.search()
     },
   },
diff --git a/admin/src/views/business/baseParam.vue b/admin/src/views/business/baseParam.vue
new file mode 100644
index 0000000..4f58b1a
--- /dev/null
+++ b/admin/src/views/business/baseParam.vue
@@ -0,0 +1,130 @@
+<template>
+  <TableLayout :permissions="['business:baseparam:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮侊紙鍗囧簭锛�" prop="sortnum">
+        <el-input v-model="searchForm.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜锛堝崌搴忥級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 0杞﹁締淇濅慨鍘熷洜 1寮哄埗杩樿溅鍘熷洜 2鏃堕暱鍑忓厤鍘熷洜 3鍗曡溅绫诲瀷" prop="type">
+        <el-input v-model="searchForm.type" placeholder="璇疯緭鍏ョ被鍨� 0杞﹁締淇濅慨鍘熷洜 1寮哄埗杩樿溅鍘熷洜 2鏃堕暱鍑忓厤鍘熷洜 3鍗曡溅绫诲瀷" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status">
+        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞鏄惁蹇呭~ 0鍚� 1鏄�" prop="required">
+        <el-input v-model="searchForm.required" placeholder="璇疯緭鍏ュ娉ㄦ槸鍚﹀繀濉� 0鍚� 1鏄�" @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:baseparam:create']">
+        <li><el-button type="primary" @click="$refs.operaBaseParamWindow.open('鏂板缓绯荤粺鍩虹閰嶇疆琛�')" icon="el-icon-plus" v-permissions="['business:baseparam:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮侊紙鍗囧簭锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷 0杞﹁締淇濅慨鍘熷洜 1寮哄埗杩樿溅鍘熷洜 2鏃堕暱鍑忓厤鍘熷洜 3鍗曡溅绫诲瀷" min-width="100px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵�� 0鍚敤 1绂佺敤" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="required" label="澶囨敞鏄惁蹇呭~ 0鍚� 1鏄�" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:baseparam:update', 'business:baseparam:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaBaseParamWindow.open('缂栬緫绯荤粺鍩虹閰嶇疆琛�', row)" icon="el-icon-edit" v-permissions="['business:baseparam:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:baseparam:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaBaseParamWindow ref="operaBaseParamWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaBaseParamWindow from '@/components/business/OperaBaseParamWindow'
+export default {
+  name: 'BaseParam',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaBaseParamWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        sortnum: '',
+        type: '',
+        status: '',
+        info: '',
+        required: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '绯荤粺鍩虹閰嶇疆琛�',
+      api: '/business/baseParam',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/bikeRepair.vue b/admin/src/views/business/bikeRepair.vue
index 143b16a..28685f0 100644
--- a/admin/src/views/business/bikeRepair.vue
+++ b/admin/src/views/business/bikeRepair.vue
@@ -5,8 +5,8 @@
       <el-form-item label="鐢ㄦ埛" prop="creator">
         <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="杞﹁締缂栧彿" prop="binkeId">
-        <el-input v-model="searchForm.binkeId" placeholder="璇疯緭鍏ヨ溅杈嗙紪鍙�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="杞﹁締缂栫爜" prop="bikeCode">
+        <el-input v-model="searchForm.bikeCode" placeholder="璇疯緭鍏ヨ溅杈嗙紪鍙�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鐘舵��" prop="status">
         <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
@@ -26,6 +26,9 @@
         <el-date-picker
           v-model="value1"
           type="daterange"
+          @change="selectDate"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd HH:mm:ss"
           range-separator="鑷�"
           start-placeholder="寮�濮嬫棩鏈�"
           end-placeholder="缁撴潫鏃ユ湡">
@@ -45,7 +48,7 @@
         stripe
         border
       >
-        <el-table-column prop="openid" label="鍒涘缓浜�" min-width="180px" align="center"></el-table-column>
+        <el-table-column prop="openid" label="鐢ㄦ埛" min-width="180px" align="center"></el-table-column>
         <el-table-column prop="linkname" label="鑱旂郴浜�" min-width="100px" align="center">
           <template slot-scope="{row}">
             {{ `${row.linkname} ${row.linkphone}`  }}
@@ -61,7 +64,7 @@
         <!-- <el-table-column prop="param" label="杞﹁締闂" min-width="100px"></el-table-column> -->
         <el-table-column prop="content" label="闂璇存槑" min-width="100px" show-overflow-tooltip align="center">
           <template slot-scope="{row}">
-            <div class="long-title-style">{{ row.content }}</div>
+            <el-button type="text" @click="showProblem(row)">鐐瑰嚮鏌ョ湅</el-button>
           </template>
         </el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px" align="center"></el-table-column>
@@ -86,6 +89,7 @@
       </pagination>
     </template>
     <OperaRepairDealWindow ref="operaRepairDealWindow" @success="handlePageChange"/>
+    <RepairDetailWindow ref="repairDetailWindow"/>
   </TableLayout>
 </template>
 
@@ -94,13 +98,16 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaRepairDealWindow from '@/components/business/OperaRepairDealWindow'
+import RepairDetailWindow from '@/components/business/RepairDetailWindow'
+import { formatDateTime } from '@/utils/util'
+import { getFileList } from '@/api/business/bikeRepair'
 export default {
   name: 'BikeRepair',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaRepairDealWindow },
+  components: { TableLayout, Pagination, OperaRepairDealWindow, RepairDetailWindow },
   data () {
     return {
-      value1: [],
+      value1: [new Date(), new Date()],
       // 鎼滅储
       searchForm: {
         id: '',
@@ -122,6 +129,8 @@
         dealUser: '',
         dealDate: '',
         dealInfo: '',
+        startDate: '',
+        endDate: '',
         content: ''
       }
     }
@@ -133,11 +142,38 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
   },
   methods: {
+    reset() {
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      this.value1 = []
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    selectDate(v) {
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      if (v) {
+        this.searchForm.startDate = v[0]
+        this.searchForm.endDate = v[1]
+      }
+      this.search()
+    },
     dealAction(row) {
       this.$refs.operaRepairDealWindow.open('澶勭悊', row)
+    },
+    showProblem(row) {
+      getFileList(row.id)
+        .then(res => {
+          this.$refs.repairDetailWindow.open('闂璇存槑',{ imgList: res.map(item => item.fileurlfull), ...row })
+        })
+        .catch(e => {
+          this.$tip.apiFailed(e)
+        })
+      
     }
   },
 }
diff --git a/admin/src/views/business/bikeRetakeRecord.vue b/admin/src/views/business/bikeRetakeRecord.vue
index 3b4b016..0706ce2 100644
--- a/admin/src/views/business/bikeRetakeRecord.vue
+++ b/admin/src/views/business/bikeRetakeRecord.vue
@@ -3,28 +3,31 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
 
-      <el-form-item label="鐢ㄦ埛" prop="memberId">
-        <el-input v-model="searchForm.memberId" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鐢ㄦ埛" prop="openid">
+        <el-input v-model="searchForm.openid" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="杞﹁締缂栫爜" prop="bikeCode">
         <el-input v-model="searchForm.bikeCode" placeholder="璇疯緭鍏ヨ溅杈嗙紪鐮�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鏄惁褰掕繕" prop="closeStatus">
-        <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
+      <el-form-item label="鏄惁褰掕繕" prop="hasBack">
+        <el-select v-model="searchForm.hasBack" placeholder="璇烽�夋嫨">
           <el-option
             label="鏈綊杩�"
-            :value="1">
+            :value="false">
           </el-option>
           <el-option
             label="宸插綊杩�"
-            :value="1">
+            :value="true">
           </el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="绉熷�熸椂闂�" prop="rentDate">
+      <el-form-item label="鍊熷嚭鏃堕棿" prop="rentDate">
         <el-date-picker
           v-model="value1"
           type="daterange"
+          @change="selectDate"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd HH:mm:ss"
           range-separator="鑷�"
           start-placeholder="寮�濮嬫棩鏈�"
           end-placeholder="缁撴潫鏃ユ湡">
@@ -33,12 +36,15 @@
 
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:memberrides:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:memberrides:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> -->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
+      <ul class="toolbar">
+        <li ><el-button type="primary" :loading="isWorking.export" v-permissions="['business:memberrides:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+      </ul>
       <el-table
         v-loading="isWorking.search"
         :data="tableData.list"
@@ -99,6 +105,7 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { formatDateTime } from '@/utils/util'
 export default {
   name: 'MemberRides',
   extends: BaseTable,
@@ -114,7 +121,7 @@
         editor: '',
         isdeleted: '',
         info: '',
-        memberId: '',
+        openid: '',
         bikeCode: '',
         balance: '',
         paramId: '',
@@ -143,9 +150,11 @@
         backType: '',
         backReason: '',
         backInfo: '',
+        startDate: '',
+        endDate: '',
         backUserid: ''
       },
-      value1: []
+      value1: [new Date(), new Date()]
     }
   },
   created () {
@@ -155,7 +164,26 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
-  }
+  },
+  methods: {
+    reset() {
+      this.value1 = []
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    selectDate(v) {
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      if (v) {
+        this.searchForm.startDate = v[0]
+        this.searchForm.endDate = v[1]
+      }
+      this.search()
+    },
+  },
 }
 </script>
diff --git a/admin/src/views/business/bikes.vue b/admin/src/views/business/bikes.vue
new file mode 100644
index 0000000..2ffed14
--- /dev/null
+++ b/admin/src/views/business/bikes.vue
@@ -0,0 +1,145 @@
+<template>
+  <TableLayout :permissions="['business:bikes:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="杞﹁締绫诲瀷缂栫爜锛堝叧鑱攂ase_param)" prop="paramId">
+        <el-input v-model="searchForm.paramId" placeholder="璇疯緭鍏ヨ溅杈嗙被鍨嬬紪鐮侊紙鍏宠仈base_param)" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栧彿" prop="code">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ紪鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0鍋滆溅鍙嚭鍊� 1鍑哄�熶腑 3绂佺敤 " prop="status">
+        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍋滆溅鍙嚭鍊� 1鍑哄�熶腑 3绂佺敤 " @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="褰撳墠绔欑偣缂栫爜锛堝叧鑱攕ites)" prop="siteId">
+        <el-input v-model="searchForm.siteId" placeholder="璇疯緭鍏ュ綋鍓嶇珯鐐圭紪鐮侊紙鍏宠仈sites)" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="褰撳墠閿佸ご缂栫爜锛堝叧鑱攍ocks)" prop="lockId">
+        <el-input v-model="searchForm.lockId" placeholder="璇疯緭鍏ュ綋鍓嶉攣澶寸紪鐮侊紙鍏宠仈locks)" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏈�杩戠鍊熸椂闂�" prop="lastRentData">
+        <el-date-picker v-model="searchForm.lastRentData" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶杩戠鍊熸椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍑哄敭鏃堕棿" prop="soldoutDate">
+        <el-date-picker v-model="searchForm.soldoutDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ嚭鍞椂闂�" @change="search"/>
+      </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:bikes:create']">
+        <li><el-button type="primary" @click="$refs.operaBikesWindow.open('鏂板缓鑷杞︿俊鎭〃')" icon="el-icon-plus" v-permissions="['business:bikes:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="paramId" label="杞﹁締绫诲瀷缂栫爜锛堝叧鑱攂ase_param)" min-width="100px"></el-table-column>
+        <el-table-column prop="code" label="缂栧彿" min-width="100px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵�� 0鍋滆溅鍙嚭鍊� 1鍑哄�熶腑 3绂佺敤 " min-width="100px"></el-table-column>
+        <el-table-column prop="siteId" label="褰撳墠绔欑偣缂栫爜锛堝叧鑱攕ites)" min-width="100px"></el-table-column>
+        <el-table-column prop="lockId" label="褰撳墠閿佸ご缂栫爜锛堝叧鑱攍ocks)" min-width="100px"></el-table-column>
+        <el-table-column prop="lastRentData" label="鏈�杩戠鍊熸椂闂�" min-width="100px"></el-table-column>
+        <el-table-column prop="soldoutDate" label="鍑哄敭鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:bikes:update', 'business:bikes:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaBikesWindow.open('缂栬緫鑷杞︿俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:bikes:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:bikes:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaBikesWindow ref="operaBikesWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaBikesWindow from '@/components/business/OperaBikesWindow'
+export default {
+  name: 'Bikes',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaBikesWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        info: '',
+        paramId: '',
+        code: '',
+        status: '',
+        siteId: '',
+        lockId: '',
+        lastRentData: '',
+        soldoutDate: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鑷杞︿俊鎭〃',
+      api: '/business/bikes',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/goodsorder.vue b/admin/src/views/business/goodsorder.vue
index e6a06dc..0cf5dd2 100644
--- a/admin/src/views/business/goodsorder.vue
+++ b/admin/src/views/business/goodsorder.vue
@@ -3,7 +3,7 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
       <el-form-item label="鐢ㄦ埛" prop="openid">
-        <el-input v-model="searchForm.openid" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+        <el-input v-model="searchForm.openid" placeholder="璇疯緭鍏ョ敤鎴�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="璁㈠崟缂栧彿" prop="code">
         <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�" @keypress.enter.native="search"></el-input>
@@ -11,8 +11,8 @@
       <el-form-item label="浜ゆ槗鍗曞彿" prop="onlineOrderid">
         <el-input v-model="searchForm.onlineOrderid" placeholder="璇疯緭鍏ヤ氦鏄撳崟鍙�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鏄惁缁撶畻" prop="status">
-        <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
+      <el-form-item label="鏄惁缁撶畻" prop="closeStatus">
+        <el-select v-model="searchForm.closeStatus" placeholder="璇烽�夋嫨">
           <el-option
             label="鏈粨绠�"
             :value="0">
@@ -30,8 +30,10 @@
           @change="selectDate"
           range-separator="鑷�"
           start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡">
-        </el-date-picker>
+          end-placeholder="缁撴潫鏃ユ湡"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd HH:mm:ss"
+        ></el-date-picker>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
@@ -50,13 +52,14 @@
         border
       >
         <el-table-column prop="openid" label="鐢ㄦ埛" min-width="225px" align="center"></el-table-column>
-        <el-table-column prop="id" label="璁㈠崟缂栧彿" min-width="225px" align="center"></el-table-column>
+        <el-table-column prop="id" label="璁㈠崟缂栧彿" min-width="235px" align="center"></el-table-column>
         <el-table-column prop="onlineOrderid" label="浜ゆ槗鍗曞彿" min-width="225px" align="center"></el-table-column>
         <el-table-column prop="money" label="鎶奸噾(鍏�)" min-width="80px" align="center"></el-table-column>
-        <el-table-column prop="payDate" label="浜ゆ娂閲戞椂闂�" min-width="140px" align="center"></el-table-column>
-        <el-table-column prop="refundMoney" label="閫�鎶奸噾(鍏冿級" min-width="80px" align="center"></el-table-column>
-        <el-table-column prop="closeMoney" label="缁撶畻閲戦(鍏冿級" min-width="90px" align="center"></el-table-column>
-        <el-table-column prop="closeDate" label="閫�娆剧粨绠楁椂闂�" min-width="140px" align="center"></el-table-column>
+        <el-table-column prop="payDate" label="浜ゆ娂閲戞椂闂�" min-width="145px" align="center"></el-table-column>
+        <el-table-column prop="refundMoney" label="閫�鎶奸噾(鍏冿級" min-width="90px" align="center"></el-table-column>
+        <el-table-column prop="closeMoney" label="缁撶畻閲戦(鍏冿級" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="closeDate" label="缁撶畻鏃堕棿" min-width="140px" align="center"></el-table-column>
+        <el-table-column prop="refundDate" label="閫�娆炬椂闂�" min-width="140px" align="center"></el-table-column>
 
 
         <!-- <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
@@ -108,6 +111,7 @@
 import GoodsOrderDetail from '@/components/business/goodsOrderDetail'
 import BackGoodsorderWindow from '@/components/business/backGoodsorderWindow'
 import { getDetail, getGoodsorderCanBanlanceDTO, closerGoodsorder } from '@/api/business/goodsorder'
+import { formatDateTime } from '@/utils/util'
 export default {
   name: 'Goodsorder',
   extends: BaseTable,
@@ -127,6 +131,7 @@
         openid: '',
         money: '',
         status: '',
+        closeStatus: '',
         preOrderid: '',
         onlineOrderid: '',
         payStatus: '',
@@ -138,7 +143,7 @@
         endDate: '',
         
       },
-      value1: []
+      value1: [new Date(), new Date()]
     }
   },
   created () {
@@ -148,11 +153,14 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
   },
   methods: {
     reset() {
       this.value1 = []
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
       this.$refs.searchForm.resetFields()
       this.search()
     },
diff --git a/admin/src/views/business/locks.vue b/admin/src/views/business/locks.vue
new file mode 100644
index 0000000..2ea283c
--- /dev/null
+++ b/admin/src/views/business/locks.vue
@@ -0,0 +1,130 @@
+<template>
+  <TableLayout :permissions="['business:locks:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栧彿" prop="code">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ紪鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0姝e父 1寮傚父" prop="status">
+        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0姝e父 1寮傚父" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="绔欑偣缂栫爜(鍏宠仈sites)" prop="siteId">
+        <el-input v-model="searchForm.siteId" placeholder="璇疯緭鍏ョ珯鐐圭紪鐮�(鍏宠仈sites)" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="褰撳墠閿佸畾鑷杞︾紪鍙�" prop="bikeCode">
+        <el-input v-model="searchForm.bikeCode" 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:locks:create']">
+        <li><el-button type="primary" @click="$refs.operaLocksWindow.open('鏂板缓閿佸ご淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:locks:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="code" label="缂栧彿" min-width="100px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵�� 0姝e父 1寮傚父" min-width="100px"></el-table-column>
+        <el-table-column prop="siteId" label="绔欑偣缂栫爜(鍏宠仈sites)" min-width="100px"></el-table-column>
+        <el-table-column prop="bikeCode" label="褰撳墠閿佸畾鑷杞︾紪鍙�" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:locks:update', 'business:locks:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaLocksWindow.open('缂栬緫閿佸ご淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:locks:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:locks:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaLocksWindow ref="operaLocksWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaLocksWindow from '@/components/business/OperaLocksWindow'
+export default {
+  name: 'Locks',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaLocksWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        name: '',
+        code: '',
+        status: '',
+        siteId: '',
+        bikeCode: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '閿佸ご淇℃伅琛�',
+      api: '/business/locks',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/member.vue b/admin/src/views/business/member.vue
new file mode 100644
index 0000000..5c234ae
--- /dev/null
+++ b/admin/src/views/business/member.vue
@@ -0,0 +1,185 @@
+<template>
+  <TableLayout :permissions="['business:member:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="濮撳悕" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄电О" prop="nickname">
+        <el-input v-model="searchForm.nickname" placeholder="璇疯緭鍏ユ樀绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="openid" prop="openid">
+        <el-input v-model="searchForm.openid" placeholder="璇疯緭鍏penid" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0姝e父 1绂佺敤" prop="status">
+        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0姝e父 1绂佺敤" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="unionid" prop="unionid">
+        <el-input v-model="searchForm.unionid" placeholder="璇疯緭鍏nionid" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="娉ㄥ唽鏉ユ簮 0寰俊灏忕▼搴� 1鏀粯瀹濆皬绋嬪簭" prop="origin">
+        <el-input v-model="searchForm.origin" placeholder="璇疯緭鍏ユ敞鍐屾潵婧� 0寰俊灏忕▼搴� 1鏀粯瀹濆皬绋嬪簭" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璐︽埛浣欓锛堝垎锛�" prop="banlance">
+        <el-input v-model="searchForm.banlance" placeholder="璇疯緭鍏ヨ处鎴蜂綑棰濓紙鍒嗭級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="娉ㄥ唽鏃堕棿" prop="registerDate">
+        <el-date-picker v-model="searchForm.registerDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ敞鍐屾椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鏈�杩戠杞︽椂闂�" prop="lastRendId">
+        <el-date-picker v-model="searchForm.lastRendId" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶杩戠杞︽椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鎵嬫満鍙�" prop="phone">
+        <el-input v-model="searchForm.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閭" prop="email">
+        <el-input v-model="searchForm.email" placeholder="璇疯緭鍏ラ偖绠�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀵嗙爜" prop="password">
+        <el-input v-model="searchForm.password" placeholder="璇疯緭鍏ュ瘑鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍗″彿" prop="cardNo">
+        <el-input v-model="searchForm.cardNo" placeholder="璇疯緭鍏ュ崱鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍗″瘑" prop="cardSign">
+        <el-input v-model="searchForm.cardSign" placeholder="璇疯緭鍏ュ崱瀵�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 0绉熷 1绠$悊鍛�" prop="type">
+        <el-input v-model="searchForm.type" placeholder="璇疯緭鍏ョ被鍨� 0绉熷 1绠$悊鍛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶村儚" prop="imgurl">
+        <el-input v-model="searchForm.imgurl" 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:member:create']">
+        <li><el-button type="primary" @click="$refs.operaMemberWindow.open('鏂板缓鐢ㄦ埛淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:member:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+        <el-table-column prop="nickname" label="鏄电О" min-width="100px"></el-table-column>
+        <el-table-column prop="openid" label="openid" min-width="100px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵�� 0姝e父 1绂佺敤" min-width="100px"></el-table-column>
+        <el-table-column prop="unionid" label="unionid" min-width="100px"></el-table-column>
+        <el-table-column prop="origin" label="娉ㄥ唽鏉ユ簮 0寰俊灏忕▼搴� 1鏀粯瀹濆皬绋嬪簭" min-width="100px"></el-table-column>
+        <el-table-column prop="banlance" label="璐︽埛浣欓锛堝垎锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="registerDate" label="娉ㄥ唽鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="lastRendId" label="鏈�杩戠杞︽椂闂�" min-width="100px"></el-table-column>
+        <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+        <el-table-column prop="email" label="閭" min-width="100px"></el-table-column>
+        <el-table-column prop="password" label="瀵嗙爜" min-width="100px"></el-table-column>
+        <el-table-column prop="cardNo" label="鍗″彿" min-width="100px"></el-table-column>
+        <el-table-column prop="cardSign" label="鍗″瘑" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷 0绉熷 1绠$悊鍛�" min-width="100px"></el-table-column>
+        <el-table-column prop="imgurl" label="澶村儚" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:member:update', 'business:member:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaMemberWindow.open('缂栬緫鐢ㄦ埛淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:member:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaMemberWindow ref="operaMemberWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaMemberWindow from '@/components/business/OperaMemberWindow'
+export default {
+  name: 'Member',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaMemberWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        name: '',
+        nickname: '',
+        openid: '',
+        status: '',
+        unionid: '',
+        origin: '',
+        banlance: '',
+        registerDate: '',
+        lastRendId: '',
+        phone: '',
+        email: '',
+        password: '',
+        cardNo: '',
+        cardSign: '',
+        type: '',
+        imgurl: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鐢ㄦ埛淇℃伅琛�',
+      api: '/business/member',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/memberRides.vue b/admin/src/views/business/memberRides.vue
index 7bfa153..b29a13a 100644
--- a/admin/src/views/business/memberRides.vue
+++ b/admin/src/views/business/memberRides.vue
@@ -3,14 +3,14 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
 
-      <el-form-item label="鐢ㄦ埛" prop="memberId">
-        <el-input v-model="searchForm.memberId" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鐢ㄦ埛" prop="openid">
+        <el-input v-model="searchForm.openid" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="杞﹁締缂栫爜" prop="bikeCode">
         <el-input v-model="searchForm.bikeCode" placeholder="璇疯緭鍏ヨ溅杈嗙紪鐮�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="缁撶畻鐘舵��" prop="closeStatus">
-        <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
+        <el-select v-model="searchForm.closeStatus" placeholder="璇烽�夋嫨">
           <el-option
             label="鏈粨绠�"
             :value="1">
@@ -25,6 +25,9 @@
         <el-date-picker
           v-model="value1"
           type="daterange"
+          @change="selectDate"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd HH:mm:ss"
           range-separator="鑷�"
           start-placeholder="寮�濮嬫棩鏈�"
           end-placeholder="缁撴潫鏃ユ湡">
@@ -50,7 +53,7 @@
         <el-table-column prop="bikeType" label="杞﹁締绫诲瀷" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="rideTime" label="鍊熷嚭鏃堕暱(鍒�)" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="duration" label="璁¤垂鏃堕暱(鍒�)" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="rentDate" label="鍒涘缓鏃堕棿" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="rentDate" label="鍊熷嚭鏃堕棿" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="backDate" label="杩樿溅鏃堕棿" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="closeStatus" label="缁撶畻鐘舵��" min-width="100px" align="center">
           <!-- 0鏈粨绠� 1宸茬粨鏉� -->
@@ -103,6 +106,7 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { formatDateTime } from '@/utils/util'
 export default {
   name: 'MemberRides',
   extends: BaseTable,
@@ -118,7 +122,7 @@
         editor: '',
         isdeleted: '',
         info: '',
-        memberId: '',
+        openid: '',
         bikeCode: '',
         balance: '',
         paramId: '',
@@ -147,9 +151,11 @@
         backType: '',
         backReason: '',
         backInfo: '',
+        startDate: '',
+        endDate: '',
         backUserid: ''
       },
-      value1: []
+      value1: [new Date(), new Date()]
     }
   },
   created () {
@@ -159,7 +165,26 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
-  }
+  },
+  methods: {
+    reset() {
+      this.value1 = []
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    selectDate(v) {
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      if (v) {
+        this.searchForm.startDate = v[0]
+        this.searchForm.endDate = v[1]
+      }
+      this.search()
+    },
+  },
 }
 </script>
diff --git a/admin/src/views/business/miniproSetting.vue b/admin/src/views/business/miniproSetting.vue
index a869a4d..bac9511 100644
--- a/admin/src/views/business/miniproSetting.vue
+++ b/admin/src/views/business/miniproSetting.vue
@@ -14,9 +14,11 @@
         <div class="tips">璇疯緭鍏ラ渶瑕佺即绾崇殑鎶奸噾閲戦(鍗曚綅锛氬厓)</div>
       </el-form-item>
       <el-form-item label="钀ヤ笟鏃堕棿">
-        <el-time-picker placeholder="寮�濮嬫椂闂�" value-format="HH:mm" :picker-options="option" v-model="form.businessStarttime"></el-time-picker>
+        <el-time-picker placeholder="寮�濮嬫椂闂�" value-format="HH:mm" format='HH:mm'
+          v-model="form.businessStarttime"></el-time-picker>
         鑷�
-        <el-time-picker placeholder="缁撴潫鏃堕棿" value-format="HH:mm" :picker-options="option" v-model="form.businessEndtime"></el-time-picker>
+        <el-time-picker placeholder="缁撴潫鏃堕棿" value-format="HH:mm" format='HH:mm'
+          v-model="form.businessEndtime"></el-time-picker>
       </el-form-item>
       <el-form-item label="鍏嶈垂楠戣鏃堕暱">
         <el-input v-model="form.freeRentTime" type="number" placeholder="璇疯緭鍏ュ厤璐归獞琛屾椂闀�"></el-input>
@@ -33,14 +35,36 @@
       <el-form-item label="棰勮閽夐拤缇ゅ湴鍧�">
         <el-input v-model="form.warnDingdingUrl" placeholder="璇疯緭鍏ラ璀﹂拤閽夌兢鍦板潃"></el-input>
       </el-form-item>
+      <el-form-item label="绉熻祦椤荤煡涓诲浘">
+        <div style="display: flex;">
+          <UploadAvatarImage
+            :file="{ 'imgurlfull': form.leaseNoticeUrl, 'imgurl': leaseNoticeUrl }"
+            :uploadData="uploadData" tipsLabel="" @uploadSuccess="uploadOutSuccess" @uploadEnd="isUploading=false"
+            @uploadBegin="isUploading=true" />
+            <div class="tips">
+              <el-button type="text" style="color: red;" @click="form.leaseNoticeUrl = ''">鍒犻櫎</el-button>
+            </div>
+        </div>
+      </el-form-item>
       <el-form-item label="绉熻祦娴佺▼瑙嗛" prop="name">
-        <el-upload class="avatar-uploader" :action="uploadImgUrl" :show-file-list="false"
-          accept=".mp4" :data="{folder: 'bike',}" :on-success="handleAvatarSuccess">
-          <video v-if="form.rentTipsVideo" :src="form.rentTipsVideo" class="avatar"></video>
-          <!-- <img v-if="imageUrl" :src="imageUrl" > -->
-          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-        </el-upload>
-        <div class="tips">鍙兘涓婁紶mp4鏍煎紡锛屽缓璁笉瓒呰繃50M</div>
+        <div style="display: flex;">
+          <el-upload class="avatar-uploader" :action="uploadImgUrl" :show-file-list="false" accept=".mp4"
+            :data="{ folder: 'bike', }" :on-success="handleAvatarSuccess">
+            <video v-if="form.rentTipsVideo" :src="form.rentTipsVideo" class="avatar"></video>
+            <!-- <img v-if="imageUrl" :src="imageUrl" > -->
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+          <div class="tips">
+            <div>
+              <el-button type="text" style="color: red;" @click="form.rentTipsVideo = ''">鍒犻櫎</el-button>
+            </div>
+            <div>鍙兘涓婁紶mp4鏍煎紡锛屽缓璁笉瓒呰繃50M</div>
+          </div>
+        </div>
+        
+      </el-form-item>
+      <el-form-item label="绉熻祦椤荤煡">
+        <RichEditor :content="{ content: form.leaseNotice }" @edit="form.leaseNotice = $event"></RichEditor>
       </el-form-item>
       <el-form-item label="楠戣溅閫氱煡鍐呭">
         <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 8 }" v-model="form.rentNotice"
@@ -55,14 +79,27 @@
             placeholder="璇疯緭鍏ュ仠姝㈡湇鍔℃彁绀�"></el-input>
         </el-form-item>
         <el-form-item label="鍋滄鏈嶅姟鏃堕棿">
-          <el-time-picker placeholder="寮�濮嬫椂闂�" value-format="HH:mm" :picker-options="option" v-model="form.stopServeStarttime"></el-time-picker>
+          <!-- <el-time-picker placeholder="寮�濮嬫椂闂�" format='HH:mm' value-format="yyyy-MM-dd HH:mm:ss"
+            v-model="form.stopServeStarttime"></el-time-picker>
           鑷�
-          <el-time-picker placeholder="缁撴潫鏃堕棿" value-format="HH:mm" :picker-options="option" v-model="form.stopServeEndtime"></el-time-picker>
+          <el-time-picker placeholder="缁撴潫鏃堕棿" value-format="yyyy-MM-dd HH:mm:ss" format='HH:mm'
+            v-model="form.stopServeEndtime"></el-time-picker> -->
+            <el-date-picker
+              v-model="value1"
+              type="datetimerange"
+              @change="selectDate"
+              range-separator="鑷�"
+              start-placeholder="寮�濮嬫椂闂�"
+              end-placeholder="缁撴潫鏃堕棿"
+              format="yyyy-MM-dd HH:mm:ss"
+              value-format="yyyy-MM-dd HH:mm:ss"
+            ></el-date-picker>
           <div class="tips">鍋滄鏈嶅姟寮�濮嬫椂闂磋嚦缁撴潫鏃堕棿</div>
         </el-form-item>
       </template>
       <el-form-item label="">
-        <el-button type="primary" v-permissions="['system:dict:updateMiniProgrammeDTO']" @click="saveSetting">淇濆瓨閰嶇疆椤�</el-button>
+        <el-button type="primary" v-permissions="['system:dict:updateMiniProgrammeDTO']"
+          @click="saveSetting">淇濆瓨閰嶇疆椤�</el-button>
       </el-form-item>
     </el-form>
   </TableLayout>
@@ -71,19 +108,27 @@
 <script>
 import TableLayout from '@/layouts/TableLayout'
 import { getMiniProgrammeDTO, updateById } from '@/api/business/minproSetting'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage.vue'
+import RichEditor from '@/components/common/RichEditor.vue'
 export default {
   name: 'BaseParam',
-  components: { TableLayout },
+  components: { TableLayout, UploadAvatarImage, RichEditor },
   data() {
     return {
       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
       option: {
         format: 'HH:mm'
       },
+      uploadData: {folder: 'bike'},
+      leaseNoticeUrl: '',
+      isUploading: false,
+      value1: [],
       // 鎼滅储
       form: {
         businessEndtime: '',
         businessStarttime: '',
+        leaseNoticeUrl: '',
+        leaseNotice: '',
         freeRentTime: '',
         isStopServe: 0,
         projectName: '',
@@ -105,12 +150,25 @@
       .then(res => {
         console.log(res);
         this.form = res
+        this.value1 = [res.stopServeStarttime, res.stopServeEndtime]
       })
   },
   methods: {
     handleAvatarSuccess(res, file) {
       console.log(res.data.url);
       this.form.rentTipsVideo = res.data.url;
+    },
+    uploadOutSuccess(file) {
+      this.leaseNoticeUrl = file.imgurl;
+      this.form.leaseNoticeUrl = file.imgurlfull;
+    },
+    selectDate(v) {
+      this.form.stopServeStarttime = ''
+      this.form.stopServeEndtime = ''
+      if (v) {
+        this.form.stopServeStarttime = v[0]
+        this.form.stopServeEndtime = v[1]
+      }
     },
     // beforeAvatarUpload(file) {
     //   console.log(file.type);
@@ -136,7 +194,7 @@
 
 <style lang="scss" scoped>
 ::v-deep .el-form {
-  width: 800px;
+  width: 900px;
 }
 
 ::v-deep .table-content {
@@ -178,5 +236,9 @@
 
 .tips {
   color: #999;
+  display: flex;
+  justify-content: space-between;
+  flex-direction: column;
+  margin-left: 10px;
 }
 </style>
diff --git a/admin/src/views/business/mqttLog.vue b/admin/src/views/business/mqttLog.vue
new file mode 100644
index 0000000..d2bd622
--- /dev/null
+++ b/admin/src/views/business/mqttLog.vue
@@ -0,0 +1,130 @@
+<template>
+  <TableLayout :permissions="['business:mqttlog:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="绫诲瀷 0璁㈤槄 1鍙戝竷" prop="type">
+        <el-input v-model="searchForm.type" placeholder="璇疯緭鍏ョ被鍨� 0璁㈤槄 1鍙戝竷" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀹㈡埛绔紪鐮�" prop="clientid">
+        <el-input v-model="searchForm.clientid" placeholder="璇疯緭鍏ュ鎴风缂栫爜" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="涓婚" prop="topic">
+        <el-input v-model="searchForm.topic" placeholder="璇疯緭鍏ヤ富棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="娑堟伅鍐呭" prop="msg">
+        <el-input v-model="searchForm.msg" placeholder="璇疯緭鍏ユ秷鎭唴瀹�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缁撴灉 0鎴愬姛 1澶辫触" prop="result">
+        <el-input v-model="searchForm.result" placeholder="璇疯緭鍏ョ粨鏋� 0鎴愬姛 1澶辫触" @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:mqttlog:create']">
+        <li><el-button type="primary" @click="$refs.operaMqttLogWindow.open('鏂板缓绯荤粺琛屼负鎿嶄綔璁板綍琛�')" icon="el-icon-plus" v-permissions="['business:mqttlog:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷 0璁㈤槄 1鍙戝竷" min-width="100px"></el-table-column>
+        <el-table-column prop="clientid" label="瀹㈡埛绔紪鐮�" min-width="100px"></el-table-column>
+        <el-table-column prop="topic" label="涓婚" min-width="100px"></el-table-column>
+        <el-table-column prop="msg" label="娑堟伅鍐呭" min-width="100px"></el-table-column>
+        <el-table-column prop="result" label="缁撴灉 0鎴愬姛 1澶辫触" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:mqttlog:update', 'business:mqttlog:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaMqttLogWindow.open('缂栬緫绯荤粺琛屼负鎿嶄綔璁板綍琛�', row)" icon="el-icon-edit" v-permissions="['business:mqttlog:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:mqttlog:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaMqttLogWindow ref="operaMqttLogWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaMqttLogWindow from '@/components/business/OperaMqttLogWindow'
+export default {
+  name: 'MqttLog',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaMqttLogWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        type: '',
+        clientid: '',
+        topic: '',
+        msg: '',
+        result: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '绯荤粺琛屼负鎿嶄綔璁板綍琛�',
+      api: '/business/mqttLog',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/multifile.vue b/admin/src/views/business/multifile.vue
new file mode 100644
index 0000000..30b9f93
--- /dev/null
+++ b/admin/src/views/business/multifile.vue
@@ -0,0 +1,135 @@
+<template>
+  <TableLayout :permissions="['business:multifile:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏂囦欢鍚�" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ユ枃浠跺悕" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍏宠仈瀵硅薄缂栫爜" prop="objId">
+        <el-input v-model="searchForm.objId" placeholder="璇疯緭鍏ュ叧鑱斿璞$紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬" prop="type">
+        <el-input v-model="searchForm.type" placeholder="璇疯緭鍏ョ被鍨�0鍥剧墖 1瑙嗛 2鍏朵粬" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍏宠仈瀵硅薄绫诲瀷 0杞﹁締淇濅慨" prop="objType">
+        <el-input v-model="searchForm.objType" placeholder="璇疯緭鍏ュ叧鑱斿璞$被鍨� 0杞﹁締淇濅慨" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏂囦欢鍦板潃" prop="fileurl">
+        <el-input v-model="searchForm.fileurl" placeholder="璇疯緭鍏ユ枃浠跺湴鍧�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+        <el-input v-model="searchForm.sortnum" 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:multifile:create']">
+        <li><el-button type="primary" @click="$refs.operaMultifileWindow.open('鏂板缓闄勪欢淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:multifile:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="鏂囦欢鍚�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="objId" label="鍏宠仈瀵硅薄缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬" min-width="100px"></el-table-column>
+        <el-table-column prop="objType" label="鍏宠仈瀵硅薄绫诲瀷 0杞﹁締淇濅慨" min-width="100px"></el-table-column>
+        <el-table-column prop="fileurl" label="鏂囦欢鍦板潃" min-width="100px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:multifile:update', 'business:multifile:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaMultifileWindow.open('缂栬緫闄勪欢淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:multifile:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:multifile:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaMultifileWindow ref="operaMultifileWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaMultifileWindow from '@/components/business/OperaMultifileWindow'
+export default {
+  name: 'Multifile',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaMultifileWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        name: '',
+        info: '',
+        objId: '',
+        type: '',
+        objType: '',
+        fileurl: '',
+        sortnum: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '闄勪欢淇℃伅琛�',
+      api: '/business/multifile',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/onlinePayStatistics.vue b/admin/src/views/business/onlinePayStatistics.vue
index 59b6f30..37e6178 100644
--- a/admin/src/views/business/onlinePayStatistics.vue
+++ b/admin/src/views/business/onlinePayStatistics.vue
@@ -7,6 +7,7 @@
         <el-date-picker
           v-model="value1"
           type="daterange"
+          
           range-separator="鑷�"
           start-placeholder="寮�濮嬫棩鏈�"
           end-placeholder="缁撴潫鏃ユ湡"
@@ -54,13 +55,14 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import { fetchList } from '@/api/business/onlinePayStatistics'
+import { formatDateTime } from '@/utils/util'
 export default {
   name: 'PricingParam',
   extends: BaseTable,
   components: { TableLayout  },
   data () {
     return {
-      value1: [],
+      value1: [new Date(), new Date()],
       // 鎼滅储
       searchForm: {
         endDate: '',
@@ -69,7 +71,7 @@
     }
   },
   created () {
-    
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
   },
   methods: {
@@ -77,6 +79,7 @@
       this.searchForm.startDate = ''
       this.searchForm.endDate = ''
       this.value1 = []
+      this.$refs.searchForm.resetFields()
       this.search()
     },
     
diff --git a/admin/src/views/business/pricingDetail.vue b/admin/src/views/business/pricingDetail.vue
new file mode 100644
index 0000000..6c09ba4
--- /dev/null
+++ b/admin/src/views/business/pricingDetail.vue
@@ -0,0 +1,160 @@
+<template>
+  <TableLayout :permissions="['business:pricingdetail:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀹氫环鏂规缂栫爜(鍏宠仈price_param)" prop="pricePramId">
+        <el-input v-model="searchForm.pricePramId" placeholder="璇疯緭鍏ュ畾浠锋柟妗堢紪鐮�(鍏宠仈price_param)" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="杞﹁締绫诲瀷缂栫爜(鍏宠仈bike_types琛級" prop="bikeTypeId">
+        <el-input v-model="searchForm.bikeTypeId" placeholder="璇疯緭鍏ヨ溅杈嗙被鍨嬬紪鐮�(鍏宠仈bike_types琛級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ捣姝ユ椂闂达紙鍒嗛挓锛�" prop="baseTime">
+        <el-input v-model="searchForm.baseTime" placeholder="璇疯緭鍏ュ伐浣滄棩璧锋鏃堕棿锛堝垎閽燂級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ捣姝ヤ环鏍硷紙鍒嗭級" prop="basePrice">
+        <el-input v-model="searchForm.basePrice" placeholder="璇疯緭鍏ュ伐浣滄棩璧锋浠锋牸锛堝垎锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ秴鍑烘椂闂达紙鍒嗛挓锛�" prop="unitTime">
+        <el-input v-model="searchForm.unitTime" placeholder="璇疯緭鍏ュ伐浣滄棩瓒呭嚭鏃堕棿锛堝垎閽燂級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ヤ綔鏃ヨ秴鍑轰环鏍硷紙鍒嗭級" prop="unitPrice">
+        <el-input v-model="searchForm.unitPrice" placeholder="璇疯緭鍏ュ伐浣滄棩瓒呭嚭浠锋牸锛堝垎锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ捣姝ユ椂闂达紙鍒嗛挓锛�" prop="holidayBaseTime">
+        <el-input v-model="searchForm.holidayBaseTime" placeholder="璇疯緭鍏ヨ妭鍋囨棩璧锋鏃堕棿锛堝垎閽燂級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ捣姝ヤ环鏍硷紙鍒嗭級" prop="holidayBasePrice">
+        <el-input v-model="searchForm.holidayBasePrice" placeholder="璇疯緭鍏ヨ妭鍋囨棩璧锋浠锋牸锛堝垎锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ秴鍑烘椂闂达紙鍒嗛挓锛�" prop="holidayUnitTime">
+        <el-input v-model="searchForm.holidayUnitTime" placeholder="璇疯緭鍏ヨ妭鍋囨棩瓒呭嚭鏃堕棿锛堝垎閽燂級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鑺傚亣鏃ヨ秴鍑烘椂闂村崟浠凤紙鍒嗭級" prop="holidayUnitPrice">
+        <el-input v-model="searchForm.holidayUnitPrice" placeholder="璇疯緭鍏ヨ妭鍋囨棩瓒呭嚭鏃堕棿鍗曚环锛堝垎锛�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瑙勫垯鍚嶇О" prop="title">
+        <el-input v-model="searchForm.title" 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:pricingdetail:create']">
+        <li><el-button type="primary" @click="$refs.operaPricingDetailWindow.open('鏂板缓瀹氫环鏂规鏄庣粏閰嶇疆')" icon="el-icon-plus" v-permissions="['business:pricingdetail:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="pricePramId" label="瀹氫环鏂规缂栫爜(鍏宠仈price_param)" min-width="100px"></el-table-column>
+        <el-table-column prop="bikeTypeId" label="杞﹁締绫诲瀷缂栫爜(鍏宠仈bike_types琛級" min-width="100px"></el-table-column>
+        <el-table-column prop="baseTime" label="宸ヤ綔鏃ヨ捣姝ユ椂闂达紙鍒嗛挓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="basePrice" label="宸ヤ綔鏃ヨ捣姝ヤ环鏍硷紙鍒嗭級" min-width="100px"></el-table-column>
+        <el-table-column prop="unitTime" label="宸ヤ綔鏃ヨ秴鍑烘椂闂达紙鍒嗛挓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="unitPrice" label="宸ヤ綔鏃ヨ秴鍑轰环鏍硷紙鍒嗭級" min-width="100px"></el-table-column>
+        <el-table-column prop="holidayBaseTime" label="鑺傚亣鏃ヨ捣姝ユ椂闂达紙鍒嗛挓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="holidayBasePrice" label="鑺傚亣鏃ヨ捣姝ヤ环鏍硷紙鍒嗭級" min-width="100px"></el-table-column>
+        <el-table-column prop="holidayUnitTime" label="鑺傚亣鏃ヨ秴鍑烘椂闂达紙鍒嗛挓锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="holidayUnitPrice" label="鑺傚亣鏃ヨ秴鍑烘椂闂村崟浠凤紙鍒嗭級" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="title" label="瑙勫垯鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:pricingdetail:update', 'business:pricingdetail:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaPricingDetailWindow.open('缂栬緫瀹氫环鏂规鏄庣粏閰嶇疆', row)" icon="el-icon-edit" v-permissions="['business:pricingdetail:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:pricingdetail:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaPricingDetailWindow ref="operaPricingDetailWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaPricingDetailWindow from '@/components/business/OperaPricingDetailWindow'
+export default {
+  name: 'PricingDetail',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaPricingDetailWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        pricePramId: '',
+        bikeTypeId: '',
+        baseTime: '',
+        basePrice: '',
+        unitTime: '',
+        unitPrice: '',
+        holidayBaseTime: '',
+        holidayBasePrice: '',
+        holidayUnitTime: '',
+        holidayUnitPrice: '',
+        info: '',
+        title: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '瀹氫环鏂规鏄庣粏閰嶇疆',
+      api: '/business/pricingDetail',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/pricingParam.vue b/admin/src/views/business/pricingParam.vue
index 90d56b4..33fc19b 100644
--- a/admin/src/views/business/pricingParam.vue
+++ b/admin/src/views/business/pricingParam.vue
@@ -68,7 +68,7 @@
 import Pagination from '@/components/common/Pagination'
 import OperaPricingParamWindow from '@/components/business/OperaPricingParamWindow'
 import PriceConfiguration from '@/components/business/priceConfiguration'
-import { updateById } from '@/api/business/pricingParam'
+import { updateStatusById } from '@/api/business/pricingParam'
 export default {
   name: 'PricingParam',
   extends: BaseTable,
@@ -103,7 +103,7 @@
   },
   methods: {
     changeStatus(row) {
-      updateById(row)
+      updateStatusById(row)
         .then(() => {
           this.$tip.apiSuccess('鎴愬姛')
         })
diff --git a/admin/src/views/business/reductionReason.vue b/admin/src/views/business/reductionReason.vue
index 6210706..d3884bc 100644
--- a/admin/src/views/business/reductionReason.vue
+++ b/admin/src/views/business/reductionReason.vue
@@ -3,8 +3,8 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <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" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鍘熷洜" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ師鍥�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       
       <section>
diff --git a/admin/src/views/business/refund.vue b/admin/src/views/business/refund.vue
new file mode 100644
index 0000000..62ee386
--- /dev/null
+++ b/admin/src/views/business/refund.vue
@@ -0,0 +1,160 @@
+<template>
+  <TableLayout :permissions="['business:refund:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆剧紪鐮�" prop="code">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ラ��娆剧紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" prop="memberId">
+        <el-input v-model="searchForm.memberId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮侊紙鍏宠仈member琛級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗閲戦" prop="money">
+        <el-input v-model="searchForm.money" placeholder="璇疯緭鍏ヤ氦鏄撻噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵�� 0棰勯��娆� 1閫�娆惧け璐� 2閫�娆惧畬鎴�" prop="status">
+        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0棰勯��娆� 1閫�娆惧け璐� 2閫�娆惧畬鎴�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗棰勮鍗曞彿" prop="preOrderid">
+        <el-input v-model="searchForm.preOrderid" placeholder="璇疯緭鍏ヤ氦鏄撻璁㈠崟鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍦ㄧ嚎浜ゆ槗鍗曞彿" prop="onlineOrderid">
+        <el-input v-model="searchForm.onlineOrderid" placeholder="璇疯緭鍏ュ湪绾夸氦鏄撳崟鍙�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆炬柟寮� 0寰俊 1鏀粯瀹�" prop="payWay">
+        <el-input v-model="searchForm.payWay" placeholder="璇疯緭鍏ラ��娆炬柟寮� 0寰俊 1鏀粯瀹�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀹屾垚鏃堕棿" prop="doneDate">
+        <el-date-picker v-model="searchForm.doneDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ畬鎴愭椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="閫�娆剧被鍨� 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆�" prop="type">
+        <el-input v-model="searchForm.type" placeholder="璇疯緭鍏ラ��娆剧被鍨� 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆惧叧鑱旇鍗曠紪鐮�" prop="objId">
+        <el-input v-model="searchForm.objId" placeholder="璇疯緭鍏ラ��娆惧叧鑱旇鍗曠紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="閫�娆惧師鍥�" prop="reason">
+        <el-input v-model="searchForm.reason" 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:refund:create']">
+        <li><el-button type="primary" @click="$refs.operaRefundWindow.open('鏂板缓閫�娆句俊鎭〃')" icon="el-icon-plus" v-permissions="['business:refund:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="code" label="閫�娆剧紪鐮�" min-width="100px"></el-table-column>
+        <el-table-column prop="memberId" label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" min-width="100px"></el-table-column>
+        <el-table-column prop="money" label="浜ゆ槗閲戦" min-width="100px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵�� 0棰勯��娆� 1閫�娆惧け璐� 2閫�娆惧畬鎴�" min-width="100px"></el-table-column>
+        <el-table-column prop="preOrderid" label="浜ゆ槗棰勮鍗曞彿" min-width="100px"></el-table-column>
+        <el-table-column prop="onlineOrderid" label="鍦ㄧ嚎浜ゆ槗鍗曞彿" min-width="100px"></el-table-column>
+        <el-table-column prop="payWay" label="閫�娆炬柟寮� 0寰俊 1鏀粯瀹�" min-width="100px"></el-table-column>
+        <el-table-column prop="doneDate" label="瀹屾垚鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="閫�娆剧被鍨� 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆�" min-width="100px"></el-table-column>
+        <el-table-column prop="objId" label="閫�娆惧叧鑱旇鍗曠紪鐮�" min-width="100px"></el-table-column>
+        <el-table-column prop="reason" label="閫�娆惧師鍥�" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:refund:update', 'business:refund:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaRefundWindow.open('缂栬緫閫�娆句俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:refund:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:refund:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaRefundWindow ref="operaRefundWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaRefundWindow from '@/components/business/OperaRefundWindow'
+export default {
+  name: 'Refund',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaRefundWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        code: '',
+        memberId: '',
+        money: '',
+        status: '',
+        preOrderid: '',
+        onlineOrderid: '',
+        payWay: '',
+        doneDate: '',
+        type: '',
+        objId: '',
+        reason: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '閫�娆句俊鎭〃',
+      api: '/business/refund',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/rentSite.vue b/admin/src/views/business/rentSite.vue
index b2d619d..ce3fdb9 100644
--- a/admin/src/views/business/rentSite.vue
+++ b/admin/src/views/business/rentSite.vue
@@ -28,15 +28,11 @@
         <el-table-column prop="name" label="绉熻溅鐐瑰悕绉�" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="longitude" label="缁忕含搴�" min-width="100px" align="center">
           <template slot-scope="{row}">
-            {{ `${row.longitude}锛�${row.latitude}`}}
+            {{ `${row.latitude}锛�${row.longitude}`}}
           </template>
         </el-table-column>
-        <!-- <el-table-column prop="latitude" label="绾害" min-width="100px"></el-table-column> -->
         <el-table-column prop="addr" label="鍦板潃" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px" align="center"></el-table-column>
-        
-        <!-- <el-table-column prop="status" label="鐘舵�� 0鍚敤 1绂佺敤" min-width="100px"></el-table-column> -->
-        <!-- <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column> -->
         <el-table-column
           v-if="containPermissions(['business:rentsite:update', 'business:rentsite:delete'])"
           label="鎿嶄綔"
diff --git a/admin/src/views/business/returnReason.vue b/admin/src/views/business/returnReason.vue
index 38af376..58c2fad 100644
--- a/admin/src/views/business/returnReason.vue
+++ b/admin/src/views/business/returnReason.vue
@@ -3,8 +3,8 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <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" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鍘熷洜" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ師鍥�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       
       <section>
diff --git a/admin/src/views/business/transactions.vue b/admin/src/views/business/transactions.vue
new file mode 100644
index 0000000..9328e77
--- /dev/null
+++ b/admin/src/views/business/transactions.vue
@@ -0,0 +1,165 @@
+<template>
+  <TableLayout :permissions="['business:transactions:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="缂栫爜" prop="id">
+        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
+        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="鍒涘缓浜�" prop="creator">
+        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="缂栬緫鏃堕棿" prop="editDate">
+        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ紪杈戞椂闂�" @change="search"/>
+      </el-form-item>
+      <el-form-item label="缂栬緫浜�" prop="editor">
+        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ョ紪杈戜汉" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="isdeleted">
+        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="info">
+        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璁㈠崟缂栫爜锛堝叧鑱攇oodsorder)" prop="orderId">
+        <el-input v-model="searchForm.orderId" placeholder="璇疯緭鍏ヨ鍗曠紪鐮侊紙鍏宠仈goodsorder)" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" prop="memberId">
+        <el-input v-model="searchForm.memberId" placeholder="璇疯緭鍏ョ敤鎴风紪鐮侊紙鍏宠仈member琛級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗閲戦" prop="money">
+        <el-input v-model="searchForm.money" placeholder="璇疯緭鍏ヤ氦鏄撻噾棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾 1缁撶畻瀹為檯娑堣垂 2缁撶畻閫�娆� 3骞冲彴閫�娆�" prop="type">
+        <el-input v-model="searchForm.type" placeholder="璇疯緭鍏ヤ氦鏄撶被鍨� 0绉熻溅鎶奸噾 1缁撶畻瀹為檯娑堣垂 2缁撶畻閫�娆� 3骞冲彴閫�娆�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璇︾粏鍦板潃" prop="preOrderid">
+        <el-input v-model="searchForm.preOrderid" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璇︾粏鍦板潃" prop="onlineOrderid">
+        <el-input v-model="searchForm.onlineOrderid" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗瀹屾垚鏃堕棿" prop="doneDate">
+        <el-input v-model="searchForm.doneDate" placeholder="璇疯緭鍏ヤ氦鏄撳畬鎴愭椂闂�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鏍囬" prop="title">
+        <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ヤ氦鏄撴爣棰�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鍐呭" prop="content">
+        <el-input v-model="searchForm.content" placeholder="璇疯緭鍏ヤ氦鏄撳唴瀹�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛褰撳墠浣欓(鍒嗭級" prop="balance">
+        <el-input v-model="searchForm.balance" placeholder="璇疯緭鍏ョ敤鎴峰綋鍓嶄綑棰�(鍒嗭級" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鍏宠仈瀵硅薄绫诲瀷 0璁㈠崟 1閫�娆惧崟" prop="objType">
+        <el-input v-model="searchForm.objType" placeholder="璇疯緭鍏ヤ氦鏄撳叧鑱斿璞$被鍨� 0璁㈠崟 1閫�娆惧崟" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="浜ゆ槗鍏宠仈瀵硅薄缂栫爜" prop="objId">
+        <el-input v-model="searchForm.objId" 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:transactions:create']">
+        <li><el-button type="primary" @click="$refs.operaTransactionsWindow.open('鏂板缓浜ゆ槗娴佹按琛�')" icon="el-icon-plus" v-permissions="['business:transactions:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="id" label="缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="缂栬緫鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="editor" label="缂栬緫浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="orderId" label="璁㈠崟缂栫爜锛堝叧鑱攇oodsorder)" min-width="100px"></el-table-column>
+        <el-table-column prop="memberId" label="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級" min-width="100px"></el-table-column>
+        <el-table-column prop="money" label="浜ゆ槗閲戦" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="浜ゆ槗绫诲瀷 0绉熻溅鎶奸噾 1缁撶畻瀹為檯娑堣垂 2缁撶畻閫�娆� 3骞冲彴閫�娆�" min-width="100px"></el-table-column>
+        <el-table-column prop="preOrderid" label="璇︾粏鍦板潃" min-width="100px"></el-table-column>
+        <el-table-column prop="onlineOrderid" label="璇︾粏鍦板潃" min-width="100px"></el-table-column>
+        <el-table-column prop="doneDate" label="浜ゆ槗瀹屾垚鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="title" label="浜ゆ槗鏍囬" min-width="100px"></el-table-column>
+        <el-table-column prop="content" label="浜ゆ槗鍐呭" min-width="100px"></el-table-column>
+        <el-table-column prop="balance" label="鐢ㄦ埛褰撳墠浣欓(鍒嗭級" min-width="100px"></el-table-column>
+        <el-table-column prop="objType" label="浜ゆ槗鍏宠仈瀵硅薄绫诲瀷 0璁㈠崟 1閫�娆惧崟" min-width="100px"></el-table-column>
+        <el-table-column prop="objId" label="浜ゆ槗鍏宠仈瀵硅薄缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:transactions:update', 'business:transactions:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaTransactionsWindow.open('缂栬緫浜ゆ槗娴佹按琛�', row)" icon="el-icon-edit" v-permissions="['business:transactions:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:transactions:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaTransactionsWindow ref="operaTransactionsWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaTransactionsWindow from '@/components/business/OperaTransactionsWindow'
+export default {
+  name: 'Transactions',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaTransactionsWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        createDate: '',
+        creator: '',
+        editDate: '',
+        editor: '',
+        isdeleted: '',
+        info: '',
+        orderId: '',
+        memberId: '',
+        money: '',
+        type: '',
+        preOrderid: '',
+        onlineOrderid: '',
+        doneDate: '',
+        title: '',
+        content: '',
+        balance: '',
+        objType: '',
+        objId: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '浜ゆ槗娴佹按琛�',
+      api: '/business/transactions',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/admin/src/views/business/wxBill.vue b/admin/src/views/business/wxBill.vue
index 3e35f4f..983a1ca 100644
--- a/admin/src/views/business/wxBill.vue
+++ b/admin/src/views/business/wxBill.vue
@@ -88,13 +88,14 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import { formatDateTime } from '@/utils/util'
 export default {
   name: 'WxBill',
   extends: BaseTable,
   components: { TableLayout, Pagination },
   data () {
     return {
-      value1: [],
+      value1: [new Date(), new Date()],
       // 鎼滅储
       searchForm: {
         endDate: '',
@@ -112,6 +113,7 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
   },
   methods: {
@@ -119,6 +121,7 @@
       this.searchForm.startDate = ''
       this.searchForm.endDate = ''
       this.value1 = []
+      this.$refs.searchForm.resetFields()
       this.search()
     },
     selectDate(v) {
diff --git a/admin/src/views/business/wxBillDetail.vue b/admin/src/views/business/wxBillDetail.vue
index cca6660..f152f2a 100644
--- a/admin/src/views/business/wxBillDetail.vue
+++ b/admin/src/views/business/wxBillDetail.vue
@@ -66,13 +66,14 @@
 import TableLayout from '@/layouts/TableLayout'
 import { fetchList } from '@/api/business/wxBillDetail'
 import BillDetailWindow from '@/components/business/BillDetailWindow'
+import { formatDateTime } from '@/utils/util'
 export default {
   name: 'WxBillDetail',
   extends: BaseTable,
   components: { TableLayout, BillDetailWindow },
   data () {
     return {
-      value1: [],
+      value1: [new Date(), new Date()],
       // 鎼滅储
       searchForm: {
         endDate: '',
@@ -87,6 +88,7 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00'
     this.search()
   },
   methods: {
@@ -94,6 +96,7 @@
       this.searchForm.startDate = ''
       this.searchForm.endDate = ''
       this.value1 = []
+      this.$refs.searchForm.resetFields()
       this.search()
     },
     
diff --git a/server/platform/src/main/java/com/doumee/api/business/PricingParamController.java b/server/platform/src/main/java/com/doumee/api/business/PricingParamController.java
index f45e51b..d3994aa 100644
--- a/server/platform/src/main/java/com/doumee/api/business/PricingParamController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/PricingParamController.java
@@ -67,6 +67,14 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鏍规嵁ID淇敼鐘舵��")
+    @PostMapping("/updateStatusById")
+    @RequiresPermissions("business:pricingparam:update")
+    public ApiResponse updateStatus(@RequestBody PricingParam pricingParam){
+        pricingParamService.updateStatus(pricingParam);
+        return ApiResponse.success(null);
+    }
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @RequiresPermissions("business:pricingparam:query")
diff --git a/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java b/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
index 5392e70..2b2e7f1 100644
--- a/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
+++ b/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -101,6 +101,7 @@
     @RequiresPermissions("system:user:update")
     public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody CreateSystemUserDTO systemUser) {
         systemUser.setUpdateUser(this.getLoginUser().getId());
+        systemUser.setUsername(systemUser.getMobile());
         systemUserBiz.updateById(systemUser);
         return ApiResponse.success(null);
     }
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index 530fea1..a3f1165 100644
--- a/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -106,10 +106,15 @@
     @Override
     @Transactional
     public void create(CreateSystemUserDTO systemUser) {
+
+        if (StringUtils.isBlank(systemUser.getMobile()) || systemUser.getMobile().length() < 6){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鍒涘缓鐢ㄦ埛鍙傛暟閿欒");
+        }
         // 楠岃瘉鐢ㄦ埛鍚�
         SystemUser queryUserDto = new SystemUser();
         queryUserDto.setUsername(systemUser.getUsername());
         queryUserDto.setDeleted(Constants.ZERO);
+        queryUserDto.setUsername(systemUser.getMobile());
         SystemUser user = systemUserService.findOne(queryUserDto);
         if (user != null) {
             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鐢ㄦ埛鍚嶅凡瀛樺湪");
@@ -128,9 +133,10 @@
         // 鐢熸垚瀵嗙爜鐩�
         String salt = RandomStringUtils.randomAlphabetic(6);
         // 鐢熸垚瀵嗙爜
-        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getPassword(), salt));
+        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getMobile().substring(systemUser.getMobile().length() - 6), salt));
         systemUser.setSalt(salt);
         systemUser.setId(UUID.randomUUID().toString());
+        systemUser.setUsername(systemUser.getMobile());
         // 鍒涘缓鐢ㄦ埛璁板綍
         systemUserService.create(systemUser);
         // 璁剧疆閮ㄩ棬
@@ -141,7 +147,7 @@
             systemDepartmentUser.setOperaUser(systemUser.getCreateUser());
             systemDepartmentUser.setOperaTime(new Date());
             systemDepartmentUserService.create(systemDepartmentUser);
-        }    
+        }
         // 璁剧疆宀椾綅
         if (systemUser.getPositionIds() != null && systemUser.getPositionIds().size() > 0) {
             for (Integer positionId : systemUser.getPositionIds()) {
diff --git a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
index 3004abe..0507d29 100644
--- a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -3018,7 +3018,7 @@
         long createTime =begin.getTime();//鑾峰彇鍒涘缓鏃堕棿鐨勬椂闂存埑
         long currentTime =Objects.isNull(end)?System.currentTimeMillis():end.getTime();//鑾峰彇褰撳墠鏃堕棿鐨勬椂闂存埑
         long diff=(currentTime-createTime)/1000/60;//鑾峰彇涓や釜鏃堕棿鐩稿樊鐨勫垎閽�
-        return (int)diff;
+        return (int)diff + 1 ;
     }
 
 
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/ActionLog.java b/server/services/src/main/java/com/doumee/dao/business/model/ActionLog.java
index 8e2d761..d6a0892 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/ActionLog.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/ActionLog.java
@@ -35,6 +35,12 @@
     @ExcelColumn(name="鍒涘缓浜�",index = 7,width = 10,align = HorizontalAlignment.CENTER)
     private String creator;
 
+
+    @ApiModelProperty(value = "鍒涘缓浜哄悕绉�")
+    @ExcelColumn(name="鍒涘缓浜哄悕绉�",index = 7,width = 10,align = HorizontalAlignment.CENTER)
+    @TableField(exist = false)
+    private String creatorName;
+
     @ApiModelProperty(value = "缂栬緫鏃堕棿")
     //@JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
@@ -58,6 +64,7 @@
     @ExcelColumn(name="绫诲瀷 " ,valueMapping = "0=寮哄埗杩樿溅;1=楠戣鏃堕暱淇敼;",index = 5,width = 10,align = HorizontalAlignment.CENTER)
     private Integer type;
     @ApiModelProperty(value = "绫诲瀷闆嗗悎", example = "1")
+    @TableField(exist = false)
     private List<Integer> typeList;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java b/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
index 1571c57..379c34f 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -128,4 +128,13 @@
     @TableField(exist = false)
     @ExcelColumn(name="閫�娆剧粨绠楁椂闂�",width = 10,align = HorizontalAlignment.CENTER)
     private Date refundDate;
+
+    @ApiModelProperty(value = "鏈�杩戦獞琛岀姸鎬�")
+    @TableField(exist = false)
+    private Integer  memberRidesStatus;
+
+
+    @ApiModelProperty(value = "鏄惁缁撶畻 0 鏈粨绠� 1宸茬粨绠�")
+    @TableField(exist = false)
+    private Integer closeStatus;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index b21c16e..1164937 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -46,7 +46,7 @@
 
     @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
     @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
-    @TableLogic
+
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java b/server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java
index 8d508cd..a39fb50 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java
@@ -37,7 +37,6 @@
     private String editor;
 
     @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
-    @TableLogic
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/response/BikeLogDTO.java b/server/services/src/main/java/com/doumee/dao/business/web/response/BikeLogDTO.java
index 3912cdc..59f9e16 100644
--- a/server/services/src/main/java/com/doumee/dao/business/web/response/BikeLogDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/business/web/response/BikeLogDTO.java
@@ -13,6 +13,9 @@
 @Data
 public class BikeLogDTO {
 
+    @ApiModelProperty(value = "缂栫爜")
+    private String id;
+
     @ApiModelProperty(value = "鐢ㄦ埛OpenID")
     @ExcelColumn(name="鐢ㄦ埛",index = 1,width = 10,align = HorizontalAlignment.CENTER)
     private String openid;
@@ -34,14 +37,14 @@
     private String rentLockId;
 
     @ApiModelProperty(value = "楠戣鏃堕暱")
-    @ExcelColumn(name="楠戣鏃堕暱",index = 8,width = 10,align = HorizontalAlignment.CENTER)
+    @ExcelColumn(name="鍊熷嚭鏃堕暱",index = 8,width = 10,align = HorizontalAlignment.CENTER)
     private Integer rideTime;
     @ApiModelProperty(value = "璁¤垂鏃堕暱")
 //    @ExcelColumn(name="璁¤垂鏃堕暱",index = 8,width = 10,align = HorizontalAlignment.CENTER)
     private Integer duration;
 
     @ApiModelProperty(value = "鍊熷嚭鏃堕棿")
-    @ExcelColumn(name="鍊熷嚭鏃堕棿",index = 9,width = 10,align = HorizontalAlignment.CENTER)
+    @ExcelColumn(name="鍊熷嚭鏃堕棿",index = 9,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date rentDate;
 
     @ApiModelProperty(value = "杩樿溅绔欑偣")
@@ -53,6 +56,14 @@
     private String backLockId;
 
     @ApiModelProperty(value = "杩樿溅鏃堕棿")
-    @ExcelColumn(name="杩樿溅鏃堕棿",index = 14,width = 10,align = HorizontalAlignment.CENTER)
+    @ExcelColumn(name="褰掕繕鏃堕棿",index = 14,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date backDate;
+
+    @ApiModelProperty(value = "鐘舵�� 0璇锋眰寮�閿佷腑 1楠戣涓� 2宸茶繕杞�  3寮�閿佸け璐�")
+    @ExcelColumn(name="鐘舵�� ", valueMapping = "0=璇锋眰寮�閿佷腑;1=楠戣涓�;2=宸茶繕杞�;3=寮�閿佸け璐�;" ,index = 5,width = 10,align = HorizontalAlignment.CENTER)
+    private Integer status;
+
+    @ApiModelProperty(value = "缁撶畻鐘舵��")
+    @ExcelColumn(name="缁撶畻鐘舵�� ", valueMapping = "0=鏈粨绠�;1=宸茬粨绠�;" ,index = 4,width = 10,align = HorizontalAlignment.CENTER)
+    private Integer closeStatus;
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/PricingParamService.java b/server/services/src/main/java/com/doumee/service/business/PricingParamService.java
index a1658a6..685480a 100644
--- a/server/services/src/main/java/com/doumee/service/business/PricingParamService.java
+++ b/server/services/src/main/java/com/doumee/service/business/PricingParamService.java
@@ -48,6 +48,8 @@
      */
     void update(PricingParam pricingParam);
 
+    void updateStatus(PricingParam pricingParam);
+
     void updateById(PricingParam pricingParam);
 
     /**
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/ActionLogServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/ActionLogServiceImpl.java
index b55f6d9..7bf4191 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/ActionLogServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/ActionLogServiceImpl.java
@@ -96,7 +96,7 @@
         QueryWrapper<ActionLog> wrapper = new QueryWrapper<>(actionLog);
         return actionLogMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<ActionLog> findPage(PageWrap<ActionLog> pageWrap) {
 
@@ -136,10 +136,11 @@
         queryWrapper.le(pageWrap.getModel().getEndDate()!=null, ActionLog::getCreateDate,pageWrap.getModel().getEndDate());
         queryWrapper.eq(pageWrap.getModel().getCreator()!=null, ActionLog::getCreator,pageWrap.getModel().getCreator());
         queryWrapper.in(pageWrap.getModel().getTypeList()!=null && pageWrap.getModel().getTypeList().size()>0, ActionLog::getType,pageWrap.getModel().getTypeList());
-        queryWrapper.selectAs(ActionLog::getCreateDate,ActionLog::getCreateDate)
-                .selectAs(ActionLog::getActInfo,ActionLog::getActInfo)
-                .selectAs(ActionLog::getActReason,ActionLog::getActReason)
-                .selectAs(SystemUser::getNickname,ActionLog::getCreator)
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getBikeCode()),ActionLog::getBeforeContent,"%"+pageWrap.getModel().getBikeCode()+"%");
+        queryWrapper.eq(ActionLog::getObjType,Constants.ActionLogObjType.memberrides);
+        queryWrapper
+                .selectAll(ActionLog.class)
+                .selectAs(SystemUser::getRealname,ActionLog::getCreatorName)
                 .selectAs(Member::getOpenid,ActionLog::getOpenid)
                 .selectAs(MemberRides::getBikeCode,ActionLog::getBikeCode)
                 .selectAs(MemberRides::getRentSiteId,ActionLog::getRentSiteId)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/AdServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/AdServiceImpl.java
index f122600..07648d9 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/AdServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/AdServiceImpl.java
@@ -17,6 +17,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 骞垮憡淇℃伅琛⊿ervice瀹炵幇
@@ -34,6 +35,8 @@
 
     @Override
     public String create(Ad ad) {
+        ad.setIsdeleted(Constants.ZERO);
+        ad.setStatus(Constants.ZERO);
         adMapper.insert(ad);
         return ad.getId();
     }
@@ -64,11 +67,11 @@
                 .eq(Ad::getId,ad.getId())
                 .set(Ad::getEditor,ad.getEditor())
                 .set(Ad::getEditDate,ad.getEditDate())
-                .set(Ad::getName,ad.getName())
-                .set(Ad::getImgurl,ad.getImgurl())
+                .set(Objects.nonNull(ad.getName()),Ad::getName,ad.getName())
+                .set(Objects.nonNull(ad.getImgurl()),Ad::getImgurl,ad.getImgurl())
                 .set(Ad::getSortnum,ad.getSortnum())
-                .set(Ad::getContent,ad.getContent())
-                .set(Ad::getStatus,ad.getStatus());
+                .set(Objects.nonNull(ad.getContent()),Ad::getContent,ad.getContent())
+                .set(Objects.nonNull(ad.getStatus()),Ad::getStatus,ad.getStatus());
         adMapper.update(null,wrapper);
     }
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java
index 9ed224b..0c6eb9d 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java
@@ -116,11 +116,10 @@
         MPJLambdaWrapper<BikeRepair> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
         queryWrapper.leftJoin(Member.class,Member::getId,BikeRepair::getMemberId)
-                    .leftJoin(Bikes.class,Bikes::getCode,BikeRepair::getBinkeId)
                     .leftJoin(BaseParam.class,BaseParam::getId,BikeRepair::getTypeId);
         queryWrapper.selectAll(BikeRepair.class)
                     .selectAs(Member::getOpenid,BikeRepairDTO::getOpenid)
-                    .selectAs(Bikes::getCode,BikeRepairDTO::getBikeCode)
+                    .selectAs(BikeRepair::getBinkeId,BikeRepairDTO::getBikeCode)
                     .selectAs(BaseParam::getName,BikeRepairDTO::getBikeTypeName);
         queryWrapper.like(StringUtils.isNotEmpty(pageWrap.getModel().getOpenid()),Member::getOpenid,pageWrap.getModel().getOpenid())
                     .like(StringUtils.isNotEmpty(pageWrap.getModel().getBikeCode()),Bikes::getCode,pageWrap.getModel().getBikeCode())
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index 69cb907..95ab98a 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -210,6 +210,7 @@
         if (Objects.nonNull(model.getEndDate())){
             queryWrapper.le( Goodsorder::getPayDate, Utils.Date.getEnd(model.getEndDate()));
         }
+
         queryWrapper.eq(model.getPayStatus() !=null,Goodsorder::getPayStatus,model.getPayStatus());
         queryWrapper.like(model.getCode() !=null,Goodsorder::getCode,model.getCode());
         queryWrapper.like(model.getId() !=null,Goodsorder::getId,model.getId());
@@ -227,6 +228,13 @@
     public PageData<Goodsorder> findPage(PageWrap<Goodsorder> pageWrap) {
         IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<Goodsorder> queryWrapper = initQueryParamByModel(pageWrap.getModel());
+        queryWrapper.select("(select  er.status from member_rides  er  where er.ordre_id=t.id order by er.create_date limit 1) as memberRidesStatus");
+        if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ZERO)){
+            queryWrapper.ne(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey());
+        }
+        if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ONE)){
+            queryWrapper.eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey());
+        }
         IPage<Goodsorder> goodsorderIPage = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper);
         if (!CollectionUtils.isEmpty(goodsorderIPage.getRecords())){
             goodsorderIPage.getRecords().forEach(s->{
@@ -494,7 +502,8 @@
         wrapper.eq(MemberRides::getOrdreId,id);
         wrapper.selectAll(MemberRides.class).selectAs(BaseParam::getName, MemberRides::getParamName);
         wrapper.leftJoin(BaseParam.class, BaseParam::getId, MemberRides::getParamId);
-        wrapper.orderByDesc(BaseParam::getSortnum);//鍙栨渶楂樿溅鍨嬩綔涓鸿浠锋柟妗�
+        wrapper.orderByDesc(BaseParam::getSortnum);
+        //鍙栨渶楂樿溅鍨嬩綔涓鸿浠锋柟妗�
         //鏌ヨ鎵�鏈夐獞琛岃褰�
         List<MemberRides> memberRides = memberRidesJoinMapper.selectList(wrapper);
         return memberRides;
@@ -518,12 +527,13 @@
         wrapper.select("sum(money) as money").last(" limit 1");
         Refund total = refundMapper.selectOne(wrapper);
         BigDecimal refundMoney = total == null?new BigDecimal(0):Constants.formatDecimalNum(total.getMoney());
-        BigDecimal canBalance =Constants.formatDecimalNum(goodsorder.getMoney()).subtract(money);
+        //鍙��鍓╀綑 鍗曚綅鍏�
+        BigDecimal canBalance =Constants.translateMoney(Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refundMoney));
         if(canBalance.compareTo(money) > Constants.ZERO){
             RefundDTO refundDTO = new RefundDTO();
             refundDTO.setOrderId(orderId);
             refundDTO.setCanBalance(canBalance);
-            refundDTO.setRefundAmount(money);
+            refundDTO.setRefundAmount(money.multiply(new BigDecimal(100)));
             refundDTO.setTotalAmount(goodsorder.getMoney());
             refundDTO.setMemberId(goodsorder.getMemberId());
             refundDTO.setCreator(principal.getId());
@@ -531,7 +541,7 @@
             refundDTO.setType(Constants.REFUND_TYPE.BACK.getKey());
             Refund refund = wxMiniUtilService.wxRefund(refundDTO);
         }else {
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝閫�娆鹃噾棰濅笉鍏佽瓒呰繃"+canBalance);
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝閫�娆鹃噾棰濅笉鍏佽瓒呰繃"+canBalance+"鍏�");
         }
     }
 
@@ -554,7 +564,9 @@
         goodsorderCanBanlanceDTO.setCloseMoney(Constants.translateMoney(goodsorder.getCloseMoney()));
         BigDecimal reduce =  total!=null?Constants.formatDecimalNum(total.getMoney()):new BigDecimal(0);
         goodsorderCanBanlanceDTO.setHasRefundMoney(Constants.translateMoney(reduce));
-        goodsorderCanBanlanceDTO.setCanBanlanceMoney(Constants.translateMoney(goodsorder.getMoney()).subtract(goodsorderCanBanlanceDTO.getHasRefundMoney()));
+
+        BigDecimal subtract = Constants.translateMoney(goodsorder.getMoney()).subtract(goodsorderCanBanlanceDTO.getCloseMoney()).subtract(goodsorderCanBanlanceDTO.getHasRefundMoney());
+        goodsorderCanBanlanceDTO.setCanBanlanceMoney(subtract.compareTo(new BigDecimal("0")) > 0 ? subtract : new BigDecimal("0"));
         return goodsorderCanBanlanceDTO;
     }
 
@@ -617,7 +629,9 @@
         if(goodsorder ==null){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        List<MemberRides> memberRides = getMemberRidesForClose(id);
+
+        List<MemberRides> memberRides = memberRidesJoinMapper.selectList(new QueryWrapper<MemberRides>()
+                .lambda().eq(MemberRides::getOrdreId,id).orderByDesc(MemberRides::getCreateDate));
         if (!CollectionUtils.isEmpty(memberRides)){
             //棰勮缁撶畻浠锋牸鍜岃绠楁椂闀�
             int freeTime = 0;
@@ -742,7 +756,7 @@
      */
     @Override
     public Boolean checkTemporaryStop(){
-        if(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.IS_STOP_SERVE).getCode().equals(Constants.ONE)){
+        if(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.IS_STOP_SERVE).getCode().equals(Constants.ONE.toString())){
             String stopServeStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_STARTTIME).getCode();
             String stopServeEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_ENDTIME).getCode();
             //鏌ヨ褰撳墠鏃堕棿鏄惁鍦ㄥ仠姝腑
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
index 6aabdb9..2ed0440 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -357,7 +357,8 @@
         Integer freeRentTime = Integer.valueOf(collect.get(Constants.FREE_RENT_TIME).getCode());
         Integer rideTime = DateUtil.betweenMin(model.getRentDate(), update.getBackDate());
         //璁$畻楠戣璁¤垂鏃堕暱
-        update.setDuration( freeRentTime > 0 ? rideTime - freeRentTime : rideTime);
+        update.setDuration( rideTime > freeRentTime  ? rideTime : 0 );
+        //update.setDuration( freeRentTime > 0 ? rideTime - freeRentTime : rideTime);
         memberRidesMapper.updateById(update);
         //淇敼鍓�
         String beforeContent = JSONObject.toJSONString(model);
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/PricingDetailServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/PricingDetailServiceImpl.java
index 4d0f278..300ce2f 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/PricingDetailServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/PricingDetailServiceImpl.java
@@ -93,7 +93,7 @@
     public static  String getRoleNameByParam(BigDecimal basePrice, Integer baseTime, BigDecimal unitPrice, Integer unitTime) {
         String title = "璁¤垂瑙勫垯锛�";
         if(baseTime < 0){
-            title = Constants.translateMoney(basePrice).doubleValue()+"鍏冪晠楠戜竴鏁村ぉ";
+            title = basePrice.doubleValue()+"鍏冪晠楠戜竴鏁村ぉ";
         }else {
             title = "璧锋";
             int time = baseTime / 60;
@@ -104,8 +104,8 @@
             if(min >0){
                 title += min+"鍒嗛挓";
             }
-            title += Constants.translateMoney(unitPrice).doubleValue()
-                    +"鍏冿紝瓒呰繃鍚�"+Constants.translateMoney(basePrice).doubleValue()+"鍏�/"
+            title += basePrice.doubleValue()
+                    +"鍏冿紝瓒呰繃鍚�"+unitPrice.doubleValue()+"鍏�/"
                     +unitTime+"鍒嗛挓";
         }
         return  title;
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/PricingParamServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/PricingParamServiceImpl.java
index 9e09b2c..53664f0 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/PricingParamServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/PricingParamServiceImpl.java
@@ -1,11 +1,17 @@
 package com.doumee.service.business.impl;
 
 import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.BaseParamMapper;
+import com.doumee.dao.business.PricingDetailMapper;
 import com.doumee.dao.business.PricingParamMapper;
+import com.doumee.dao.business.model.BaseParam;
+import com.doumee.dao.business.model.PricingDetail;
 import com.doumee.dao.business.model.PricingParam;
 import com.doumee.service.business.PricingParamService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -19,6 +25,8 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 瀹氫环鏂规閰嶇疆Service瀹炵幇
@@ -30,6 +38,12 @@
 
     @Autowired
     private PricingParamMapper pricingParamMapper;
+
+    @Autowired
+    private PricingDetailMapper pricingDetailMapper;
+
+    @Autowired
+    private BaseParamMapper baseParamMapper;
 
     @Override
     public String create(PricingParam pricingParam) {
@@ -45,7 +59,7 @@
         insert.setStartDate(pricingParam.getStartDate());
         insert.setEndDate(pricingParam.getEndDate());
         insert.setSortnum(pricingParam.getSortnum());
-        insert.setStatus(Constants.ZERO);
+        insert.setStatus(Constants.ONE);
         insert.setInfo(pricingParam.getInfo());
         pricingParamMapper.insert(insert);
         return insert.getId();
@@ -79,13 +93,57 @@
                 .eq(PricingParam::getId,pricingParam.getId())
                 .set(PricingParam::getEditor,principal.getId())
                 .set(PricingParam::getName,pricingParam.getName())
-                .set(PricingParam::getStatus,pricingParam.getStatus())
+//                .set(PricingParam::getStatus,pricingParam.getStatus())
                 .set(PricingParam::getStartDate,pricingParam.getStartDate())
                 .set(PricingParam::getEndDate,pricingParam.getEndDate())
                 .set(PricingParam::getSortnum,pricingParam.getSortnum());
         pricingParamMapper.update(null,wrapper);
     }
 
+    @Override
+    public void updateStatus(PricingParam pricingParam) {
+
+        if (Objects.nonNull(pricingParam.getStatus()) && pricingParam.getStatus().equals(Constants.ZERO)){
+            QueryWrapper<PricingDetail> wrapper = new QueryWrapper<>();
+            wrapper.lambda()
+                    .eq(PricingDetail::getIsdeleted,Constants.ZERO)
+                    .eq(PricingDetail::getPricePramId,pricingParam.getId());
+            List<PricingDetail> pricingDetails = pricingDetailMapper.selectList(wrapper);
+            QueryWrapper<BaseParam> baseParamQuery = new QueryWrapper<>();
+            baseParamQuery.lambda()
+                            .eq(BaseParam::getIsdeleted,Constants.ZERO)
+                            .eq(BaseParam::getType,Constants.THREE);
+            List<BaseParam> baseParams = baseParamMapper.selectList(baseParamQuery);
+            if (CollectionUtils.isEmpty(pricingDetails)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇ュ畾浠锋柟妗堜笅娌℃湁閰嶇疆浠锋牸");
+            }
+            List<String> collect = pricingDetails.stream().map(s -> s.getBikeTypeId()).collect(Collectors.toList());
+            boolean b = baseParams.stream().map(s -> s.getId()).anyMatch(s -> collect.contains(s));
+
+            if (b){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇ュ畾浠锋柟妗堜笅娌℃湁閰嶇疆瀹屾暣");
+            }
+            PricingParam pricingParam1 = new PricingParam();
+            pricingParam1.setId(pricingParam.getId());
+            pricingParam1.setStatus(pricingParam.getStatus());
+            pricingParamMapper.updateById(pricingParam1);
+        }else if (Objects.nonNull(pricingParam.getStatus()) && pricingParam.getStatus().equals(Constants.ONE)){
+
+            QueryWrapper<PricingParam> wrapper = new QueryWrapper<>();
+            wrapper.lambda()
+                    .eq(PricingParam::getIsdeleted,Constants.ZERO)
+                    .eq(PricingParam::getStatus,Constants.ZERO);
+            Integer integer = pricingParamMapper.selectCount(wrapper);
+            if (integer <= 1 ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇ュ畾浠锋柟妗堝繀椤婚厤缃�");
+            }
+            PricingParam pricingParam1 = new PricingParam();
+            pricingParam1.setId(pricingParam.getId());
+            pricingParam1.setStatus(pricingParam.getStatus());
+            pricingParamMapper.updateById(pricingParam1);
+        }
+
+    }
 
     @Override
     public void updateById(PricingParam pricingParam) {
@@ -164,8 +222,8 @@
         if (pageWrap.getModel().getInfo() != null) {
             queryWrapper.lambda().eq(PricingParam::getInfo, pageWrap.getModel().getInfo());
         }
-        queryWrapper.lambda().orderByAsc(PricingParam::getSortnum);
         queryWrapper.lambda().orderByAsc(PricingParam::getStatus);
+        queryWrapper.lambda().orderByAsc(PricingParam::getSortnum);
         return PageData.from(pricingParamMapper.selectPage(page, queryWrapper));
     }
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java
index c9eff3b..be2807e 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java
@@ -6,9 +6,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.RefundMapper;
 import com.doumee.dao.business.join.RefundJoinMapper;
-import com.doumee.dao.business.model.Goodsorder;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.Refund;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.model.RefundPlatExportVO;
 import com.doumee.dao.business.vo.GoodsorderExportVO;
 import com.doumee.dao.system.model.SystemUser;
@@ -18,6 +16,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -26,6 +25,7 @@
 import java.sql.Ref;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 閫�娆句俊鎭〃Service瀹炵幇
@@ -96,7 +96,7 @@
         QueryWrapper<Refund> wrapper = new QueryWrapper<>(refund);
         return refundMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<Refund>  findPlatPage(PageWrap<Refund> pageWrap) {
         pageWrap.getModel().setTypeList(new ArrayList<>());
@@ -106,6 +106,10 @@
         pageWrap.getModel().setStatus(Constants.TWO);
         IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<Refund> queryWrapper = initQueryParamByModel(pageWrap.getModel());
+        queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getCreatorName())
+                ,SystemUser::getRealname
+                ,pageWrap.getModel().getCreatorName());
+
         return PageData.from(refundJoinMapper.selectJoinPage(page, Refund.class,queryWrapper));
     }
     @Override
@@ -149,10 +153,18 @@
         queryWrapper.leftJoin(Member.class, Member::getId  ,Goodsorder::getMemberId);
         queryWrapper.leftJoin(SystemUser.class, SystemUser::getId  ,Refund::getCreator);
         //鏃堕棿娈电瓫閫�
-        queryWrapper.ge(model.getStartDate()!=null, Refund::getDoneDate, model.getStartDate());
-        queryWrapper.le(model.getEndDate()!=null, Refund::getDoneDate, model.getEndDate());
+        if (Objects.nonNull(model.getStartDate())) {
+            queryWrapper.ge(Refund::getDoneDate, Utils.Date.getStart(model.getStartDate()));
+        }
+        if (Objects.nonNull(model.getEndDate())) {
+            queryWrapper.le(Refund::getDoneDate, Utils.Date.getEnd(model.getEndDate()));
+        }
+//        queryWrapper.ge(model.getStartDate()!=null, Refund::getDoneDate, model.getStartDate());
+//        queryWrapper.le(model.getEndDate()!=null, Refund::getDoneDate, model.getEndDate());
         queryWrapper.eq(model.getCreator() !=null,Refund::getCreator,model.getCreator());
         queryWrapper.eq(model.getStatus() !=null,Refund::getStatus,model.getStatus());
+        queryWrapper.in(model.getTypeList() !=null,Refund::getType,model.getTypeList());
+        queryWrapper.eq(model.getType() !=null,Refund::getType,model.getType());
         queryWrapper.like(model.getPayOnlineOrderid() !=null,Goodsorder::getOnlineOrderid,model.getPayOnlineOrderid());
         queryWrapper.like(model.getOnlineOrderid() !=null,Refund::getOnlineOrderid,model.getOnlineOrderid());
         queryWrapper.like(model.getOpenid() !=null,Member::getOpenid,model.getOpenid());
diff --git a/server/services/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java b/server/services/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
index 42baca1..a96e931 100644
--- a/server/services/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -113,7 +113,7 @@
         Wrapper<SystemUser> wrapper = new QueryWrapper<>(systemUser);
         return systemUserMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<SystemUserListVO> findPage(PageWrap<QuerySystemUserDTO> pageWrap) {
         // 鏍归儴闂ㄦ潯浠跺鐞嗭紙闇�鏌ヨ鏍归儴闂ㄤ笅鎵�鏈夐儴闂ㄧ殑鐢ㄦ埛锛�
@@ -144,8 +144,8 @@
             user.setRoles(systemRoleService.findByUserId(user.getId()));
             // 鏌ヨ鐢ㄦ埛宀椾綅鍒楄〃
             user.setPositions(systemPositionService.findByUserId(user.getId()));
-            String imgPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.FILES_DIR,Constants.AVATAR_FILE).getCode();
-            user.setAvatar(Constants.formatImgPath(user.getAvatar(),imgPath));
+//            String imgPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.FILES_DIR,Constants.AVATAR_FILE).getCode();
+            user.setAvatar(Constants.formatImgPath(user.getAvatar(),""));
         }
         return PageData.from(new PageInfo<>(userList));
     }
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 38a3e17..5f66561 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -50,8 +50,8 @@
     mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
 #    notifyUrl: http://xiaopiqiu.natapp1.cc/api/wxPayNotify
     notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify
-#    keyPath: D:\DouMee\config\doumeeTest\apiclient_cert.p12
-    keyPath: /usr/local/apiclient_cert.p12
+    keyPath: D:\DouMee\config\doumeeTest\apiclient_cert.p12
+#    keyPath: /usr/local/apiclient_cert.p12
 ########################mqtt鐩稿叧閰嶇疆########################
 mqtt:
   host: tcp://175.27.187.84:1883
diff --git a/server/services/src/main/resources/mappers/SystemUserMapper.xml b/server/services/src/main/resources/mappers/SystemUserMapper.xml
index cda835b..4e3503d 100644
--- a/server/services/src/main/resources/mappers/SystemUserMapper.xml
+++ b/server/services/src/main/resources/mappers/SystemUserMapper.xml
@@ -63,7 +63,7 @@
     select
     distinct
     usr.id, usr.birthday, usr.email, usr.emp_no, usr.mobile, usr.avatar, usr.username, usr.realname, usr.sex, usr.fixed, usr.create_time, usr.update_time,
-    usr.admin_type,usr.user_type,usr.nickname,usr.accepted_number,usr.total_integral,usr.type,
+    usr.nickname,
     create_user.id create_user_id, create_user.username create_user_name,
     update_user.id updete_user_id, update_user.username update_user_name
     from "system_user" usr
@@ -82,7 +82,6 @@
       </if>
 
     </where>
-    order by usr.accepted_number desc
   </select>
 
 

--
Gitblit v1.9.3