MrShi
2026-05-14 e9a7cddce776382916e975402986144a88899ac5
admin/src/views/business/sysParams.vue
@@ -1,88 +1,143 @@
<template>
  <TableLayout>
    <template v-slot:table-wrap>
      <div class="params-container">
      <div class="section">
        <h3 class="section-title">司机规则</h3>
        <div class="form-item">
          <span class="label">司机每日可取消订单次数为</span>
          <el-input-number v-model="form.driverDailyCancelLimit" :min="0" controls-position="right"></el-input-number>
          <span class="label">次,超过次数后,今日不可抢单</span>
        </div>
        <div class="form-item">
          <span class="label">司机最大同时进行中订单数量为</span>
          <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
          <span class="label">个,超过该数量不允许抢单<span class="red">(即订单状态=待取件/配送中)</span></span>
        </div>
        <div class="form-item">
          <span class="label">客户下单后每隔</span>
          <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
          <span class="label">分钟未有司机抢单,系统推送平台管理员</span>
          <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number>
          <span class="label">提醒加急派单处理。</span>
        </div>
  <div 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="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 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="0" controls-position="right"></el-input-number>
        <span class="label">单,至多</span>
        <el-input-number v-model="form.orderCouponGiftCount" :min="0" controls-position="right"></el-input-number>
        <span class="label">次,平台赠送优惠券 </span>
        <el-select v-model="form.orderCouponId" multiple 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="0" controls-position="right"></el-input-number>
        <span class="label">年,至多</span>
        <el-input-number v-model="form.registerCouponGiftCount" :min="0" controls-position="right"></el-input-number>
        <span class="label">次,平台赠送优惠券 </span>
        <el-select v-model="form.registerCouponId" multiple 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.registerGiftCouponIds" multiple 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="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,
      form: {
        autoCancelTime: '',
        autoConfirmReceipt: '',
        driverDailyCancelLimit: '',
        insuranceRate: '',
        orderAcceptLimit: '',
        noGrabNotifyUsers: '',
        noGrabNotifyTime: '',
        defaultDeliveryRange: '',
        settlementDate: '',
        unpickedDiscount: '',
        urgentCoefficient: ''
        urgentCoefficient: '',
        orderCouponOrderCount: '',
        orderCouponGiftCount: '',
        registerCouponYears: '',
        registerCouponGiftCount: '',
        orderCouponId: [],
        registerCouponId: [],
        registerGiftCouponIds: []
      },
      couponList: [],
      userIds: [],
      userList: [],
      isWorking: {
        save: false
      }
@@ -90,8 +145,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 = {
@@ -99,10 +172,23 @@
          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 ? res.orderCouponId.split(',').map(item => Number(item)) : [],
          registerCouponId: res.registerCouponId ? res.registerCouponId.split(',').map(item => Number(item)) : [],
          registerGiftCouponIds: res.registerGiftCouponIds ? res.registerGiftCouponIds.split(',').map(item => Number(item)) : []
        }
        if (this.form.noGrabNotifyUsers) {
          this.userIds = this.form.noGrabNotifyUsers.split(',')
        }
      }).catch(e => {
        this.$tip.apiFailed(e)
@@ -110,7 +196,16 @@
    },
    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(',')
      }
      submitForm.orderCouponId = submitForm.orderCouponId.join(',')
      submitForm.registerCouponId = submitForm.registerCouponId.join(',')
      submitForm.registerGiftCouponIds = submitForm.registerGiftCouponIds.join(',')
      saveParams(submitForm).then(res => {
        this.$tip.apiSuccess(res || '保存成功')
      }).catch(e => {
        this.$tip.apiFailed(e)
@@ -125,6 +220,9 @@
<style scoped>
.params-container {
  padding: 20px;
  overflow: auto;
  display: block;
  background-color: #fff;
}
.section {
  margin-bottom: 40px;