Browse Source

代理商

1
mo 3 years ago
parent
commit
7b1f45d519

+ 2 - 0
src/router/index.js

@@ -550,6 +550,8 @@ export const asyncRoutes = {
   platformAdminManger:()=>import('@/views/platformManager/paltformAdmin'),
   // 小课学员管理
   smallStudentManager:()=>import('@/views/smallStudentManager'),
+  // 代理商管理
+  agentList:()=>import('@/views/agentManager/agentList')
 }
 
 export default router

+ 9 - 1
src/styles/iconfont/iconfont.css

@@ -1,6 +1,6 @@
 @font-face {
   font-family: "iconfont"; /* Project id  */
-  src: url('iconfont.ttf?t=1645601707072') format('truetype');
+  src: url('iconfont.ttf?t=1650868886047') format('truetype');
 }
 
 .iconfont {
@@ -427,3 +427,11 @@
   content: "\e683";
 }
 
+.icon-dailishangguanli:before {
+  content: "\e684";
+}
+
+.icon-tuanlianbaofenrun:before {
+  content: "\e685";
+}
+

BIN
src/styles/iconfont/iconfont.ttf


+ 267 - 0
src/views/agentManager/agentList.vue

@@ -0,0 +1,267 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>
+      代理商管理
+    </h2>
+    <div class="m-core">
+      <save-form
+        :inline="true"
+        :model="searchForm"
+        @submit="search"
+        @reset="onReSet"
+      >
+        <el-form-item prop="search">
+          <el-input
+            v-model.trim="searchForm.search"
+            clearable
+            @keyup.enter.native="search"
+            placeholder="姓名/手机号"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="state">
+          <el-select placeholder="状态" v-model="searchForm.state" clearable>
+            <el-option label="正常" value="0"></el-option>
+            <el-option label="冻结" value="1"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button native-type="submit" type="primary">搜索</el-button>
+          <el-button native-type="reset" type="danger">重置</el-button>
+        </el-form-item>
+      </save-form>
+      <div class="btnList">
+        <el-button
+          v-permission="'/teacherOperationAdd'"
+          type="primary"
+          style="margin-bottom: 20px"
+          @click="addAgent"
+        >
+          新建代理商
+        </el-button>
+        <el-button
+          v-permission="'/teacherOperationAdd'"
+          type="primary"
+          style="margin-bottom: 20px"
+        >
+          代理商H5
+        </el-button>
+      </div>
+      <div class="tableWrap">
+        <el-table
+          style="width: 100%"
+          :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+          :data="tableList"
+          row-key="userId"
+          lazy
+          :load="getStaffList"
+          :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+        >
+          <el-table-column
+            align="center"
+            prop="userId"
+            label="代理商编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="proxyName"
+            label="代理商名称"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="name"
+            label="姓名"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="phone"
+            label="手机号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="role"
+            label="角色"
+          ></el-table-column>
+          <el-table-column align="center" prop="state" label="状态">
+            <template slot-scope="scope">
+              {{ scope.row.state == "0" ? "正常" : "冻结" }}
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            align="center"
+            fixed="right"
+            label="操作"
+            width="300"
+          >
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text" @click="onJoinQrCode(scope.row)"
+                  >入驻二维码</el-button
+                >
+                <el-button type="text" @click="addAgentStaff(scope.row)"
+                  >添加员工</el-button
+                >
+                <!-- permission -->
+                <el-button type="text" @click="addAgent(scope.row)"
+                  >修改</el-button
+                >
+
+                <el-button
+                  type="text"
+                  v-if="scope.row.state == '0'"
+                  @click="freezeProxy(scope.row)"
+                  >冻结</el-button
+                >
+                <el-button type="text" v-else @click="freezeProxy(scope.row)"
+                  >启用</el-button
+                >
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          sync
+          :total.sync="rules.total"
+          :page.sync="rules.page"
+          :limit.sync="rules.limit"
+          :page-sizes="rules.page_size"
+          @pagination="getList"
+        />
+      </div>
+    </div>
+    <eidtAgentMager ref="eidtAgentMagerRef" @getList="getList" />
+    <eidthStaff ref="eidthStaffRef" @getList="getStaffList" />
+    <qr-code
+      v-model="codeStatus"
+      :isDown="true"
+      title="入驻二维码"
+      :codeUrl="qrCodeUrl"
+    />
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import pagination from "@/components/Pagination/index";
+import load from "@/utils/loading";
+import { permission } from "@/utils/directivePage";
+import { getProxyUserList, freezeProxyUser,getProxyUserStaffList } from "./api";
+import eidtAgentMager from "./modals/eidtAgentMager";
+import eidthStaff from "./modals/eidthStaff";
+import qrCode from "@/components/QrCode/index";
+import { isvalidPhone, vaildStudentUrl } from "@/utils/validate";
+export default {
+  components: { pagination, eidtAgentMager, qrCode, eidthStaff },
+  data() {
+    return {
+      searchForm: {
+        search: null,
+        state: "",
+      },
+
+      tableList: [],
+      organList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+      codeStatus: false,
+      qrCodeUrl: null,
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // 获取分部
+
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getList();
+    },
+    async getList() {
+      try {
+        const res = await getProxyUserList({
+          ...this.searchForm,
+          page: this.rules.page,
+          rows: this.rules.limit,
+        });
+        this.tableList = res.data.rows.map(item=>{
+          return {
+            ...item,
+            hasChildren:true,
+          }
+        });
+        this.rules.total = res.data.total;
+      } catch (e) {}
+    },
+    search() {
+      this.rules.page = 1;
+      this.getList();
+    },
+    onReSet() {
+      this.$nextTick(()=>{
+        this.search()
+      })
+    },
+    permission(str) {
+      return permission(str);
+    },
+    addAgent(row) {
+      this.$refs.eidtAgentMagerRef.openDialog(row);
+    },
+    addAgentStaff(row) {
+      this.$refs.eidthStaffRef.openDialog(row);
+    },
+    onJoinQrCode(row) {
+      console.log(row);
+      this.qrCodeUrl =
+        vaildStudentUrl() +
+        "/project/questionAsk/index.html?recommender=" +
+        row.userId;
+      this.codeStatus = true;
+    },
+    async freezeProxy(row) {
+      let str = "";
+      let state = "";
+      if (row.state == 0) {
+        state = 1;
+        str = "冻结";
+      } else {
+        state = 0;
+        str = "启用";
+      }
+      try {
+        await this.$confirm(`是否${str}代理商"${row.proxyName}"?`, "提示", {
+          type: "warning",
+        });
+        await freezeProxyUser({ state, id: row.userId });
+        this.$message.success(`${str}成功`);
+        this.getList();
+      } catch (e) {}
+    },
+   async getStaffList(tree, treeNode, resolve) {
+      console.log(tree,treeNode,resolve)
+      try{
+        const res = await getProxyUserStaffList({id:tree.userId})
+        console.log(res.data)
+        resolve(res.data)
+        // treeNode.loaded = true;
+        // treeNode.loading = false;
+      }catch(e){
+    //  resolve([])
+      }
+    },
+  },
+};
+</script>
+<style lang='scss' scoped>
+</style>

