Mr.Zhang
2023-10-18 0046d701fb2878895359b0ffe7a5354c4ccab7e4
管理端
已添加7个文件
已修改19个文件
1087 ■■■■■ 文件已修改
admin/.env.development 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.staging 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/bikeRepair.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/bikeRetakeRecord.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/goodsorder.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/pricingParam.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/BillDetailWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPriceConfigWindow.vue 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaRentSiteWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaRepairDealWindow.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/backGoodsorderWindow.vue 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/goodsOrderDetail.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/goodsOrderList.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/priceConfiguration.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/CommonHeader.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/UploadAvatarImage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/dict/OperaDictDataWindow.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bikeLocation.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bikeRepair.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/bikeRetakeRecord.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/goodsorder.vue 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/memberRides.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/miniproSetting.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/pricingParam.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/returnReason.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -5,15 +5,12 @@
VUE_APP_CONTEXT_PATH = '/'
VUE_APP_API_PREFIX='/martempo_admin_interface'
#江萍本地
# VUE_APP_API_BASE_URL='http://192.168.0.36:10011'
#刘磊磊本地
# VUE_APP_API_BASE_URL='http://192.168.0.18:10013'
#焦松本地
# http://192.168.0.36:10012/doc.html#/home
VUE_APP_API_BASE_URL='http://192.168.0.36:10012'
VUE_APP_API_BASE_URL='http://192.168.0.36:10026'
# æµ‹è¯•服务
# VUE_APP_API_BASE_URL = 'https://dmtest.ahapp.net/martempo_admin_interface'
# # æµ‹è¯•服务
# VUE_APP_API_PREFIX='/bike_admin_api'
# # åŽç«¯æŽ¥å£åœ°å€ï¼šhttps://dmtest.ahapp.net/bike_admin_api/doc.html
# VUE_APP_API_BASE_URL='https://dmtest.ahapp.net/bike_admin_api'
admin/.env.staging
@@ -1,8 +1,8 @@
# æµ‹è¯•环境配置
NODE_ENV = 'production'
VUE_APP_CONTEXT_PATH = '/martempo_admin'
VUE_APP_API_PREFIX = '/martempo_admin_interface'
# åŽç«¯æŽ¥å£åœ°å€ï¼šhttps://dmtest.ahapp.net/martempo_admin_interface/doc.html
VUE_APP_CONTEXT_PATH = '/bike_admin'
VUE_APP_API_PREFIX = '/bike_admin_api'
VUE_APP_API_BASE_URL = 'https://dmtest.ahapp.net/martempo_admin_interface'
# åŽç«¯æŽ¥å£åœ°å€ï¼šhttps://dmtest.ahapp.net/bike_admin_api/doc.html
VUE_APP_API_BASE_URL = 'https://dmtest.ahapp.net/bike_admin_api'
admin/package.json
@@ -5,7 +5,7 @@
  "scripts": {
    "serve": "vue-cli-service serve",
    "build:pro": "vue-cli-service build",
    "build:staging": "vue-cli-service build --mode staging",
    "build:dev": "vue-cli-service build --mode staging",
    "lint": "vue-cli-service lint",
    "fix": "eslint --ext .js,.vue src --fix"
  },
admin/src/api/business/bikeRepair.js
@@ -6,3 +6,8 @@
    trim: true
  })
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/business/bikeRepair/updateById', data)
}
admin/src/api/business/bikeRetakeRecord.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/business/memberRides/pageBikeLog', data, {
    trim: true
  })
}
// å¯¼å‡ºExcel
export function exportExcel (data) {
  return request.post('/business/memberRides/exportBikeLogExcel', data, {
    trim: true,
    download: true
  })
}
admin/src/api/business/goodsorder.js
@@ -19,3 +19,23 @@
export function deleteById (id) {
  return request.get(`/business/goodsorder/delete/${id}`)
}
// è¯¦æƒ…
export function getDetail (id) {
  return request.get(`/business/goodsorder/${id}`)
}
// é€€æ¬¾
export function backGoodsorder (data) {
  return request.post('/business/goodsorder/backGoodsorder', data, {
    trim: true
  })
}
// é€€æ¬¾
export function closerGoodsorder (id) {
  return request.post('/business/goodsorder/closerGoodsorder', {id})
}
// èŽ·å–å¯é€€æ¬¾ä¿¡æ¯
export function getGoodsorderCanBanlanceDTO (params) {
  return request.get('/business/goodsorder/getGoodsorderCanBanlanceDTO', {params})
}
admin/src/api/business/pricingParam.js
@@ -21,3 +21,12 @@
export function deleteById (id) {
  return request.get(`/business/pricingParam/delete/${id}`)
}
// æ ¹æ®å®šä»·é…ç½®ID查询
export function findListByPricePramId (params) {
  return request.get(`/business/pricingDetail/findListByPricePramId`, {params})
}
// æ ¹æ®ID修改配置
export function updatePricingDetailById (data) {
  return request.post('/business/pricingDetail/updateById', data)
}
admin/src/components/business/BillDetailWindow.vue
@@ -5,7 +5,7 @@
    :confirm-working="isWorking"
  >
    <NoBikeBillDetail v-if="form.type==4" ref="noBikeBillDetail"/>
   <BillDetail v-else ref="billDetail"/>
    <BillDetail v-else ref="billDetail"/>
  </GlobalWindow>
