MrShi
6 天以前 02f424925fbafc0e6e94f82afd4189c277daed89
城市
已添加2个文件
已删除1个文件
已修改3个文件
630 ■■■■ 文件已修改
admin/src/api/business/pricingRule.js 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/shopInfo.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/store.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCityPriceRuleWindow.vue 451 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/area.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/storeList.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/pricingRule.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/business/areas/page', data, {
    trim: true
  })
}
// åˆ›å»º
export function create (data) {
  return request.post('/business/areas/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/business/areas/updateById', data)
}
// æŸ¥è¯¢å°±åœ°å­˜å–规则列表
export function localStorage (cityId) {
  return request.get(`/business/pricingRule/localStorage/list?cityId=${cityId}`)
}
// æŸ¥è¯¢å¼‚地寄送规则列表
export function remoteDelivery (cityId) {
  return request.get(`/business/pricingRule/remoteDelivery/list?cityId=${cityId}`)
}
// æŸ¥è¯¢å¼‚地寄送规则列表
export function estimatedDelivery (cityId) {
  return request.get(`/business/pricingRule/estimatedDelivery/list?cityId=${cityId}`)
}
// æŸ¥è¯¢é—¨åº—注册押金规则列表
export function storeDeposit (cityId) {
  return request.get(`/business/pricingRule/storeDeposit/list?cityId=${cityId}`)
}
// æŸ¥è¯¢åˆ†æˆæ¯”例规则列表
export function revenueShare (cityId) {
  return request.get(`/business/pricingRule/revenueShare/list?cityId=${cityId}`)
}
// æ‰¹é‡ä¿å­˜å°±åœ°å­˜å–规则
export function batchSave (data) {
  return request.post('/business/pricingRule/localStorage/batchSave', data)
}
// æ‰¹é‡ä¿å­˜å¼‚地寄送规则
export function batchSaveRemoteDelivery (data) {
  return request.post('/business/pricingRule/remoteDelivery/batchSave', data)
}
// æ‰¹é‡ä¿å­˜é¢„计时效配置
export function batchSaveEstimatedDelivery (data) {
  return request.post('/business/pricingRule/estimatedDelivery/save', data)
}
// æ‰¹é‡ä¿å­˜é—¨åº—注册押金规则
export function batchSaveStoreDeposit (data) {
  return request.post('/business/pricingRule/storeDeposit/batchSave', data)
}
// æ‰¹é‡ä¿å­˜åˆ†æˆæ¯”例规则
export function batchSaveRevenueShare (data) {
  return request.post('/business/pricingRule/revenueShare/batchSave', data)
}
admin/src/api/business/shopInfo.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
import request from '../../utils/request'
export function fetchList (data) {
  return request.post('/business/shopInfo/page', data, {
    trim: true
  })
}
export function create (data) {
  return request.post('/business/shopInfo/create', data)
}
export function updateStatus (data) {
  return request.post('/business/shopInfo/updateStatus', data)
}
export function updateById (data) {
  return request.post('/business/shopInfo/updateById', data)
}
export function deleteById (id) {
  return request.get(`/business/shopInfo/delete/${id}`)
}
export function deleteByIdInBatch (ids) {
  return request.get('/business/shopInfo/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/api/business/store.js
ÎļþÒÑɾ³ý
admin/src/components/business/OperaCityPriceRuleWindow.vue
@@ -8,19 +8,9 @@
      <el-tab-pane label="就地寄存" name="local">
        <div class="price-tip">根据行李尺寸以及存放天数收费(不足一天按一天计价)</div>
        <div class="price-items">
          <div class="price-item">
            <span class="price-label">其中大件行李每天收费</span>
            <el-input style="width: 200px;" v-model="form.bigPriceDay" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">元</span>
          </div>
          <div class="price-item">
            <span class="price-label">其中中件行李每天收费</span>
            <el-input style="width: 200px;" v-model="form.mediumPriceDay" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">元</span>
          </div>
          <div class="price-item">
            <span class="price-label">其中小件行李每天收费</span>
            <el-input style="width: 200px;" v-model="form.smallPriceDay" type="number" placeholder="请输入"></el-input>
          <div class="price-item" v-for="(item, index) in jiudiTableData" :key="index">
            <span class="price-label">其中{{item.categoryName}}每天收费</span>
            <el-input style="width: 200px;" v-model="item.unitPrice" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">元</span>
          </div>
        </div>
@@ -31,25 +21,25 @@
          <span class="remote-tip">根据行李尺寸、配送里程及配送价格收取费用(不足1公里按1公里计价)</span>
        </div>
        <el-table :data="remoteTableData" border stripe>
          <el-table-column prop="baggageSize" label="行李尺寸" min-width="100px"></el-table-column>
          <el-table-column prop="deliveryDistance" label="起送里程(公里)" min-width="120px">
          <el-table-column prop="categoryName" label="行李尺寸"></el-table-column>
          <el-table-column label="起送里程(公里)">
            <template slot-scope="{row}">
              <el-input v-model="row.deliveryDistance" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.startDistance" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="deliveryPrice" label="起送价格(元)" min-width="140px">
          <el-table-column label="起送价格(元)">
            <template slot-scope="{row}">
              <el-input v-model="row.deliveryPrice" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.startPrice" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="sortnum" label="续送里程(公里)" min-width="80px">
          <el-table-column label="续送里程(公里)">
            <template slot-scope="{row}">
              <el-input v-model="row.sortnum" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.extraDistance" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="sortnum" label="续送价格(元)" min-width="80px">
          <el-table-column label="续送价格(元)">
            <template slot-scope="{row}">
              <el-input v-model="row.sortnum" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.extraPrice" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
        </el-table>
@@ -60,24 +50,24 @@
          <span class="remote-tip">根据配送里程预计配送时长并展示在小程序下单页面</span>
        </div>
        <el-table :data="timeTableData" border stripe>
          <el-table-column prop="deliveryDistance" label="起送里程(公里)" min-width="120px">
          <el-table-column label="起送里程(公里)">
            <template slot-scope="{row}">
              <el-input v-model="row.deliveryDistance" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.startDistance" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="deliveryHours" label="起送时长(小时)" min-width="120px">
          <el-table-column label="起送时长(小时)">
            <template slot-scope="{row}">
              <el-input v-model="row.deliveryHours" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.startTime" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="sortnum" label="续送里程(公里)" min-width="80px">
          <el-table-column label="续送里程(公里)">
            <template slot-scope="{row}">
              <el-input v-model="row.sortnum" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.continueDistance" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
          <el-table-column prop="sortnum" label="续送时长(小时)" min-width="80px">
          <el-table-column label="续送时长(小时)">
            <template slot-scope="{row}">
              <el-input v-model="row.sortnum" type="number" placeholder="请输入"></el-input>
              <el-input v-model="row.continueTime" type="number" placeholder="请输入"></el-input>
            </template>
          </el-table-column>
        </el-table>
@@ -85,14 +75,9 @@
      <el-tab-pane label="门店注册押金" name="deposit">
        <div class="price-tip">根据所在城市以及注册类型不同,平台收取不同数额押金。押金会在门店退网后线下原额退还(门店线上微信支付的押金因微信官方要求具有时效性)</div>
        <div class="price-items">
          <div class="price-item">
            <span class="price-label">其中企业收取押金</span>
            <el-input style="width: 200px;" v-model="form.corporateDepositAmount" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">元</span>
          </div>
          <div class="price-item">
            <span class="price-label">其中个人收取押金</span>
            <el-input style="width: 200px;" v-model="form.personalDepositAmount" type="number" placeholder="请输入"></el-input>
          <div class="price-item" v-for="(item, index) in storeDepositData" :key="index">
            <span class="price-label">其中{{item.fieldTypeName}}收取押金</span>
            <el-input style="width: 200px;" v-model="item.depositAmount" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">元</span>
          </div>
        </div>
@@ -100,29 +85,9 @@
      <el-tab-pane label="分成比例" name="share">
        <div class="price-tip">根据订单中不同运营角色而独立配置不同分成比例</div>
        <div class="price-items">
          <div class="price-item">
            <span class="price-label">其中门店类型为企业并在订单中作为寄件点时,分成比例为</span>
            <el-input style="width: 100px;" v-model="form.corporateSenderRatio" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">%</span>
          </div>
          <div class="price-item">
            <span class="price-label">其中门店类型为个人并在订单中作为寄件点时,分成比例为</span>
            <el-input style="width: 100px;" v-model="form.personalSenderRatio" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">%</span>
          </div>
          <div class="price-item">
            <span class="price-label">其中门店类型为企业并在订单中作为收件点时,分成比例为</span>
            <el-input style="width: 100px;" v-model="form.corporateReceiverRatio" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">%</span>
          </div>
          <div class="price-item">
            <span class="price-label">其中门店类型为个人并在订单中作为收件点时,分成比例为</span>
            <el-input style="width: 100px;" v-model="form.personalReceiverRatio" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">%</span>
          </div>
          <div class="price-item">
            <span class="price-label">在订单中作为配送员时,分成比例为</span>
            <el-input style="width: 100px;" v-model="form.deliverRatio" type="number" placeholder="请输入"></el-input>
          <div class="price-item" v-for="(item, index) in shareTableData" :key="index">
            <span class="price-label">{{item.fieldType === 4 ? '在订单中作为配送员时,' : '其中门店类型为'}}{{item.fieldTypeName}}分成比例为</span>
            <el-input style="width: 100px;" v-model="item.ratio" type="number" placeholder="请输入"></el-input>
            <span class="price-unit">%</span>
          </div>
        </div>
@@ -138,7 +103,18 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { fetchPriceRule } from '@/api/business/areas'
import {
  localStorage,
  remoteDelivery,
  estimatedDelivery,
  storeDeposit,
  revenueShare,
  batchSave,
  batchSaveRemoteDelivery,
  batchSaveEstimatedDelivery,
  batchSaveStoreDeposit,
  batchSaveRevenueShare
} from '@/api/business/pricingRule'
export default {
  name: 'OperaCityPriceRuleWindow',
  extends: BaseOpera,
@@ -146,50 +122,21 @@
  data () {
    return {
      activeTab: 'local',
      remoteTableData: [
        { size: 1, a: '', b: '', c: '', d: '' }
      ],
      remotePageIndex: 1,
      remotePageSize: 5,
      remoteTotal: 0,
      jiudiTableData: [],
      remoteTableData: [],
      timeTableData: [],
      timePageIndex: 1,
      timePageSize: 5,
      timeTotal: 0,
      storeDepositData: [],
      shareTableData: [],
      form: {
        id: null,
        cityName: '',
        bigPrice: '大件',
        bigPriceDay: null,
        mediumPrice: '中件',
        mediumPriceDay: null,
        smallPrice: '小件',
        smallPriceDay: null,
        remoteBigPrice: '大件',
        remoteBigPriceDay: null,
        remoteMediumPrice: '中件',
        remoteMediumPriceDay: null,
        remoteSmallPrice: '小件',
        remoteSmallPriceDay: null,
        timeLimit: '',
        corporateDeposit: '企业',
        corporateDepositAmount: null,
        personalDeposit: '个人',
        personalDepositAmount: null,
        corporateType: '企业',
        corporateSenderRatio: null,
        corporateReceiverRatio: null,
        personalType: '个人',
        personalSenderRatio: null,
        personalReceiverRatio: null,
        deliverType: '配送员',
        deliverRatio: null
        cityId: null
      }
    }
  },
  created () {
    this.config({
      api: '/business/area',
      api: '/business/pricingRule',
      'field.id': 'id'
    })
  },
@@ -198,80 +145,91 @@
      this.title = title
      this.visible = true
      this.activeTab = 'local'
      this.jiudiTableData = []
      this.remoteTableData = []
      this.remotePageIndex = 1
      this.remoteTotal = 0
      this.timeTableData = [{
        deliveryDistance: null,
        deliveryHours: null,
        sortnum: null
      }]
      this.timePageIndex = 1
      this.timeTotal = 0
      this.timeTableData = []
      this.storeDepositData = []
      this.shareTableData = []
      this.form = {
        id: target.id,
        cityName: target.name,
        bigPrice: '大件',
        bigPriceDay: null,
        mediumPrice: '中件',
        mediumPriceDay: null,
        smallPrice: '小件',
        smallPriceDay: null,
        remoteBigPrice: '大件',
        remoteBigPriceDay: null,
        remoteMediumPrice: '中件',
        remoteMediumPriceDay: null,
        remoteSmallPrice: '小件',
        remoteSmallPriceDay: null,
        timeLimit: '',
        corporateDeposit: '企业',
        corporateDepositAmount: null,
        personalDeposit: '个人',
        personalDepositAmount: null,
        corporateType: '企业',
        corporateSenderRatio: null,
        corporateReceiverRatio: null,
        personalType: '个人',
        personalSenderRatio: null,
        personalReceiverRatio: null,
        deliverType: '配送员',
        deliverRatio: null
        cityId: target
      }
      this.loadPriceRule(target.id)
      this.fetchPriceRule()
      this.fetchRemoteDelivery()
      this.fetchEstimatedDelivery()
      this.fetchStoreDeposit()
      this.fetchRevenueShare()
    },
    loadPriceRule (cityId) {
      fetchPriceRule({ cityId }).then(res => {
        if (res) {
          try {
            const data = typeof res === 'string' ? JSON.parse(res) : res
            if (data.remoteList && Array.isArray(data.remoteList)) {
              this.remoteTableData = data.remoteList
              this.remoteTotal = data.remoteList.length
            }
            if (data.timeList && Array.isArray(data.timeList)) {
              this.timeTableData = data.timeList
              this.timeTotal = data.timeList.length
            }
            Object.assign(this.form, data)
          } catch (e) {
            console.error('Parse price rule failed', e)
          }
        }
      }).catch(e => {
        this.$tip.apiFailed(e)
      })
    // æŸ¥è¯¢å°±åœ°å­˜å–规则列表
    fetchPriceRule () {
      localStorage(this.form.cityId)
        .then(data => {
          this.jiudiTableData = data
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
    },
    // æŸ¥è¯¢å¼‚地寄送规则列表
    fetchRemoteDelivery () {
      remoteDelivery(this.form.cityId)
        .then(data => {
          this.remoteTableData = data
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
    },
    // æŸ¥è¯¢å¼‚地寄送规则列表
    fetchEstimatedDelivery () {
      estimatedDelivery(this.form.cityId)
        .then(data => {
          this.timeTableData = [
            data
          ]
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
    },
    // æŸ¥è¯¢é—¨åº—注册押金规则列表
    fetchStoreDeposit () {
      storeDeposit(this.form.cityId)
        .then(data => {
          this.storeDepositData = data
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
    },
    // æŸ¥è¯¢åˆ†æˆæ¯”例规则列表
    fetchRevenueShare () {
      revenueShare(this.form.cityId)
        .then(data => {
          this.shareTableData = data
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
    },
    // ä¿å­˜æ‰€æœ‰è§„则
    confirm () {
      const submitData = {
        ...this.form,
        remoteList: this.remoteTableData,
        timeList: this.timeTableData
      }
      if (!this.validateLocalStorage()) return
      if (!this.validateRemoteDelivery()) return
      if (!this.validateEstimatedDelivery()) return
      if (!this.validateStoreDeposit()) return
      if (!this.validateRevenueShare()) return
      this.isWorking = true
      this.api.updateById(submitData)
      Promise.all([
        batchSave({ cityId: this.form.cityId, items: this.jiudiTableData }),
        batchSaveRemoteDelivery({ cityId: this.form.cityId, items: this.remoteTableData }),
        batchSaveEstimatedDelivery({ cityId: this.form.cityId, ...this.timeTableData[0] }),
        batchSaveStoreDeposit({ cityId: this.form.cityId, items: this.storeDepositData }),
        batchSaveRevenueShare({ cityId: this.form.cityId, items: this.shareTableData })
      ])
        .then(() => {
          this.$tip.apiSuccess('保存成功')
          this.visible = false
          this.$tip.apiSuccess('保存成功')
          this.$emit('success')
        })
        .catch(e => {
@@ -281,126 +239,60 @@
          this.isWorking = false
        })
    },
    handleAddRemote () {
      this.$prompt('请输入行李尺寸', '新增异地寄存配置', {
        inputValue: '',
        confirmButtonText: '确定',
        cancelButtonText: '取消'
      }).then(({ value }) => {
        if (!value) {
          this.$message.warning('行李尺寸不能为空')
          return
    // æ ¡éªŒå°±åœ°å¯„å­˜
    validateLocalStorage () {
      for (const item of this.jiudiTableData) {
        if (item.unitPrice === null || item.unitPrice === undefined || item.unitPrice === '') {
          this.$message.error('请填写所有就地寄存的收费金额')
          return false
        }
        this.remoteTableData.push({
          id: null,
          baggageSize: value,
          deliveryDistance: null,
          deliveryPrice: null,
          sortnum: this.remoteTableData.length + 1
        })
        this.remoteTotal = this.remoteTableData.length
      }).catch(() => {})
    },
    handleEditRemote (row, index) {
      this.$prompt('请输入行李尺寸', '编辑异地寄存配置', {
        inputValue: row.baggageSize,
        confirmButtonText: '确定',
        cancelButtonText: '取消'
      }).then(({ value }) => {
        if (!value) {
          this.$message.warning('行李尺寸不能为空')
          return
        }
        this.$prompt('请输入配送里程(公里)', '编辑配送里程', {
          inputValue: row.deliveryDistance,
          confirmButtonText: '确定',
          cancelButtonText: '取消'
        }).then(({ value: distance }) => {
          this.$prompt('请输入配送价格(每公里/元)', '编辑配送价格', {
            inputValue: row.deliveryPrice,
            confirmButtonText: '确定',
            cancelButtonText: '取消'
          }).then(({ value: price }) => {
            this.$prompt('请输入排序', '编辑排序', {
              inputValue: row.sortnum,
              confirmButtonText: '确定',
              cancelButtonText: '取消'
            }).then(({ value: sortnum }) => {
              this.$prompt('请输入行李尺寸', '编辑异地寄存配置', {
                inputValue: row.baggageSize
              })
              this.remoteTableData.splice(index, 1, {
                ...row,
                baggageSize: value,
                deliveryDistance: distance ? Number(distance) : null,
                deliveryPrice: price ? Number(price) : null,
                sortnum: sortnum ? Number(sortnum) : this.remoteTableData.length + 1
              })
            }).catch(() => {})
          }).catch(() => {})
        }).catch(() => {})
      }).catch(() => {})
    },
    handleDeleteRemote (row, index) {
      this.$confirm('确认删除该异地寄存配置吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.remoteTableData.splice(index, 1)
        this.remoteTotal = this.remoteTableData.length
      }).catch(() => {})
    },
    handleAddTime () {
      this.$refs.operaTimeRuleWindow.open('新建预计时效规则', null)
    },
    handleTimeRuleSuccess (data) {
      if (data) {
        this.timeTableData.push(data)
        this.timeTotal = this.timeTableData.length
      }
      return true
    },
    handleEditTime (row, index) {
      this.$prompt('请输入配送里程(公里)', '编辑预计时效配置', {
        inputValue: row.deliveryDistance,
        confirmButtonText: '确定',
        cancelButtonText: '取消'
      }).then(({ value }) => {
        this.$prompt('请输入配送时长(小时)', '编辑预计时效配置', {
          inputValue: row.deliveryHours,
          confirmButtonText: '确定',
          cancelButtonText: '取消'
        }).then(({ value: hours }) => {
          this.$prompt('请输入排序', '编辑预计时效配置', {
            inputValue: row.sortnum,
            confirmButtonText: '确定',
            cancelButtonText: '取消'
          }).then(({ value: sortnum }) => {
            this.timeTableData.splice(index, 1, {
              ...row,
              deliveryDistance: value ? Number(value) : null,
              deliveryHours: hours ? Number(hours) : null,
              sortnum: sortnum ? Number(sortnum) : this.timeTableData.length + 1
            })
          }).catch(() => {})
        }).catch(() => {})
      }).catch(() => {})
    // æ ¡éªŒå¼‚地寄存
    validateRemoteDelivery () {
      for (const item of this.remoteTableData) {
        if (item.startDistance === null || item.startDistance === undefined || item.startDistance === '' ||
            item.startPrice === null || item.startPrice === undefined || item.startPrice === '' ||
            item.extraDistance === null || item.extraDistance === undefined || item.extraDistance === '' ||
            item.extraPrice === null || item.extraPrice === undefined || item.extraPrice === '') {
          this.$message.error('请填写所有异地寄送的配置信息')
          return false
        }
      }
      return true
    },
    handleDeleteTime (row, index) {
      this.$confirm('确认删除该预计时效配置吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.timeTableData.splice(index, 1)
        this.timeTotal = this.timeTableData.length
      }).catch(() => {})
    // æ ¡éªŒé¢„计时效
    validateEstimatedDelivery () {
      const item = this.timeTableData[0]
      if (!item || item.startDistance === null || item.startDistance === undefined || item.startDistance === '' ||
          item.startTime === null || item.startTime === undefined || item.startTime === '' ||
          item.continueDistance === null || item.continueDistance === undefined || item.continueDistance === '' ||
          item.continueTime === null || item.continueTime === undefined || item.continueTime === '') {
        this.$message.error('请填写预计时效的所有配置信息')
        return false
      }
      return true
    },
    handleTimePageChange (page) {
      this.timePageIndex = page
    // æ ¡éªŒé—¨åº—注册押金
    validateStoreDeposit () {
      for (const item of this.storeDepositData) {
        if (item.depositAmount === null || item.depositAmount === undefined || item.depositAmount === '') {
          this.$message.error('请填写所有门店注册押金的金额')
          return false
        }
      }
      return true
    },
    handleRemotePageChange (page) {
      this.remotePageIndex = page
    // æ ¡éªŒåˆ†æˆæ¯”例
    validateRevenueShare () {
      for (const item of this.shareTableData) {
        if (item.ratio === null || item.ratio === undefined || item.ratio === '') {
          this.$message.error('请填写所有分成比例')
          return false
        }
      }
      return true
    }
  }
}
@@ -432,7 +324,8 @@
}
.dialog-footer {
  text-align: right;
  padding: 10px 20px;
  padding: 0 20px;
  box-sizing: border-box;
  border-top: 1px solid #eee;
}
.remote-config-title {
admin/src/views/business/area.vue
@@ -1,15 +1,5 @@
<template>
  <TableLayout :permissions="['business:areas: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>
      <el-table
@@ -22,7 +12,7 @@
        row-key="id"
        stripe
        border
        :height="tableHeightNew - 40"
        :height="tableHeightNew - 50"
        :header-row-class-name="'table-header'"
        class="doumee-element-table"
        @selection-change="handleSelectionChange"
@@ -52,7 +42,7 @@
          min-width="80"
        >
          <template slot-scope="{ row }">
            <el-button type="text" @click="openPriceRule(row)">计价规则</el-button>
            <el-button type="text" @click="openPriceRule(row)" v-if="row.type === 1">计价规则</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -145,7 +135,7 @@
      this.refreshLoadTree(parentId)
    },
    openPriceRule(row) {
      this.$refs.operaCityPriceRuleWindow.open('计价规则', row)
      this.$refs.operaCityPriceRuleWindow.open('计价规则', row.id)
    },
    handlePriceRuleSuccess() {
      this.$message.success('保存成功')
admin/src/views/business/storeList.vue
@@ -1,23 +1,23 @@
<template>
  <TableLayout :permissions="['business:store:query']">
  <TableLayout :permissions="['business:shopInfo: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" clearable placeholder="请输入门店名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="类型" prop="type">
        <el-select v-model="searchForm.type" clearable placeholder="请选择类型" @change="search">
      <el-form-item label="类型" prop="companyType">
        <el-select v-model="searchForm.companyType" clearable placeholder="请选择类型" @change="search">
          <el-option label="企业" :value="1"></el-option>
          <el-option label="个人" :value="2"></el-option>
          <el-option label="个人" :value="0"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="门店地址" prop="address">
        <el-input v-model="searchForm.address" clearable placeholder="请输入门店地址" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="联系人" prop="contact">
        <el-input v-model="searchForm.contact" clearable placeholder="请输入联系人" @keypress.enter.native="search"></el-input>
      <el-form-item label="联系人" prop="linkName">
        <el-input v-model="searchForm.linkName" clearable placeholder="请输入联系人" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="联系电话" prop="telephone">
        <el-input v-model="searchForm.telephone" clearable placeholder="请输入联系电话" @keypress.enter.native="search"></el-input>
      <el-form-item label="联系电话" prop="linkPhone">
        <el-input v-model="searchForm.linkPhone" clearable placeholder="请输入联系电话" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="注册时间" prop="createTime">
        <el-date-picker type="daterange" v-model="searchForm.createTime" clearable value-format="yyyy-MM-dd HH:mm:ss"
@@ -25,8 +25,9 @@
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="searchForm.status" clearable placeholder="请选择状态" @change="search">
          <el-option label="启用" :value="0"></el-option>
          <el-option label="禁用" :value="1"></el-option>
          <el-option label="待审批" :value="0"></el-option>
          <el-option label="审批通过" :value="1"></el-option>
          <el-option label="审批未通过" :value="2"></el-option>
        </el-select>
      </el-form-item>
      <section>
@@ -44,9 +45,9 @@
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="门店名称" min-width="120px"></el-table-column>
        <el-table-column prop="type" label="类型" min-width="80px">
        <el-table-column prop="companyType" label="类型" min-width="80px">
          <template slot-scope="{row}">
            {{row.type == 1 ? '企业' : '个人'}}
            {{row.companyType == 1 ? '企业' : '个人'}}
          </template>
        </el-table-column>
        <el-table-column prop="address" label="门店地址" min-width="200px"></el-table-column>
@@ -83,10 +84,10 @@
    return {
      searchForm: {
        name: '',
        type: '',
        companyType: '',
        address: '',
        contact: '',
        telephone: '',
        linkName: '',
        linkPhone: '',
        createTime: '',
        status: ''
      }
@@ -95,7 +96,7 @@
  created () {
    this.config({
      module: '门店列表',
      api: '/business/store',
      api: '/business/shopInfo',
      'field.id': 'id',
      'field.main': 'id'
    })