rk
20 小时以前 9f8b3700ffbcc616a97e7ee2ea283ef4df3d666a
admin/src/views/business/sysParams.vue
@@ -1,81 +1,186 @@
<template>
  <TableLayout>
    <template v-slot:table-wrap>
      <div class="params-container">
      <div class="section">
        <h3 class="section-title">司机规则</h3>
        <div class="form-item">
          <span class="label">司机每日可取消订单次数为</span>
          <el-input-number v-model="form.driverDailyCancelLimit" :min="0" controls-position="right"></el-input-number>
          <span class="desc">次,超过次数后,今日不可抢单</span>
        </div>
        <div class="form-item">
          <span class="label">司机最大同时进行中订单数量为</span>
          <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
          <span class="desc">个,超过该数量不允许抢单<span class="red">(即订单状态=待取件/配送中)</span></span>
        </div>
  <div class="params-container" :style="' height: '+contentHeight+'px;'">
    <div class="section">
      <h3 class="section-title">司机规则</h3>
      <div class="form-item">
        <span class="label">司机每日可取消订单次数为</span>
        <el-input-number v-model="form.driverDailyCancelLimit" :min="0" controls-position="right"></el-input-number>
        <span class="label">次,超过次数后,今日不可抢单</span>
      </div>
      <div class="section">
        <h3 class="section-title">订单规则</h3>
        <div class="form-item">
          <span class="label">超时</span>
          <el-input-number v-model="form.autoCancelTime" :min="0" controls-position="right"></el-input-number>
          <span class="desc">分钟未支付,订单自动取消</span>
        </div>
        <div class="form-item">
          <span class="label">急速达订单计价系数</span>
          <el-input-number v-model="form.urgentCoefficient" :min="0" :precision="2" controls-position="right"></el-input-number>
        </div>
        <div class="form-item">
          <span class="label">物品保费比例</span>
          <el-input-number v-model="form.insuranceRate" :min="0" :precision="2" controls-position="right"></el-input-number>
          <span class="desc">%</span>
        </div>
        <div class="form-item">
          <span class="label">异地寄送模式下,若物品已送达,而客户当天未取件,则后续系统按</span>
          <el-input-number v-model="form.unpickedDiscount" :min="0" :precision="2" controls-position="right"></el-input-number>
          <span class="desc">折扣系数计算</span>
        </div>
        <div class="form-item">
          <span class="label">订单送达后默认</span>
          <el-input-number v-model="form.autoConfirmReceipt" :min="0" controls-position="right"></el-input-number>
          <span class="desc">天后自动确认收货<span class="red">(仅限收件地址不是服务点的情况)</span></span>
        </div>
        <div class="form-item">
          <span class="label">订单完成后</span>
          <el-input-number v-model="form.settlementDate" :min="0" controls-position="right"></el-input-number>
          <span class="desc">天后系统结算订单,并给与参与角色按比例分成</span>
        </div>
      <div class="form-item">
        <span class="label">司机最大同时进行中订单数量为</span>
        <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
        <span class="label">个,超过该数量不允许抢单<span class="red">(即订单状态=待取件/配送中)</span></span>
      </div>
      <div class="footer">
        <el-button type="primary" @click="handleSave" :loading="isWorking.save">保存</el-button>
      <div class="form-item">
        <span class="label">客户下单后每隔</span>
        <el-input-number v-model="form.noGrabNotifyTime" :min="0" controls-position="right"></el-input-number>
        <span class="label">分钟未有司机抢单,系统推送平台管理员</span>
        <el-select v-model="userIds"   multiple  clearable placeholder="请选择">
          <el-option
              v-for="item in userList"
              :key="item.id"
              :label="item.realname"
              :value="item.id+''" />
        </el-select>
        <span class="label">提醒加急派单处理。</span>
      </div>
      <div class="form-item">
        <span class="label">门店默认配送范围</span>
        <el-input-number v-model="form.defaultDeliveryRange" :min="0" controls-position="right"></el-input-number>
        <span class="label">(公里)</span>
      </div>
    </div>
    </template>
  </TableLayout>
    <div class="section">
      <h3 class="section-title">订单规则</h3>
      <div class="form-item">
        <span class="label">超时</span>
        <el-input-number v-model="form.autoCancelTime" :min="0" controls-position="right"></el-input-number>
        <span class="label">分钟未支付,订单自动取消</span>
      </div>
      <div class="form-item">
        <span class="label">急速达订单计价系数</span>
        <el-input-number v-model="form.urgentCoefficient" :min="0" :precision="2" controls-position="right"></el-input-number>
      </div>
      <div class="form-item">
        <span class="label">物品保费比例</span>
        <el-input-number v-model="form.insuranceRate" :min="0" :precision="2" controls-position="right"></el-input-number>
        <span class="desc">%</span>
      </div>
      <div class="form-item">
        <span class="label">同城寄送模式下,若物品已送达,而客户当天未取件,则后续系统按</span>
        <el-input-number v-model="form.unpickedDiscount" :min="0" :precision="2" controls-position="right"></el-input-number>
        <span class="desc">折扣系数计算</span>
      </div>
      <div class="form-item">
        <span class="label">订单送达后默认</span>
        <el-input-number v-model="form.autoConfirmReceipt" :min="0" controls-position="right"></el-input-number>
        <span class="label">天后自动确认收货<span class="red">(仅限收件地址不是服务点的情况)</span></span>
      </div>
      <div class="form-item">
        <span class="label">订单完成后</span>
        <el-input-number v-model="form.settlementDate" :min="0" controls-position="right"></el-input-number>
        <span class="label">天后系统结算订单,并给与参与角色按比例分成</span>
      </div>
    </div>
    <div class="section">
      <h3 class="section-title">优惠券发放规则</h3>
      <div class="form-item">
        <span class="label">下单数量每满</span>
        <el-input-number v-model="form.orderCouponOrderCount" :min="1" controls-position="right"></el-input-number>
        <span class="label">单,至多</span>
        <el-input-number v-model="form.orderCouponGiftCount" :min="1" controls-position="right"></el-input-number>
        <span class="label">次,平台赠送优惠券 </span>
        <el-select v-model="form.orderCouponId" style="width: 130px;" placeholder="优惠券">
          <el-option v-for="item in couponList" :key="item.id" :label="item.name" :value="item.id"></el-option>
        </el-select>
        <span class="label"><span class="red">(以行李已寄存门店为准,即便退单亦不收回,默认每次发放1张)</span></span>
      </div>
      <div class="form-item">
        <span class="label">会员注册每满</span>
        <el-input-number v-model="form.registerCouponYears" :min="1" controls-position="right"></el-input-number>
        <span class="label">年,至多</span>
        <el-input-number v-model="form.registerCouponGiftCount" :min="1" controls-position="right"></el-input-number>
        <span class="label">次,平台赠送优惠券 </span>
        <el-select v-model="form.registerCouponId" style="width: 130px;" placeholder="优惠券">
          <el-option v-for="item in couponList" :key="item.id" :label="item.name" :value="item.id"></el-option>
        </el-select>
        <span class="label"><span class="red">(按注册时间,无论会员是否下单;默认每次发放1张)</span></span>
      </div>
      <div class="form-item">
        <span class="label">新注册会员送平台赠送优惠券</span>
        <el-select v-model="form.registerGiftCouponId" style="width: 130px;" placeholder="优惠券">
          <el-option v-for="item in couponList" :key="item.id" :label="item.name" :value="item.id"></el-option>
        </el-select>
      </div>
    </div>
    <div class="section">
      <h3 class="section-title">开票规则</h3>
      <div class="form-item">
        <span class="label">超时</span>
        <el-input-number v-model="form.invoiceMonthLimit" :min="1" controls-position="right"></el-input-number>
        <span class="label">个月的订单不允许开发票</span>
      </div>
    </div>
    <div class="section">
      <h3 class="section-title">司机奖励规则</h3>
      <div class="table-container">
        <el-table :data="driverRewardList" border style="width: 100%">
          <el-table-column prop="registerRewardAmount" label="注册奖励(元/单)">
            <template slot-scope="scope">
              <el-input-number v-model="scope.row.registerRewardAmount" :min="1" controls-position="right"></el-input-number>
            </template>
          </el-table-column>
          <el-table-column prop="registerRewardOrderCount" label="注册奖励单数">
            <template slot-scope="scope">
              <el-input-number v-model="scope.row.registerRewardOrderCount" :min="1" controls-position="right"></el-input-number>
            </template>
          </el-table-column>
          <el-table-column prop="platformRewardAmount" label="平台奖励(元/单)">
            <template slot-scope="scope">
              <el-input-number v-model="scope.row.platformRewardAmount" :min="1" controls-position="right"></el-input-number>
            </template>
          </el-table-column>
          <el-table-column prop="platformRewardOrderCount" label="平台奖励单数">
            <template slot-scope="scope">
              <el-input-number v-model="scope.row.platformRewardOrderCount" :min="1" controls-position="right"></el-input-number>
            </template>
          </el-table-column>
        </el-table>
      </div>
    </div>
    <div class="footer">
      <el-button type="primary" @click="handleSave" :loading="isWorking.save">保存</el-button>
    </div>
  </div>