</template>
admin/src/components/business/OperaPriceConfigWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,226 @@
<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="bikeTypeName">
        {{ form.bikeTypeName }}
      </el-form-item>
      <el-form-item label="工作日计费">
        <el-select v-model="form.baseType" @change="selectBaseType">
          <el-option
            v-for="item in priceType"
            :key="item.id"
            :label="item.name"
            :value="item.id"
          ></el-option>
        </el-select>
        <div class="setting" v-if="form.baseType == 1" style="display: flex;">
          <el-input v-model="form.basePrice" type="number" placeholder="" v-trim/>
          å…ƒï¼Œç•…骑一整天
        </div>
        <div class="setting" v-else>
          <div style="display: flex;">
            èµ·æ­¥ä»·<el-input v-model="form.basePrice" type="number" placeholder="" v-trim/>
            å…ƒ<el-input  v-model="form.baseTime" type="number" placeholder="" v-trim/>分钟
          </div>
          <div style="display: flex; margin-top: 5px;">
            è¶…过后<el-input v-model="form.unitPrice" type="number" placeholder="" v-trim/>
            å…ƒï¼Œæ¯<el-input v-model="form.unitTime" type="number" placeholder="" v-trim/>分钟
          </div>
        </div>
      </el-form-item>
      <el-form-item label="节假日计费">
        <el-select v-model="form.holidayBaseType" @change="selectHolidayBaseType">
          <el-option
            v-for="item in priceType"
            :key="item.id"
            :label="item.name"
            :value="item.id"
          ></el-option>
        </el-select>
        <div class="setting" v-if="form.holidayBaseType == 1" style="display: flex;">
          <el-input v-model="form.holidayBasePrice" type="number" placeholder="" v-trim/>
          å…ƒï¼Œç•…骑一整天
        </div>
        <div class="setting" v-else>
          <div style="display: flex;">
            èµ·æ­¥ä»·<el-input v-model="form.holidayBasePrice" type="number" placeholder="" v-trim/>
            å…ƒ<el-input v-model="form.holidayBaseTime" type="number" placeholder="" v-trim/>分钟
          </div>
          <div style="display: flex; margin-top: 5px;">
            è¶…过后<el-input v-model="form.holidayUnitPrice" type="number" placeholder="" v-trim/>
            å…ƒï¼Œæ¯<el-input v-model="form.holidayUnitTime" type="number" placeholder="" v-trim/>分钟
          </div>
        </div>
      </el-form-item>
    </el-form>
  </GlobalAlertWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
