#74 门店渠道角色转换、门店修改上级渠道

Спојено
lsx споји(ла) 1 комит(е) из mangpiao/dev у mangpiao/test пре 1 година

+ 17 - 0
src/api/admin/channel.js

@@ -69,3 +69,20 @@ export function updateChannelStatus(data) {
 }
 
 
+//门店转换成渠道
+export function salesiteTransform(data) {
+  return request({
+    url: '/api/v1/mp/admin/salesite/transform',
+    method: 'post',
+    data: data
+  })
+}
+
+//渠道转换成门店
+export function channelTransform(data) {
+  return request({
+    url: '/api/v1/mp/admin/channel/transform',
+    method: 'post',
+    data: data
+  })
+}

+ 14 - 3
src/views/business/channel/childs.vue

@@ -154,7 +154,7 @@
                  <span v-if="getValue(scope.row.status) == 1" > 停用</span>
                  <span v-if="getValue(scope.row.status) == 2" > 启用</span>
                </el-button>
-
+               <el-button size="mini" type="text" v-if="scope.row.isTransform" @click="changeUpdate(scope.row)" v-hasPermi="['business:channel:edit']">转换角色</el-button>
              <!-- <el-button
                 size="mini"
                 type="text"
@@ -192,7 +192,8 @@
       :edit-id="editId"
       @close="hideDialog"
     />
-
+    <!-- 渠道转换门店 -->
+    <change-store v-if="changeShow" :dialog-visible="changeShow" @saveSuccess="submitSuccess" :edit-id="editId" @close="hideDialog" />
   </div>
 </template>
 
@@ -202,11 +203,13 @@ import { listChannel, updateChannelStatus} from "@/api/admin/channel";
 import { listAreaByPid} from "@/api/admin/area";
 import ChannelCreate from './components/Create'
 import ChannelDetail from './components/Detail'