+ 71 - 0
src/views/agentManager/api.js

@@ -0,0 +1,71 @@
+
+import request from '@/utils/request2'
+
+// 分页查询代理商负责人数据
+export const getProxyUserList = data => {
+  return request({
+    url: '/api-web/tenantProxyInfo/queryProxyUser',
+    // params: data,
+    data,
+    method: 'post',
+    requestType:'json'
+  })
+}
+
+
+// 新增代理商
+export const addProxyUser = data => {
+  return request({
+    url: '/api-web/tenantProxyInfo/addProxyInfo',
+    // params: data,
+    data,
+    method: 'post',
+    requestType:'json'
+  })
+}
+
+
+// 修改代理商
+export const updateProxyUser = data => {
+  return request({
+    url: '/api-web/tenantProxyInfo/updateProxyUserInfo',
+    // params: data,
+    data,
+    method: 'post',
+    requestType:'json'
+  })
+}
+
+
+// 启用冻结
+export const freezeProxyUser = data => {
+  return request({
+    url: '/api-web/tenantProxyInfo/freezeProxy',
+    // params: data,
+    // data,
+    method: 'get',
+    params: data,
+    // requestType:'json'
+  })
+}
+
+
+export const addProxyUserStaff = data => {
+  return request({
+    url: '/api-web/tenantProxyInfo/addProxyStaff',
+    // params: data,
+    data,
+    method: 'post',
+    requestType:'json'
+  })
+}
+
+// 获取员工
+export const getProxyUserStaffList = data=>{
+  return request({
+    url: '/api-web/tenantProxyInfo/queryProxyUserStaff',
+    // params: data,
+    params: data,
+    method: 'get',
+  })
+}

+ 117 - 0
src/views/agentManager/modals/eidtAgentMager.vue

