浏览代码

Merge branch 'develop_yh36_2' of http://git.chelingzhu.com/jianguan-web/jg-ocs-html into pre-release

lilei 1 年之前
父节点
当前提交
9b244488af
共有 30 个文件被更改,包括 1266 次插入71 次删除
  1. 1 1
      public/version.json
  2. 11 0
      src/api/salesReturnDetail.js
  3. 95 0
      src/api/serviceCenter.js
  4. 2 2
      src/components/index.less
  5. 37 0
      src/config/router.config.js
  6. 3 1
      src/libs/versionUpdate.js
  7. 2 1
      src/store/modules/app.js
  8. 8 1
      src/views/common/custList.vue
  9. 2 2
      src/views/dealerManagement/dealerRelationshipBinding/list.vue
  10. 10 3
      src/views/dealerManagement/merchantInfoManagement/list.vue
  11. 5 2
      src/views/dealerManagement/merchantInfoManagement/updateDealerLevel.vue
  12. 169 0
      src/views/dealerManagement/provincialWarehouseManagement/addModal.vue
  13. 206 0
      src/views/dealerManagement/provincialWarehouseManagement/chooseDealer.vue
  14. 227 0
      src/views/dealerManagement/provincialWarehouseManagement/list.vue
  15. 315 0
      src/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue
  16. 33 9
      src/views/dealerManagement/rebateSettings/associateModal.vue
  17. 3 2
      src/views/dealerManagement/rebateSettings/list.vue
  18. 26 9
      src/views/dealerManagement/rebateSettings/queryChild.vue
  19. 13 0
      src/views/promotionRulesManagement/dealerPromotions/detailModal.vue
  20. 35 7
      src/views/promotionRulesManagement/dealerPromotions/lookUpCustomersModal.vue
  21. 5 0
      src/views/promotionRulesManagement/promotionManagement/chooseDealer.vue
  22. 2 2
      src/views/reportData/priceDifferenceDetailReport/list.vue
  23. 1 1
      src/views/salesManagement/outboundOrder/list.vue
  24. 14 1
      src/views/salesManagement/salesList/list.vue
  25. 1 1
      src/views/salesManagement/shortageStatisticsP/list.vue
  26. 1 0
      src/views/salesReturnManagement/billOfLading/add.vue
  27. 1 1
      src/views/salesReturnManagement/pickUp/list.vue
  28. 5 5
      src/views/salesReturnManagement/salesReturn/list.vue
  29. 32 19
      src/views/salesReturnManagement/salesReturn/salesReturnEdit.vue
  30. 1 1
      vue.config.js

+ 1 - 1
public/version.json

@@ -1,4 +1,4 @@
 {
-    "version": "2.2.33",
+    "version": "2.2.36",
     "message": "发现有新版本发布,确定更新系统?"
 }

+ 11 - 0
src/api/salesReturnDetail.js

@@ -86,6 +86,17 @@ export const salesReturnDetailSetReason = (params) => {
     }
   })
 }
+// 整单修改退货原因
+export const salesReturnUpdateAllReason = (params) => {
+  return axios({
+    url: '/salesReturn/detail/updateAllReason',
+    data: params,
+    method: 'post',
+    headers:{
+        'module': encodeURIComponent('整单设置退货原因')
+    }
+  })
+}
 // 生成新的销退单
 export const salesReturnAgainCreate = (params) => {
   return axios({

+ 95 - 0
src/api/serviceCenter.js

@@ -0,0 +1,95 @@
+import { axios } from '@/utils/request'
+
+//  仓库列表  有分页
+export const serviceCenterList = (params) => {
+  const url = `/serviceCenter/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+// 省仓新增
+export const serviceCenterAdd = (params) => {
+  return axios({
+    url: '/serviceCenter/insert',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('新增')
+    }
+  })
+}
+
+// 启用禁用
+export const provincialWarehouseEnable = (params) => {
+  return axios({
+    url: '/serviceCenter/enableflag',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent(params.enableFlag == 1 ? '启用' : '禁用')
+    }
+  })
+}
+
+// 关联经销商
+export const serviceCenterBinding = (params) => {
+  return axios({
+    url: '/serviceCenter/binding',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('关联经销商')
+    }
+  })
+}
+
+// 省仓客户
+export const queryServiceCenterDealerPage = (params) => {
+  const url = `/serviceCenter/queryServiceCenterDealerPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('省仓客户')
+    }
+  })
+}
+
+// 省仓客户  解绑
+export const serviceCenterUnbinding = (params) => {
+  return axios({
+    url: '/serviceCenter/unbinding',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('解绑省仓客户')
+    }
+  })
+}
+ 
+   
+  
+ 
+//省仓客户  导出
+export const serviceCenterExport = (params) => {
+  return axios({
+    url: '/serviceCenter/excel',
+    data: params,
+    method: 'post',
+    responseType: 'blob',
+    headers:{
+      'module': encodeURIComponent('导出')
+    }
+  })
+}

+ 2 - 2
src/components/index.less

@@ -352,11 +352,11 @@
 .header-bar{
   margin:6px auto;
   .subTitle-word{
-    font-size: 16px;
+    font-size: 14px;
     font-weight: 600;
     display: inline-block;
     vertical-align: middle;
-    color: #333 !important;
+    color: #666;
   }
 }
 

+ 37 - 0
src/config/router.config.js

@@ -3083,6 +3083,43 @@ export const asyncRouterMap = [
               }
             ]
           },
+          {
+            path: '/dealerManagement/provincialWarehouseManagement',
+            redirect: '/dealerManagement/provincialWarehouseManagement/list',
+            name: 'provincialWarehouse',
+            component: BlankLayout,
+            meta: {
+              title: '省仓管理',
+              icon: 'share-alt',
+              permission: 'M_provincialWarehouse'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'provincialWarehouseList',
+                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/provincialWarehouseManagement/list.vue'),
+                meta: {
+                  title: '省仓管理列表',
+                  icon: 'share-alt',
+                  hidden: true,
+                  permission: 'M_provincialWarehouseList'
+                }
+              },
+              {
+                path: 'relatedDealers/:sn/:name',
+                name: 'relatedDealersList',
+                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue'),
+                meta: {
+                  title: '省仓关联经销商',
+                  icon: 'share-alt',
+                  hidden: true,
+                  replaceTab: true,
+                  permission: 'M_relatedDealersList'
+                }
+              }
+            ]
+          },
           {
             path: '/dealerManagement/marketingDivisionSetNew',
             redirect: '/dealerManagement/marketingDivisionSetNew/list',

+ 3 - 1
src/libs/versionUpdate.js

@@ -12,8 +12,10 @@ const isNewVersion = () => {
           title: '提示',
           content: message,
           onOk () {
+            localStorage.clear()
+            sessionStorage.clear()
             localStorage.setItem('vueVersion-ocs', vueVersion)
-            window.location.reload()
+            window.location.reload(true)
           }
         })
       } else {

+ 2 - 1
src/store/modules/app.js

@@ -106,7 +106,8 @@ const app = {
           'salesReturn/detail/deleteByCustomerService',
           'salesReturn/detail/deleteByReceiver',
           'salesReturn/detail/insertByReceive',
-          'salesReturn/detail/insertByCustomerService'
+          'salesReturn/detail/insertByCustomerService',
+          'salesReturn/detail/updateAllReason'
           ],
         timeStr: ''
       },