import { create } from '@/api/business/pricingParam'
// import { findList } from '@/api/business/roomTime'
import { numRule } from '@/utils/form'
export default {
  name: 'OperaPriceConfigWindow',
  extends: BaseOpera,
  components: { GlobalAlertWindow },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        pricePramId: null,
        bikeTypeId: null,
        bikeTypeName: '',
        baseType: '',
        baseTime: '',
        basePrice: '',
        unitPrice: '',
        unitTime: '',
        holidayBaseType: '',
        holidayBaseTime: '',
        holidayBasePrice: '',
        holidayUnitPrice: '',
        holidayUnitTime: '',
      },
      priceType: [
        { name: '一口价', id: 1 },
        { name: '阶梯定价', id: 2 },
      ],
      backInfoRequired: false,
      // éªŒè¯è§„则
      rules: {
        duration: [
         { required: true, validator: numRule, message: '请输入计费时长', tigger: 'blur' }
        ],
        backReason: [
          { required: true, message: '请选择调整原因', tigger: 'change'},
        ]
      },
    }
  },
  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.baseType = target.baseTime==-1 ? 1 : 2
        this.form.holidayBaseType = target.holidayBaseTime==-1 ? 1 : 2
        // this.form.backReason = ''
        // this.form.backInfo = ''
        // this.$refs.form.clearValidate()
      })
    },
    selectBaseType(v) {
      console.log(v);
      if (v==1) {
        this.form.baseTime = -1
      } else {
        this.form.baseTime = ''
      }
    },
    selectHolidayBaseType(v) {
      // console.log(item);
      if (v==1) {
        this.form.holidayBaseTime = -1
      } else {
        this.form.holidayBaseTime = ''
      }
    },
    confirm() {
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        this.isWorking = true
        create(this.form)
          .then(res => {
            this.visible = false
            this.$tip.apiSuccess('修改成功')
            this.$emit('success')
          })
          .catch(err => {
            this.$tip.apiFailed(err)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    }
  },
}
</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;
}
.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;
  }
}
.setting {
  margin-top: 15px;
  .el-input {
    width: 100px;
  }
}
</style>
admin/src/components/business/OperaRentSiteWindow.vue
@@ -125,7 +125,7 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.longAndLat = `${this.form.longitude},${this.form.latitude}`
        this.form.longAndLat = `${this.form.latitude},${this.form.longitude}`
      })
    },
    changeLongAndLat(v) {
admin/src/components/business/OperaRepairDealWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
<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">
        <el-input
          type="textarea"
          :autosize="{ minRows: 2, maxRows: 4}"
          v-model="form.dealInfo"
          placeholder="请输入调整备注"
          v-trim
        />
      </el-form-item>
    </el-form>
  </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,
        dealInfo: '',
        status: '',
      },
      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
      debugger
      // æ–°å»º
      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.status = '1'
        this.$refs.form.clearValidate()
      })
    },
  },
}
</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
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
<template>
  <GlobalAlertWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    width="600px"
    @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>
    <el-form :model="form" ref="form" :rules="rules" label-suffix=":">
      <el-form-item label="退款金额" prop="money">
        <div style="display: flex;">
          <el-input style="flex: 1;" v-model="form.money" placeholder="请输入退款金额" v-trim/>
        </div>
      </el-form-item>
      <el-form-item label="退款原因" prop="reason">
        <el-input
          type="textarea"
          :autosize="{ minRows: 2, maxRows: 4}"
          v-model="form.reason"
          placeholder="请输入调整备注"
          v-trim
        />
      </el-form-item>
    </el-form>
  </GlobalAlertWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
import { backGoodsorder } from '@/api/business/goodsorder'
import { numRule } from '@/utils/form'
export default {
  name: 'OperaSuggestWindow',
  extends: BaseOpera,
  components: { GlobalAlertWindow },
  data () {
    return {
      // è¡¨å•数据
      form: {
        orderId: null,
        canBanlanceMoney: '',
        closeMoney: '',
        goodsorderMoney: '',
        hasRefundMoney: '',
        money: '',
        reason: '',
      },
      // éªŒè¯è§„则
      rules: {
        duration: [
         { required: true, validator: numRule, message: '请输入退款金额', tigger: 'blur' }
        ]
      },
    }
  },
  created () {
  },
  methods: {
    /**
     * æ‰“开窗口
     * @title çª—口标题
     * @target ç¼–辑的对象
     */
     open (title, target) {
      this.title = title
      this.visible = true
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.form.money = ''
        this.form.reason = ''
        this.$refs.form.clearValidate()
      })
    },
    selectReason(v) {
      // console.log(item);
      let item = this.reason.find(item => item.name == v)
      this.backInfoRequired = item.required == 1
    },
    confirm() {
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        this.isWorking = true
        backGoodsorder(this.form)
          .then(() => {
            this.visible = false
            this.$tip.apiSuccess('退款成功')
            this.$emit('success')
          })
          .catch(err => {
            this.$tip.apiFailed(err)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    }
  },
}
</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;
}
.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/goodsOrderDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
<template>
  <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="refundType" label="交易类型" min-width="100px" align="center">
        <template slot-scope="{row}">
          {{ typeToStr(row.refundType) }}
        </template>
      </el-table-column>
      <el-table-column prop="money" label="交易金额(元)" min-width="100px" align="center"></el-table-column>
      <el-table-column prop="payWay" label="渠道" min-width="100px" align="center">
        <template slot-scope="{row}">
          {{ row.payWay==0? '微信' : '支付宝' }}
        </template>
      </el-table-column>
      <el-table-column prop="payDate" label="交易时间" min-width="100px" align="center"></el-table-column>
    </el-table>
    <div class="title">骑行记录</div>
    <el-table
      :data="memberRidesList"
      stripe
      border
    >
      <el-table-column prop="openid" label="用户" min-width="120px" 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>
      <el-table-column prop="duration" 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="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" fixed="right" label="结算状态" min-width="100px" align="center">
        <template slot-scope="{row}">
          {{ row.closeStatus == 0 ? '未结算' : '已结算' }}
        </template>
      </el-table-column>
    </el-table>
    <div slot="footer">
      <el-button @click="visible=false">返回</el-button>
    </div>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
