lilei 2 роки тому
батько
коміт
3974b995be

+ 11 - 0
src/api/dealer.js

@@ -16,6 +16,17 @@ export const dealerFindUpdateInfoBySn = (params) => {
     method: 'get'
   })
 }
+// 为分区绑定经销商查询经销商列表
+export const queryDealerPageList = (params) => {
+  const url = `/dealer/queryDealerPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
 //  经销商列表有分页
 export const dealerQueryList = (params) => {
   const url = `/dealer/queryPage/${params.pageNo}/${params.pageSize}`

+ 61 - 16
src/api/subarea.js

@@ -1,41 +1,86 @@
 import { axios } from '@/utils/request'
 
-//  查询所有分区
+//  查询区域分区信息
 export const subareaQueryAll = (params) => {
   return axios({
     url: `/subarea/queryAll`,
     method: 'get'
   })
 }
-
-// 查询包含区域的所有分区
-export const subareaQueryIncludeAreaAll = (params) => {
+// 查询区域
+export const subareaQuerySubarea = (params) => {
+  return axios({
+    url: `/subarea/querySubarea`,
+    data: params,
+    method: 'post'
+  })
+}
+// 保存区域信息
+export const subareaSaveSubarea = (params) => {
   return axios({
-    url: `/subarea/queryIncludeAreaAll`,
+    url: `/subarea/saveSubarea`,
+    data: params,
+    method: 'post'
+  })
+}
+// 查询区域下分区信息
+export const subareaQuerySubareaArea = (params) => {
+  return axios({
+    url: `/subarea/querySubareaArea`,
+    data: params,
+    method: 'post'
+  })
+}
+// 保存分区信息
+export const subareaSaveSubareaArea = (params) => {
+  return axios({
+    url: `/subarea/saveSubareaArea`,
+    data: params,
+    method: 'post'
+  })
+}
+// 根据sn删除区域信息
+export const deleteSubareaBySn = (params) => {
+  return axios({
+    url: `/subarea/deleteSubarea/${params.sn}`,
     method: 'get'
   })
 }
-
-// 根据sn删除分区信息
-export const subareaDeleteBySn = (params) => {
+//  根据sn删除分区信息
+export const deleteSubareaAreaBySn = (params) => {
   return axios({
-    url: `/subarea/deleteBySn/${params.sn}`,
+    url: `/subarea/deleteSubareaArea/${params.sn}`,
     method: 'get'
   })
 }
 
-// 根据分区sn查询选中分区
-export const subareaFindBySn = (params) => {
+// 分区批量绑定经销商
+export const batchBindDealer = (params) => {
+  return axios({
+    url: `/subareaAreaDealer/batchBind`,
+    data: params,
+    method: 'post'
+  })
+}
+// 分区绑定经销商
+export const bindDealer = (params) => {
   return axios({
-    url: `/subarea/findBySn/${params.sn}`,
+    url: `/subareaAreaDealer/bind`,
+    data: params,
+    method: 'post'
+  })
+}
+// 删除绑定关系
+export const deleteBindDealer = (params) => {
+  return axios({
+    url: `/subareaAreaDealer/deleteBind/${params.sn}`,
     method: 'get'
   })
 }
-
-// 保存选中省市区
-export const subareaSaveSubareaArea = (params) => {
+// 查询绑定经销商列表
+export const queryPageAreaDealer = (params) => {
   return axios({
-    url: `/subarea/saveSubareaArea`,
+    url: `/subareaAreaDealer/queryPage/${params.pageNo}/${params.pageSize}`,
     data: params,
     method: 'post'
   })

+ 5 - 30
src/config/router.config.js

@@ -2901,40 +2901,15 @@ export const asyncRouterMap = [
               }
             ]
           },
-          {
-            path: '/dealerManagement/marketingDivisionSet',
-            redirect: '/dealerManagement/marketingDivisionSet/list',
-            name: 'marketingDivisionSet',
-            component: BlankLayout,
-            meta: {
-              title: '营销分区设置',
-              icon: 'setting',
-              permission: 'M_marketingDivisionSetList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'marketingDivisionSetList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/marketingDivisionSet/list.vue'),
-                meta: {
-                  title: '营销分区列表',
-                  icon: 'setting',
-                  hidden: true,
-                  permission: 'M_marketingDivisionSetList'
-                }
-              }
-            ]
-          },
           {
             path: '/dealerManagement/marketingDivisionSetNew',
             redirect: '/dealerManagement/marketingDivisionSetNew/list',
             name: 'marketingDivisionSetNew',
             component: BlankLayout,
             meta: {
-              title: '营销分区设置(新版)',
-              icon: 'setting'
-              // permission: 'M_marketingDivisionSetNewList'
+              title: '营销分区设置',
+              icon: 'setting',
+              permission: 'M_marketingDivisionSetList'
             },
             hideChildrenInMenu: true,
             children: [
@@ -2945,8 +2920,8 @@ export const asyncRouterMap = [
                 meta: {
                   title: '营销分区列表',
                   icon: 'setting',
-                  hidden: true
-                  // permission: 'M_marketingDivisionSetNewList'
+                  hidden: true,
+                  permission: 'M_marketingDivisionSetList'
                 }
               }
             ]

+ 24 - 39
src/views/common/chooseDealer.vue

@@ -30,25 +30,9 @@
                 <v-select code="AUDIT_STATE" id="viewDealers-auditState" v-model="queryParam.auditState" allowClear placeholder="请选择审核状态"></v-select>
               </a-form-item>
             </a-col>
-            <a-col :md="10" :sm="24">
-              <a-form-model-item label="地址" required style="margin: 0;" :label-col="{span:4}" :wrapper-col="{span:20}">
-                <a-row :gutter="20">
-                  <a-col span="8">
-                    <a-select id="viewDealers-provinceSn" allowClear @change="getCityList" v-model="queryParam.provinceSn" placeholder="请选择省">
-                      <a-select-option v-for="item in addrProvinceList" :value="item.areaSn" :key="item.areaSn + 'a'">{{ item.name }}</a-select-option>
-                    </a-select>
-                  </a-col>
-                  <a-col span="8">
-                    <a-select id="viewDealers-citySn" allowClear @change="getAreaList" v-model="queryParam.citySn" placeholder="请选择市">
-                      <a-select-option v-for="item in addrCityList" :value="item.areaSn" :key="item.areaSn + 'b'">{{ item.name }}</a-select-option>
-                    </a-select>
-                  </a-col>
-                  <a-col span="8">
-                    <a-select id="viewDealers-districtSn" allowClear @change="areaCharged" v-model="queryParam.districtSn" placeholder="请选择区/县">
-                      <a-select-option v-for="item in addrDistrictList" :value="item.areaSn" :key="item.areaSn + 'c'">{{ item.name }}</a-select-option>
-                    </a-select>
-                  </a-col>
-                </a-row>
+            <a-col :md="8" :sm="24">
+              <a-form-model-item label="地区">
+                  <AreaList id="viewDealers-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
               </a-form-model-item>
             </a-col>
           </div>
@@ -85,8 +69,8 @@
           size="small"
           type="link"
           class="button-error"
-          @click="handleDel(record)"
-          id="marketingDivisionSetNew-del-btn">删除</a-button>
+          @click="handleAdd(record)"
+          id="marketingDivisionSetNew-del-btn">添加</a-button>
       </template>
     </s-table>
   </a-spin>
@@ -95,12 +79,13 @@
 <script>
 import { commonMixin } from '@/utils/mixin'
 import { STable, VSelect } from '@/components'
-import { stockPutList, stockPutConfirm } from '@/api/stockPut'
+import AreaList from '@/views/common/areaList.js'
+import { queryDealerPageList } from '@/api/dealer'
 import subarea from '@/views/common/subarea.js'
 export default {
   name: 'ChooseDealer',
   mixins: [commonMixin],
-  components: { STable, VSelect, subarea },
+  components: { STable, VSelect, subarea, AreaList },
   props: {
     pageType: {
       type: String,
@@ -123,7 +108,7 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        return stockPutList(Object.assign(parameter, this.queryParam, { confirm: true })).then(res => {
+        return queryDealerPageList(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -161,11 +146,19 @@ export default {
     rowSelectionFun (obj) {
       this.rowSelectionInfo = obj || null
     },
+    areaChange(val){
+      this.queryParam.provinceSn = val[0] ? val[0] : ''
+      this.queryParam.citySn = val[1] ? val[1] : ''
+      this.queryParam.districtSn = val[2] ? val[2] : ''
+    },
     //  重置
     resetSearchForm () {
-      this.queryParam.stockPutNo = ''
-      this.queryParam.auditState = undefined
       this.$refs.table.refresh(true)
+      this.rowSelectionInfo = null
+    },
+    clearTable(){
+      this.rowSelectionInfo = null
+      this.$refs.table.clearTable()
     },
     // 批量添加
     handleBatchAudit () {
@@ -176,14 +169,16 @@ export default {
       }
       this.isBatch = true
       this.confirmationModal = true
+    },
+    handleAdd(row){
+
     },
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
-      this.rowSelectionInfo = null
-      this.$refs.table.clearTable()
+      this.resetSearchForm()
     },
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
@@ -197,21 +192,11 @@ export default {
   },
   mounted () {
     if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
-      // this.pageInit()
       this.resetSearchForm()
     }
   },
   activated () {
-    // 如果是新页签打开,则重置当前页面
-    if (this.$store.state.app.isNewTab) {
-      this.pageInit()
-      this.resetSearchForm()
-    }
-    // 仅刷新列表,不重置页面
-    if (this.$store.state.app.updateList) {
-      this.pageInit()
-      this.$refs.table.refresh()
-    }
+    this.pageInit()
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 0 - 354
src/views/dealerManagement/marketingDivisionSet/editModal.vue

@@ -1,354 +0,0 @@
-<template>
-  <a-modal
-    centered
-    class="marketingDivisionSetEdit-modal"
-    :footer="null"
-    :maskClosable="false"
-    :title="modalTit"
-    v-model="isShow"
-    @cancel="isShow=false"
-    :width="800">
-    <!-- 表单 -->
-    <div>
-      <a-spin :spinning="spinning" tip="Loading...">
-        <a-form-model
-          id="marketingDivisionSetEdit-form"
-          ref="ruleForm"
-          :model="form"
-          :rules="rules"
-          :label-col="formItemLayout.labelCol"
-          :wrapper-col="formItemLayout.wrapperCol"
-        >
-          <a-form-model-item label="分区名称" prop="subareaName">
-            <a-input
-              id="marketingDivisionSetEdit-subareaName"
-              :maxLength="30"
-              v-model.trim="form.subareaName"
-              @change="filterEmpty"
-              placeholder="请输入分区名称(最多30个字符)"
-              allowClear />
-          </a-form-model-item>
-          <a-form-model-item label="省份/市" required>
-            <div class="tree-node" id="treeNode">
-              <div class="tree-box" v-for="item in addrProvinceList" :key="item.id">
-                <div class="tree-parent">
-                  <span>
-                    <a-checkbox style="width: 100%;" :indeterminate="item.indeterminate" v-model="item.checked" @change="onChange(item,$event)">
-                      {{ item.name }}
-                      <!-- <i style="font-size: 12px;color: #999;font-style: normal;">(已选 {{ item.children | hasCheckChild }} 个市区)</i> -->
-                    </a-checkbox>
-                  </span>
-                  <span @click="expend(item)"><a-icon :title="item.isOpen==0?'展开':'收起'" :type="item.isOpen==0?'plus-square':'minus-square'" /></span>
-                </div>
-
-                <!-- 子级 -->
-                <div v-show="item.isOpen==1" class="tree-child">
-                  <div v-for="child in item.children" :key="child.id">
-                    <a-checkbox v-model="child.checked" style="width: 100%;" @change="onChange(child,$event,item)">
-                      {{ child.name }}
-                    </a-checkbox>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </a-form-model-item>
-        </a-form-model>
-        <div class="btn-cont">
-          <a-button type="primary" id="marketingDivisionSetEdit-modal-save" @click="handleSave">保存</a-button>
-          <a-button id="marketingDivisionSetEdit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
-        </div>
-      </a-spin>
-    </div>
-  </a-modal>
-</template>
-
-<script>
-import { STable, Upload } from '@/components'
-import Editor from '@/components/WEeditor'
-import { getArea } from '@/api/data'
-import { subareaSaveSubareaArea, subareaFindBySn } from '@/api/subarea'
-export default {
-  name: 'MarketingDivisionSetEditModal',
-  components: { STable, Upload, Editor },
-  props: {
-    openModal: { //  弹框显示状态
-      type: Boolean,
-      default: false
-    },
-    itemId: {
-      type: [Number, String],
-      default: ''
-    },
-    nowData: {
-      type: Object,
-      default: null
-    }
-  },
-  computed: {
-    modalTit () {
-      return (this.itemId ? '编辑' : '新增') + '分区'
-    }
-  },
-  filters: {
-    hasCheckChild: function (value) {
-      return value.filter(item => item.checked).length
-    }
-  },
-  data () {
-    return {
-      isShow: this.openModal, //  是否打开弹框
-      spinning: false,
-      formItemLayout: {
-        labelCol: { span: 4 },
-        wrapperCol: { span: 18 }
-      },
-      form: {
-        subareaName: '' // 分区名称
-      },
-      rules: {
-        subareaName: [
-          { required: true, message: '请输入分区名称', trigger: 'blur' }
-        ]
-      },
-      addrProvinceList: [], //  省下拉
-      subareaAreaList: []
-    }
-  },
-  methods: {
-    filterEmpty () {
-      let str = this.form.subareaName
-      str = str.replace(/\ +/g, '')
-      str = str.replace(/[ ]/g, '')
-      str = str.replace(/[\r\n]/g, '')
-      this.form.subareaName = str
-    },
-    onChange (item, e, parent) {
-      // console.log(item, `checked = ${e.target.checked}`)
-      item.checked = e.target.checked
-      item.noSave = false
-      // 父级
-      if (item.type == 2) {
-        item.children && item.children.map(d => {
-          d.checked = item.checked
-        })
-        item.indeterminate = false
-      }
-      // 子级
-      if (item.type == 3) {
-        // 父级节点
-        const hasCheckd = parent.children.filter(k => k.checked)
-        // 是否全选
-        parent.checked = hasCheckd.length == parent.children.length
-        parent.children.map(d => d.noSave = parent.checked)
-        // indeterminate为true,则为全选,false则为部分选择或者空
-        parent.indeterminate = ((hasCheckd.length < parent.children.length) && (hasCheckd.length != 0))
-      }
-      this.addrProvinceList = JSON.parse(JSON.stringify(this.addrProvinceList))
-    },
-    // 展开收起
-    expend (item) {
-      if (item.children && item.children.length == 0) {
-        item.isOpen = 1
-        this.getArea('city', item, 1)
-      } else {
-        item.isOpen = !item.isOpen
-      }
-    },
-    //  省/市/区
-    getArea (leve, item, openType) {
-      let params
-      if (leve == 'province') {
-        params = { type: '2' }
-      } else {
-        params = { parentId: item.areaSn, type: leve == 'city' ? '3' : '4' }
-      }
-      getArea(params).then(res => {
-        if (res.status == 200) {
-          if (leve == 'province') {
-            this.addrProvinceList = res.data || []
-            this.addrProvinceList.map(item => {
-              item.noSave = true
-              item.checked = false
-              item.children = []
-              item.indeterminate = false
-            })
-            // 编辑时获取已选数据
-            if (this.itemId) {
-              this.getChecked()
-            }
-            document.getElementById('treeNode').scrollTop = 0
-          } else if (leve == 'city') {
-            item.children = res.data || []
-            item.children.map(d => {
-              // 编辑时回显
-              if (this.itemId && openType == 0) {
-                d.checked = !!this.subareaAreaList.find(o => o.areaSn == d.areaSn)
-                d.noSave = false
-              } else {
-                d.checked = item.checked
-                d.noSave = true
-              }
-            })
-
-            // 首次加载子级
-            if (openType == 1) {
-              this.addrProvinceList = JSON.parse(JSON.stringify(this.addrProvinceList))
-            } else {
-              item.isOpen = 1
-              item.indeterminate = true
-            }
-          }
-        } else {
-          if (leve == 'province') {
-            this.addrProvinceList = []
-          } else if (leve == 'city') {
-            item.children = []
-            item.isOpen = 0
-          }
-        }
-      })
-    },
-    // 过滤数据
-    filterData (list) {
-      list.map(item => {
-        if (item.checked && !item.noSave) {
-          this.subareaAreaList.push({
-            areaSn: item.areaSn,
-            areaName: item.name,
-            areaType: item.type,
-            areaParentSn: item.parentId
-          })
-        } else {
-          if (item.children && item.children.length) {
-            this.filterData(item.children)
-          }
-        }
-      })
-    },
-    //  保存
-    handleSave () {
-      const _this = this
-      _this.$refs.ruleForm.validate(valid => {
-        if (valid) {
-          const formData = JSON.parse(JSON.stringify(_this.form))
-          this.subareaAreaList = []
-          this.filterData(this.addrProvinceList)
-          // console.log(this.subareaAreaList)
-          if (this.subareaAreaList.length == 0) {
-            this.$message.info('请先选择省份/市')
-            return
-          }
-          // 编辑
-          if (this.itemId) {
-            formData.subareaSn = this.itemId
-          }
-          formData.subareaAreaList = this.subareaAreaList
-          // console.log(formData, 'formData')
-          _this.spinning = true
-          subareaSaveSubareaArea(formData).then(res => {
-            if (res.status == 200) {
-              _this.$message.success(res.message)
-              _this.$emit('ok')
-              _this.isShow = false
-              _this.spinning = false
-            } else {
-              _this.spinning = false
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-    // 编辑
-    getChecked () {
-      subareaFindBySn({ sn: this.itemId }).then(res => {
-        // console.log(res.data)
-        this.form.subareaName = res.data.subareaName
-        this.subareaAreaList = res.data.subareaAreaList
-        this.form.subareaSn = res.data.subareaSn
-        this.form.id = res.data.id
-        // 回显数据
-        this.showChecked()
-      })
-    },
-    showChecked () {
-      // 省回显
-      this.addrProvinceList.map(item => {
-        item.checked = !!this.subareaAreaList.find(d => d.areaSn == item.areaSn)
-        item.noSave = false
-        item.indeterminate = false
-      })
-      // 市回显
-      const hasCity = this.nowData.subareaAreaList.filter(item => item.citySubareaAreaList && item.citySubareaAreaList.length)
-      // console.log(hasCity, 'hasCity.nowData')
-      hasCity.map(item => {
-        // 省
-        const pre = this.addrProvinceList.find(k => k.areaSn == item.areaSn)
-        // 获取子级
-        this.getArea('city', pre, 0)
-      })
-    }
-  },
-  watch: {
-    //  父页面传过来的弹框状态
-    openModal (newValue, oldValue) {
-      this.isShow = newValue
-    },
-    //  重定义的弹框状态
-    isShow (newValue, oldValue) {
-      if (!newValue) {
-        this.$emit('close')
-        this.form.subareaName = ''
-        this.form.subareaSn = ''
-        delete this.form.id
-      } else {
-        this.getArea('province')
-      }
-    }
-  }
-}
-</script>
-
-<style lang="less">
-  .marketingDivisionSetEdit-modal{
-    .ant-modal-body {
-      padding: 40px 40px 24px;
-    }
-    .btn-cont {
-      text-align: center;
-      margin: 35px 0 10px;
-    }
-    .tree-node{
-      height: 300px;
-      overflow: auto;
-      .tree-box{
-        .tree-parent{
-          display: flex;
-          align-items: center;
-          border-bottom: 1px solid #eee;
-          padding: 0 10px;
-          > span{
-            margin:0 5px;
-            &:first-child{
-              flex-grow: 1;
-            }
-            &:last-child{
-              cursor: pointer;
-            }
-          }
-        }
-        .tree-child{
-          padding: 10px 10px 10px 35px;
-          display: flex;
-          align-items: center;
-          flex-wrap:wrap ;
-          > div{
-            margin:0 5px;
-          }
-        }
-      }
-
-    }
-  }
-</style>

+ 0 - 187
src/views/dealerManagement/marketingDivisionSet/list.vue

@@ -1,187 +0,0 @@
-<template>
-  <a-card size="small" :bordered="false" class="marketingDivisionSetList-wrap">
-    <a-spin :spinning="spinning" tip="Loading...">
-      <!-- 操作按钮 -->
-      <div ref="tableSearch" class="table-operator" style="border: 0;">
-        <a-button id="marketingDivisionSetList-add" type="primary" v-if="$hasPermissions('B_marketingDivisionSet_add')" class="button-error" @click="handleEdit()">新增</a-button>
-      </div>
-      <!-- 列表 -->
-      <s-table
-        class="sTable fixPagination"
-        ref="table"
-        :style="{ height: tableHeight+84.5+'px' }"
-        size="small"
-        :rowKey="(record) => record.id"
-        :columns="columns"
-        :showPagination="false"
-        :data="loadData"
-        :scroll="{ y: tableHeight }"
-        :defaultLoadData="false"
-        bordered>
-        <!-- 市区 -->
-        <template slot="cityArea" slot-scope="text, record">
-          <div style="display: inline-block;margin-right: 15px;" v-for="item in record.subareaAreaList" :key="item.id">
-            {{ item.areaName }}
-            <span v-if="item.citySubareaAreaList">(</span>
-            <span style="color: #999;margin:0 3px;" v-for="area in item.citySubareaAreaList" :key="area.id">
-              {{ area.areaName }}
-            </span>
-            <span v-if="item.citySubareaAreaList">)</span>
-          </div>
-        </template>
-        <!-- 操作 -->
-        <template slot="action" slot-scope="text, record">
-          <a-button
-            size="small"
-            type="link"
-            v-if="$hasPermissions('B_marketingDivisionSet_edit')"
-            class="button-info"
-            @click="handleEdit(record)"
-            id="marketingDivisionSetList-edit-btn">编辑</a-button>
-          <a-button
-            size="small"
-            type="link"
-            v-if="$hasPermissions('B_marketingDivisionSet_del')"
-            class="button-error"
-            @click="handleDel(record)"
-            id="marketingDivisionSetList-del-btn">删除</a-button>
-          <span v-if="!$hasPermissions('B_marketingDivisionSet_edit') && !$hasPermissions('B_marketingDivisionSet_del')">--</span>
-        </template>
-      </s-table>
-    </a-spin>
-    <!-- 编辑分区 -->
-    <marketing-division-set-edit-modal
-      v-drag
-      :nowData="nowData"
-      :openModal="openModal"
-      :itemId="itemId"
-      @ok="$refs.table.refresh()"
-      @close="closeModal" />
-  </a-card>
-</template>
-
-<script>
-import { commonMixin } from '@/utils/mixin'
-import { STable, VSelect } from '@/components'
-import marketingDivisionSetEditModal from './editModal.vue'
-import { subareaQueryIncludeAreaAll, subareaDeleteBySn } from '@/api/subarea'
-export default {
-  name: 'MarketingDivisionSetList',
-  mixins: [commonMixin],
-  components: { STable, VSelect, marketingDivisionSetEditModal },
-  data () {
-    return {
-      spinning: false,
-      disabled: false, //  查询、重置按钮是否可操作
-      tableHeight: 0,
-      columns: [
-        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
-        { title: '分区名', dataIndex: 'subareaName', width: '30%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '省份/市', scopedSlots: { customRender: 'cityArea' }, align: 'left', width: '55%' },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width: '10%', align: 'center' }
-      ],
-      // 加载数据方法 必须为 Promise 对象
-      loadData: parameter => {
-        this.disabled = true
-        this.spinning = true
-        return subareaQueryIncludeAreaAll(parameter).then(res => {
-          let data
-          if (res.status == 200) {
-            data = res.data
-            const no = 0
-            for (var i = 0; i < data.length; i++) {
-              data[i].no = no + i + 1
-            }
-            this.disabled = false
-          }
-          this.spinning = false
-          return data
-        })
-      },
-      openModal: false, //  编辑  弹框
-      nowData: null,
-      itemId: null //  当前产品id
-    }
-  },
-  methods: {
-    //  重置
-    resetSearchForm () {
-      this.$refs.table.refresh(true)
-    },
-    // 删除
-    handleDel (row) {
-      const _this = this
-      this.$confirm({
-        title: '提示',
-        content: '确认要删除吗?',
-        centered: true,
-        onOk () {
-          _this.spinning = true
-          subareaDeleteBySn({ sn: row.subareaSn }).then(res => {
-            if (res.status == 200) {
-              _this.$message.success(res.message)
-              _this.$refs.table.refresh()
-              _this.spinning = false
-            } else {
-              _this.spinning = false
-            }
-          })
-        }
-      })
-    },
-    //  编辑
-    handleEdit (row) {
-      this.itemId = row && row.subareaSn ? row.subareaSn : null
-      this.nowData = row
-      this.openModal = true
-    },
-    //  关闭弹框
-    closeModal () {
-      this.itemId = null
-      this.nowData = null
-      this.openModal = false
-    },
-    pageInit () {
-      const _this = this
-      this.$nextTick(() => { // 页面渲染完成后的回调
-        _this.setTableH()
-      })
-    },
-    setTableH () {
-      const tableSearchH = this.$refs.tableSearch.offsetHeight
-      this.tableHeight = window.innerHeight - tableSearchH - 195
-    }
-  },
-  watch: {
-    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
-      this.setTableH()
-    }
-  },
-  mounted () {
-    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
-      this.pageInit()
-      this.resetSearchForm()
-    }
-  },
-  activated () {
-    // 如果是新页签打开,则重置当前页面
-    if (this.$store.state.app.isNewTab) {
-      this.pageInit()
-      this.resetSearchForm()
-    }
-    // 仅刷新列表,不重置页面
-    if (this.$store.state.app.updateList) {
-      this.pageInit()
-      this.$refs.table.refresh()
-    }
-  },
-  beforeRouteEnter (to, from, next) {
-    next(vm => {})
-  }
-}
-</script>
-<style lang="less">
-  .marketingDivisionSetList-wrap{
-    height: 100%;
-  }
-</style>

+ 31 - 15
src/views/dealerManagement/marketingDivisionSetNew/addAreaModal.vue

@@ -39,15 +39,18 @@
 </template>
 
 <script>
-import { STable, Upload } from '@/components'
-import { subareaSaveSubareaArea } from '@/api/subarea'
+import { subareaSaveSubarea, subareaQuerySubarea } from '@/api/subarea'
 export default {
   name: 'MarketingDivisionSetEditModal',
-  components: { STable, Upload },
+  components: { },
   props: {
     openModal: { //  弹框显示状态
       type: Boolean,
       default: false
+    },
+    itemId: {
+      type: String,
+      default: ''
     }
   },
   computed: {
@@ -64,37 +67,44 @@ export default {
         wrapperCol: { span: 18 }
       },
       form: {
-        subareaName: '' // 区名称
+        subareaName: '' // 区名称
       },
       rules: {
         subareaName: [
-          { required: true, message: '请输入区名称', trigger: 'blur' }
+          { required: true, message: '请输入区名称', trigger: 'blur' }
         ]
       }
     }
   },
   methods: {
+    filterEmpty () {
+      let str = this.form.subareaName
+      str = str.replace(/\ +/g, '')
+      str = str.replace(/[ ]/g, '')
+      str = str.replace(/[\r\n]/g, '')
+      this.form.subareaName = str
+    },
+    getDetail(){
+      this.spinning = true
+      subareaQuerySubarea({subareaSn: this.itemId}).then(res=>{
+        if(res.status == 200){
+          this.form.subareaName = res.data[0].subareaName
+        }
+        this.spinning = false
+      })
+    },
     //  保存
     handleSave () {
       const _this = this
       _this.$refs.ruleForm.validate(valid => {
         if (valid) {
           const formData = JSON.parse(JSON.stringify(_this.form))
-          this.subareaAreaList = []
-          this.filterData(this.addrProvinceList)
-          // console.log(this.subareaAreaList)
-          if (this.subareaAreaList.length == 0) {
-            this.$message.info('请先选择省份/市')
-            return
-          }
           // 编辑
           if (this.itemId) {
             formData.subareaSn = this.itemId
           }
-          formData.subareaAreaList = this.subareaAreaList
-          // console.log(formData, 'formData')
           _this.spinning = true
-          subareaSaveSubareaArea(formData).then(res => {
+          subareaSaveSubarea(formData).then(res => {
             if (res.status == 200) {
               _this.$message.success(res.message)
               _this.$emit('ok')
@@ -119,6 +129,12 @@ export default {
     isShow (newValue, oldValue) {
       if (!newValue) {
         this.$emit('close')
+        this.$refs.ruleForm.resetFields()
+        this.form.subareaName = ''
+      }else{
+        if(this.itemId){
+          this.getDetail()
+        }
       }
     }
   }

+ 32 - 20
src/views/dealerManagement/marketingDivisionSetNew/addZoneModal.vue

@@ -11,18 +11,18 @@
     <!-- 表单 -->
     <a-form-model
       ref="ruleForm"
-      :model="zoneForm"
+      :model="form"
       :rules="zoneRules"
       :label-col="formItemLayout.labelCol"
       :wrapper-col="formItemLayout.wrapperCol"
     >
-      <a-form-model-item label="区域" prop="subareaName">
-        区域区域区域
+      <a-form-model-item label="所属区域">
+        {{ parentData&&parentData.subareaName }}
       </a-form-model-item>
-      <a-form-model-item label="分区名称" prop="subareaName">
+      <a-form-model-item label="分区名称" prop="subareaAreaName">
         <a-input
           :maxLength="30"
-          v-model.trim="zoneForm.subareaName"
+          v-model.trim="form.subareaAreaName"
           @change="filterEmpty"
           placeholder="请输入分区名称(最多30个字符)"
           allowClear />
@@ -36,7 +36,7 @@
 </template>
 
 <script>
-import { subareaSaveSubareaArea } from '@/api/subarea'
+import { subareaSaveSubareaArea, subareaQuerySubareaArea } from '@/api/subarea'
 export default {
   name: 'MarketingDivisionSetEditModal',
   components: { },
@@ -44,11 +44,17 @@ export default {
     openModal: { //  弹框显示状态
       type: Boolean,
       default: false
+    },
+    parentData: {
+      type: Object,
+      default: function(){
+        return null
+      }
     }
   },
   computed: {
     modalTit () {
-      return (this.itemId ? '编辑' : '新增') + '分区'
+      return (this.parentData&&this.parentData.subareaAreaSn ? '编辑' : '新增') + '分区'
     }
   },
   data () {
@@ -59,35 +65,35 @@ export default {
         labelCol: { span: 4 },
         wrapperCol: { span: 18 }
       },
-      zoneForm: {
-        subareaName: '' // 分区名称
+      form: {
+        subareaAreaName: '' // 分区名称
       },
       zoneRules: {
-        subareaName: [
+        subareaAreaName: [
           { required: true, message: '请输入分区名称', trigger: 'blur' }
         ]
       }
     }
   },
   methods: {
+    filterEmpty () {
+      let str = this.form.subareaAreaName
+      str = str.replace(/\ +/g, '')
+      str = str.replace(/[ ]/g, '')
+      str = str.replace(/[\r\n]/g, '')
+      this.form.subareaAreaName = str
+    },
     //  保存
     handleSave () {
       const _this = this
       _this.$refs.ruleForm.validate(valid => {
         if (valid) {
           const formData = JSON.parse(JSON.stringify(_this.form))
-          this.subareaAreaList = []
-          this.filterData(this.addrProvinceList)
-          // console.log(this.subareaAreaList)
-          if (this.subareaAreaList.length == 0) {
-            this.$message.info('请先选择省份/市')
-            return
-          }
           // 编辑
-          if (this.itemId) {
-            formData.subareaSn = this.itemId
+          if (this.parentData.subareaAreaSn) {
+            formData.subareaAreaSn = this.parentData.subareaAreaSn
           }
-          formData.subareaAreaList = this.subareaAreaList
+          formData.subareaSn = this.parentData.subareaSn
           // console.log(formData, 'formData')
           _this.spinning = true
           subareaSaveSubareaArea(formData).then(res => {
@@ -115,6 +121,12 @@ export default {
     isShow (newValue, oldValue) {
       if (!newValue) {
         this.$emit('close')
+        this.$refs.ruleForm.resetFields()
+        this.form.subareaAreaName = ''
+      }else{
+        if (this.parentData.subareaAreaSn) {
+          this.form.subareaAreaName = this.parentData.subareaAreaName
+        }
       }
     }
   }

+ 38 - 10
src/views/dealerManagement/marketingDivisionSetNew/list.vue

@@ -18,19 +18,24 @@
         :scroll="{ y: tableHeight }"
         :defaultLoadData="false"
         bordered>
+        <template slot="titles" slot-scope="text, record">
+          {{ record.type && record.type == 'root' ? record.subareaName : record.subareaAreaName }}
+        </template>
         <!-- 操作 -->
         <template slot="action" slot-scope="text, record">
           <a-button
             size="small"
             type="link"
-            class="button-success"
+            class="button-info"
+            v-if="record.type && record.type == 'root'"
             @click="addZone(record)"
             id="marketingDivisionSetNew-edit-btn">新增分区</a-button>
           <a-button
             size="small"
             type="link"
             class="button-success"
-            @click="openDealerModal=true"
+            v-else
+            @click="handleView(record)"
             id="marketingDivisionSetNew-edit-btn">查看经销商</a-button>
           <a-button
             size="small"
@@ -51,17 +56,20 @@
     <addAreaModal
       v-drag
       :openModal="openAreaModal"
+      :itemId="itemId"
       @ok="$refs.table.refresh()"
       @close="openAreaModal=false"></addAreaModal>
     <!-- 新增分区 -->
     <addZoneModal
       v-drag
       :openModal="openZoneModal"
+      :parentData="parentData"
       @ok="$refs.table.refresh()"
       @close="openZoneModal=false"></addZoneModal>
     <!-- 查看经销商 -->
     <viewDealers
       :showModal="openDealerModal"
+      :parentData="parentData"
       @close="openDealerModal=false"></viewDealers>
   </a-card>
 </template>
@@ -72,7 +80,7 @@ import { STable, VSelect } from '@/components'
 import addAreaModal from './addAreaModal.vue'
 import addZoneModal from './addZoneModal.vue'
 import viewDealers from './viewDealers.vue'
-import { subareaQueryIncludeAreaAll, subareaDeleteBySn } from '@/api/subarea'
+import { subareaQueryAll, deleteSubareaBySn, deleteSubareaAreaBySn } from '@/api/subarea'
 export default {
   name: 'MarketingDivisionSetNew',
   mixins: [commonMixin],
@@ -85,35 +93,42 @@ export default {
       openZoneModal: false,
       openDealerModal: false,
       columns: [
-        { title: '区域分区', dataIndex: 'subareaName', width: '70%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '区域分区', scopedSlots: { customRender: 'titles' }, width: '70%', align: 'left' },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '30%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.spinning = true
-        return subareaQueryIncludeAreaAll(parameter).then(res => {
+        return subareaQueryAll(parameter).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
             const no = 0
             for (var i = 0; i < data.length; i++) {
               data[i].no = no + i + 1
+              data[i].children = data[i].subareaAreaList || undefined
+              data[i].type = 'root'
             }
           }
           this.spinning = false
           return data
         })
-      }
+      },
+      itemId: null,
+      parentData: null
     }
   },
   methods: {
     // 新增区域
     addArea () {
+      this.itemId = null
       this.openAreaModal = true
     },
     // 新增分区
     addZone (row) {
+      console.log(row)
       this.openZoneModal = true
+      this.parentData = row
     },
     // 删除
     handleDel (row) {
@@ -124,7 +139,9 @@ export default {
         centered: true,
         onOk () {
           _this.spinning = true
-          subareaDeleteBySn({ sn: row.subareaSn }).then(res => {
+          const delFun = row.type && row.type == 'root' ? deleteSubareaBySn : deleteSubareaAreaBySn
+          const params = { sn: row.type && row.type == 'root' ? row.subareaSn : row.subareaAreaSn }
+          delFun(params).then(res => {
             if (res.status == 200) {
               _this.$message.success(res.message)
               _this.$refs.table.refresh()
@@ -138,9 +155,20 @@ export default {
     },
     //  编辑
     handleEdit (row) {
-      this.itemId = row && row.subareaSn ? row.subareaSn : null
-      this.nowData = row
-      this.openModal = true
+      // 大区
+      if(row.type && row.type == 'root'){
+        this.itemId = row && row.subareaSn ? row.subareaSn : null
+        this.openAreaModal = true
+      }else{
+        // 分区
+        this.parentData = row
+        this.openZoneModal = true
+      }
+    },
+    // 查看经销商
+    handleView(row){
+      this.parentData = row
+      this.openDealerModal=true
     },
     pageInit () {
       const _this = this

+ 47 - 108
src/views/dealerManagement/marketingDivisionSetNew/viewDealers.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <a-drawer
-      title="选择区域"
+      title="查看经销商"
       width="80%"
       :zIndex="100"
       :visible="visible"
@@ -24,7 +24,7 @@
                 </a-form-item>
               </a-col>
               <a-col :md="8" :sm="24">
-                <a-form-model-item label="商户级别" prop="dealerLevel">
+                <a-form-model-item label="商户级别">
                   <v-select code="DEALER_LEVEL" id="viewDealers-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
                 </a-form-model-item>
               </a-col>
@@ -33,27 +33,11 @@
                   <v-select code="AUDIT_STATE" id="viewDealers-auditState" v-model="queryParam.auditState" allowClear placeholder="请选择审核状态"></v-select>
                 </a-form-item>
               </a-col>
-              <a-col :md="10" :sm="24">
-                <a-form-model-item label="地址" required style="margin: 0;" :label-col="{span:4}" :wrapper-col="{span:20}">
-                  <a-row :gutter="20">
-                    <a-col span="8">
-                      <a-select id="viewDealers-provinceSn" allowClear @change="getCityList" v-model="queryParam.provinceSn" placeholder="请选择省">
-                        <a-select-option v-for="item in addrProvinceList" :value="item.areaSn" :key="item.areaSn + 'a'">{{ item.name }}</a-select-option>
-                      </a-select>
-                    </a-col>
-                    <a-col span="8">
-                      <a-select id="viewDealers-citySn" allowClear @change="getAreaList" v-model="queryParam.citySn" placeholder="请选择市">
-                        <a-select-option v-for="item in addrCityList" :value="item.areaSn" :key="item.areaSn + 'b'">{{ item.name }}</a-select-option>
-                      </a-select>
-                    </a-col>
-                    <a-col span="8">
-                      <a-select id="viewDealers-districtSn" allowClear @change="areaCharged" v-model="queryParam.districtSn" placeholder="请选择区/县">
-                        <a-select-option v-for="item in addrDistrictList" :value="item.areaSn" :key="item.areaSn + 'c'">{{ item.name }}</a-select-option>
-                      </a-select>
-                    </a-col>
-                  </a-row>
-                </a-form-model-item>
-              </a-col>
+              <a-col :md="8" :sm="24">
+              <a-form-model-item label="地区">
+                  <AreaList id="viewDealers-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+              </a-form-model-item>
+            </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
                 <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="viewDealers-refresh">查询</a-button>
                 <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="viewDealers-reset">重置</a-button>
@@ -78,8 +62,7 @@
             class="sTable"
             ref="table"
             size="small"
-            :rowKey="(record) => record.stockPutSn"
-            rowKeyName="stockPutSn"
+            :rowKey="(record) => record.id"
             :columns="columns"
             :data="loadData"
             :style="{ height: tableHeight+84.5+'px' }"
@@ -93,7 +76,7 @@
 
     <!-- 绑定经销商 -->
     <a-drawer
-      title="选择经销商"
+      title="绑定经销商"
       width="68%"
       :zIndex="200"
       :visible="openAddDealer"
@@ -101,7 +84,7 @@
       :wrap-style="{ position: 'absolute' }"
       @close="openAddDealer = false">
       <div class="dealerModalCon">
-        <chooseDealer pageType="viewDealers"></chooseDealer>
+        <chooseDealer v-if="openAddDealer" pageType="viewDealers"></chooseDealer>
       </div>
     </a-drawer>
   </div>
@@ -111,14 +94,22 @@
 import { commonMixin } from '@/utils/mixin'
 import { STable, VSelect } from '@/components'
 import chooseDealer from '@/views/common/chooseDealer.vue'
+import AreaList from '@/views/common/areaList.js'
 import { Empty } from 'ant-design-vue'
+import { queryPageAreaDealer } from '@/api/subarea'
 export default {
   mixins: [commonMixin],
-  components: { STable, VSelect, chooseDealer },
+  components: { STable, VSelect, chooseDealer, AreaList },
   props: {
     showModal: {
       type: Boolean,
       default: false
+    },
+    parentData: {
+      type: Object,
+      default: function(){
+        return null
+      }
     }
   },
   watch: {
@@ -128,6 +119,8 @@ export default {
     visible (newValue, oldValue) {
       if (!newValue) {
         this.$emit('close')
+      }else{
+        this.pageInit()
       }
     },
     '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
@@ -140,12 +133,12 @@ export default {
       spinning: false,
       visible: this.showModal,
       openAddDealer: false,
-      flag: false,
+      flag: true,
       queryParam: { //  查询条件
         nameLike: '',
         dealerType: null,
         dealerLevel: null,
-        auditState: null,
+        auditState: undefined,
         provinceSn: undefined,
         citySn: undefined,
         districtSn: undefined
@@ -167,7 +160,7 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        return stockPutList(Object.assign(parameter, this.queryParam, { confirm: true })).then(res => {
+        return queryPageAreaDealer(Object.assign(parameter, this.queryParam, {subareaSn: this.parentData.subareaSn, subareaAreaSn: this.parentData.subareaAreaSn})).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -181,94 +174,40 @@ export default {
   },
 
   methods: {
-    resetSearchForm () {},
+    resetSearchForm () {
+      this.queryParam = {
+        nameLike: '',
+        dealerType: null,
+        dealerLevel: null,
+        auditState: undefined,
+        provinceSn: undefined,
+        citySn: undefined,
+        districtSn: undefined
+      }
+      this.$refs.table.refresh(true)
+    },
+    areaChange(val){
+      this.queryParam.provinceSn = val[0] ? val[0] : ''
+      this.queryParam.citySn = val[1] ? val[1] : ''
+      this.queryParam.districtSn = val[2] ? val[2] : ''
+    },
+   async hasData(){
+      const ret = queryPageAreaDealer({pageNo:1,pageSize:10,subareaSn: this.parentData.subareaSn, subareaAreaSn: this.parentData.subareaAreaSn}).then(res => res.data)
+      this.flag = ret.count == 0
+    },
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
-      _this.getArea('province')
+      // 判断是已绑定数据
+      this.hasData()
     },
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 345
-    },
-    // 获取区县列表
-    getAreaList (val) {
-      this.addrDistrictList = []
-      this.queryParam.districtSn = undefined
-      if (val) {
-        this.getArea('district', val)
-        this.queryParam.cityName = this.addrCityList.find(item => item.areaSn == val).name
-      } else {
-        this.queryParam.cityName = ''
-      }
-    },
-    // 获取城市列表
-    getCityList (val) {
-      this.addrCityList = []
-      this.addrDistrictList = []
-      this.queryParam.citySn = undefined
-      this.queryParam.districtSn = undefined
-      if (val) {
-        this.getArea('city', val)
-        this.queryParam.provinceName = this.addrProvinceList.find(item => item.areaSn == val).name
-      } else {
-        this.queryParam.provinceName = ''
-      }
-    },
-    // 区县变更
-    areaCharged (val) {
-      if (val) {
-        this.queryParam.districtName = this.addrDistrictList.find(item => item.areaSn == val).name
-      } else {
-        this.queryParam.districtName = ''
-      }
-    },
-    //  省/市/区
-    getArea (leve, sn) {
-      let params
-      if (leve == 'province') {
-        params = { type: '2' }
-      } else {
-        params = { parentId: sn, type: leve == 'city' ? '3' : '4' }
-      }
-      getArea(params).then(res => {
-        if (res.status == 200) {
-          if (leve == 'province') {
-            this.addrProvinceList = res.data || []
-          } else if (leve == 'city') {
-            this.addrCityList = res.data || []
-          } else if (leve == 'district') {
-            this.addrDistrictList = res.data || []
-          }
-        } else {
-          if (leve == 'province') {
-            this.addrProvinceList = []
-          } else if (leve == 'city') {
-            this.addrCityList = []
-          } else if (leve == 'district') {
-            this.addrDistrictList = []
-          }
-        }
-      })
-    }
-  },
-  mounted () {
-    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
-      this.pageInit()
     }
   },
-  activated () {
-    // 如果是新页签打开,则重置当前页面
-    if (this.$store.state.app.isNewTab) {
-      this.pageInit()
-    }
-    // 仅刷新列表,不重置页面
-    if (this.$store.state.app.updateList) {
-      this.pageInit()
-    }
-  }
 }
 </script>
 

+ 2 - 2
vue.config.js

@@ -107,9 +107,9 @@ const vueConfig = {
     // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
     proxy: {
       '/api': {
-        // target: 'http://192.168.0.216/ocs-admin',
+        target: 'http://192.168.16.104:8660/ocs-admin',
         // target: 'https://t.ocs.360arrow.com/ocs-admin', //  练习
-        target: 'http://p.ocs.360arrow.com/ocs-admin', //  预发布
+        // target: 'http://p.ocs.360arrow.com/ocs-admin', //  预发布
         ws: false,
         changeOrigin: true,
         pathRewrite: {