+import ChangeStore from './components/ChangeStore.vue'
 export default {
   name: "ChannelIndex",
   components: {
     ChannelCreate,
-    ChannelDetail
+    ChannelDetail,
+    ChangeStore
   },
   data() {
     return {
@@ -220,6 +223,7 @@ export default {
       createShow: false,
       // 详情
       detailShow: false,
+      changeShow: false,
       provinceList:[],
       cityList:[],
       areaList:[],
@@ -307,6 +311,12 @@ export default {
       }
     },
 
+    // 转换身份
+    changeUpdate(row) {
+      this.changeShow = true
+      this.editId = row.channelId
+    },
+
     // 省
    /* getProvinceList(){
       this.cityList = []
@@ -400,6 +410,7 @@ export default {
     hideDialog(){
       this.createShow = false
       this.detailShow = false
+      this.changeShow = false
     },
 
     getDesc(val) {

+ 183 - 0
src/views/business/channel/components/ChangeStore.vue

@@ -0,0 +1,183 @@
+<template>
+  <el-dialog title="渠道转换门店" :visible.sync="dialogVisible" width="750px" :append-to-body="true" :before-close="close" :destroy-on-close="true" :close-on-click-modal="false">
+    <el-form ref="form" :model="form" :rules="rules" style="max-height: 375px;overflow: auto;margin-top: 30px;">
+      <el-form-item label="上级渠道" prop="parentId">
+        <el-select v-model="form.parentId" placeholder="请选择上级渠道" style="width: 60%;" filterable clearable :filter-method="dataFilter">
+          <el-option v-for="(item) in channelList" :key="item.channelId" :label="item.name" :value="item.channelId">
+            <div>
+              <span style="float: left;">{{item.name}} </span>
+              <span style="float: right;">{{item.mobile}}</span>
+            </div>
+          </el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div style="width: 100%;text-align: center;">谨慎操作,点击确定后转换,转换完成请到门店列表查看</div>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" :disabled="loading" @click="saveClick">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import { listAllChannel, channelTransform } from "@/api/admin/channel";
+export default {
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false
+    },
+    editId: [Number, String] //  编辑用
+  },
+
+  data() {
+    return {
+      loading: false,
+      // 上级渠道列表
+      channelList: [],
+      channelCopyList: [],
+      // 表单参数
+      form: {
+        parentId: null,
+      },
+      // 表单校验
+      rules: {
+        parentId: [
+          { required: true, message: "请选择门店所属上级渠道", trigger: "change" }
+        ],
+      },
+    };
+  },
+  mounted() {
+    this.getChannelList()
+  },
+  methods: {
+    // 获取上级渠道下拉列表
+    getChannelList() {
+      listAllChannel().then(response => {
+        this.channelList = response.data || [];
+        this.channelCopyList = response.data || [];
+      });
+    },
+    dataFilter(val) {
+      if (val) { //val存在
+        this.channelList = this.channelCopyList.filter((item) => {
+          if (!!~item.mobile.indexOf(val) || !!~item.mobile.toUpperCase().indexOf(val.toUpperCase())
+                 || !!~item.name.indexOf(val) || !!~item.name.indexOf(val)) {
+             return true
+          }
+        })
+      } else { //val为空时,还原数组
+        this.channelList = this.channelCopyList;
+      }
+    },
+    saveClick() {
+      this.loading = true
+      const subForm = this.$refs["form"]
+      subForm.validate(valid => {
+        if (valid) {
+          this.submitForm(this.form);
+        } else {
+          this.loading = false;
+          // 提示第一个error
+          this.getFormErrorMessage(subForm);
+          return false;
+        }
+      });
+    },
+
+    /**
+     * 保存
+     */
+    submitForm(params) {
+      if (this.editId) {
+        params.channelId = this.editId;
+      }
+      channelTransform(params).then(response => {
+        this.loading = false
+        this.$message.success('转换门店成功')
+        this.$emit('saveSuccess')
+        this.close()
+      }).catch(() => {
+        this.loading = false
+      });
+    },
+
+    /**
+     * 关闭窗口
+     */
+    close() {
+      this.$emit("close");
+      this.form = {};
+    }
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.tag {
+  margin-right: 15px;
+  width: 90px;
+  text-align: center;
+  cursor: pointer;
+}
+
+.tag-select {
+  background-color: #409eff !important;
+  border-color: #409eff !important;
+  color: #fff !important;
+}
+
+.cover-content-item {
+  width: 220px;
+  float: left;
+  position: relative;
+  .cover-img {
+    width: 200px;
+    height: 100px;
+  }
+  .cover-mark {
+    position: absolute;
+    top: 0px;
+    right: 28px;
+    z-index: 1;
+    color: red;
+    cursor: pointer;
+    visibility: hidden;
+  }
+  .select {
+    visibility: visible !important;
+  }
+}
+
+.dialog-footer {
+  text-align: center;
+}
+</style>
+
+<style lang="scss">
+.ygp-form-items {
+  .el-form-item {
+    padding: 0 5px;
+  }
+  .el-form-item__label {
+    line-height: 1.2;
+    padding-bottom: 8px;
+    word-break: break-all;
+    word-wrap: break-word;
+    color: #333;
+  }
+
+  .el-form-item__error {
+    position: relative;
+    top: auto;
+    left: auto;
+  }
+
+  .el-form-item.is-desc_text {
+    .el-form-item__label {
+      display: none;
+    }
+  }
+}
+</style>

+ 124 - 206
src/views/business/channel/index.vue

@@ -20,23 +20,10 @@
       <el-col :span="24" :xs="24">
         <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
           <el-form-item label="渠道名称" prop="name">
-            <el-input
-              v-model="queryParams.name"
-              placeholder="请输入渠道名称"
-              clearable
-              size="small"
-              style="width: 240px"
-              @keyup.enter.native="handleQuery"
-            />
+            <el-input v-model="queryParams.name" placeholder="请输入渠道名称" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
           </el-form-item>
           <el-form-item label="渠道级别" prop="level">
-            <el-select
-              v-model="queryParams.level"
-              placeholder="选择渠道级别"
-              clearable
-              size="small"
-              @change="handleQuery()"
-              style="width: 200px;margin-right: 1px;">
+            <el-select v-model="queryParams.level" placeholder="选择渠道级别" clearable size="small" @change="handleQuery()" style="width: 200px;margin-right: 1px;">
               <el-option label="全部" value="" />
               <el-option label="1级渠道" value="1" />
               <el-option label="2级渠道" value="2" />
@@ -47,53 +34,19 @@
             </el-select>
           </el-form-item>
           <el-form-item label="手机号码" prop="mobile">
-            <el-input
-              v-model="queryParams.mobile"
-              placeholder="请输入手机号码"
-              clearable
-              size="small"
-              style="width: 240px"
-              @keyup.enter.native="handleQuery"
-            />
+            <el-input v-model="queryParams.mobile" placeholder="请输入手机号码" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="地区">
+            <el-select v-model="queryParams.provinceId" placeholder="选择省份" clearable size="small" @change="getCityList()" style="width: 120px;margin-right: 1px;">
+              <el-option v-for="item in provinceList" :key="item.areaId" :label="item.areaName" :value="item.areaId" />
+            </el-select>
+            <el-select v-model="queryParams.cityId" placeholder="选择市" clearable size="small" @change="getAreaList()" style="width: 120px;margin-right: 1px;">
+              <el-option v-for="item in cityList" :key="item.areaId" :label="item.areaName" :value="item.areaId" />
+            </el-select>
+            <el-select v-model="queryParams.areaId" placeholder="选择区" clearable size="small" style="width: 120px;margin-right: 1px;">
+              <el-option v-for="item in areaList" :key="item.areaId" :label="item.areaName" :value="item.areaId" />
+            </el-select>
           </el-form-item>
-         <el-form-item label="地区">
-           <el-select
-             v-model="queryParams.provinceId"
-             placeholder="选择省份"
-             clearable
-             size="small"
-             @change="getCityList()"
-             style="width: 120px;margin-right: 1px;">
-             <el-option
-               v-for="item in provinceList"
-               :key="item.areaId"
-               :label="item.areaName"
-               :value="item.areaId"
-             />
-           </el-select>
-           <el-select
-             v-model="queryParams.cityId"
-             placeholder="选择市"
-             clearable
-             size="small"
-              @change="getAreaList()"
-             style="width: 120px;margin-right: 1px;">
-             <el-option
-               v-for="item in cityList"
-               :key="item.areaId"
-               :label="item.areaName"
-               :value="item.areaId"
-             />
-           </el-select>
-           <el-select v-model="queryParams.areaId" placeholder="选择区" clearable size="small" style="width: 120px;margin-right: 1px;">
-             <el-option
-               v-for="item in areaList"
-               :key="item.areaId"
-               :label="item.areaName"
-               :value="item.areaId"
-             />
-           </el-select>
-         </el-form-item>
           <el-form-item>
             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -102,34 +55,25 @@
 
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
-            <el-button
-              type="primary"
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              v-hasPermi="['business:channel:add']"
-            >添加一级渠道</el-button>
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['business:channel:add']">添加一级渠道</el-button>
           </el-col>
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
         </el-row>
 
-        <el-table v-loading="loading" :data="channelList" @sort-change="sortChannelId" >
+        <el-table v-loading="loading" :data="channelList" @sort-change="sortChannelId">
           <el-table-column label="渠道编号" sortable="custom" prop="channelId" width="100px" />
-          <el-table-column label="渠道名称" prop="name" show-overflow-tooltip  width="180px">
+          <el-table-column label="渠道名称" prop="name" show-overflow-tooltip width="180px">
             <template slot-scope="scope">
 
-              <el-button
-                  v-if="scope.row.childCnt > 0"
-                  size="mini"
-                  type="text"
-                  @click="handleView(scope.row)"
-                >
-                  <pre>{{scope.row.name}}</pre>
+              <el-button v-if="scope.row.childCnt > 0" size="mini" type="text" @click="handleView(scope.row)">
+                <pre>{{scope.row.name}}</pre>
               </el-button>
-              <span v-else><pre>{{scope.row.name}}</pre></span>
+              <span v-else>
+                <pre>{{scope.row.name}}</pre>
+              </span>
             </template>
           </el-table-column>
-          <el-table-column label="手机号码" prop="mobile" show-overflow-tooltip  width="120px"/>
+          <el-table-column label="手机号码" prop="mobile" show-overflow-tooltip width="120px" />
           <el-table-column label="佣金比例" prop="commRate" sortable="custom">
             <template slot-scope="scope">
               {{scope.row.commRate}}%
@@ -140,47 +84,28 @@
               {{scope.row.level}}级渠道
             </template>
           </el-table-column>
-          <el-table-column label="门店数" sortable="custom" prop="siteCnt"  />
-          <el-table-column label="用户数" sortable="custom" prop="userCnt"  />
+          <el-table-column label="门店数" sortable="custom" prop="siteCnt" />
+          <el-table-column label="用户数" sortable="custom" prop="userCnt" />
           <el-table-column label="注册时间" prop="createdTime" min-width="150px">
             <template slot-scope="{ row }">
               {{ parseTime(row.createdTime) }}
             </template>
           </el-table-column>
           <el-table-column label="状态" key="statusV">
-           <template slot-scope="{ row }">
-             <el-tag :type="JSON.parse(row.status).value == '1' ? 'success' : 'info'">{{ JSON.parse(row.status).desc }}</el-tag>
-           </template>
+            <template slot-scope="{ row }">
+              <el-tag :type="JSON.parse(row.status).value == '1' ? 'success' : 'info'">{{ JSON.parse(row.status).desc }}</el-tag>
+            </template>
           </el-table-column>
-          <el-table-column
-            label="操作"
-            align="center"
-            width="200"
-            class-name="small-padding fixed-width"
-          >
+          <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
             <template slot-scope="scope" v-if="scope.row.userId !== 1">
-              <el-button
-                size="mini"
-                type="text"
-                @click="handleDetail(scope.row)"
-                v-hasPermi="['business:channel:query']"
-              >查看</el-button>
-              <el-button
-                size="mini"
-                type="text"
-                @click="handleUpdate(scope.row)"
-                v-hasPermi="['business:channel:edit']"
-              >编辑</el-button>
-              <el-button
-                  size="mini"
-                  type="text"
-                  @click="handleStatusChange(scope.row)"
-                  v-hasPermi="['business:channel:edit']"
-                >
-                  <span v-if="getValue(scope.row.status) == 1" > 停用</span>
-                  <span v-if="getValue(scope.row.status) == 2" > 启用</span>
-                </el-button>
-             <!-- <el-switch
+              <el-button size="mini" type="text" @click="handleDetail(scope.row)" v-hasPermi="['business:channel:query']">查看</el-button>
+              <el-button size="mini" type="text" @click="handleUpdate(scope.row)" v-hasPermi="['business:channel:edit']">编辑</el-button>
+              <el-button size="mini" type="text" @click="handleStatusChange(scope.row)" v-hasPermi="['business:channel:edit']">
+                <span v-if="getValue(scope.row.status) == 1"> 停用</span>
+                <span v-if="getValue(scope.row.status) == 2"> 启用</span>
+              </el-button>
+              <el-button size="mini" type="text" v-if="scope.row.isTransform" @click="changeUpdate(scope.row)" v-hasPermi="['business:channel:edit']">转换角色</el-button>
+              <!-- <el-switch
                style="margin-left: 9px;"
                v-model="scope.row.statusV"
                active-value="1"
@@ -189,7 +114,7 @@
                @change="handleStatusChange(scope.row)"
              ></el-switch> -->
 
-             <!-- <el-button
+              <!-- <el-button
                 size="mini"
                 type="text"
                 disabled
@@ -201,49 +126,34 @@
           </el-table-column>
         </el-table>
 
-        <pagination
-          v-show="total>0"
-          :total="total"
-          :page.sync="pageParams.pageNum"
-          :limit.sync="pageParams.pageSize"
-          @pagination="getList"
-        />
+        <pagination v-show="total>0" :total="total" :page.sync="pageParams.pageNum" :limit.sync="pageParams.pageSize" @pagination="getList" />
       </el-col>
     </el-row>
     <!-- 新建 -->
-    <channel-create
-      v-if="createShow"
-      :dialog-visible="createShow"
-      :edit-id="editId"
-      @saveSuccess="submitSuccess"
-      @close="hideDialog"
-    />
-
+    <channel-create v-if="createShow" :dialog-visible="createShow" :edit-id="editId" @saveSuccess="submitSuccess" @close="hideDialog" />
     <!-- 详情 -->
-    <channel-detail
-      v-if="detailShow"
-      :dialog-visible="detailShow"
-      :edit-id="editId"
-      @close="hideDialog"
-    />
-
+    <channel-detail v-if="detailShow" :dialog-visible="detailShow" :edit-id="editId" @close="hideDialog" />
+    <!-- 渠道转换门店 -->
+    <change-store v-if="changeShow" :dialog-visible="changeShow" :edit-id="editId" @close="hideDialog" @saveSuccess="submitSuccess" />
   </div>
 </template>
 
 <script>
 import { getToken } from "@/utils/auth";
-import { treeChannel, listChannel, updateChannelStatus} from "@/api/admin/channel";
-import { listAreaByPid} from "@/api/admin/area";
+import { treeChannel, listChannel, updateChannelStatus } from "@/api/admin/channel";
+import { listAreaByPid } from "@/api/admin/area";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import ChannelCreate from './components/Create'
 import ChannelDetail from './components/Detail'
+import ChangeStore from './components/ChangeStore.vue'
 export default {
   name: "Channel",
   components: {
     Treeselect,
     ChannelCreate,
-    ChannelDetail
+    ChannelDetail,
+    ChangeStore
   },
   data() {
     return {
@@ -255,11 +165,12 @@ export default {
       ids: [],
       // 创建编辑
       createShow: false,
+      changeShow: false,
       // 详情
       detailShow: false,
-      provinceList:[],
-      cityList:[],
-      areaList:[],
+      provinceList: [],
+      cityList: [],
+      areaList: [],
       // 编辑项ID
       editId: null,
       // 显示搜索条件
@@ -269,7 +180,7 @@ export default {
       // 用户表格数据
       channelList: [],
       channelOptions: [],
-      channelName:"",
+      channelName: "",
       // 状态数据字典
       statusOptions: [],
       // 表单参数
@@ -282,44 +193,43 @@ export default {
       queryParams: {
         name: "",
         mobile: "",
-        provinceId:"",
-        cityId:"",
-        areaId:""
+        provinceId: "",
+        cityId: "",
+        areaId: ""
       },
       pageParams: {
         pageNum: 1,
         pageSize: 10,
         orderByColumn: 'channelId',
         isAsc: 'desc',
-
-      }
+      },
     };
   },
   watch: {
     // 根据渠道名称筛选渠道树
     //channelName(val) {
-      // this.$refs.tree.filter(val);
+    // this.$refs.tree.filter(val);
     //}
   },
   mounted() {
-     this.getProvinceList()
+    this.getProvinceList()
 
   },
   created() {
-     this.getList();
+    this.getList();
   },
   methods: {
     /** 查询用户列表 */
     getList() {
       this.loading = true;
-      listChannel('pageNum='+this.pageParams.pageNum + '&pageSize='+this.pageParams.pageSize+'&orderByColumn='+ this.pageParams.orderByColumn +'&isAsc='+ this.pageParams.isAsc +'&', this.queryParams).then(response => {
-          this.channelList = response.rows;
-          this.channelList.forEach(item => {
-              item.statusV = JSON.parse(item.status).value+""
-          })
-          this.total = response.total;
-          this.loading = false;
-        }
+      listChannel('pageNum=' + this.pageParams.pageNum + '&pageSize=' + this.pageParams.pageSize + '&orderByColumn=' + this.pageParams.orderByColumn + '&isAsc=' + this.pageParams.isAsc + '&', this.queryParams).then(response => {
+        this.channelList = response.rows;
+        this.channelList.forEach(item => {
+          item.statusV = JSON.parse(item.status).value + ""
+        })
+        this.total = response.total;
+        this.loading = false;
+      }
       );
     },
     // 节点单击事件
@@ -329,50 +239,50 @@ export default {
     },
     // 懒加载节点
     loadNode(node, resolve) {
-      if(node.level === 0){
-       treeChannel({}).then(response => {
+      if (node.level === 0) {
+        treeChannel({}).then(response => {
           return resolve(response.data);
-       });
-      }else{
+        });
+      } else {
         var params = {
-          parentId:node.data.channelId
+          parentId: node.data.channelId
         }
         treeChannel(params).then(response => {
-           return resolve(response.data);
+          return resolve(response.data);
         });
       }
     },
 
     //切换排序
-    sortChannelId(row){
-      if (row){
-        let prop =  row.prop == 'commRate' ? ('t1.'+ row.prop) : row.prop;
+    sortChannelId(row) {
+      if (row) {
+        let prop = row.prop == 'commRate' ? ('t1.' + row.prop) : row.prop;
         this.pageParams.orderByColumn = prop
-        this.pageParams.isAsc = row.order=='ascending'?"asc":"desc";
+        this.pageParams.isAsc = row.order == 'ascending' ? "asc" : "desc";
         this.getList()
       }
 
     },
 
-    refreshChannelTree(){
+    refreshChannelTree() {
       treeChannel({}).then(response => {
-         this.channelOptions = response.data
+        this.channelOptions = response.data
       });
     },
 
     // 省
-    getProvinceList(){
+    getProvinceList() {
       this.cityList = []
       this.areaList = []
       this.queryParams.cityId = ""
       this.queryParams.areaId = ""
       listAreaByPid(0).then(response => {
         // console.log("getProvinceList"+JSON.stringify(response))
-         this.provinceList = response || [];
+        this.provinceList = response || [];
       });
     },
 
-    getCityList(){
+    getCityList() {
       this.cityList = []
       this.areaList = []
       this.queryParams.cityId = ""
@@ -380,38 +290,38 @@ export default {
       var provinceId = this.queryParams.provinceId
       listAreaByPid(provinceId).then(response => {
         // console.log("getCityList"+JSON.stringify(response))
-         this.cityList = response || [];
+        this.cityList = response || [];
       });
     },
 
-    getAreaList(){
+    getAreaList() {
       var cityId = this.queryParams.cityId
       listAreaByPid(cityId).then(response => {
         // console.log("getAreaList"+JSON.stringify(response))
-         this.areaList = response || [];
+        this.areaList = response || [];
       });
     },
 
     // 状态修改
     handleStatusChange(row) {
-      var newStatus = this.getValue(row.status) == 2?1:2
+      var newStatus = this.getValue(row.status) == 2 ? 1 : 2
       let text = this.getValue(row.status) == 2 ? "启用" : "停用";
       this.$confirm('确认要"' + text + '""' + row.name + '"渠道吗?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          var params={
-            channelId:row.channelId,
-            status: newStatus
-          }
-          return updateChannelStatus(params);
-        }).then(() => {
-          this.msgSuccess(text + "成功");
-          this.getList();
-        }).catch(function() {
-          // row.status = row.status === "0" ? "1" : "0";
-        });
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        var params = {
+          channelId: row.channelId,
+          status: newStatus
+        }
+        return updateChannelStatus(params);
+      }).then(() => {
+        this.msgSuccess(text + "成功");
+        this.getList();
+      }).catch(function () {
+        // row.status = row.status === "0" ? "1" : "0";
+      });
     },
 
     /** 搜索按钮操作 */
@@ -421,17 +331,17 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.queryParams= {
-         name: "",
-         mobile: "",
-         provinceId:"",
-         cityId:"",
-         areaId:""
+      this.queryParams = {
+        name: "",
+        mobile: "",
+        provinceId: "",
+        cityId: "",
+        areaId: ""
       },
-      this.resetForm("queryForm");
+        this.resetForm("queryForm");
       this.handleQuery();
     },
-    handleDetail(row){
+    handleDetail(row) {
       this.detailShow = true
       this.editId = row.channelId
     },
@@ -446,14 +356,23 @@ export default {
       this.editId = row.channelId
     },
     // 保存后的操作
-    submitSuccess(){
+    submitSuccess() {
       this.getList();
       this.refreshChannelTree();
     },
+
+    // 转换身份
+    changeUpdate(row) {
+      this.changeShow = true
+      this.editId = row.channelId
+    },
+    
+
     /**关闭弹窗*/
-    hideDialog(){
+    hideDialog() {
       this.createShow = false
       this.detailShow = false
+      this.changeShow = false
     },
 
     getDesc(val) {
@@ -476,13 +395,13 @@ export default {
       const path = "/channel/channel/childs"
       // const routerName = "BillItems"
       this.$router.push({
-        path: path ,
+        path: path,
         query: {
           parentId: parentId,
           title: title
         },
-        meta:{
-          title:"777777777777777777"
+        meta: {
+          title: "777777777777777777"
         }
       });
     },
@@ -490,5 +409,4 @@ export default {
 };
 </script>
 <style lang="sass" scoped>
-
 </style>

+ 59 - 1
src/views/business/salesite/components/AddCreate.vue

@@ -1,9 +1,38 @@
 <template>
   <el-dialog title="编辑门店名称" :visible.sync="dialogVisible" width="750px" :append-to-body="true" :before-close="close" :destroy-on-close="true" :close-on-click-modal="false">
     <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="max-height: 375px;overflow: auto;">
+      <el-form-item label="上级渠道" prop="parentId" style="width: 60%;margin: 40px 0">
+        <el-select
+          v-model="form.parentId"
+          placeholder="请选择上级渠道"
+          style="width: 100%;"
+          filterable
+          clearable
+          :filter-method="dataFilter"
+        >
+          <el-option
+            v-for="(item) in channelList"
+            :key="item.channelId"
+            :label="item.name"
+            :value="item.channelId">
+            <div>
+              <span style="float: left;">{{item.name}} </span>
+              <span style="float: right;">{{item.mobile}}</span>
+            </div>
+          </el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="门店名称" prop="name" style="width: 60%;margin: 40px 0">
         <el-input v-model="form.name" placeholder="例如xxxx店, 对用户可见" />
       </el-form-item>
+      <el-form-item label="手机号码" prop="mobile" style="width: 60%;margin: 40px 0">
+        <el-input
+          v-model="form.mobile"
+          placeholder="请输入手机号码"
+          clearable
+          size="small"
+        />
+      </el-form-item>
       <el-form-item label="关闭分佣:">
         <el-switch v-model="form.commFlag" :active-value="1" :inactive-value="0" />
         <div class="tip">开启后,购买线上票不分佣(渠道,门店,推广员)</div>
@@ -18,6 +47,7 @@
 </template>
 <script>
 import { updateSaleSite, getSaleSiteDetail } from "@/api/admin/salesite";
+import { listAllChannel } from "@/api/admin/channel";
 export default {
   props: {
     dialogVisible: {
@@ -33,6 +63,8 @@ export default {
       form: {
         name: "",
         commFlag: 0,
+        mobile: "",
+        parentId: null,
       },
       // 表单校验
       rules: {
@@ -41,9 +73,14 @@ export default {
         ],
       },
       //招商推广宣传图
-      picture: []
+      picture: [],
+      // 上级渠道列表
+      channelList:[],
     };
   },
+  mounted() {
+    this.getChannelList()
+  },
   created() {
     // 是编辑
     if (this.editId) {
@@ -51,11 +88,32 @@ export default {
     }
   },
   methods: {
+    // 获取上级渠道下拉列表
+    getChannelList(){
+      listAllChannel().then(response => {
+         this.channelList = response.data || [];
+         this.channelCopyList = response.data || [];
+      });
+    },
+    dataFilter(val) {
+      if (val) { //val存在
+        this.channelList = this.channelCopyList.filter((item) => {
+          if (!!~item.mobile.indexOf(val) || !!~item.mobile.toUpperCase().indexOf(val.toUpperCase())
+                 || !!~item.name.indexOf(val) || !!~item.name.indexOf(val)) {
+             return true
+          }
+        })
+      } else { //val为空时,还原数组
+        this.channelList = this.channelCopyList;
+      }
+    },
     getDetail() {
       this.loading = true;
       getSaleSiteDetail(this.editId).then(res => {
         this.form.name = res.data.name
         this.form.commFlag = res.data.commFlag
+        this.form.mobile = res.data.mobile
+        this.form.parentId = res.data.parentId
         this.loading = false
       }).catch(() => {
         this.loading = false;

+ 25 - 2
src/views/business/salesite/index.vue

@@ -192,6 +192,12 @@
             <span v-if="getValue(scope.row.status) == 1"> 停用</span>
             <span v-if="getValue(scope.row.status) == 2"> 启用</span>
           </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            @click="changeUpdate(scope.row)" v-if="scope.row.isTransform"
+            v-hasPermi="['business:salesite:edit']"
+          >转换角色</el-button>
          <!-- <el-switch
             style="margin-left: 9px;"
             v-model="scope.row.statusV"
@@ -267,9 +273,9 @@
 </template>
 
 <script>
-import { listAllChannel} from "@/api/admin/channel";
 import { listAreaByPid} from "@/api/admin/area";
 import { listSaleSite, updateSaleSiteStatus,salesiteOrderExport,salesiteDownload,salesiteImport } from "@/api/admin/salesite";
+import { listAllChannel, salesiteTransform } from "@/api/admin/channel";
 import SiteCreate from './components/Create'
 import AddSiteCreate from './components/AddCreate'
 import SiteDetail from './components/Detail'
@@ -277,7 +283,7 @@ export default {
   name: "Salesite",
   components: {
     AddSiteCreate,
-    SiteDetail
+    SiteDetail,
   },
   data() {
     return {
@@ -510,6 +516,23 @@ export default {
       this.createShow = true
     },
 
+    // 转换身份
+    changeUpdate(row) {
+      this.$confirm('确认要转换成渠道角色吗?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          var params={
+            channelId: row.channelId,
+          }
+          return salesiteTransform(params);
+        }).then(() => {
+          this.msgSuccess("转换成功");
+          this.getList()
+        });
+    },
+
     // 保存后的操作
     submitSuccess(){
       this.getList();