+ 8 - 1
src/views/common/custList.vue

@@ -40,7 +40,11 @@ export default {
       type: String,
       default: '请输入名称搜索'
     },
-    cooperateFlag: {
+    cooperateFlag: { // 合作关系
+      type: String,
+      default: undefined
+    },
+    dealerLevel: { // 商户级别
       type: String,
       default: undefined
     }
@@ -70,6 +74,9 @@ export default {
         if (this.cooperateFlag) {
           params.cooperateFlag = this.cooperateFlag
         }
+        if (this.dealerLevel) {
+          params.dealerLevel = this.dealerLevel
+        }
       }
       dealerQueryList(params).then(res => {
         if (fetchId !== this.lastFetchId) {

+ 2 - 2
src/views/dealerManagement/dealerRelationshipBinding/list.vue

@@ -149,7 +149,7 @@ export default {
     getSubItem (record) {
       this.innerData = []
       this.spinning = true
-      querySubList({ parentDealerSn: record.dealerSn }).then(res => {
+      querySubList({ parentDealerSn: record.dealerSn, relationType: 'PARENT' }).then(res => {
         if (res.status == 200 && res.data && res.data.length) {
           this.innerData = res.data
         } else {
@@ -251,7 +251,7 @@ export default {
         }
       })
     },
-    setHtable(){
+    setHtable () {
       this.tableHeight = window.innerHeight - 346
     }
   },

+ 10 - 3
src/views/dealerManagement/merchantInfoManagement/list.vue

@@ -15,13 +15,18 @@
                 <a-input id="merchantInfoManagementList-nameLike" v-model.trim="queryParam.nameLike" allowClear placeholder="请输入商户名称/别名"/>
               </a-form-item>
             </a-col>
-            <a-col :md="5" :sm="24">
+            <a-col :md="6" :sm="24">
               <a-form-item label="商户类型">
                 <v-select code="DEALER_TYPE" id="merchantInfoManagementList-dealerType" v-model="queryParam.dealerType" allowClear placeholder="请选择商户类型"></v-select>
               </a-form-item>
             </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="商户级别">
+                <v-select code="DEALER_LEVEL" id="merchantInfoManagementList-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
+              </a-form-item>
+            </a-col>
             <template v-if="advanced">
-              <a-col :md="7" :sm="24">
+              <a-col :md="6" :sm="24">
                 <a-form-item label="审核状态">
                   <v-select code="AUDIT_STATE" id="merchantInfoManagementList-auditState" v-model="queryParam.auditState" allowClear placeholder="请选择审核状态"></v-select>
                 </a-form-item>
@@ -32,7 +37,7 @@
                 </a-form-item>
               </a-col>
             </template>
-            <a-col :md="7" :sm="24" style="margin-bottom: 10px;">
+            <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
               <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="merchantInfoManagementList-refresh">查询</a-button>
               <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="merchantInfoManagementList-reset">重置</a-button>
               <a-button
@@ -124,6 +129,7 @@ export default {
       queryParam: { //  查询条件
         nameLike: '', //  商户名称、别名
         dealerType: undefined, //  商户类型
+        dealerLevel: undefined, // 商户级别
         subareaArea: {
           subareaSn: undefined, //  区域
           subareaAreaSn: undefined // 分区
@@ -189,6 +195,7 @@ export default {
       this.queryParam = {
         nameLike: '', //  商户名称、别名
         dealerType: undefined, //  商户类型
+        dealerLevel: undefined, // 商户级别
         subareaArea: {
           subareaSn: undefined,
           subareaAreaSn: undefined

+ 5 - 2
src/views/dealerManagement/merchantInfoManagement/updateDealerLevel.vue

@@ -64,7 +64,8 @@ export default {
           { required: true, message: '请选择商户级别', trigger: 'change' }
         ]
       },
-      dealerLevelBak: undefined
+      dealerLevelBak: undefined,
+      isProvincialCustomers: ''
     }
   },
   methods: {
@@ -73,15 +74,17 @@ export default {
       this.form.dealerName = row.dealerName
       this.form.dealerLevel = row.dealerLevel
       this.dealerLevelBak = row.dealerLevel
+      this.isProvincialCustomers = row.serviceCenterSn ? '1' : '0'// 是否是省仓客户
     },
     onSubmit () {
       const _this = this
       this.$refs.ruleForm.validate(valid => {
         if (valid) {
           if (_this.dealerLevelBak && _this.form.dealerLevel != _this.dealerLevelBak) {
+            const tipInfo = _this.isProvincialCustomers === '1' ? '经销商上下级、差价归属和省仓客户' : '经销商上下级和差价归属'
             this.$confirm({
               title: '提示',
-              content: '商户价格级别变更后,该商户关联的经销商关系绑定将同步解除,确定变更该商户级别吗?',
+              content: <div>商户价格级别变更后,该商户关联的<span style="color:red;">{tipInfo}</span>关系绑定将同步解除,确定变更该商户级别吗?</div>,
               centered: true,
               onOk () {
                 _this.submitForm()

+ 169 - 0
src/views/dealerManagement/provincialWarehouseManagement/addModal.vue

@@ -0,0 +1,169 @@
+<template>
+  <a-modal
+    centered
+    class="addProvincialWarehouse-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancel="isShow=false"
+    :width="500">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <!-- 表单 -->
+      <a-form-model
+        ref="ruleForm"
+        :model="form"
+        :rules="zoneRules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+        :hideRequiredMark="true"
+      >
+        <a-form-model-item label="设为省仓" prop="serviceCenterName">
+          <custList
+            id="dealerZoneSearch-dealerName"
+            cooperateFlag="1"
+            dealerLevel="PROVINCE"
+            placeholder="请输入经销商名称搜索"
+            ref="indirectDealer"
+            @change="dealerChange" />
+        </a-form-model-item>
+      </a-form-model>
+      <div class="btn-cont">
+        <a-button id="addProvincialWarehouse-modal-back" @click="isShow = false" >取消</a-button>
+        <a-button type="primary" style="margin-left: 15px;" id="addProvincialWarehouse-modal-save" @click="handleSave">保存</a-button>
+      </div>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import custList from '@/views/common/custList.vue'
+import { serviceCenterAdd } from '@/api/serviceCenter'
+export default {
+  name: 'AddProvincialWarehouseModal',
+  components: { custList },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    parentData: {
+      type: Object,
+      default: function () {
+        return null
+      }
+    }
+  },
+  computed: {
+    modalTit () {
+      return (this.parentData && this.parentData.subareaAreaSn ? '编辑' : '新增') + '省仓'
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      spinning: false,
+      formItemLayout: {
+        labelCol: { span: 4 },
+        wrapperCol: { span: 18 }
+      },
+      form: {
+        serviceCenterSn: undefined, // 经销商sn
+        serviceCenterName: undefined// 经销商名称
+      },
+      zoneRules: {
+        serviceCenterName: [
+          { required: true, message: '请输入经销商名称', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+    // 选择经销商
+    dealerChange (val) {
+      this.form.serviceCenterSn = val.key
+      this.form.serviceCenterName = val.key ? (val.label.replace('\n', '')).trim() : ''
+    },
+    //  保存
+    handleSave () {
+      const _this = this
+      _this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          const formData = JSON.parse(JSON.stringify(_this.form))
+          _this.spinning = true
+          serviceCenterAdd(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
+        }
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.$refs.indirectDealer.resetForm()
+        this.form.serviceCenterSn = undefined
+        this.form.serviceCenterName = undefined
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .addProvincialWarehouse-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>

+ 206 - 0
src/views/dealerManagement/provincialWarehouseManagement/chooseDealer.vue

@@ -0,0 +1,206 @@
+<template>
+  <a-spin :spinning="spinning" tip="Loading...">
+    <!-- 搜索条件 -->
+    <div ref="tableSearch" class="table-page-search-wrapper newTableSearchName">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <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="8" :sm="24">
+            <a-form-item label="经销商名称/别名">
+              <a-input id="chooseDealer-nameLike" v-model.trim="queryParam.nameLike" allowClear placeholder="请输入经销商名称/别名"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="24">
+            <a-form-item label="商户类型">
+              <v-select code="DEALER_TYPE" id="chooseDealer-dealerType" v-model="queryParam.dealerType" allowClear placeholder="请选择商户类型"></v-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="24">
+            <a-form-model-item label="商户级别" prop="dealerLevel">
+              <v-select code="DEALER_LEVEL" id="ucModal-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :md="8" :sm="24">
+            <a-form-item label="所在区域/分区">
+              <subarea id="chooseDealer-subarea" ref="subarea" @change="subareaChange"></subarea>
+            </a-form-item>
+          </a-col>
+          <a-col :md="8" :sm="24" style="margin-bottom: 10px;">
+            <a-button type="primary" @click="searchForm(true)" :disabled="disabled" id="chooseDealer-refresh">查询</a-button>
+            <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="chooseDealer-reset">重置</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+      <!-- 列表 -->
+      <div style="margin-bottom: 10px">
+        <a-button type="primary" ghost :loading="loading" @click="handleBatchAudit">批量添加</a-button>
+        <span style="margin-left: 5px">
+          <template v-if="selectCount"> {{ `已选 ${selectCount} 项` }} </template>
+        </span>
+      </div>
+    </div>
+    <s-table
+      class="sTable fixPagination"
+      ref="table"
+      :style="{ height: tableHeight+70+'px' }"
+      :scroll="{ y: tableHeight -30 }"
+      :rowKey="(record) => record.dealerSn"
+      rowKeyName="dealerSn"
+      :columns="columns"
+      :data="loadData"
+      :row-selection="{ columnWidth: 40 }"
+      @rowSelection="rowSelectionFun"
+      :defaultLoadData="false"
+      bordered>
+      <!-- 地区 -->
+      <template slot="addressInfo" slot-scope="text, record">
+        {{ record.provinceName }}{{ '-'+ record.cityName }}{{ '-'+ record.districtName }}
+      </template>
+    </s-table>
+  </a-spin>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import AreaList from '@/views/common/areaList.js'
+import subarea from '@/views/common/subarea.js'
+import { getDealerListInfo, dealerQueryList } from '@/api/dealer'
+export default {
+  name: 'ChooseDealer',
+  mixins: [commonMixin],
+  components: { STable, VSelect, subarea, AreaList },
+  props: {
+    pageType: {
+      type: String,
+      default: 'dealerPromotion'
+    },
+    itemSn: {
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      tableHeight: 0,
+      spinning: false,
+      queryParam: { //  查询条件
+        nameLike: '',
+        dealerType: null,
+        dealerLevel: null,
+        subareaArea: {
+          subareaSn: undefined, //  区域
+          subareaAreaSn: undefined // 分区
+        },
+        auditState: undefined,
+        provinceSn: undefined,
+        citySn: undefined,
+        districtSn: undefined
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      loading: false, // 批量添加loading,
+      rowSelectionInfo: null,
+      columns: [
+        { title: '经销商名称', dataIndex: 'dealerName', width: '30%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '商户别名', dataIndex: 'dealerAlias', align: 'left', width: '30%', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '商户类型', dataIndex: 'dealerTypeDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '商户级别', dataIndex: 'dealerLevelDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '地区', scopedSlots: { customRender: 'addressInfo' }, width: '30%', align: 'center', ellipsis: true },
+        { title: '所在区域', dataIndex: 'subareaArea.subareaName', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '所在分区', dataIndex: 'subareaArea.subareaAreaName', width: '20%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        this.queryParam.notDealerSn = this.itemSn
+        this.queryParam.pageType = this.pageType
+        return dealerQueryList(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      }
+    }
+  },
+  computed: {
+    selectCount () {
+      return this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length
+    }
+  },
+  methods: {
+    // 表格选中项
+    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] : ''
+    },
+    searchForm () {
+      this.$refs.table.refresh()
+    },
+    subareaChange (val) {
+      this.queryParam.subareaArea.subareaSn = val[0] ? val[0] : undefined
+      this.queryParam.subareaArea.subareaAreaSn = val[1] ? val[1] : undefined
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam = {
+        nameLike: '',
+        dealerType: null,
+        dealerLevel: null,
+        subareaArea: {
+          subareaSn: undefined, //  区域
+          subareaAreaSn: undefined // 分区
+        },
+        auditState: undefined,
+        provinceSn: undefined,
+        citySn: undefined,
+        districtSn: undefined
+      }
+      this.$refs.subarea.clearData()
+      this.$refs.areaList.clearData()
+      this.$refs.table.refresh()
+    },
+    clearSelect () {
+      this.$refs.table.clearSelected()
+    },
+    // 批量添加
+    handleBatchAudit () {
+      const _this = this
+      if (_this.rowSelectionInfo && _this.rowSelectionInfo.selectedRowKeys && _this.rowSelectionInfo.selectedRowKeys.length < 1) {
+        _this.$message.warning('请在列表勾选后再进行批量操作!')
+        return
+      }
+      this.$emit('plAdd', _this.rowSelectionInfo.selectedRows)
+    },
+    pageInit (data) {
+      this.setTableH()
+      this.$refs.table.refresh()
+    },
+    setTableH () {
+      const headHeight = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - headHeight - 190
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  }
+}
+</script>

+ 227 - 0
src/views/dealerManagement/provincialWarehouseManagement/list.vue

@@ -0,0 +1,227 @@
+<template>
+  <div>
+    <a-card size="small" :bordered="false" class="provincialWarehouse-wrap searchBoxNormal">
+      <!-- 搜索条件 -->
+      <div ref="tableSearch" class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="省仓名称">
+                <a-input id="provincialWarehouse-name" v-model.trim="queryParam.serviceCenterName" allowClear placeholder="请输入省仓名称"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="省仓客户">
+                <a-input id="provincialWarehouse-dealerName" v-model.trim="queryParam.dealerName" allowClear placeholder="请输入省仓客户"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="省仓状态">
+                <v-select code="ENABLE_FLAG" id="provincialWarehouse-enableFlag" v-model="queryParam.enableFlag" allowClear placeholder="请选择省仓状态"></v-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="provincialWarehouse-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="provincialWarehouse-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </a-card>
+    <a-card size="small" :bordered="false">
+      <a-spin :spinning="spinning" tip="Loading...">
+        <!-- 操作按钮 -->
+        <div class="table-operator" v-if="$hasPermissions('B_serviceCenter_add')">
+          <a-button id="provincialWarehouse-add" type="primary" @click="handleEdit()">新增</a-button>
+        </div>
+        <!-- 列表 -->
+        <s-table
+          class="sTable fixPagination"
+          ref="table"
+          :style="{ height: tableHeight+70+'px' }"
+          size="small"
+          :rowKey="(record) => record.id"
+          :columns="columns"
+          :data="loadData"
+          :pageSize="30"
+          :scroll="{ y: tableHeight }"
+          :defaultLoadData="false"
+          bordered>
+          <!-- 省仓客户 -->
+          <template slot="customNum" slot-scope="text, record">
+            {{ !queryParam.dealerName?'共':'' }}有<span style="font-weight:bold;font-size:13px;vertical-align:top;">{{ record.customerNum }}</span>个客户
+          </template>
+          <!-- 省仓状态 -->
+          <template slot="loginFlag" slot-scope="text, record">
+            <a-switch
+              id="provincialWarehouse-enableFlag"
+              v-if="$hasPermissions('B_serviceCenter_enable')"
+              checkedChildren="启用"
+              unCheckedChildren="禁用"
+              @change="openStatusModal(record)"
+              :checked="record.enableFlag == 1 ? true : false" />
+            <span v-else :style="{color:(record.enableFlag==1?'#00aa00':'#999')}"> {{ record.enableFlag==1? '已启用': '已禁用' }} </span>
+          </template>
+          <!-- 操作 -->
+          <template slot="action" slot-scope="text, record" v-if="">
+            <a-button
+              size="small"
+              type="link"
+              v-if="$hasPermissions('B_serviceCenter_dealer')"
+              class="button-info"
+              @click="handleDealer(record)"
+              id="provincialWarehouse-edit-btn">关联经销商</a-button>
+            <span v-else>--</span>
+          </template>
+        </s-table>
+      </a-spin>
+      <!-- 新增/编辑 -->
+      <provincial-warehouse-add-modal v-drag :openModal="openModal" @ok="$refs.table.refresh(true)" @close="closeModal" />
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import provincialWarehouseAddModal from './addModal.vue'
+import { serviceCenterList, provincialWarehouseEnable, serviceCenterBinding } from '@/api/serviceCenter'
+export default {
+  name: 'DealerAccountManagementList',
+  mixins: [commonMixin],
+  components: { STable, VSelect, provincialWarehouseAddModal },
+  data () {
+    return {
+      spinning: false,
+      tableHeight: 0,
+      queryParam: { //  查询条件
+        serviceCenterName: '',
+        dealerName: '',
+        enableFlag: undefined
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: '10%', align: 'center' },
+        { title: '区域', dataIndex: 'subareaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分区', dataIndex: 'subareaAreaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '省仓名称', dataIndex: 'serviceCenterName', width: '18%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '经销商名称', dataIndex: 'dealerName', width: '18%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '省仓客户', dataIndex: 'customerNum', width: '11%', align: 'center', scopedSlots: { customRender: 'customNum' } },
+        { title: '省仓状态', scopedSlots: { customRender: 'loginFlag' }, width: '9%', align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '11%', align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        return serviceCenterList(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+              data.list[i].loginFlag = Number(data.list[i].loginFlag)
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      },
+      openModal: false //  新增编辑  弹框
+    }
+  },
+  methods: {
+    // 关联经销商
+    handleDealer (row) {
+      this.$router.push({ name: 'relatedDealersList', params: { sn: row.serviceCenterSn, name: row.serviceCenterName } })
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.serviceCenterName = ''
+      this.queryParam.dealerName = ''
+      this.queryParam.enableFlag = undefined
+      this.notDealerSn = null
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      this.openModal = true
+    },
+    //  关闭弹框
+    closeModal () {
+      this.openModal = false
+    },
+    // 打开启用 禁用 弹窗
+    openStatusModal (record) {
+      const _this = this
+      if (record.enableFlag == 1) {
+        this.$confirm({
+          title: '提示',
+          content: '禁用省仓后,省仓客户无法向省仓采购,确定禁用省仓吗?',
+          centered: true,
+          onOk () {
+            const ajaxData = {
+              serviceCenterSn: record.serviceCenterSn,
+              enableFlag: '0'
+            }
+            _this.changeStatus(ajaxData)
+          }
+        })
+      } else {
+        const params = {
+          serviceCenterSn: record.serviceCenterSn,
+          enableFlag: '1'
+        }
+        _this.changeStatus(params)
+      }
+    },
+    // 启用 禁用
+    changeStatus (params) {
+      this.spinning = true
+      provincialWarehouseEnable(params).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+        }
+        this.spinning = false
+        this.$refs.table.refresh()
+      })
+    },
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    },
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 240
+    }
+  },
+  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.$refs.table.refresh()
+      this.pageInit()
+    }
+  }
+}
+</script>

+ 315 - 0
src/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue

@@ -0,0 +1,315 @@
+<template>
+  <div class="relatedDealersList-wrap">
+    <div ref="headerBar">
+      <a-page-header :ghost="false" :backIcon="false" class="header-bar">
+        <!-- 自定义的二级文字标题 -->
+        <template slot="subTitle">
+          <a id="salesEdit-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
+          <span class="subTitle-word text-overflow" style="max-width:300px;margin-left:15px;">省仓名称:{{ $route.params.name ||'--' }}</span>
+        </template>
+      </a-page-header>
+    </div>
+    <a-card size="small" :bordered="false" class="relatedDealersList-cont">
+      <a-tabs v-model="activeKeyVal">
+        <a-tab-pane key="1" tab="关联经销商">
+          <a-spin :spinning="spinning" tip="Loading...">
+            <!-- 筛选条件 -->
+            <div class="table-page-search-wrapper">
+              <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+                <a-row :gutter="15">
+                  <a-col :md="4" :sm="24">
+                    <a-form-model-item label="地区">
+                      <AreaList id="actualSalesReportList-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :md="4" :sm="24">
+                    <a-form-model-item label="区域/分区">
+                      <subarea ref="subarea" id="relatedDealersList-subarea" @change="subareaChange"></subarea>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :md="4" :sm="24">
+                    <a-form-item label="经销商名称">
+                      <a-input id="relatedDealersList-purchaseBillNo" v-model.trim="queryParam.nameLike" allowClear placeholder="请输入经销商名称"/>
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="4" :sm="24">
+                    <a-form-item label="商户类型">
+                      <v-select code="DEALER_TYPE" id="relatedDealersList-dealerType" v-model="queryParam.dealerType" allowClear placeholder="请选择商户类型"></v-select>
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="4" :sm="24">
+                    <a-form-model-item label="商户级别" prop="dealerLevel">
+                      <v-select code="DEALER_LEVEL" id="relatedDealersList-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :md="4" :sm="24" style="margin-bottom: 10px;">
+                    <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryCheckMakeInventoryList-refresh">查询</a-button>
+                    <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="inventoryCheckMakeInventoryList-reset">重置</a-button>
+                    <a-button
+                      style="margin-left: 10px"
+                      type="primary"
+                      class="button-warning"
+                      @click="handleExport"
+                      :disabled="disabled"
+                      :loading="exportLoading"
+                      v-if="$hasPermissions('B_serviceCenter_export')"
+                    >导出</a-button>
+                  </a-col>
+                </a-row>
+              </a-form>
+            </div>
+            <div class="relatedDealersList-btn" style="margin-bottom:10px;">
+              <a-button type="primary" @click="openDealersModal">新增经销商</a-button>
+            </div>
+            <!-- 列表 -->
+            <s-table
+              class="sTable"
+              ref="table"
+              size="small"
+              :rowKey="(record) => record.dealerSn"
+              rowKeyName="dealerSn"
+              :columns="columns"
+              :data="loadData"
+              :defaultLoadData="false"
+              :style="{ height: tableHeight+70+'px' }"
+              :scroll="{ y: tableHeight }"
+              :rowClassName="(record, index) => record.checkProfitLossQty < 0 ? 'redBg-row':''"
+              bordered>
+              <!-- 地区 -->
+              <template slot="address" slot-scope="text, record">
+                {{ record.provinceName }}/{{ record.cityName }}/{{ record.districtName }}
+              </template>
+              <!-- 操作 -->
+              <template slot="action" slot-scope="text, record">
+                <a-button
+                  size="small"
+                  type="link"
+                  v-if="$hasPermissions('B_serviceCenter_unbinding')"
+                  class="button-info"
+                  @click="handleDelete(record)"
+                  id="provincialWarehouse-edit-btn">解绑</a-button>
+                <span v-else>--</span>
+              </template>
+            </s-table>
+          </a-spin>
+        </a-tab-pane>
+      </a-tabs>
+    </a-card>
+    <!-- 关联经销商 -->
+    <a-drawer
+      title="选择经销商"
+      placement="right"
+      closable
+      :visible="openDealerModal"
+      class="lookUpCustomers-modal"
+      @close="closeDealerModal"
+      width="72%"
+    >
+      <div class="dealerModalCon">
+        <chooseDealer ref="dealerChoose" :itemSn="$route.params.sn" @plAdd="handleAddDealer"></chooseDealer>
+      </div>
+    </a-drawer>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import chooseDealer from './chooseDealer.vue'
+import subarea from '@/views/common/subarea.js'
+import AreaList from '@/views/common/areaList.js'
+import { hdExportExcel } from '@/libs/exportExcel'
+import { queryServiceCenterDealerPage, serviceCenterBinding, serviceCenterUnbinding, serviceCenterExport } from '@/api/serviceCenter'
+export default {
+  name: 'LookUpCustomers',
+  mixins: [commonMixin],
+  components: { STable, VSelect, chooseDealer, subarea, AreaList },
+  data () {
+    return {
+      spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      disabled: false,
+      exportLoading: false,
+      queryParam: {
+        subareaSn: undefined,
+        subareaAreaSn: undefined,
+        provinceSn: undefined,
+        citySn: undefined,
+        districtSn: undefined,
+        nameLike: '',
+        relationType: 'purchase',
+        dealerType: undefined,
+        dealerLevel: undefined
+      },
+      tableHeight: 0,
+      activeKeyVal: '1',
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        return queryServiceCenterDealerPage(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+              data.list[i].loginFlag = Number(data.list[i].loginFlag)
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      },
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '8%', align: 'center' },
+        { title: '经销商名称', dataIndex: 'dealerName', width: '20%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '地区', scopedSlots: { customRender: 'address' }, width: '20%', align: 'center', ellipsis: true },
+        { title: '区域', dataIndex: 'subareaArea.subareaName', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分区', dataIndex: 'subareaArea.subareaAreaName', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '商户类型', dataIndex: 'dealerTypeDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '商户级别', dataIndex: 'dealerLevelDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '添加时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '12%', align: 'center' }
+      ],
+      openDealerModal: false
+    }
+  },
+  methods: {
+    // 打开经销商弹窗
+    openDealersModal () {
+      this.openDealerModal = true
+      this.$nextTick(() => {
+        this.$refs.dealerChoose.pageInit()
+      })
+    },
+    // 关闭关联经销商弹窗
+    closeDealerModal () {
+      this.openDealerModal = false
+      this.$refs.dealerChoose.clearSelect()
+    },
+    // 关联经销商
+    handleAddDealer (list) {
+      const newList = list.map(item => {
+        return {
+          dealerSn: item.dealerSn,
+          dealerName: item.dealerName,
+          dealerLevel: item.dealerLevel
+        }
+      })
+      this.spinning = true
+      const params = {
+        serviceCenterSn: this.$route.params.sn,
+        dealerList: newList
+      }
+      serviceCenterBinding(params).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+        }
+        this.spinning = false
+        this.closeDealerModal()
+        this.$refs.table.refresh()
+      })
+    },
+    areaChange (val) {
+      this.queryParam.provinceSn = val[0] ? val[0] : ''
+      this.queryParam.citySn = val[1] ? val[1] : ''
+      this.queryParam.districtSn = val[2] ? val[2] : ''
+    },
+    subareaChange (val) {
+      this.queryParam.subareaSn = val[0] ? val[0] : undefined
+      this.queryParam.subareaAreaSn = val[1] ? val[1] : undefined
+    },
+    // 解绑
+    handleDelete (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '解绑后,该经销商无法向省仓采购,确定解绑吗?',
+        centered: true,
+        onOk () {
+          const ajaxData = {
+            serviceCenterSn: _this.$route.params.sn,
+            dealerSn: row.dealerSn
+          }
+          _this.submitDel(ajaxData)
+        }
+      })
+    },
+    submitDel (params) {
+      this.spinning = true
+      serviceCenterUnbinding(params).then(res => {
+        if (res.status == 200) {
+          this.$message.success('解绑成功')
+          this.$refs.table.refresh(true)
+        }
+        this.spinning = false
+      })
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam = {
+        subareaSn: undefined,
+        subareaAreaSn: undefined,
+        provinceSn: undefined,
+        citySn: undefined,
+        districtSn: undefined,
+        nameLike: '',
+        serviceCenterSn: this.$route.params.sn,
+        relationType: 'purchase',
+        dealerType: undefined,
+        dealerLevel: undefined
+      }
+      this.$refs.areaList.clearData()
+      this.$refs.subarea.clearData()
+      this.$refs.table.refresh()
+    },
+    //  导出
+    handleExport () {
+      const _this = this
+      _this.exportLoading = true
+      _this.spinning = true
+      _this.queryParam.serviceCenterName = this.$route.params.name
+      hdExportExcel(serviceCenterExport, _this.queryParam, '省仓客户列表导出', function () {
+        _this.exportLoading = false
+        _this.spinning = false
+      })
+    },
+    //  返回
+    handleBack () {
+      this.$router.push({ name: 'provincialWarehouseList' })
+    },
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+      _this.resetSearchForm()
+    },
+    setTableH () {
+      const headHeight = this.$refs.headerBar.offsetHeight
+      this.tableHeight = window.innerHeight - headHeight - 340
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  activated () {
+    this.pageInit()
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .relatedDealersList-wrap{
+    .table-operator{
+    text-align:right;
+    }
+  }
+</style>

+ 33 - 9
src/views/dealerManagement/rebateSettings/associateModal.vue

@@ -22,8 +22,11 @@
           <a-form-model-item label="经销商名称" v-if="nowData">
             {{ nowData.subDealer.dealerName }}
           </a-form-model-item>
-          <a-form-model-item label="差价归属">
-            <queryChild ref="queryChid" :dealerLevelList="dealerLevelList" @change="handleDisassociate"></queryChild>
+          <a-form-model-item label="上级经销商">
+            <queryChild ref="higherLevel" :isShowSn="rebateDealerSn" placeholderInfo="请输入上级经销商名称搜索" :dealerLevelList="dealerLevelList" @change="handleHigherLevel"></queryChild>
+          </a-form-model-item>
+          <a-form-model-item label="指定差价归属">
+            <queryChild ref="queryChid" :isShowSn="higherDealerSn" placeholderInfo="请输入指定差价归属经销商名称搜索" :dealerLevelList="dealerLevelList" @change="handleDisassociate"></queryChild>
           </a-form-model-item>
         </a-form-model>
         <div class="btn-cont">
@@ -63,8 +66,9 @@ export default {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
-      dealerLevelList: ['CITY', 'PROVINCE'],
-      rebateDealerSn: ''
+      dealerLevelList: [],
+      rebateDealerSn: '',
+      higherDealerSn: ''
     }
   },
   methods: {
@@ -72,12 +76,16 @@ export default {
       console.log('选中', val)
       this.rebateDealerSn = val ? val.key : ''
     },
+    handleHigherLevel (e) {
+      this.higherDealerSn = e ? e.key : ''
+    },
     //  保存
     handleSave () {
       const _this = this
       _this.$refs.ruleForm.validate(valid => {
         if (valid) {
           const formData = {
+            parentDealerSn: _this.higherDealerSn,
             rebateDealerSn: _this.rebateDealerSn,
             dealerSn: _this.nowData && _this.nowData.subDealer.dealerSn ? _this.nowData.subDealer.dealerSn : undefined
           }
@@ -113,14 +121,30 @@ export default {
       if (!newValue) {
         this.$emit('close')
         this.$refs.ruleForm.resetFields()
+        this.$refs.higherLevel.resetForm()
         this.$refs.queryChid.resetForm()
         this.rebateDealerSn = ''
-      }else{
-        this.$nextTick(()=>{
-          this.rebateDealerSn = this.nowData && this.nowData.rebateDealer && this.nowData.rebateDealer.dealerSn ? this.nowData.rebateDealer.dealerSn : ''
-          const dealerName = this.nowData && this.nowData.rebateDealer && this.nowData.rebateDealer.dealerName ? this.nowData.rebateDealer.dealerName : ''
+        this.higherDealerSn = ''
+        this.dealerLevelList = []
+      } else {
+        // 上级经销商
+        if (this.nowData && this.nowData.supDealer) {
+          this.higherDealerSn = this.nowData.supDealer.dealerSn ? this.nowData.supDealer.dealerSn : ''
+          const higherDealerName = this.nowData.supDealer.dealerName ? this.nowData.supDealer.dealerName : ''
+          if (higherDealerName) {
+            this.$refs.higherLevel.setVal(this.higherDealerSn, higherDealerName)
+          }
+        }
+        // 指定差价归属
+        if (this.nowData && this.nowData.rebateDealer) {
+          this.rebateDealerSn = this.nowData.rebateDealer.dealerSn ? this.nowData.rebateDealer.dealerSn : ''
+          const dealerName = this.nowData.rebateDealer.dealerName ? this.nowData.rebateDealer.dealerName : ''
           this.$refs.queryChid.setVal(this.rebateDealerSn, dealerName)
-        })
+        }
+        // 特约  ['CITY', 'PROVINCE'] 市级经销商 ['PROVINCE']
+        if (this.nowData && this.nowData.subDealer) {
+          this.dealerLevelList = this.nowData.subDealer.dealerLevel == 'CITY' ? ['PROVINCE'] : ['CITY', 'PROVINCE']
+        }
       }
     }
   }

+ 3 - 2
src/views/dealerManagement/rebateSettings/list.vue

@@ -40,7 +40,7 @@
           rowKeyName="no"
           :columns="columns"
           :data="loadData"
-          :pageSize="30"
+          :pageSize="20"
           :scroll="{ y: tableHeight }"
           :defaultLoadData="false"
           bordered>
@@ -49,7 +49,7 @@
             <a-button
               size="small"
               type="link"
-              v-if="$hasPermissions('B_rebateSettings_edit')"
+              v-if="$hasPermissions('B_rebateSettings_edit') && record.subDealer&&record.subDealer.dealerLevel&&record.subDealer.dealerLevel!='PROVINCE'"
               class="button-info"
               @click="handleEdit(record)"
               id="rebateSettingsList-edit-btn">编辑</a-button>
@@ -117,6 +117,7 @@ export default {
       },
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '经销商名称', width: '15%', scopedSlots: { customRender: 'jxs' }, align: 'left', ellipsis: true },
         { title: '经销商级别', scopedSlots: { customRender: 'dealerLevel' }, align: 'left', width: '15%' },
         { title: '指定差价归属经销商', scopedSlots: { customRender: 'cjgs' }, align: 'left', width: '15%' },

+ 26 - 9
src/views/dealerManagement/rebateSettings/queryChild.vue

@@ -3,7 +3,7 @@
     show-search
     label-in-value
     :value="dealerName"
-    placeholder="请输入上级名称搜索"
+    :placeholder="placeholderInfo"
     style="width: 100%"
     :filter-option="false"
     :not-found-content="fetching ? undefined : null"
@@ -27,6 +27,14 @@ export default {
       default: function () {
         return []
       }
+    },
+    placeholderInfo: {
+      type: String,
+      default: '请输入上级名称搜索'
+    },
+    isShowSn: {
+      type: String,
+      default: null
     }
   },
   data () {
@@ -47,17 +55,26 @@ export default {
       const fetchId = this.lastFetchId
       this.data = []
       this.fetching = true
-      const params = {'dealerLevelList': this.dealerLevelList, pageNo: 1, pageSize: 20 }
-      if(this.itemSn && !dealerName){
+      const params = { 'dealerLevelList': this.dealerLevelList, pageNo: 1, pageSize: 20 }
+      if (this.itemSn && !dealerName) {
         params.dealerSn = this.itemSn
-      }else{
+      } else {
         params.dealerName = dealerName
       }
       dealerRelationList(params).then(res => {
         if (fetchId !== this.lastFetchId) {
           return
         }
-        this.data = res.data && res.data.list ? res.data.list : []
+        if (res.data && res.data.list && res.data.list.length > 0) {
+          if (!this.isShowSn) {
+            this.data = res.data.list
+          } else {
+            const newData = res.data.list.filter(con => con.dealerSn != this.isShowSn)
+            this.data = newData
+          }
+        } else {
+          this.data = []
+        }
         this.fetching = false
       })
     },
@@ -68,16 +85,16 @@ export default {
         data: [],
         fetching: false
       })
-      if(!value){
+      if (!value) {
         this.itemSn = null
       }
       this.$emit('change', value)
     },
-    setVal(value, label){
-      if(value){
+    setVal (value, label) {
+      if (value) {
         this.itemSn = value
         this.fetchUser()
-        this.handleChange({key: this.itemSn, label: label})
+        this.handleChange({ key: this.itemSn, label: label })
       }
     },
     resetForm () {

+ 13 - 0
src/views/promotionRulesManagement/dealerPromotions/detailModal.vue

@@ -420,6 +420,7 @@ export default {
       text-align: center;
       margin: 35px 0 10px;
     }
+    //处理滚动条不显示
     .tabBox{
        max-height:100px;
        overflow-y:scroll;
@@ -427,6 +428,18 @@ export default {
    .tabBox::-webkit-scrollbar {
        width: 0px;
     }
+    .tabBox::-webkit-scrollbar-track {
+      background: transparent;
+    }
+     
+    .tabBox::-webkit-scrollbar-thumb {
+      background: transparent;
+    }
+     
+    .tabBox::-webkit-scrollbar-button {
+      display: none;
+    }
+    // 设置input  禁用颜色
     .ant-form-item-control .ant-input[disabled]{
       color:#333333;
       background:#ffffff;

+ 35 - 7
src/views/promotionRulesManagement/dealerPromotions/lookUpCustomersModal.vue

@@ -16,17 +16,29 @@
             <a-row :gutter="15">
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="地区">
-                  <AreaList id="actualSalesReportList-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+                  <AreaList id="lookUpCustomers-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="区域/分区">
-                  <subarea ref="subarea" id="salesManagementList-subarea" @change="subareaChange"></subarea>
+                  <subarea ref="subarea" id="lookUpCustomers-subarea" @change="subareaChange"></subarea>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="经销商名称">
-                  <a-input id="salesManagementList-purchaseBillNo" v-model="queryParam.dealerName" placeholder="请输入经销商名称" allowClear/>
+                  <a-input id="lookUpCustomers-purchaseBillNo" v-model="queryParam.dealerName" placeholder="请输入经销商名称" allowClear/>
+                </a-form-item>
+              </a-col>
+              <a-col :md="6" :sm="24">
+                <a-form-item label="客户状态">
+                  <v-select
+                    v-model="queryParam.state"
+                    ref="state"
+                    id="lookUpCustomers-state"
+                    code="PROMOTION_STATE"
+                    placeholder="请选择客户状态"
+                    allowClear
+                  ></v-select>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
@@ -61,6 +73,15 @@
           <template slot="address" slot-scope="text, record">
             {{ record.provinceName }}/{{ record.cityName }}/{{ record.districtName }}
           </template>
+          <!-- 经销商名称 -->
+          <template slot="dealerName" slot-scope="text, record">
+            <span>{{ record.dealerName ||'--' }}</span>
+            <!-- <a-badge count="未" :number-style="{ zoom:'80%' }"></a-badge> -->
+          </template>
+          <!-- 客户状态 -->
+          <template slot="dealerState" slot-scope="text, record">
+            <a-switch checkedChildren="启用" unCheckedChildren="禁用" :checked="record.isEnable" @change="changeStatus"/>
+          </template>
         </s-table>
       </a-card>
       <div style="text-align:right;color:#666;" v-if="showType ==='isEdit' || showType === 'isAudit'"><span v-if="showType === 'isAudit'">待审核,</span>增加的客户显示红色,删除的客户显示绿色</div>
@@ -144,7 +165,8 @@ export default {
         provinceSn: undefined,
         citySn: undefined,
         districtSn: undefined,
-        dealerName: ''
+        dealerName: '',
+        state: undefined
       },
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
@@ -171,15 +193,20 @@ export default {
         { title: '地区', scopedSlots: { customRender: 'address' }, width: '20%', align: 'center', ellipsis: true },
         { title: '区域', dataIndex: 'subareaArea.subareaName', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '分区', dataIndex: 'subareaArea.subareaAreaName', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '经销商名称', dataIndex: 'dealerName', width: '20%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '经销商名称', dataIndex: 'dealerName', scopedSlots: { customRender: 'dealerName' }, width: '20%', align: 'center', ellipsis: true },
         { title: '商户类型', dataIndex: 'dealerLevelDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '商户级别', dataIndex: 'dealerTypeDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } }
+        { title: '商户级别', dataIndex: 'dealerTypeDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '客户状态', scopedSlots: { customRender: 'dealerState' }, width: '10%', align: 'center' }
       ],
       openDealerModal: false, // 修改弹窗
       updateFlag: false
     }
   },
   methods: {
+    // 客户状态
+    changeStatus (e) {
+
+    },
     // 修改参与客户
     editDealerModal () {
       const _this = this
@@ -238,7 +265,8 @@ export default {
           subareaSn: undefined,
           subareaAreaSn: undefined
         },
-        dealerName: ''
+        dealerName: '',
+        state: undefined
       }, this.snObj)
       this.updateFlag = false
       this.$refs.areaList.clearData()

+ 5 - 0
src/views/promotionRulesManagement/promotionManagement/chooseDealer.vue

@@ -93,6 +93,10 @@ export default {
       default: function () {
         return null
       }
+    },
+    itemSn: {
+      type: String,
+      default: ''
     }
   },
   data () {
@@ -159,6 +163,7 @@ export default {
     loadData () {
       this.spinning = true
       const params = { pageSize: 20, pageNo: 1, ...this.pagination }
+      this.queryParam.notDealerSn = this.itemSn ? this.itemSn : undefined
       dealerQueryList(Object.assign(params, this.queryParam)).then(res => {
         let data
         if (res.status == 200) {

+ 2 - 2
src/views/reportData/priceDifferenceDetailReport/list.vue

@@ -24,7 +24,7 @@
               </a-form-model-item>
             </a-col>
             <a-col :md="6" :sm="24">
-              <a-form-model-item label="省份" prop="provinceSn">
+              <a-form-model-item label="省份">
                 <Area id="priceDifferenceDetailList-provinceSn" v-model="queryParam.provinceSn" placeholder="请选择省"></Area>
               </a-form-model-item>
             </a-col>
@@ -205,7 +205,7 @@ export default {
         if (valid) {
           _this.$refs.table.refresh(true)
         } else {
-          _this.$message.error('请选择月份和省份')
+          _this.$message.error('请选择月份')
           return false
         }
       })

+ 1 - 1
src/views/salesManagement/outboundOrder/list.vue

@@ -85,7 +85,7 @@
                 </a-form-item>
               </a-col>
             </template>
-            <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
+            <a-col :md="advanced ? (isShowWarehouse&&isShowCustomerSearch ? 24:6) : 6" :sm="24" style="margin-bottom: 10px;" :style="{textAlign: advanced ? (isShowWarehouse&&isShowCustomerSearch ? 'center': 'left') : 'left'}">
               <a-button type="primary" @click="searchTable" :disabled="disabled" id="outboundOrderList-refresh">查询</a-button>
               <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="outboundOrderList-reset">重置</a-button>
               <a @click="advanced=!advanced" style="margin-left: 5px">

+ 14 - 1
src/views/salesManagement/salesList/list.vue

@@ -90,8 +90,18 @@
                   </a-select>
                 </a-form-model-item>
               </a-col>
+              <a-col :md="6" :sm="24">
+                <a-form-item label="促销单">
+                  <v-select
+                    v-model="queryParam.promoFlag"
+                    ref="cxFlag"
+                    code="FLAG"
+                    placeholder="请选择是否促销单"
+                    allowClear></v-select>
+                </a-form-item>
+              </a-col>
             </template>
-            <a-col :md="6" :sm="24">
+            <a-col :md="advanced ? 24 : 6" :sm="24" :style="{textAlign: advanced ? 'center' : 'left'}">
               <div class="table-page-search-submitButtons">
                 <a-button type="primary" :disabled="disabled" @click="handleSearch">查询</a-button>
                 <a-button style="margin-left: 8px" :disabled="disabled" @click="resetSearchForm()">重置</a-button>
@@ -141,6 +151,7 @@
           <!-- 销售单号 -->
           <template slot="salesBillNo" slot-scope="text, record">
             <span class="link-bule" @click="handleDetail(record,0)">{{ record.salesBillNo||'--' }}</span>
+            <a-badge count="促" v-if="record.promoFlag==1" :number-style="{ backgroundColor: '#52c41a', zoom:'80%' }"></a-badge>
           </template>
           <!-- 备货单号 -->
           <template slot="dispatchBillNo" slot-scope="text, record">
@@ -224,6 +235,7 @@ export default {
         endDate: undefined,
         billStatus: undefined, //  业务状态
         sendFlag: '', // 发货状态
+        promoFlag: undefined,
         provinceSn: undefined, // 省份
         timeoutflag: undefined // 超时环节提醒
       },
@@ -385,6 +397,7 @@ export default {
       this.queryParam.settleEndDate = undefined
       this.queryParam.billStatus = undefined
       this.queryParam.sendFlag = ''
+      this.queryParam.promoFlag = undefined
       this.queryParam.provinceSn = undefined
       this.queryParam.timeoutflag = undefined
       this.examineTime = []

+ 1 - 1
src/views/salesManagement/shortageStatisticsP/list.vue

@@ -54,7 +54,7 @@
                 </a-form-item>
               </a-col>
             </template>
-            <a-col :md="isShowCustomerSearch?24:6" :sm="24" style="margin-bottom: 10px;" :style="{textAlign:isShowCustomerSearch?'center':''}">
+            <a-col :md="advanced ? (isShowCustomerSearch?24:6) : 6" :sm="24" style="margin-bottom: 10px;" :style="{textAlign:advanced ? (isShowCustomerSearch?'center':'') : 'left'}">
               <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="shortageStatisticsPList-refresh">查询</a-button>
               <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="shortageStatisticsPList-reset">重置</a-button>
               <a-button

+ 1 - 0
src/views/salesReturnManagement/billOfLading/add.vue

@@ -373,6 +373,7 @@ export default {
               }
               // 提交
               if (type == 'submit') {
+                pickUpDetail({ pickUpSn: res.data.pickUpSn })
                 _this.openDepartUserModal = true
                 _this.pickUpSn = res.data.pickUpSn
               }

+ 1 - 1
src/views/salesReturnManagement/pickUp/list.vue

@@ -54,7 +54,7 @@
                 </a-form-model-item>
               </a-col>
             </template>
-            <a-col :md="24" :sm="24" style="textAlign:center;">
+            <a-col :md="advanced ? (isShowWarehouse ? 24 : 6) : 6" :sm="24" :style="{textAlign:advanced ? (isShowWarehouse?'center':'left') : 'left'}">
               <div class="table-page-search-submitButtons">
                 <a-button type="primary" :disabled="disabled" @click="$refs.table.refresh(true)">查询</a-button>
                 <a-button style="margin-left: 8px" :disabled="disabled" @click="resetSearchForm()">重置</a-button>

+ 5 - 5
src/views/salesReturnManagement/salesReturn/list.vue

@@ -46,12 +46,12 @@
                 <a-input id="salesReturn-salesReturnBillNo" v-model.trim="queryParam.salesReturnBillNo" allowClear placeholder="请输入总部销退单号"/>
               </a-form-item>
             </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="客户采退申请单号">
+                <a-input id="salesReturn-purchaseReturnApplyNo" v-model.trim="queryParam.purchaseReturnApplyNo" allowClear placeholder="请输入客户采退申请单号"/>
+              </a-form-item>
+            </a-col>
             <template v-if="advanced">
-              <a-col :md="6" :sm="24">
-                <a-form-item label="客户采退申请单号">
-                  <a-input id="salesReturn-purchaseReturnApplyNo" v-model.trim="queryParam.purchaseReturnApplyNo" allowClear placeholder="请输入客户采退申请单号"/>
-                </a-form-item>
-              </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="单据来源">
                   <v-select

+ 32 - 19
src/views/salesReturnManagement/salesReturn/salesReturnEdit.vue

@@ -81,7 +81,8 @@
           </div>
           <div>
             <span style="margin-right: 10px;" v-if="selNums">已选{{ selNums }}项</span>
-            <a-button type="default" class="button-info" @click="openPlSetReason">批量设置退货原因</a-button>
+            <a-button v-if="goodFlag == 'GOOD_PRODUCT_RETURN'" type="default" class="button-info" @click="openPlSetReason(1)">整单设置退货原因</a-button>
+            <a-button type="default" class="button-info" style="margin-left: 5px;" @click="openPlSetReason(0)">批量设置退货原因</a-button>
             <a-button type="primary" class="button-info" id="salesReturnEdit-import-btn" @click="openGuideModal=true">导入产品</a-button>
           </div>
         </div>
@@ -191,7 +192,8 @@ import {
   salesReturnDetailInsert,
   salesReturnDetailUpdateQty,
   salesReturnDetailUpdateReason,
-  salesReturnDetailSetReason
+  salesReturnDetailSetReason,
+  salesReturnUpdateAllReason
 } from '@/api/salesReturnDetail'
 export default {
   name: 'SalesReturnEdit',
@@ -371,31 +373,42 @@ export default {
       })
     },
     // 批量设置退货原因
-    openPlSetReason () {
-      if (this.selNums) {
+    openPlSetReason (type) {
+      // 整单设置
+      if(type==1){
         this.showPlModal = true
-      } else {
-        this.$message.warning('请先选择产品!')
+      }else{
+        if (this.selNums) {
+          this.showPlModal = true
+        } else {
+          this.$message.warning('请先选择产品!')
+        }
       }
     },
     setPlReturnReason () {
       if (!this.plReturnReason) {
         this.$message.warning('请选择退货原因!')
       } else {
-        this.spinning = true
-        const snList = []
-        const arr = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
         const rows = this.returnReasonlist.find(item => item.code == this.plReturnReason)
-        arr.map(item => {
-          snList.push(item.salesReturnDetailSn)
-        })
-        salesReturnDetailSetReason({
-          salesReturnBillDetailSnList: snList,
-          salesReturnBillSn: this.orderSn,
-          returnReason: rows ? rows.dispName : '',
-          returnReasonCode: this.plReturnReason,
-          returnReasonRemarks: this.showEditRemarks ? this.plReturnRemark || '' : undefined
-        }).then(res => {
+        const params = {
+            salesReturnBillSn: this.orderSn,
+            returnReason: rows ? rows.dispName : '',
+            returnReasonCode: this.plReturnReason,
+            returnReasonRemarks: this.showEditRemarks ? this.plReturnRemark || '' : undefined
+          }
+        // 批量或整单设置
+        const funs = this.selNums ? salesReturnDetailSetReason : salesReturnUpdateAllReason
+        
+        // 批量设置
+        if(this.selNums){
+          const snList = []
+          const arr = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
+          arr.map(item => snList.push(item.salesReturnDetailSn))
+          params.salesReturnBillDetailSnList = snList
+        } 
+        
+        this.spinning = true
+        funs(params).then(res => {
           if (res.status == 200) {
             this.showPlModal = false
             this.$refs.table.clearSelected()

+ 1 - 1
vue.config.js

@@ -108,7 +108,7 @@ const vueConfig = {
     // If you want to turn on the proxy, please remosve the mockjs /src/main.jsL11
     proxy: {
       '/api': {
-        // target: 'http://192.168.2.103:8602/ocs-admin',
+        // target: 'http://192.168.2.117:8602/ocs-admin',
         // target: 'https://t.ocs.360arrow.com/ocs-admin', //  练习
         target: 'https://p.ocs.360arrow.com/ocs-admin', //  预发布
         ws: false,