jiangping
2023-10-24 c6d20c6e1db82b204cf59e058bc3ba2a9cd84a1e
Merge branch 'dev' of http://139.186.142.91:10010/r/productDev/parkBike into dev
已添加40个文件
已修改49个文件
4672 ■■■■■ 文件已修改
admin/.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/ad.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/aliBill.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/aliBillDetail.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/bikeRepair.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/bikes.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/locks.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/memberRides.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/mqttLog.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/multifile.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/pricingDetail.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/pricingParam.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/refund.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/transactions.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaActionLogWindow.vue 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaAdWindow.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaAliBillDetailWindow.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaAliBillWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaBaseParamWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaBikeRepairWindow.vue 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaBikesWindow.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaGoodsorderWindow.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaLocksWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaMemberRidesWindow.vue 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaMqttLogWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaMultifileWindow.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPriceConfigWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPricingDetailWindow.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaReductionWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaRefundWindow.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaRentSiteWindow.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaRepairDealWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaReturnReasonWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaTransactionsWindow.vue 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWxBillDetailWindow.vue 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaWxBillWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/RepairDetailWindow.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/backGoodsorderWindow.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/goodsOrderDetail.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/priceConfiguration.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/dict/OperaDictDataWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/utils/util.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/actionLog.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/ad.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/aliBill.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/aliBillDetail.vue 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/backgroundRefund.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/baseParam.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bikeRepair.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bikeRetakeRecord.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bikes.vue 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/goodsorder.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/locks.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/member.vue 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/memberRides.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/miniproSetting.vue 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/mqttLog.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/multifile.vue 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/onlinePayStatistics.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/pricingDetail.vue 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/pricingParam.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/reductionReason.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/refund.vue 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/rentSite.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/returnReason.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/transactions.vue 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/wxBill.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/wxBillDetail.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/PricingParamController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/system/SystemUserController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/core/utils/DateUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/ActionLog.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/Goodsorder.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/Member.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/model/MemberRides.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/response/BikeLogDTO.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/PricingParamService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/ActionLogServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/AdServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/PricingDetailServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/PricingParamServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/RefundServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/mappers/SystemUserMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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'
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}`)
}
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}`)
}
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}`)
}
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}`)
}
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}`)
}
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}`)
}
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
  })
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}`)
}
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}`)
}
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}`)
}
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)
}
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}`)
}
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}`)
}
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>
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>
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="对账单ID" 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>
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>
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>
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="车辆问题原因编码(关联base_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="请输入处理人编码(关联system_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>
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="车辆类型编码(关联base_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="当前站点编码(关联sites)" prop="siteId">
        <el-input v-model="form.siteId" placeholder="请输入当前站点编码(关联sites)" v-trim/>
      </el-form-item>
      <el-form-item label="当前锁头编码(关联locks)" 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>
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="用户编码(关联member表)" 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="请输入结算操作人编码(关联system_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>
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正常 1异常" prop="status">
        <el-input v-model="form.status" placeholder="请输入状态 0正常 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>
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正常还车 1强制还车" prop="backType">
        <el-input v-model="form.backType" placeholder="请输入还车类型 0正常还车 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>
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>
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>
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('修改成功')
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>
admin/src/components/business/OperaReductionWindow.vue
@@ -42,7 +42,7 @@
        
        status: '',
        info: '',
        required: ''
        required: 0
      },
      // éªŒè¯è§„则
      rules: {
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="用户编码(关联member表)" 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>
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] : ''
    }
  },
}
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>
admin/src/components/business/OperaReturnReasonWindow.vue
@@ -42,7 +42,7 @@
        
        status: '',
        info: '',
        required: ''
        required: 0
      },
      // éªŒè¯è§„则
      rules: {
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="订单编码(关联goodsorder)" prop="orderId">
        <el-input v-model="form.orderId" placeholder="请输入订单编码(关联goodsorder)" v-trim/>
      </el-form-item>
      <el-form-item label="用户编码(关联member表)" 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>
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="对账单ID" 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="请输入公众账号ID" 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="代金券金额" 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>
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>
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>
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">
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 },
      ],
    }
admin/src/components/business/priceConfiguration.vue
@@ -7,7 +7,7 @@
        <template slot-scope="{row}">
          <div style="text-align: left;">
            <div>方式:{{ row.baseTime == -1 ? '一口价' : '阶梯价格' }}</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>
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: [
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), // å­£åº¦
    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;
}
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]
      },
    }
  },
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>
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>
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="对账单ID" 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="对账单ID" 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>
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()
    },
  },
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>
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)
        })
    }
  },
}
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>
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="车辆类型编码(关联base_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="当前站点编码(关联sites)" prop="siteId">
        <el-input v-model="searchForm.siteId" placeholder="请输入当前站点编码(关联sites)" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="当前锁头编码(关联locks)" 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="车辆类型编码(关联base_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="当前站点编码(关联sites)" min-width="100px"></el-table-column>
        <el-table-column prop="lockId" label="当前锁头编码(关联locks)" 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>
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()
    },
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正常 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="站点编码(关联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正常 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>
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="请输入openid" @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="unionid" prop="unionid">
        <el-input v-model="searchForm.unionid" placeholder="请输入unionid" @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正常 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>
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>
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>
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>
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>
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()
    },
    
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>
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('成功')
        })
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>
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="用户编码(关联member表)" 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="用户编码(关联member表)" 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>
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="操作"
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>
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="订单编码(关联goodsorder)" prop="orderId">
        <el-input v-model="searchForm.orderId" placeholder="请输入订单编码(关联goodsorder)" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="用户编码(关联member表)" 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="订单编码(关联goodsorder)" min-width="100px"></el-table-column>
        <el-table-column prop="memberId" label="用户编码(关联member表)" 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>
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) {
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()
    },
    
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")
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);
    }
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()) {
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 ;
    }
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 = "关联对象编码")
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;
}
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 = "备注")
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 = "备注")
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;
}
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);
    /**
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)
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;
/**
 * å¹¿å‘Šä¿¡æ¯è¡¨Service实现
@@ -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);
    }
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())
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();
            //查询当前时间是否在停止中
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);
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;
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));
    }
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());
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));
    }
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
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>