</template>
<script>
import TableLayout from '@/layouts/TableLayout'
import { getParams, saveParams } from '@/api/business/sysParams'
import { allList } from '@/api/system/user'
import { validList } from '@/api/business/coupon'
export default {
  name: 'SysParams',
  components: { TableLayout },
  data () {
    return {
      contentHeight: 600,
      driverRewardList: [],
      form: {
        autoCancelTime: '',
        autoConfirmReceipt: '',
        driverDailyCancelLimit: '',
         autoCancelTime: '',
         autoConfirmReceipt: '',
         registerRewardAmount: 0,
         registerRewardOrderCount: 0,
         platformRewardAmount: 0,
         platformRewardOrderCount: 0,
         driverDailyCancelLimit: '',
        insuranceRate: '',
        orderAcceptLimit: '',
        noGrabNotifyUsers: '',
        noGrabNotifyTime: '',
        defaultDeliveryRange: '',
        settlementDate: '',
        unpickedDiscount: '',
        urgentCoefficient: ''
        urgentCoefficient: '',
        orderCouponOrderCount: '',
        orderCouponGiftCount: '',
        registerCouponYears: '',
        registerCouponGiftCount: '',
        orderCouponId: null,
        registerCouponId: null,
        registerGiftCouponIds: null,
        invoiceMonthLimit: ''
      },
      couponList: [],
      userIds: [],
      userList: [],
      isWorking: {
        save: false
      }
@@ -83,8 +188,26 @@
  },
  created () {
    this.loadData()
    this.loadUserlist()
    this.loadCouponList()
    this.contentHeight =  window.innerHeight -110;
  },
  methods: {
    loadCouponList() {
      validList().then(res => {
        console.log(res)
        this.couponList = res || []
      }).catch(e => {
        this.$tip.apiFailed(e)
      })
    },
    loadUserlist () {
      allList().then(res => {
        this.userList = res || []
      }).catch(e => {
        this.$tip.apiFailed(e)
      })
    },
    loadData () {
      getParams().then(res => {
        this.form = {
@@ -92,10 +215,35 @@
          autoConfirmReceipt: res.autoConfirmReceipt || '',
          driverDailyCancelLimit: res.driverDailyCancelLimit || '',
          insuranceRate: res.insuranceRate || '',
          defaultDeliveryRange: res.defaultDeliveryRange || '',
          noGrabNotifyTime: res.noGrabNotifyTime || '',
          orderAcceptLimit: res.orderAcceptLimit || '',
          noGrabNotifyUsers: res.noGrabNotifyUsers || '',
          settlementDate: res.settlementDate || '',
          unpickedDiscount: res.unpickedDiscount || '',
          urgentCoefficient: res.urgentCoefficient || ''
          urgentCoefficient: res.urgentCoefficient || '',
          orderCouponOrderCount: res.orderCouponOrderCount || '',
          orderCouponGiftCount: res.orderCouponGiftCount || '',
          registerCouponYears: res.registerCouponYears || '',
          registerCouponGiftCount: res.registerCouponGiftCount || '',
          orderCouponId: res.orderCouponId ? Number(res.orderCouponId) : null,
          registerCouponId: res.registerCouponId ? Number(res.registerCouponId) : null,
          registerGiftCouponIds: res.registerGiftCouponIds ? Number(res.registerGiftCouponIds) : '',
          registerRewardAmount: (res.registerRewardAmount || 0) / 100,
          registerRewardOrderCount: res.registerRewardOrderCount || 0,
          platformRewardAmount: (res.platformRewardAmount || 0) / 100,
          platformRewardOrderCount: res.platformRewardOrderCount || 0,
          invoiceMonthLimit: res.invoiceMonthLimit || ''
        }
        // 初始化司机奖励规则表格数据
        this.driverRewardList = [{
          registerRewardAmount: this.form.registerRewardAmount || 0,
          registerRewardOrderCount: this.form.registerRewardOrderCount || 0,
          platformRewardAmount: this.form.platformRewardAmount || 0,
          platformRewardOrderCount: this.form.platformRewardOrderCount || 0
        }]
        if (this.form.noGrabNotifyUsers) {
          this.userIds = this.form.noGrabNotifyUsers.split(',')
        }
      }).catch(e => {
        this.$tip.apiFailed(e)
@@ -103,7 +251,30 @@
    },
    handleSave () {
      this.isWorking.save = true
      saveParams(this.form).then(res => {
      // 深拷贝表单数据
      const submitForm = JSON.parse(JSON.stringify(this.form))
      submitForm.noGrabNotifyUsers = ''
      if (this.userIds) {
        submitForm.noGrabNotifyUsers = this.userIds.join(',')
        }
        // 同步司机奖励表格数据到表单
        if (this.driverRewardList.length > 0) {
          const rewardData = this.driverRewardList[0]
          submitForm.registerRewardAmount = rewardData.registerRewardAmount
          submitForm.registerRewardOrderCount = rewardData.registerRewardOrderCount
          submitForm.platformRewardAmount = rewardData.platformRewardAmount
          submitForm.platformRewardOrderCount = rewardData.platformRewardOrderCount
        }
        if (submitForm.orderCouponId) {
          submitForm.orderCouponId = String(submitForm.orderCouponId)
        }
        if (submitForm.registerCouponId) {
          submitForm.registerCouponId = String(submitForm.registerCouponId)
        }
        // if (submitForm.registerGiftCouponIds) {
        //   submitForm.registerGiftCouponIds = submitForm.registerGiftCouponIds
        // }
      saveParams(submitForm).then(res => {
        this.$tip.apiSuccess(res || '保存成功')
      }).catch(e => {
        this.$tip.apiFailed(e)
@@ -118,6 +289,9 @@
<style scoped>
.params-container {
  padding: 20px;
  overflow: auto;
  display: block;
  background-color: #fff;
}
.section {
  margin-bottom: 40px;