// import GoodsOrderList from './goodsOrderList.vue'
export default {
  name: 'OperaSitesWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data() {
    return {
      // è¡¨å•数据
      form: {
        goodsorderId: ''
      },
      list: [],
      memberRidesList: [],
      // 0结算退款 1强制结算退款 2结算后退款 [99: è™šæ‹Ÿtype æ”¯ä»˜æŠ¼é‡‘]
      type: [
        { label: '结算退款', id: 0 },
        { label: '强制结算退款', id: 1 },
        { label: '结算后退款', id: 2 },
        { label: '支付押金', id: 99 },
      ],
    }
  },
  created() {
  },
  methods: {
    open(title, target) {
      debugger
      this.title = title
      this.visible = true
      // æ–°å»º
      this.form = target
      this.$nextTick(() => {
        this.list = target.payOrderDTOList
        this.memberRidesList = target.memberRidesList
        // this.$refs.goodsOrderList.reload(target.model)
      })
    },
    typeToStr(type) {
      let temp = this.type.find(item => item.id == type )
      return temp ? temp.label : '-'
    }
  },
}
</script>
<style scoped>
.title {
  font-size: 18px;
  font-weight: 600;
  color: #333;
  margin-bottom: 20px;
  margin-top: 20px;
}
</style>
admin/src/components/business/goodsOrderList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
<template>
  <TableLayout>
    <template v-slot:table-wrap>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        border
      >
        <el-table-column prop="openid" label="用户" min-width="120px" 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="money" label="借出时长(分)" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="money" label="计费时长(分)" min-width="100px" align="center"></el-table-column> -->
        <el-table-column prop="rentDateStart" label="借出时间" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="rentDateEnd" label="还车时间" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="refundDate" label="退款时间" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="closeStatus" label="结算状态" min-width="100px" align="center">
          <template slot-scope="{row}">
            {{ row.closeStatus == 0 ? '未结算' : '已结算' }}
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
export default {
  name: 'goodsOrderList',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  data () {
    return {
      // æœç´¢
      searchForm: {
        goodsorderId: ''
      }
    }
  },
  created () {
    this.config({
      module: '系统基础配置表',
      api: '/business/memberRides',
    })
  },
  methods: {
    reload(target) {
      this.searchForm = target
      this.tableData.pagination.pageIndex = 1
      this.search()
    }
  },
}
</script>
admin/src/components/business/priceConfiguration.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
<template>
  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking">
    <el-table :data="list" stripe border>
      <el-table-column prop="bikeTypeId" label="车型" min-width="120px" align="center"></el-table-column>
      <el-table-column prop="bikeTypeName" label="车型类型" min-width="100px" align="center"></el-table-column>
      <el-table-column label="工作日计价规则" min-width="100px" align="center">
        <template slot-scope="{row}">
          <div style="text-align: left;">
            <div>方式:{{ row.baseTime == -1 ? '一口价' : '阶梯价格' }}</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>
        </template>
      </el-table-column>
      <el-table-column label="节假日计价规则" min-width="100px" align="center">
        <template slot-scope="{row}">
          <div style="text-align: left;">
            <div>方式:{{ row.holidayBaseTime == -1 ? '一口价' : '阶梯价格' }}</div>
            <div>规则:{{ row.info || '-' }}</div>
            <!-- <div v-if="row.holidayBaseTime == -1">规则:{{ row.holidayBasePrice }}元畅玩一整天</div>
            <div v-else>规则:{{ `èµ·æ­¥${row.holidayBaseTime}分钟${row.holidayBasePrice}元,超过后${row.holidayUnitPrice}元/${row.holidayUnitTime}分钟` }}</div> -->
          </div>
        </template>
      </el-table-column>
      <el-table-column prop="payWay" label="操作" width="80px" align="center">
        <template slot-scope="{row}">
          <el-button type="text" @click="$refs.operaPriceConfigWindow.open('修改费率', row)">编辑</el-button>
        </template>
      </el-table-column>
    </el-table>
    <div slot="footer">
      <el-button @click="visible=false">返回</el-button>
    </div>
    <OperaPriceConfigWindow ref="operaPriceConfigWindow" @success="search" />
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import OperaPriceConfigWindow from '@/components/business/OperaPriceConfigWindow'
import { findListByPricePramId } from '@/api/business/pricingParam'
export default {
  name: 'OperaSitesWindow',
  extends: BaseOpera,
  components: { GlobalWindow, OperaPriceConfigWindow },
  data() {
    return {
      // è¡¨å•数据
      form: {
        pricePramId: ''
      },
      list: [],
      memberRidesList: [],
    }
  },
  created() {
  },
  methods: {
    open(title, target) {
      this.title = title
      this.visible = true
      // æ–°å»º
      this.form.pricePramId = target.id
      this.search()
      // this.$nextTick(() => {
      //   this.list = target.payOrderDTOList
      //   this.memberRidesList = target.memberRidesList
      //   this.$refs.goodsOrderList.reload(target.model)
      // })
    },
    search() {
      findListByPricePramId(this.form)
        .then(res => {
          this.list = res
        })
    }
  },
}
</script>
<style scoped>
.title {
  font-size: 18px;
  font-weight: 600;
  color: #333;
  margin-bottom: 20px;
  margin-top: 20px;
}
</style>
admin/src/components/common/CommonHeader.vue
@@ -2,7 +2,7 @@
  <div class="common-header">
    <div class="header">
      <div class="logo">
        <div>海得宝</div>
        <div>滨湖自行车租赁系统</div>
        <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> -->
      </div>
      <div class="user">