@@ -0,0 +1,117 @@
+<template>
+  <el-dialog
+    :title="agentForm.userId ? '修改代理商' : '新建代理商'"
+    width="600px"
+    :visible.sync="agentVisible"
+  >
+    <el-form
+      :model="agentForm"
+      label-position="right"
+      label-width="120px"
+      ref="adjustmentForm"
+    >
+      <el-form-item
+        label="代理商名称"
+        prop="proxyName"
+        :rules="[
+          { required: true, message: '请输入代理商名称', trigger: 'blur' },
+        ]"
+      >
+        <el-input v-model.trim="agentForm.proxyName" class="w100"></el-input>
+      </el-form-item>
+      <el-form-item
+        label="负责人姓名"
+        prop="name"
+        :rules="[
+          { required: true, message: '请输入负责人姓名', trigger: 'blur' },
+        ]"
+      >
+        <el-input v-model.trim="agentForm.name" class="w100"></el-input>
+      </el-form-item>
+      <el-form-item
+        label="手机号"
+        prop="phone"
+        :rules="[
+          { required: true, message: '手机号不能为空', trigger: 'blur' },
+          {
+            pattern: /^1[3456789]\d{9}$/,
+            message: '请输入正确的手机号',
+            trigger: 'blur',
+          },
+        ]"
+      >
+        <el-input v-model.trim="agentForm.phone" class="w100"></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="agentVisible = false">取 消</el-button>
+      <el-button type="primary" @click="subEidtProxy">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import { addProxyUser,updateProxyUser } from '../api'
+export default {
+  data() {
+    return {
+      agentVisible: false,
+      agentForm: {
+        name: "",
+        proxyName: "",
+        phone: "",
+        userId: "",
+      },
+    };
+  },
+  mounted() {},
+  methods: {
+    openDialog(row) {
+      if (row && row.userId) {
+        this.agentForm = { ...row };
+      } else {
+        this.agentForm = {
+          name: "",
+          proxyName: "",
+          phone: "",
+          userId: "",
+        };
+        // this.$refs.adjustmentForm.resetFields();
+      }
+      this.agentVisible = true;
+    },
+    subEidtProxy() {
+      this.$refs.adjustmentForm.validate( async(flag) => {
+        if (flag) {
+          // 验证通过
+          if (this.agentForm.userId) {
+            // 修改
+
+                   try {
+              const res = await updateProxyUser({...this.agentForm})
+              this.$message.success('修改成功')
+              this.$emit('getList')
+              this.agentVisible = false;
+            }catch(e){
+              console.log(e)
+            }
+          } else {
+            // 新增
+            try {
+              const res = await addProxyUser({...this.agentForm})
+              this.$message.success('新增成功')
+              this.$emit('getList')
+              this.agentVisible = false;
+            }catch(e){
+              console.log(e)
+            }
+
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 109 - 0
src/views/agentManager/modals/eidthStaff.vue

@@ -0,0 +1,109 @@
+<template>
+  <el-dialog
+    :title="agentForm.userId ? '修改员工' : '新建员工'"
+    width="600px"
+    :visible.sync="agentVisible"
+  >
+    <el-form
+      :model="agentForm"
+      label-position="right"
+      label-width="120px"
+      ref="adjustmentForm"
+    >
+      <el-form-item
+        label="姓名"
+        prop="name"
+        :rules="[
+          { required: true, message: '请输入姓名', trigger: 'blur' },
+        ]"
+      >
+        <el-input v-model.trim="agentForm.name" class="w100"></el-input>
+      </el-form-item>
+
+      <el-form-item
+        label="手机号"
+        prop="phone"
+        :rules="[
+          { required: true, message: '手机号不能为空', trigger: 'blur' },
+          {
+            pattern: /^1[3456789]\d{9}$/,
+            message: '请输入正确的手机号',
+            trigger: 'blur',
+          },
+        ]"
+      >
+        <el-input v-model.trim="agentForm.phone" class="w100"></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="agentVisible = false">取 消</el-button>
+      <el-button type="primary" @click="subEidtProxy">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import { addProxyUserStaff,updateProxyUser } from '../api'
+export default {
+  data() {
+    return {
+      agentVisible: false,
+      agentForm: {
+        name: "",
+        phone: "",
+        userId: "",
+        parentId:""
+      },
+    };
+  },
+  mounted() {},
+  methods: {
+    openDialog(row) {
+      if (row && row.parentId) {
+        this.agentForm = { ...row };
+      } else {
+        this.agentForm = {
+           name: "",
+        phone: "",
+        userId: "",
+        parentId:row.userId
+        };
+        // this.$refs.adjustmentForm.resetFields();
+      }
+      this.agentVisible = true;
+    },
+    subEidtProxy() {
+      this.$refs.adjustmentForm.validate( async(flag) => {
+        if (flag) {
+          // 验证通过
+          if (this.agentForm.userId) {
+            // 修改
+
+                   try {
+              const res = await updateProxyUser({...this.agentForm})
+              this.$message.success('修改成功')
+              this.$emit('getList')
+              this.agentVisible = false;
+            }catch(e){
+              console.log(e)
+            }
+          } else {
+            // 新增
+            try {
+              const res = await addProxyUserStaff({...this.agentForm})
+              this.$message.success('新增成功')
+              this.$emit('getList')
+              this.agentVisible = false;
+            }catch(e){
+              console.log(e)
+            }
+
+          }
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+</style>