Procházet zdrojové kódy

修改组织架构文件

plg před 7 měsíci
rodič
revize
0eebab3596

+ 11 - 3
src/router/router.js

@@ -21,15 +21,23 @@ export const routerList = [
         name: "adminHome",
         component: () => import("../views/manage/adminHome"),
       },
+      //用户管理
       {
         path: "userManage",
         name: "userManage",
         component: () => import("../views/manage/userManage"),
       },
+      //教师管理
       {
-        path: "userManage",
-        name: "userManage",
-        component: () => import("../views/manage/userManage"),
+        path: "teacherManage",
+        name: "teacherManage",
+        component: () => import("../views/manage/teacherManage"),
+      },
+      //辅导员管理
+      {
+        path: "instructorManage",
+        name: "instructorManage",
+        component: () => import("../views/manage/instructorManage"),
       },
       {
         path: "roleManage",

+ 31 - 22
src/views/manage/channelInfo/orderSettlement.vue

@@ -51,6 +51,7 @@
 <script>
 import TreeChart from "@/components/TreeData";
 import { Loading } from "element-ui";
+import { oSessionStorage } from "../../../utils/utils";
 
 export default {
   name: "tree",
@@ -101,9 +102,11 @@ export default {
       ], // 股东类型
       lastId: 11, // 最后一级id
       currentTreeData: {},
+      userInfo: {},
     };
   },
   mounted() {
+    this.userInfo = JSON.parse(oSessionStorage.getItem("userInfo"));
     this.getChannel();
   },
   methods: {
@@ -113,31 +116,37 @@ export default {
     },
     //获取组织架构方法--------------------开始-----------------------
     getChannel() {
-      this.$http.get(`/org/findAllOrgByPOrgNo`, {}, (res) => {
-        //  this.$toast.success({message:'成功'});
-        if (res && res.code == 200) {
-          //将值赋值给list
-          if (res.data.length > 0) {
-            let resAdd = this.addPro(res.data);
-            this.ppData = JSON.parse(JSON.stringify(resAdd));
-            let forRes = this.arrToTree(resAdd);
-            // console.log('格式化的结构')
-            // console.log(forRes)
-            let resultRes = this.deleteChildren(forRes);
+      this.$http.get(
+        `/org/findAllOrgByPOrgNo?orgNo=${this.userInfo.orgNo}`,
+        {},
+        (res) => {
+          //  this.$toast.success({message:'成功'});
+          if (res && res.code == 200) {
+            //将值赋值给list
+            if (res.data.length > 0) {
+              let resAdd = this.addPro(res.data);
+              this.ppData = JSON.parse(JSON.stringify(resAdd));
+              let forRes = this.arrToTree(resAdd);
+              console.log("forRes")
+              console.log(forRes)
+              // console.log('格式化的结构')
+              // console.log(forRes)
+              let resultRes = this.deleteChildren(forRes);
 
-            let levelList = this.markersFun(resultRes, 1);
-            console.log("格式化的结构且去掉children");
-            // console.log(JSON.stringify(levelList));
-            this.treeData = levelList[0];
-            console.log(levelList[0]);
+              let levelList = this.markersFun(resultRes, 1);
+              console.log("格式化的结构且去掉children");
+              // console.log(JSON.stringify(levelList));
+              this.treeData = levelList[0];
+              console.log(levelList[0]);
+            } else {
+              this.groupData = [];
+            }
+            // this.channelList = res.data;
           } else {
-            this.groupData = [];
+            this.$message.error(res.msg);
           }
-          // this.channelList = res.data;
-        } else {
-          this.$message.error(res.msg);
         }
-      });
+      );
     },
     //z增加
     addPro(val) {
@@ -154,7 +163,7 @@ export default {
         item.children = arr.filter((e) => {
           return item.orgNo === e.parentOrgNo;
         });
-        return !item.parentOrgNo;
+        return item.orgNo==this.userInfo.orgNo;
       });
       return data;
     },

+ 752 - 0
src/views/manage/instructorManage.vue

@@ -0,0 +1,752 @@
+<template>
+  <div class="record-warp">
+    <div class="record-main">
+      <el-row>
+        <el-col :span="24">
+          <div class="search-head" style="padding-bottom: 10px">
+            <el-input v-model="name" clearable placeholder="请输入姓名"></el-input
+            >&nbsp;&nbsp;&nbsp;&nbsp;
+
+            <el-input
+              v-model="studentNumber"
+              clearable
+              placeholder="请输入学号"
+            ></el-input
+            >&nbsp;&nbsp;&nbsp;&nbsp;
+            <el-cascader
+             v-show="userInfo.roleType=='3'"
+              placeholder="请选择组织架构"
+              v-model="group"
+              :options="groupData"
+              :props="{ checkStrictly: true }"
+              clearable
+            ></el-cascader>
+            <!-- :props="{ checkStrictly: true }" -->
+            <el-cascader
+              v-show="userInfo.roleType=='2'"
+              placeholder="请选择组织架构"
+              v-model="group"
+              :options="groupData"
+            
+              clearable
+            ></el-cascader>
+            &nbsp;&nbsp;&nbsp;&nbsp;
+            <!-- <span style="font-size: 16px;">性别:</span>&nbsp;&nbsp; -->
+            <div style="display: flex; flex-direction: row; align-items: center">
+              <span
+                style="
+                  font-size: 16px;
+                  margin-right: 10px;
+                  line-height: 20px;
+                  min-width: 40px;
+                "
+                >性别:</span
+              >
+              <el-radio v-model="sex" label="1">男</el-radio>
+              <el-radio v-model="sex" label="0">女</el-radio>
+            </div>
+            &nbsp;&nbsp;&nbsp;&nbsp;
+            <el-button type="primary" round icon="el-icon-search" @click="searchTarget"
+              >搜索</el-button
+            >
+            <el-button type="info" round @click="clearSearch">清空</el-button>
+            <el-button type="success" round class="add_class" @click="fileVisible = true"
+              >批量导入</el-button
+            >
+            <el-button type="info" round @click="addUser">单独注册</el-button>
+          </div>
+        </el-col>
+      </el-row>
+      <!-- <el-row class="add_user_class">
+        <el-col :span="24">
+          <div class="search-head"></div>
+        </el-col>
+      </el-row> -->
+
+      <div class="table-content" style="flex: 1; overflow: auto">
+        <el-table
+          :data="tableData"
+          :row-style="{ height: '0px' }"
+          :cell-style="{ padding: '5px' }"
+          :header-cell-style="{ background: '#F8F8F8', color: '#606266' }"
+        >
+          <!-- <el-table-column prop="name" label="姓名" align="center" width=""  show-overflow-tooltip>
+          </el-table-column> -->
+          <el-table-column
+            show-overflow-tooltip
+            prop="userName"
+            label="姓名"
+            align="center"
+            width=""
+          >
+          </el-table-column>
+          <el-table-column prop="userNo" label="学号" align="center" width="">
+          </el-table-column>
+          <el-table-column
+            prop="gender"
+            label="性别"
+            align="center"
+            width=""
+            :formatter="genderFun"
+          >
+          </el-table-column>
+          <el-table-column prop="orgName" label="所属组织架构" align="center" width="">
+          </el-table-column>
+          <el-table-column label="操作" width="510px" align="center">
+            <template slot-scope="scope">
+              <div class="detail_button_out">
+                <div class="detail_button" @click="viewUser(scope.row)">
+                  <img src="../../assets/img/table/search.png" />
+                  <span> 查看个人详情 </span>
+                </div>
+                <div class="detail_button" @click="editUser(scope.row)">
+                  <img src="../../assets/img/table/edit.png" />
+                  <span>编辑个人详情</span>
+                </div>
+                <!-- 弹出提示框 提示是否确认重置-->
+                <div class="detail_button" @click="resetUser(false, scope.row)">
+                  <img src="../../assets/img/table/reset.png" />
+                  <span> 重置密码 </span>
+                </div>
+                <!-- 弹出提示框 提示是否确认删除-->
+
+                <div class="detail_button" @click="resetUser(true, scope.row)">
+                  <img src="../../assets/img/table/delete.png" />
+                  <span> 删除 </span>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <!-- small -->
+      <el-pagination
+        class="pag_class"
+        background
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page.sync="pageNum"
+        layout="total, sizes, prev, pager, next"
+        :page-size="pageSize"
+        :page-sizes="[10, 20, 50, 100]"
+        :total="total"
+      >
+      </el-pagination>
+      <!-- <el-pagination small background layout="total prev, pager, next" :total="36">
+      </el-pagination> -->
+    </div>
+    <Register ref="register" @search="searchTarget" />
+    <el-dialog
+      class="dig_update"
+      :visible.sync="centerDialogVisible"
+      width="40%"
+      center
+      style="border-radius: 40px"
+    >
+      <div slot="title">
+        <div class="demo-ruleForm">
+          <p class="dig_title">详情</p>
+          <div class="user_out">
+            <div class="user_out_sub">姓名</div>
+            <div class="user_out_subNext">
+              {{ view.name }}
+            </div>
+          </div>
+          <div class="user_out">
+            <div class="user_out_sub">学号</div>
+            <div class="user_out_subNext">
+              {{ view.studentNumber }}
+            </div>
+          </div>
+          <div class="user_out">
+            <div class="user_out_sub">性别</div>
+            <div class="user_out_subNext">
+              {{ view.sex }}
+            </div>
+          </div>
+          <div class="user_out">
+            <div class="user_out_sub">组织架构</div>
+            <div class="user_out_subNext">
+              {{ view.orgName }}
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="dig_update"
+      :visible.sync="resetVisible"
+      width="30%"
+      center
+      style="border-radius: 40px"
+    >
+      <div slot="title">
+        <div class="demo-ruleForm">
+          <p v-show="!isDelete" class="dig_title">重置密码</p>
+          <p v-show="isDelete" class="dig_title">删除用户</p>
+          <p v-show="!isDelete">重置密码后密码为123456</p>
+          <p v-show="isDelete">确认将删除{{ userName }}用户?</p>
+          <div class="dig_button">
+            <el-button type="info" round @click="cancle()">取消</el-button>
+            <!-- <el-button type="success" round @click="submitForm('ruleForm')"
+                >提交</el-button
+              > -->
+            <el-button type="success" round @click="submitCom()">确定</el-button>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+    <el-dialog
+      class="dig_update"
+      :visible.sync="fileVisible"
+      width="40%"
+      center
+      style="border-radius: 40px"
+    >
+      <div slot="title">
+        <div class="demo-ruleForm">
+          <p v-show="!isDelete" class="dig_title">批量导入</p>
+
+          <!-- 先选择组织架构 -->
+          <!-- :props="{ checkStrictly: true }" -->
+          <el-cascader
+            placeholder="请选择组织架构"
+            v-model="groupLead"
+            :options="groupData"
+            clearable
+          ></el-cascader>
+          <el-upload
+            class="upload-demo"
+            style="margin-top: 40px"
+            drag
+            :before-upload="beforeUploadFun"
+            :action="
+              basePath + `/user/userImport?orgNo=${groupLead[groupLead.length - 1]}`
+            "
+            :on-success="fileSuccess"
+            :on-error="fileError"
+          >
+            <i class="el-icon-upload"></i>
+            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+            <div class="el-upload__tip" slot="tip">建议文件不超过500kb</div>
+          </el-upload>
+          <a
+            style="
+              display: flex;
+              margin-top: 20px;
+              margin-bottom: 20px;
+              color: #409eff;
+              cursor: pointer;
+            "
+            :href="basePath + '/user/templateDownload'"
+          >
+            下载模版
+          </a>
+          <!-- <div class="dig_button">
+            <el-button type="info" round @click="cancle()">取消</el-button>
+     
+            <el-button type="success" round @click="submitCom()">确定</el-button>
+          </div> -->
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { oSessionStorage } from "../../utils/utils";
+import register from "../../components/Register.vue";
+import { basePath } from "../../utils/http";
+export default {
+  name: "userManage",
+  components: {
+    Register: register,
+  },
+  data() {
+    return {
+      basePath: basePath,
+      //上传文件的弹出款的标志
+      fileVisible: false,
+      //判断点击的是重置密码还是点击删除
+      isDelete: false,
+      //重置密码需要调用个userId
+      userId: "",
+      //充值密码使用userName
+      userName: "",
+      //重置密码弹出框
+      resetVisible: false,
+      //根据名称搜索
+      name: "",
+      //搜索的用户编号
+      studentNumber: "",
+      //搜索的组织架构
+      // 搜索需要的性别
+      sex: "",
+
+      group: "",
+      ppData: [],
+      groupData: [],
+      //批量上传时的组织架构
+      groupLead: [],
+      options: [
+        {
+          value: "1",
+          label: "选项1",
+          children: [
+            {
+              value: "11",
+              label: "选项11",
+              children: [{ value: "111", label: "选项111" }],
+            },
+          ],
+        },
+      ],
+
+      centerDialogVisible: false,
+      editUserFlag: false,
+      startTime: "",
+      endTime: "",
+      value1: null,
+      total: 0,
+      pageSize: 10,
+      pageNum: 1,
+      keyword: "",
+      tableData: [],
+      userInfo: {}, //用户信息
+
+      invitationCode: "",
+      roleType: "0",
+      type: 0,
+      view: {
+        name: "",
+        studentNumber: "",
+        sex: "",
+        orgName: "",
+      },
+      channel: "",
+      channelList: [{ name: "渠道天成", id: "1" }],
+    };
+  },
+  created() {},
+  mounted() {
+    this.userInfo = JSON.parse(oSessionStorage.getItem("userInfo"));
+    console.log("this.userInfo");
+    console.log(this.userInfo);
+    this.getChannel();
+    if (!this.userInfo) {
+      //如果用户信息不存在跳转登陆页
+      this.$router.push({ path: "/" });
+    }
+    this.searchTarget();
+  },
+  methods: {
+    //文件上传之前
+    beforeUploadFun(file) {
+      //查询是否选择了组织架构
+      if (this.groupLead.length == 0) {
+        this.$message({
+          message: "请选择组织架构",
+          type: "error",
+        });
+        return false;
+      }
+    },
+    //文件上传成功
+    fileSuccess(res) {
+      if (res.code == 200) {
+        this.searchTarget();
+        this.$message({
+          message: res.msg,
+          type: "success",
+        });
+      } else {
+        this.$message({
+          message: res.msg,
+          type: "error",
+        });
+      }
+      //查询列表
+    },
+    //文件上传失败
+    fileError() {
+      this.$message({
+        message: "上传失败",
+        type: "error",
+      });
+    },
+    cancle() {
+      this.resetVisible = false;
+    },
+    //提交文本
+    submitCom() {
+      //判断当前是否是
+      if (this.isDelete) {
+        this.deleteUser();
+        //调用删除方法
+      } else {
+        this.resetFun();
+        // 调用重置密码方法
+      }
+    },
+    //性别---
+    genderFun(val) {
+      let sex = val.gender;
+      if (sex == "1") {
+        return "男";
+      } else if (sex == "0") {
+        return "女";
+      } else {
+        return sex;
+      }
+    },
+    //每页多少条
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.searchTarget();
+      //将首页重置为1时---且总条数变化
+      //设置为当前总条数
+    },
+    //获取组织架构方法--------------------开始-----------------------
+    getChannel() {
+      this.$http.get(
+        `/org/findAllOrgByPOrgNo?orgNo=${this.userInfo.orgNo}`,
+        {},
+        (res) => {
+          //  this.$toast.success({message:'成功'});
+          if (res && res.code == 200) {
+            //将值赋值给list
+            if (res.data.length > 0) {
+              let resAdd = this.addPro(res.data);
+              this.ppData = JSON.parse(JSON.stringify(resAdd));
+              let forRes = this.arrToTree(resAdd);
+              // console.log('格式化的结构')
+              // console.log(forRes)
+              let resultRes = this.deleteChildren(forRes);
+              console.log("格式化的结构且去掉children");
+              
+              this.groupData = resultRes[0].children;
+            } else {
+              this.groupData = [];
+            }
+            // this.channelList = res.data;
+          } else {
+            this.$message.error(res.msg);
+          }
+        }
+      );
+    },
+    //z增加
+    addPro(val) {
+      let data = JSON.parse(JSON.stringify(val));
+      for (let i = 0; i < val.length; i++) {
+        data[i].value = val[i].orgNo;
+        data[i].label = val[i].orgName;
+      }
+      return data;
+    },
+    //非递归方式:将平铺数据转换为树形结构数据
+    arrToTree(arr) {
+      let data = arr.filter((item) => {
+        item.children = arr.filter((e) => {
+          return item.orgNo === e.parentOrgNo;
+        });
+        // return !item.parentOrgNo;
+        return item.orgNo == this.userInfo.orgNo;
+      });
+      return data;
+    },
+    //去除转换树形结构数据后存在的空children
+    deleteChildren(arr) {
+      let childs = arr;
+      for (let i = childs.length; i--; i > 0) {
+        if (childs[i].children) {
+          if (childs[i].children.length) {
+            this.deleteChildren(childs[i].children);
+          } else {
+            delete childs[i].children;
+          }
+        }
+      }
+      return arr;
+    },
+    //获取组织架构方法--------------------结束-----------------------
+    formatterDelete(row) {
+      if (row.state == 0) {
+        return "已删除";
+      } else {
+        return "正常";
+      }
+    },
+    resetUser(flag, val) {
+      this.resetVisible = true;
+      this.isDelete = flag;
+      this.userId = val.id;
+      this.userName = val.userName;
+    },
+    editUser(row) {
+      this.editRegisterUser(row);
+    },
+    viewUser(row) {
+      this.view.name = row.userName;
+      this.view.studentNumber = row.userNo;
+      this.view.sex = row.gender == "0" ? "女" : "男";
+      this.view.orgName = row.orgName;
+      this.centerDialogVisible = true;
+    },
+    addUser() {
+      this.addRegisterUser(true);
+    },
+    clearSearch() {
+      this.name = "";
+      //搜索的用户编号
+      this.studentNumber = "";
+      //搜索的组织架构
+      // 搜索需要的性别
+      this.sex = "";
+      this.group = "";
+      this.searchTarget();
+    },
+
+    addRegisterUser(val) {
+      this.$refs.register.open(val);
+    },
+    editRegisterUser(val) {
+      this.$refs.register.edit(val);
+    },
+    resetFun() {
+      this.$http.get(`/user/resetPassword?userId=${this.userId}`, {}, (res) => {
+        //  this.$toast.success({message:'成功'});
+        if (res && res.code == 200) {
+          this.resetVisible = false;
+          this.$message.success("重置成功");
+          this.searchTarget();
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+    },
+    deleteUser() {
+      this.$http.get(`/user/delete?userId=${this.userId}`, {}, (res) => {
+        //  this.$toast.success({message:'成功'});
+        if (res && res.code == 200) {
+          this.$message.success("删除成功");
+          this.resetVisible = false;
+          this.searchTarget();
+        } else {
+          this.$message.error("删除失败");
+        }
+      });
+    },
+    handleCurrentChange(val) {
+      this.pageNum = val;
+      this.searchList();
+    },
+    //根据现有情况进行搜索
+    searchList() {
+      let url = `/user/findUserListByPage?pageSize=${this.pageSize}&pageNum=${
+        this.pageNum
+      }${this.sex == "" ? "" : `&gender=${this.sex}`}${
+        this.group.length == 0
+          ? `&orgNo=${this.userInfo.orgNo}`
+          : `&orgNo=${this.group[this.group.length - 1]}`
+      }${this.name == "" ? "" : `&userName=${this.name}`}${
+        this.studentNumber == "" ? "" : `&userNo=${this.studentNumber}`
+      }`;
+      this.$http.get(url, {}, (res) => {
+        console.log(res);
+        if (res && res.code == 200) {
+          this.tableData = res.data.content;
+          this.total = res.data.totalElements;
+        } else {
+          // this.$toast.fail(res.msg);
+          this.$message.error(res.msg);
+        }
+      });
+    },
+    searchTarget() {
+      this.pageNum = 1;
+      this.searchList();
+    },
+    //跳转首页
+    goHome() {
+      this.$router.push({ path: "/home" });
+    },
+    //跳转记录页
+    goRecord() {
+      this.$router.push({ path: "/record" });
+    },
+    //退出登陆
+    logout() {
+      oSessionStorage.removeItem("userInfo");
+      oSessionStorage.removeItem("token");
+      this.$router.push({ path: "/" });
+    },
+
+    //点击获取月出勤次数
+    getTimes(param) {
+      this.monthTimes = param;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+@import "../../styles/theme.less";
+.pag_class {
+  text-align: end;
+}
+
+.pag_class /deep/.el-input__inner {
+  width: 100% !important;
+}
+.pag_class /deep/.el-pagination--small span:not([class*="suffix"]) {
+  height: 22px;
+  line-height: 28px !important;
+}
+
+.record-warp {
+  width: 100%;
+  height: 80vh;
+  //background: url(../../assets/img/index/19.png) no-repeat center;
+  //background-size: 100% 100%;
+  position: relative;
+
+  .record-main {
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    overflow-y: auto;
+    display: flex;
+    flex-direction: column;
+
+    .search-head {
+      width: 100%;
+      display: flex;
+      flex-direction: row;
+      justify-content: flex-start;
+      align-items: center;
+
+      .zc-title {
+        color: #606266;
+        font-size: 14px;
+      }
+    }
+
+    .table-content {
+      margin: 10px 0;
+    }
+  }
+}
+
+.add_user_class {
+  margin-top: 10px;
+}
+
+.user_out {
+  display: flex;
+  width: 100%;
+  align-items: center;
+  border: 1px solid #eeeeef;
+  line-height: 50px;
+  margin-top: 10px;
+}
+
+.user_out_sub {
+  flex: 1;
+  background-color: #fafafa;
+  text-align: center;
+  // color:#ffffff
+}
+
+.user_out_subNext {
+  padding-left: 10px;
+  flex: 3;
+}
+.detail_button_out {
+  display: flex;
+  justify-content: space-around;
+  .detail_button {
+    display: flex;
+    align-items: center;
+    cursor: pointer;
+    letter-spacing: 2px;
+    img {
+      width: 15px;
+      margin-right: 5px;
+    }
+    span {
+      color: #00bf78;
+      // font-weight: 600;
+    }
+  }
+}
+
+//弹出框样式
+
+.dig_update /deep/.el-cascader {
+  position: relative;
+  font-size: 14px;
+  line-height: 40px;
+  width: 100%;
+}
+.dig_update /deep/.el-dialog {
+  box-shadow: none !important;
+  background: transparent !important;
+}
+.demo-ruleForm /deep/ .el-form-item {
+  margin-right: 10px;
+  vertical-align: top;
+  display: flex !important;
+  flex-direction: column;
+}
+.demo-ruleForm /deep/.el-dialog__header {
+  background-color: #ffffff;
+  padding-left: 140px !important;
+}
+.demo-ruleForm /deep/.el-form-item__label {
+  text-align: left;
+  vertical-align: middle;
+  float: left;
+  font-size: 14px;
+  color: #606266;
+  line-height: 40px;
+  padding: 0 12px 0 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.demo-ruleForm /deep/.el-input {
+  width: 100% !important;
+}
+
+.demo-ruleForm /deep/.el-input__inner {
+  width: 100% !important;
+  background-color: #f7f7f7;
+  border: 0px;
+}
+
+.dig_button {
+  margin-top: 40px;
+  display: flex;
+  width: 100%;
+  justify-content: space-around;
+}
+
+.demo-ruleForm {
+  background-color: #ffffff;
+  // border-radius: 20px;
+  margin-right: -10px;
+  margin-top: -10px;
+  padding-right: 100px;
+  padding-left: 100px;
+  border-radius: 20px;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  .dig_title {
+    margin-bottom: 30px;
+    text-align: center;
+    font-weight: 700;
+  }
+}
+</style>

+ 32 - 11
src/views/manage/manageMain.vue

@@ -285,7 +285,7 @@ export default {
         },
         {
           id: "1",
-          name: "管理员管理",
+          name: "管理员管理",
           icon: require("../../assets/menu/yuan.png"),
           showItem: true,
           path: "/manage/principal",
@@ -368,7 +368,7 @@ export default {
       this.userType = this.userInfo.roleType;
       console.log(this.userInfo);
       console.log(this.userType);
-      //假如是代理用户则 //代理用户菜单不显示
+      //假如当前的用户是管理员
       if (this.userType == "3") {
         this.menuList = [
           {
@@ -378,16 +378,16 @@ export default {
             showItem: true,
             path: "/manage/generalSituation",
           },
-          {
-            id: "0",
-            name: "用户管理",
-            icon: require("../../assets/menu/user.png"),
-            showItem: true,
-            path: "/manage/userManage",
-          },
+          // {
+          //   id: "0",
+          //   name: "用户管理",
+          //   icon: require("../../assets/menu/user.png"),
+          //   showItem: true,
+          //   path: "/manage/userManage",
+          // },
           {
             id: "1",
-            name: "管理员管理",
+            name: "管理员管理",
             icon: require("../../assets/menu/yuan.png"),
             showItem: true,
             path: "/manage/principal",
@@ -463,11 +463,32 @@ export default {
           },
           {
             id: "0",
-            name: "用户管理",
+            name: "学生管理",
             icon: require("../../assets/menu/user.png"),
             showItem: true,
             path: "/manage/userManage",
           },
+          {
+            id: "5",
+            name: "教师管理",
+            icon: require("../../assets/menu/user.png"),
+            showItem: true,
+            path: "/manage/teacherManage",
+          },
+          {
+            id: "6",
+            name: "辅导员管理",
+            icon: require("../../assets/menu/user.png"),
+            showItem: true,
+            path: "/manage/instructorManage",
+          },
+          {
+            id: "2",
+            name: "组织架构",
+            icon: require("../../assets/menu/zu.png"),
+            showItem: true,
+            path: "/manage/organizational",
+          },
           {
             id: "3",
             name: "测试计划",

+ 752 - 0
src/views/manage/teacherManage.vue

@@ -0,0 +1,752 @@
+<template>
+  <div class="record-warp">
+    <div class="record-main">
+      <el-row>
+        <el-col :span="24">
+          <div class="search-head" style="padding-bottom: 10px">
+            <el-input v-model="name" clearable placeholder="请输入姓名"></el-input
+            >&nbsp;&nbsp;&nbsp;&nbsp;
+
+            <el-input
+              v-model="studentNumber"
+              clearable
+              placeholder="请输入学号"
+            ></el-input
+            >&nbsp;&nbsp;&nbsp;&nbsp;
+            <el-cascader
+             v-show="userInfo.roleType=='3'"
+              placeholder="请选择组织架构"
+              v-model="group"
+              :options="groupData"
+              :props="{ checkStrictly: true }"
+              clearable
+            ></el-cascader>
+            <!-- :props="{ checkStrictly: true }" -->
+            <el-cascader
+              v-show="userInfo.roleType=='2'"
+              placeholder="请选择组织架构"
+              v-model="group"
+              :options="groupData"
+            
+              clearable
+            ></el-cascader>
+            &nbsp;&nbsp;&nbsp;&nbsp;
+            <!-- <span style="font-size: 16px;">性别:</span>&nbsp;&nbsp; -->
+            <div style="display: flex; flex-direction: row; align-items: center">
+              <span
+                style="
+                  font-size: 16px;
+                  margin-right: 10px;
+                  line-height: 20px;
+                  min-width: 40px;
+                "
+                >性别:</span
+              >
+              <el-radio v-model="sex" label="1">男</el-radio>
+              <el-radio v-model="sex" label="0">女</el-radio>
+            </div>
+            &nbsp;&nbsp;&nbsp;&nbsp;
+            <el-button type="primary" round icon="el-icon-search" @click="searchTarget"
+              >搜索</el-button
+            >
+            <el-button type="info" round @click="clearSearch">清空</el-button>
+            <el-button type="success" round class="add_class" @click="fileVisible = true"
+              >批量导入</el-button
+            >
+            <el-button type="info" round @click="addUser">单独注册</el-button>
+          </div>
+        </el-col>
+      </el-row>
+      <!-- <el-row class="add_user_class">
+        <el-col :span="24">
+          <div class="search-head"></div>
+        </el-col>
+      </el-row> -->
+
+      <div class="table-content" style="flex: 1; overflow: auto">
+        <el-table
+          :data="tableData"
+          :row-style="{ height: '0px' }"
+          :cell-style="{ padding: '5px' }"
+          :header-cell-style="{ background: '#F8F8F8', color: '#606266' }"
+        >
+          <!-- <el-table-column prop="name" label="姓名" align="center" width=""  show-overflow-tooltip>
+          </el-table-column> -->
+          <el-table-column
+            show-overflow-tooltip
+            prop="userName"
+            label="姓名"
+            align="center"
+            width=""
+          >
+          </el-table-column>
+          <el-table-column prop="userNo" label="学号" align="center" width="">
+          </el-table-column>
+          <el-table-column
+            prop="gender"
+            label="性别"
+            align="center"
+            width=""
+            :formatter="genderFun"
+          >
+          </el-table-column>
+          <el-table-column prop="orgName" label="所属组织架构" align="center" width="">
+          </el-table-column>
+          <el-table-column label="操作" width="510px" align="center">
+            <template slot-scope="scope">
+              <div class="detail_button_out">
+                <div class="detail_button" @click="viewUser(scope.row)">
+                  <img src="../../assets/img/table/search.png" />
+                  <span> 查看个人详情 </span>
+                </div>
+                <div class="detail_button" @click="editUser(scope.row)">
+                  <img src="../../assets/img/table/edit.png" />
+                  <span>编辑个人详情</span>
+                </div>
+                <!-- 弹出提示框 提示是否确认重置-->
+                <div class="detail_button" @click="resetUser(false, scope.row)">
+                  <img src="../../assets/img/table/reset.png" />
+                  <span> 重置密码 </span>
+                </div>
+                <!-- 弹出提示框 提示是否确认删除-->
+
+                <div class="detail_button" @click="resetUser(true, scope.row)">
+                  <img src="../../assets/img/table/delete.png" />
+                  <span> 删除 </span>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <!-- small -->
+      <el-pagination
+        class="pag_class"
+        background
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page.sync="pageNum"
+        layout="total, sizes, prev, pager, next"
+        :page-size="pageSize"
+        :page-sizes="[10, 20, 50, 100]"
+        :total="total"
+      >
+      </el-pagination>
+      <!-- <el-pagination small background layout="total prev, pager, next" :total="36">
+      </el-pagination> -->
+    </div>
+    <Register ref="register" @search="searchTarget" />
+    <el-dialog
+      class="dig_update"
+      :visible.sync="centerDialogVisible"
+      width="40%"
+      center
+      style="border-radius: 40px"
+    >
+      <div slot="title">
+        <div class="demo-ruleForm">
+          <p class="dig_title">详情</p>
+          <div class="user_out">
+            <div class="user_out_sub">姓名</div>
+            <div class="user_out_subNext">
+              {{ view.name }}
+            </div>
+          </div>
+          <div class="user_out">
+            <div class="user_out_sub">学号</div>
+            <div class="user_out_subNext">
+              {{ view.studentNumber }}
+            </div>
+          </div>
+          <div class="user_out">
+            <div class="user_out_sub">性别</div>
+            <div class="user_out_subNext">
+              {{ view.sex }}
+            </div>
+          </div>
+          <div class="user_out">
+            <div class="user_out_sub">组织架构</div>
+            <div class="user_out_subNext">
+              {{ view.orgName }}
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="dig_update"
+      :visible.sync="resetVisible"
+      width="30%"
+      center
+      style="border-radius: 40px"
+    >
+      <div slot="title">
+        <div class="demo-ruleForm">
+          <p v-show="!isDelete" class="dig_title">重置密码</p>
+          <p v-show="isDelete" class="dig_title">删除用户</p>
+          <p v-show="!isDelete">重置密码后密码为123456</p>
+          <p v-show="isDelete">确认将删除{{ userName }}用户?</p>
+          <div class="dig_button">
+            <el-button type="info" round @click="cancle()">取消</el-button>
+            <!-- <el-button type="success" round @click="submitForm('ruleForm')"
+                >提交</el-button
+              > -->
+            <el-button type="success" round @click="submitCom()">确定</el-button>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+    <el-dialog
+      class="dig_update"
+      :visible.sync="fileVisible"
+      width="40%"
+      center
+      style="border-radius: 40px"
+    >
+      <div slot="title">
+        <div class="demo-ruleForm">
+          <p v-show="!isDelete" class="dig_title">批量导入</p>
+
+          <!-- 先选择组织架构 -->
+          <!-- :props="{ checkStrictly: true }" -->
+          <el-cascader
+            placeholder="请选择组织架构"
+            v-model="groupLead"
+            :options="groupData"
+            clearable
+          ></el-cascader>
+          <el-upload
+            class="upload-demo"
+            style="margin-top: 40px"
+            drag
+            :before-upload="beforeUploadFun"
+            :action="
+              basePath + `/user/userImport?orgNo=${groupLead[groupLead.length - 1]}`
+            "
+            :on-success="fileSuccess"
+            :on-error="fileError"
+          >
+            <i class="el-icon-upload"></i>
+            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+            <div class="el-upload__tip" slot="tip">建议文件不超过500kb</div>
+          </el-upload>
+          <a
+            style="
+              display: flex;
+              margin-top: 20px;
+              margin-bottom: 20px;
+              color: #409eff;
+              cursor: pointer;
+            "
+            :href="basePath + '/user/templateDownload'"
+          >
+            下载模版
+          </a>
+          <!-- <div class="dig_button">
+            <el-button type="info" round @click="cancle()">取消</el-button>
+     
+            <el-button type="success" round @click="submitCom()">确定</el-button>
+          </div> -->
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { oSessionStorage } from "../../utils/utils";
+import register from "../../components/Register.vue";
+import { basePath } from "../../utils/http";
+export default {
+  name: "userManage",
+  components: {
+    Register: register,
+  },
+  data() {
+    return {
+      basePath: basePath,
+      //上传文件的弹出款的标志
+      fileVisible: false,
+      //判断点击的是重置密码还是点击删除
+      isDelete: false,
+      //重置密码需要调用个userId
+      userId: "",
+      //充值密码使用userName
+      userName: "",
+      //重置密码弹出框
+      resetVisible: false,
+      //根据名称搜索
+      name: "",
+      //搜索的用户编号
+      studentNumber: "",
+      //搜索的组织架构
+      // 搜索需要的性别
+      sex: "",
+
+      group: "",
+      ppData: [],
+      groupData: [],
+      //批量上传时的组织架构
+      groupLead: [],
+      options: [
+        {
+          value: "1",
+          label: "选项1",
+          children: [
+            {
+              value: "11",
+              label: "选项11",
+              children: [{ value: "111", label: "选项111" }],
+            },
+          ],
+        },
+      ],
+
+      centerDialogVisible: false,
+      editUserFlag: false,
+      startTime: "",
+      endTime: "",
+      value1: null,
+      total: 0,
+      pageSize: 10,
+      pageNum: 1,
+      keyword: "",
+      tableData: [],
+      userInfo: {}, //用户信息
+
+      invitationCode: "",
+      roleType: "0",
+      type: 0,
+      view: {
+        name: "",
+        studentNumber: "",
+        sex: "",
+        orgName: "",
+      },
+      channel: "",
+      channelList: [{ name: "渠道天成", id: "1" }],
+    };
+  },
+  created() {},
+  mounted() {
+    this.userInfo = JSON.parse(oSessionStorage.getItem("userInfo"));
+    console.log("this.userInfo");
+    console.log(this.userInfo);
+    this.getChannel();
+    if (!this.userInfo) {
+      //如果用户信息不存在跳转登陆页
+      this.$router.push({ path: "/" });
+    }
+    this.searchTarget();
+  },
+  methods: {
+    //文件上传之前
+    beforeUploadFun(file) {
+      //查询是否选择了组织架构
+      if (this.groupLead.length == 0) {
+        this.$message({
+          message: "请选择组织架构",
+          type: "error",
+        });
+        return false;
+      }
+    },
+    //文件上传成功
+    fileSuccess(res) {
+      if (res.code == 200) {
+        this.searchTarget();
+        this.$message({
+          message: res.msg,
+          type: "success",
+        });
+      } else {
+        this.$message({
+          message: res.msg,
+          type: "error",
+        });
+      }
+      //查询列表
+    },
+    //文件上传失败
+    fileError() {
+      this.$message({
+        message: "上传失败",
+        type: "error",
+      });
+    },
+    cancle() {
+      this.resetVisible = false;
+    },
+    //提交文本
+    submitCom() {
+      //判断当前是否是
+      if (this.isDelete) {
+        this.deleteUser();
+        //调用删除方法
+      } else {
+        this.resetFun();
+        // 调用重置密码方法
+      }
+    },
+    //性别---
+    genderFun(val) {
+      let sex = val.gender;
+      if (sex == "1") {
+        return "男";
+      } else if (sex == "0") {
+        return "女";
+      } else {
+        return sex;
+      }
+    },
+    //每页多少条
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.searchTarget();
+      //将首页重置为1时---且总条数变化
+      //设置为当前总条数
+    },
+    //获取组织架构方法--------------------开始-----------------------
+    getChannel() {
+      this.$http.get(
+        `/org/findAllOrgByPOrgNo?orgNo=${this.userInfo.orgNo}`,
+        {},
+        (res) => {
+          //  this.$toast.success({message:'成功'});
+          if (res && res.code == 200) {
+            //将值赋值给list
+            if (res.data.length > 0) {
+              let resAdd = this.addPro(res.data);
+              this.ppData = JSON.parse(JSON.stringify(resAdd));
+              let forRes = this.arrToTree(resAdd);
+              // console.log('格式化的结构')
+              // console.log(forRes)
+              let resultRes = this.deleteChildren(forRes);
+              console.log("格式化的结构且去掉children");
+              
+              this.groupData = resultRes[0].children;
+            } else {
+              this.groupData = [];
+            }
+            // this.channelList = res.data;
+          } else {
+            this.$message.error(res.msg);
+          }
+        }
+      );
+    },
+    //z增加
+    addPro(val) {
+      let data = JSON.parse(JSON.stringify(val));
+      for (let i = 0; i < val.length; i++) {
+        data[i].value = val[i].orgNo;
+        data[i].label = val[i].orgName;
+      }
+      return data;
+    },
+    //非递归方式:将平铺数据转换为树形结构数据
+    arrToTree(arr) {
+      let data = arr.filter((item) => {
+        item.children = arr.filter((e) => {
+          return item.orgNo === e.parentOrgNo;
+        });
+        // return !item.parentOrgNo;
+        return item.orgNo == this.userInfo.orgNo;
+      });
+      return data;
+    },
+    //去除转换树形结构数据后存在的空children
+    deleteChildren(arr) {
+      let childs = arr;
+      for (let i = childs.length; i--; i > 0) {
+        if (childs[i].children) {
+          if (childs[i].children.length) {
+            this.deleteChildren(childs[i].children);
+          } else {
+            delete childs[i].children;
+          }
+        }
+      }
+      return arr;
+    },
+    //获取组织架构方法--------------------结束-----------------------
+    formatterDelete(row) {
+      if (row.state == 0) {
+        return "已删除";
+      } else {
+        return "正常";
+      }
+    },
+    resetUser(flag, val) {
+      this.resetVisible = true;
+      this.isDelete = flag;
+      this.userId = val.id;
+      this.userName = val.userName;
+    },
+    editUser(row) {
+      this.editRegisterUser(row);
+    },
+    viewUser(row) {
+      this.view.name = row.userName;
+      this.view.studentNumber = row.userNo;
+      this.view.sex = row.gender == "0" ? "女" : "男";
+      this.view.orgName = row.orgName;
+      this.centerDialogVisible = true;
+    },
+    addUser() {
+      this.addRegisterUser(true);
+    },
+    clearSearch() {
+      this.name = "";
+      //搜索的用户编号
+      this.studentNumber = "";
+      //搜索的组织架构
+      // 搜索需要的性别
+      this.sex = "";
+      this.group = "";
+      this.searchTarget();
+    },
+
+    addRegisterUser(val) {
+      this.$refs.register.open(val);
+    },
+    editRegisterUser(val) {
+      this.$refs.register.edit(val);
+    },
+    resetFun() {
+      this.$http.get(`/user/resetPassword?userId=${this.userId}`, {}, (res) => {
+        //  this.$toast.success({message:'成功'});
+        if (res && res.code == 200) {
+          this.resetVisible = false;
+          this.$message.success("重置成功");
+          this.searchTarget();
+        } else {
+          this.$message.error(res.msg);
+        }
+      });
+    },
+    deleteUser() {
+      this.$http.get(`/user/delete?userId=${this.userId}`, {}, (res) => {
+        //  this.$toast.success({message:'成功'});
+        if (res && res.code == 200) {
+          this.$message.success("删除成功");
+          this.resetVisible = false;
+          this.searchTarget();
+        } else {
+          this.$message.error("删除失败");
+        }
+      });
+    },
+    handleCurrentChange(val) {
+      this.pageNum = val;
+      this.searchList();
+    },
+    //根据现有情况进行搜索
+    searchList() {
+      let url = `/user/findUserListByPage?pageSize=${this.pageSize}&pageNum=${
+        this.pageNum
+      }${this.sex == "" ? "" : `&gender=${this.sex}`}${
+        this.group.length == 0
+          ? `&orgNo=${this.userInfo.orgNo}`
+          : `&orgNo=${this.group[this.group.length - 1]}`
+      }${this.name == "" ? "" : `&userName=${this.name}`}${
+        this.studentNumber == "" ? "" : `&userNo=${this.studentNumber}`
+      }`;
+      this.$http.get(url, {}, (res) => {
+        console.log(res);
+        if (res && res.code == 200) {
+          this.tableData = res.data.content;
+          this.total = res.data.totalElements;
+        } else {
+          // this.$toast.fail(res.msg);
+          this.$message.error(res.msg);
+        }
+      });
+    },
+    searchTarget() {
+      this.pageNum = 1;
+      this.searchList();
+    },
+    //跳转首页
+    goHome() {
+      this.$router.push({ path: "/home" });
+    },
+    //跳转记录页
+    goRecord() {
+      this.$router.push({ path: "/record" });
+    },
+    //退出登陆
+    logout() {
+      oSessionStorage.removeItem("userInfo");
+      oSessionStorage.removeItem("token");
+      this.$router.push({ path: "/" });
+    },
+
+    //点击获取月出勤次数
+    getTimes(param) {
+      this.monthTimes = param;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+@import "../../styles/theme.less";
+.pag_class {
+  text-align: end;
+}
+
+.pag_class /deep/.el-input__inner {
+  width: 100% !important;
+}
+.pag_class /deep/.el-pagination--small span:not([class*="suffix"]) {
+  height: 22px;
+  line-height: 28px !important;
+}
+
+.record-warp {
+  width: 100%;
+  height: 80vh;
+  //background: url(../../assets/img/index/19.png) no-repeat center;
+  //background-size: 100% 100%;
+  position: relative;
+
+  .record-main {
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    overflow-y: auto;
+    display: flex;
+    flex-direction: column;
+
+    .search-head {
+      width: 100%;
+      display: flex;
+      flex-direction: row;
+      justify-content: flex-start;
+      align-items: center;
+
+      .zc-title {
+        color: #606266;
+        font-size: 14px;
+      }
+    }
+
+    .table-content {
+      margin: 10px 0;
+    }
+  }
+}
+
+.add_user_class {
+  margin-top: 10px;
+}
+
+.user_out {
+  display: flex;
+  width: 100%;
+  align-items: center;
+  border: 1px solid #eeeeef;
+  line-height: 50px;
+  margin-top: 10px;
+}
+
+.user_out_sub {
+  flex: 1;
+  background-color: #fafafa;
+  text-align: center;
+  // color:#ffffff
+}
+
+.user_out_subNext {
+  padding-left: 10px;
+  flex: 3;
+}
+.detail_button_out {
+  display: flex;
+  justify-content: space-around;
+  .detail_button {
+    display: flex;
+    align-items: center;
+    cursor: pointer;
+    letter-spacing: 2px;
+    img {
+      width: 15px;
+      margin-right: 5px;
+    }
+    span {
+      color: #00bf78;
+      // font-weight: 600;
+    }
+  }
+}
+
+//弹出框样式
+
+.dig_update /deep/.el-cascader {
+  position: relative;
+  font-size: 14px;
+  line-height: 40px;
+  width: 100%;
+}
+.dig_update /deep/.el-dialog {
+  box-shadow: none !important;
+  background: transparent !important;
+}
+.demo-ruleForm /deep/ .el-form-item {
+  margin-right: 10px;
+  vertical-align: top;
+  display: flex !important;
+  flex-direction: column;
+}
+.demo-ruleForm /deep/.el-dialog__header {
+  background-color: #ffffff;
+  padding-left: 140px !important;
+}
+.demo-ruleForm /deep/.el-form-item__label {
+  text-align: left;
+  vertical-align: middle;
+  float: left;
+  font-size: 14px;
+  color: #606266;
+  line-height: 40px;
+  padding: 0 12px 0 0;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.demo-ruleForm /deep/.el-input {
+  width: 100% !important;
+}
+
+.demo-ruleForm /deep/.el-input__inner {
+  width: 100% !important;
+  background-color: #f7f7f7;
+  border: 0px;
+}
+
+.dig_button {
+  margin-top: 40px;
+  display: flex;
+  width: 100%;
+  justify-content: space-around;
+}
+
+.demo-ruleForm {
+  background-color: #ffffff;
+  // border-radius: 20px;
+  margin-right: -10px;
+  margin-top: -10px;
+  padding-right: 100px;
+  padding-left: 100px;
+  border-radius: 20px;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  .dig_title {
+    margin-bottom: 30px;
+    text-align: center;
+    font-weight: 700;
+  }
+}
+</style>