admin/src/components/common/UploadAvatarImage.vue
@@ -30,7 +30,7 @@
  },
  data() {
    return {
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadPicture',
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
      // uploadData: {
      //   folder: 'upload',
      //   type: 'image'
admin/src/components/system/dict/OperaDictDataWindow.vue
@@ -78,7 +78,6 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        debugger
        this.form.code = target.code
      })
    },
admin/src/views/business/bikeLocation.vue
@@ -67,6 +67,6 @@
  }
}
/**
 *
 *
 */
</script>
admin/src/views/business/bikeRepair.vue
@@ -8,7 +8,7 @@
      <el-form-item label="车辆编号" prop="binkeId">
        <el-input v-model="searchForm.binkeId" placeholder="请输入车辆编号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="状态 0待处理 1已处理 2其他" prop="status">
      <el-form-item label="状态" prop="status">
        <el-select v-model="searchForm.status" placeholder="请选择">
          <el-option
            label="待处理"
@@ -45,36 +45,38 @@
        stripe
        border
      >
        <el-table-column prop="creator" label="创建人" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="linkname" label="联系人" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="binkeId" label="车辆编码" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="editDate" label="车类型" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="param" label="问题类型" min-width="100px" 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}`  }}
          </template>
        </el-table-column>
        <el-table-column prop="bikeCode" label="车辆编码" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="bikeTypeName" label="车类型" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="param" label="问题类型" min-width="100px" show-overflow-tooltip align="center">
          <template slot-scope="{row}">
            <div class="long-title-style">{{ row.param }}</div>
          </template>
        </el-table-column>
        <!-- <el-table-column prop="param" label="车辆问题" min-width="100px"></el-table-column> -->
        <el-table-column prop="content" label="问题说明" min-width="100px" align="center"></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>
          </template>
        </el-table-column>
        <el-table-column prop="createDate" label="创建时间" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="status" label="状态" min-width="100px" align="center">
        <el-table-column prop="status" label="状态" min-width="80px" align="center">
          <template slot-scope="{row}">
            <div v-if="row.status==0" style="color: red;">待处理</div>
            <div v-else-if="row.status==1">已处理</div>
            <div v-else>其他</div>
          </template>
        </el-table-column>
        <el-table-column label="操作" min-width="100px" align="center">
        <el-table-column label="操作" min-width="80px" fixed="right" align="center">
          <template slot-scope="{row}">
            <el-button v-if="row.status==0" type="text" @click="dealAction(row)">处理</el-button>
          </template>
        </el-table-column>
        <!-- <el-table-column prop="isdeleted" label="是否已删除 0未删除 1已删除" min-width="100px"></el-table-column>
        <el-table-column prop="longitude" label="经度" min-width="100px"></el-table-column>
        <el-table-column prop="latitude" label="纬度" min-width="100px"></el-table-column>
        <el-table-column prop="addr" 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="info" label="备注" min-width="100px"></el-table-column>
        <el-table-column prop="linkphone" label="联系电话" min-width="100px"></el-table-column>
        <el-table-column prop="dealUser" label="处理人编码(关联system_user)" min-width="100px"></el-table-column>
        <el-table-column prop="dealDate" label="处理时间" min-width="100px"></el-table-column>
        <el-table-column prop="dealInfo" label="处理备注" min-width="100px"></el-table-column> -->
      </el-table>
      <pagination
        @size-change="handleSizeChange"
@@ -83,6 +85,7 @@
      >
      </pagination>
    </template>
    <OperaRepairDealWindow ref="operaRepairDealWindow" @success="handlePageChange"/>
  </TableLayout>
</template>
@@ -90,10 +93,11 @@
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaRepairDealWindow from '@/components/business/OperaRepairDealWindow'
export default {
  name: 'BikeRepair',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  components: { TableLayout, Pagination, OperaRepairDealWindow },
  data () {
    return {
      value1: [],
@@ -133,7 +137,7 @@
  },
  methods: {
    dealAction(row) {
      this.$refs.operaRepairDealWindow.open('处理', row)
    }
  },
}
admin/src/views/business/bikeRetakeRecord.vue
@@ -45,16 +45,16 @@
        stripe
        border
      >
        <el-table-column prop="memberId" 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="bikeCode" label="车辆编码" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="paramId" label="车辆类型" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="paramId" label="借出站点" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="paramId" 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="rentSiteId" label="借出站点" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="rentLockId" 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="paramId" label="归还站点" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="paramId" label="归还锁具号" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="backSiteId" label="归还站点" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="backLockId" label="归还锁具号" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="backDate" label="归还时间" min-width="140px" align="center"></el-table-column>
        <el-table-column prop="duration" label="借出时长(分)" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="rideTime" label="借出时长(分)" fixed="right" 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>
@@ -151,7 +151,7 @@
  created () {
    this.config({
      module: '用户骑行记录表',
      api: '/business/memberRides',
      api: '/business/bikeRetakeRecord',
      'field.id': 'id',
      'field.main': 'id'
    })
admin/src/views/business/goodsorder.vue
@@ -2,8 +2,8 @@
  <TableLayout :permissions="['business:goodsorder:query']">
    <!-- æœç´¢è¡¨å• -->
    <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="code">
        <el-input v-model="searchForm.code" placeholder="请输入订单编号" @keypress.enter.native="search"></el-input>
@@ -15,7 +15,7 @@
        <el-select v-model="searchForm.status" placeholder="请选择">
          <el-option
            label="未结算"
            :value="1">
            :value="0">
          </el-option>
          <el-option
            label="已结算"
@@ -27,15 +27,12 @@
        <el-date-picker
          v-model="value1"
          type="daterange"
          @change="selectDate"
          range-separator="至"
          start-placeholder="开始日期"
          end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
      <!-- <el-form-item label="结算类型 0自动结算 1平台人工结算 2系统自动结算" prop="closeType">
        <el-input v-model="searchForm.closeType" placeholder="请输入结算类型 0自动结算 1平台人工结算 2系统自动结算" @keypress.enter.native="search"></el-input>
      </el-form-item> -->
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
@@ -52,12 +49,13 @@
        stripe
        border
      >
        <el-table-column prop="code" label="订单编号" min-width="130px" align="center"></el-table-column>
        <el-table-column prop="onlineOrderid" label="交易单号" min-width="180px" align="center"></el-table-column>
        <el-table-column prop="money" label="押金(元)" min-width="100px" align="center"></el-table-column>
        <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="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="closeMoney" label="退押金(元)" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="closeMoney" label="结算金额(元)" min-width="100px" 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>
@@ -85,9 +83,9 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="deleteById(row)">订单详情</el-button>
            <el-button type="text" @click="deleteById(row)">退款</el-button>
            <el-button type="text" @click="deleteById(row)" style="color: red">结算</el-button>
            <el-button type="text" @click="showDetail(row)">订单详情</el-button>
            <el-button type="text" @click="statement(row)" v-if="row.status != 4" style="color: red">结算</el-button>
            <el-button type="text" @click="refenMoney(row)" v-else>退款</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -98,6 +96,8 @@
      >
      </pagination>
    </template>
    <GoodsOrderDetail ref="goodsOrderDetail" />
    <BackGoodsorderWindow ref="backGoodsorderWindow" @success="handlePageChange" />
  </TableLayout>
</template>
@@ -105,10 +105,13 @@
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import GoodsOrderDetail from '@/components/business/goodsOrderDetail'
import BackGoodsorderWindow from '@/components/business/backGoodsorderWindow'
import { getDetail, getGoodsorderCanBanlanceDTO, closerGoodsorder } from '@/api/business/goodsorder'
export default {
  name: 'Goodsorder',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  components: { TableLayout, Pagination, GoodsOrderDetail, BackGoodsorderWindow },
  data () {
    return {
      // æœç´¢
@@ -121,7 +124,7 @@
        isdeleted: '',
        info: '',
        code: '',
        memberId: '',
        openid: '',
        money: '',
        status: '',
        preOrderid: '',
@@ -131,11 +134,9 @@
        payDate: '',
        type: '',
        closeMoney: '',
        closeId: '',
        closeDate: '',
        closeInfo: '',
        closeUserId: '',
        closeType: ''
        startDate: '',
        endDate: '',
      },
      value1: []
    }
@@ -154,6 +155,48 @@
      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()
    },
    showDetail({id}) {
      getDetail(id)
        .then(res => {
          this.$refs.goodsOrderDetail.open('订单详情',res)
        })
        .catch(err => {
          this.$tip.apiFailed(err)
        })
    },
    statement({id}) {
      this.$dialog.messageWaring('当前订单可能有未完成的骑行,确定强制结算?', '强制结算')
        .then(() => {
          closerGoodsorder(id)
            .then(() => {
              this.$tip.apiSuccess('结算成功')
            })
            .catch(err => {
              this.$tip.apiFailed(err)
            })
        })
        .catch(() => {})
    },
    refenMoney({id}) {
      getGoodsorderCanBanlanceDTO({orderId:id})
        .then(res => {
          this.$refs.backGoodsorderWindow.open('强制退款', {orderId:id, ...res})
        })
        .catch(err => {
          this.$tip.apiFailed(err)
        })
    }
  }
}
admin/src/views/business/memberRides.vue
@@ -45,12 +45,12 @@
        stripe
        border
      >
        <el-table-column prop="memberId" 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="bikeCode" label="车辆编码" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="paramId" 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="duration" 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="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="backDate" label="还车时间" min-width="100px" align="center"></el-table-column>
        <el-table-column prop="closeStatus" label="结算状态" min-width="100px" align="center">
          <!-- 0未结算 1已结束 -->
admin/src/views/business/miniproSetting.vue
@@ -10,22 +10,22 @@
        <el-input v-model="form.serverPhone" placeholder="请输入服务电话"></el-input>
      </el-form-item>
      <el-form-item label="押金金额">
        <el-input v-model="form.rentDeposit" placeholder="请输入押金金额"></el-input>
        <el-input v-model="form.rentDeposit" type="number" placeholder="请输入押金金额"></el-input>
        <div class="tips">请输入需要缴纳的押金金额(单位:元)</div>
      </el-form-item>
      <el-form-item label="营业时间">
        <el-time-select placeholder="开始时间" v-model="form.businessStarttime"></el-time-select>
        <el-time-picker placeholder="开始时间" value-format="HH:mm" :picker-options="option" v-model="form.businessStarttime"></el-time-picker>
        è‡³
        <el-time-select placeholder="结束时间" v-model="form.businessEndtime"></el-time-select>
        <el-time-picker placeholder="结束时间" value-format="HH:mm" :picker-options="option" v-model="form.businessEndtime"></el-time-picker>
      </el-form-item>
      <el-form-item label="免费骑行时长">
        <el-input v-model="form.freeRentTime" placeholder="请输入名称"></el-input>
        <el-input v-model="form.freeRentTime" type="number" placeholder="请输入免费骑行时长"></el-input>
        <div class="tips">免费骑行时长,单位:分钟</div>
      </el-form-item>
      <el-form-item label="满载预警(%)" prop="name">
        <div style="display: flex;">
          ä½ŽäºŽ<el-input style="width: 80px;" v-model="form.warnMin" placeholder="最小值"></el-input>
          æˆ–高于<el-input style="width: 80px;" v-model="form.warnMax" placeholder="最大值"></el-input>
          ä½ŽäºŽ<el-input style="width: 80px;" v-model="form.warnMin" type="number" placeholder="最小值"></el-input>
          æˆ–高于<el-input style="width: 80px;" v-model="form.warnMax" type="number" placeholder="最大值"></el-input>
          ä¼šæƒ³é’‰é’‰ç¾¤å‘送预警
        </div>
        <div class="tips">当车辆满载超过以上配置时,提示管理员</div>
@@ -34,9 +34,8 @@
        <el-input v-model="form.warnDingdingUrl" placeholder="请输入预警钉钉群地址"></el-input>
      </el-form-item>
      <el-form-item label="租赁流程视频" prop="name">
        <!-- :before-upload="beforeAvatarUpload" -->
        <el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false"
          accept=".mp4" :on-success="handleAvatarSuccess">
        <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>
@@ -56,9 +55,9 @@
            placeholder="请输入停止服务提示"></el-input>
        </el-form-item>
        <el-form-item label="停止服务时间">
          <el-time-select placeholder="开始时间" v-model="form.stopServeStarttime"></el-time-select>
          <el-time-picker placeholder="开始时间" value-format="HH:mm" :picker-options="option" v-model="form.stopServeStarttime"></el-time-picker>
          è‡³
          <el-time-select placeholder="结束时间" v-model="form.stopServeEndtime"></el-time-select>
          <el-time-picker placeholder="结束时间" value-format="HH:mm" :picker-options="option" v-model="form.stopServeEndtime"></el-time-picker>
          <div class="tips">停止服务开始时间至结束时间</div>
        </el-form-item>
      </template>
@@ -77,6 +76,10 @@
  components: { TableLayout },
  data() {
    return {
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
      option: {
        format: 'HH:mm'
      },
      // æœç´¢
      form: {
        businessEndtime: '',
@@ -106,7 +109,8 @@
  },
  methods: {
    handleAvatarSuccess(res, file) {
      this.imageUrl = URL.createObjectURL(file.raw);
      console.log(res.data.url);
      this.form.rentTipsVideo = res.data.url;
    },
    // beforeAvatarUpload(file) {
    //   console.log(file.type);
admin/src/views/business/pricingParam.vue
@@ -31,18 +31,10 @@
        <el-table-column prop="status" label="状态" min-width="100px" align="center">
          <template slot-scope="{row}">
            <!--  0启用 1禁用 -->
            <el-switch v-model="form.status" active-value="0" inactive-value="1" active-color="#13ce66"></el-switch>
            <el-switch v-model="row.status" :active-value="0" :inactive-value="1" active-color="#13ce66" @change="changeStatus(row)"></el-switch>
          </template>
        </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="info" label="备注" min-width="100px"></el-table-column> -->
        <el-table-column
          v-if="containPermissions(['business:pricingparam:update', 'business:pricingparam:delete'])"
          label="操作"
@@ -51,8 +43,9 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaPricingParamWindow.open('编辑定价方案配置', row)" icon="el-icon-edit" v-permissions="['business:pricingparam:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:pricingparam:delete']">删除</el-button>
            <el-button type="text" @click="$refs.priceConfiguration.open(`${row.name}定价方案`, row)">配置费率</el-button>
            <el-button type="text" @click="$refs.operaPricingParamWindow.open('编辑定价方案配置', row)" v-permissions="['business:pricingparam:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" v-permissions="['business:pricingparam:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -65,6 +58,7 @@
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaPricingParamWindow ref="operaPricingParamWindow" @success="handlePageChange"/>
    <PriceConfiguration ref="priceConfiguration" @success="handlePageChange"/>
  </TableLayout>
</template>
@@ -73,10 +67,12 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaPricingParamWindow from '@/components/business/OperaPricingParamWindow'
import PriceConfiguration from '@/components/business/priceConfiguration'
import { updateById } from '@/api/business/pricingParam'
export default {
  name: 'PricingParam',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaPricingParamWindow },
  components: { TableLayout, Pagination, OperaPricingParamWindow, PriceConfiguration },
  data () {
    return {
      // æœç´¢
@@ -104,6 +100,20 @@
      'field.main': 'id'
    })
    this.search()
  }
  },
  methods: {
    changeStatus(row) {
      updateById(row)
        .then(() => {
          this.$tip.apiSuccess('成功')
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.handlePageChange()
        })
    }
  },
}
</script>
admin/src/views/business/returnReason.vue
@@ -15,7 +15,7 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:baseparam:create']">
        <li><el-button type="primary" @click="$refs.operaReturnReasonWindow.open('新建车辆问题')" icon="el-icon-plus" v-permissions="['business:baseparam:create']">新建</el-button></li>
        <li><el-button type="primary" @click="$refs.operaReturnReasonWindow.open('新建强制还车原因')" icon="el-icon-plus" v-permissions="['business:baseparam:create']">新建</el-button></li>
      </ul>
      <el-table
        v-loading="isWorking.search"
@@ -44,7 +44,7 @@
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaReturnReasonWindow.open('编辑车辆问题', row)" icon="el-icon-edit" v-permissions="['business:baseparam:update']">编辑</el-button>
            <el-button type="text" @click="$refs.operaReturnReasonWindow.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>