Quellcode durchsuchen

更新分组长班长确认

wuhongyuq vor 5 Jahren
Ursprung
Commit
a2eadc87a0

+ 4 - 1
src/layout/class/classGroup.vue

@@ -5,7 +5,7 @@
         <van-button round icon="smile" type="info" v-if="this.user.job === '班长'" @click="createGroup()">创建小组</van-button>
       </el-col>
       <el-col :span="24">
-        <groupList :groupList="groupList" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId"></groupList>
+        <groupList :columns="columns" :groupList="groupList" :form="form" :show="show" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId"></groupList>
       </el-col>
       <el-col :span="24" class="foot">
         <noGroup v-if="this.user.job === '班长'" :noGroupStudentNames="noGroupStudentNames"></noGroup>
@@ -36,6 +36,9 @@ export default {
     groupForm: null,
     stuIdAndGroupId: null, //登陆者id和小组id
     noGroupStudentNames: null, //没有小组的学生
+    show: null,
+    form: null,
+    columns: null,
   },
   components: {
     groupList,

+ 6 - 0
src/layout/class/classList.vue

@@ -14,6 +14,9 @@
               :groupForm="groupForm"
               :stuIdAndGroupId="stuIdAndGroupId"
               :noGroupStudentNames="noGroupStudentNames"
+              :show="show"
+              :form="form"
+              :columns="columns"
             ></classGroup>
           </van-tab>
         </van-tabs>
@@ -35,6 +38,9 @@ export default {
     groupForm: null, //分組form
     stuIdAndGroupId: null, //登陆者id和小组id
     noGroupStudentNames: null, //没有小组的学生
+    form: null,
+    show: null,
+    columns: null,
   },
   components: {
     stuNameList, //学生班级学生名单

+ 79 - 17
src/layout/class/groupList.vue

@@ -7,24 +7,53 @@
             <template slot="title">
               <el-col :span="2">{{ index + 1 }}.</el-col>
               <el-col :span="6" class="groupName"> {{ item.name }} {{ item.students.length }}人</el-col>
-              <el-col :span="3">
-                <el-button v-if="item.students.length >= 10" round plain type="danger" size="mini" disabled>已满员</el-button>
-              </el-col>
-              <el-col :span="1"></el-col>
-              <el-col :span="4">
-                <el-button round type="danger" plain size="mini" @click="deleteGroup(item.id)">删除</el-button>
-              </el-col>
-              <el-col :span="1"></el-col>
-              <el-col :span="4">
-                <el-button round type="success" size="mini" v-if="stuIdAndGroupId.groupId === '' && item.students.length <= 10" @click="joinGroup(item.id)"
-                  >加入</el-button
-                >
-                <el-button round type="danger" size="mini" v-if="stuIdAndGroupId.groupId === item.id" plain @click="exitGroup(item.id)">退出</el-button>
+              <el-col :span="24" v-if="item.status === '0'">
+                <el-col :span="2">
+                  <el-button v-if="item.students.length >= 10" round plain type="danger" size="mini" disabled>已满员</el-button>
+                </el-col>
+                <el-col :span="1"></el-col>
+                <el-col :span="4">
+                  <el-button round type="danger" plain size="mini" @click="deleteGroup(item.id)">删除</el-button>
+                </el-col>
+                <el-col :span="1"></el-col>
+                <el-col :span="4">
+                  <el-button round type="success" size="mini" v-if="stuIdAndGroupId.groupId === '' && item.students.length <= 10" @click="joinGroup(item.id)"
+                    >加入</el-button
+                  >
+                  <el-button round type="danger" size="mini" v-if="stuIdAndGroupId.groupId === item.id" plain @click="exitGroup(item.id)">退出</el-button>
+                </el-col>
+                <el-col :span="1"></el-col>
+                <el-col :span="4" v-if="user.job === '班长'">
+                  <el-button round type="danger" plain size="mini" @click.native="save(item)">确认</el-button>
+                </el-col>
               </el-col>
             </template>
             <el-col :span="24" class="list" v-for="(itemStrudent, indexStudent) in item.students" :key="indexStudent">
-              <el-col :span="6">{{ itemStrudent.stuname }}</el-col>
+              <el-col :span="6"
+                ><el-col :span="24" @click.native="openClick(item, itemStrudent)"
+                  >{{ itemStrudent.stuname }} {{ itemStrudent.type == '1' ? ' 组长' : '组员' }}</el-col
+                ></el-col
+              >
             </el-col>
+
+            <van-dialog v-model="show" title="选择组长" :showConfirmButton="false">
+              <van-form @submit="onSubmit">
+                <van-field readonly clickable name="picker" :value="value" label="选择器" placeholder="点击选择组长" @click="showPicker = true" />
+
+                <van-field name="radio" label="学生职务">
+                  <van-radio-group v-model="form.type" direction="horizontal" slot="input">
+                    <van-radio name="0">组员</van-radio>
+                    <van-radio name="1">组长</van-radio>
+                  </van-radio-group>
+                </van-field>
+                <div style="margin:16px,16px,0,16px;text-align:center">
+                  <van-button type="info">提交</van-button>
+                </div>
+              </van-form>
+            </van-dialog>
+            <van-popup v-model="showPicker" position="bottom">
+              <van-picker value-key="stuname" show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
+            </van-popup>
           </el-collapse-item>
         </el-collapse>
       </el-col>
@@ -41,18 +70,26 @@ Vue.use(Dialog);
 export default {
   name: 'groupList',
   props: {
+    show: null,
     groupList: null,
     stuIdAndGroupId: null,
+    form: null,
+    columns: null,
   },
   components: {},
-  data: () => ({}),
-  created() {},
+  data: () => ({
+    value: '',
+    column: ['组员', '组长'],
+    showPicker: false,
+  }),
+  created() {
+    console.log(this.user.job);
+  },
   computed: {
     ...mapState(['user']),
     userid() {
       return this.user.userid;
     },
-    ...mapState(['user']),
   },
   methods: {
     // 进组
@@ -94,6 +131,28 @@ export default {
           // on cancel
         });
     },
+
+    openClick(item) {
+      this.$emit('opanSubmit', item);
+    },
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+
+    onConfirm(value, index) {
+      console.log(value);
+
+      this.value = value.stuname;
+      console.log(this.value);
+      this.showPicker = false;
+      this.$emit('onvalue', { value });
+    },
+    save(item) {
+      console.log();
+
+      this.$emit('queren', item);
+    },
+    onConfirms(value) {},
   },
 };
 </script>
@@ -122,4 +181,7 @@ p {
 button {
   width: 120%;
 }
+/deep/.van-dialog {
+  height: 400px;
+}
 </style>

+ 9 - 3
src/layout/class/nameList/stuNameList.vue

@@ -9,9 +9,14 @@
         </el-col>
       </el-row>
       <el-col :span="24" class="info">
-        <el-col :span="6" class="list" v-for="(item, index) in stuNameList" :key="index">
+        <el-col :span="12" class="list" v-for="(item, index) in stuNameList" :key="index">
           <p class="name">{{ item.name }}</p>
-          <p class="job" v-if="item.job">{{ item.job }}<i class="el-icon-circle-check"></i></p>
+          <p class="job" v-if="item.job">职务:{{ item.job }}<i class="el-icon-circle-check"></i></p>
+          <el-col :span="24" class="job">性别:{{ item.gender }}</el-col>
+          <el-col :span="24" class="job">寝室号:{{ item.bedroom }}</el-col>
+          <el-col :span="24" class="job"
+            ><i class="el-icon-phone"></i><el-link href="tel:01234567890" :underline="false">:{{ item.phone }}</el-link></el-col
+          >
         </el-col>
       </el-col>
     </el-row>
@@ -38,13 +43,14 @@ p {
   margin: 0;
 }
 .list {
-  text-align: center;
   padding: 15px 0 0 0;
 }
 .list .name {
+  text-align: center;
   font-size: 14px;
 }
 .list .job {
+  text-align: center;
   font-size: 12px;
   color: #405ffe;
   padding: 5px 0 0 0;

+ 3 - 0
src/layout/user/clickBtn.vue

@@ -18,6 +18,9 @@
         <el-col :span="24" class="native" v-if="this.user.type === '4'">
           <van-cell is-link @click="$router.push({ path: '/user/socre' })">评分</van-cell>
         </el-col>
+        <el-col :span="24" class="native" v-if="this.user.type === '4'">
+          <van-cell is-link @click="$router.push({ path: '/user/quit' })">退出管理</van-cell>
+        </el-col>
       </el-col>
     </el-row>
   </div>

+ 62 - 0
src/layout/user/quitList.vue

@@ -0,0 +1,62 @@
+<template>
+  <div id="leaveList">
+    <el-row>
+      <el-col
+        :span="24"
+        class="list"
+        v-for="(item, index) in leaveList"
+        :key="index"
+        @click.native="$router.push({ path: '/user/quitReason', query: { id: item.id } })"
+      >
+        <el-col :span="14" class="time">
+          <p>开始时间:{{ item.starttime }}</p>
+          <p>结束时间:{{ item.endtime }}</p>
+        </el-col>
+        <el-col :span="10" class="ispass"> 请假结果:{{ item.status === '0' ? '未通过' : item.status === '1' ? '通过' : '审核中' }} </el-col>
+        <!-- <el-col :span="10" @click="deleteBtn(item.id)">删除</el-col> -->
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapLeave } = createNamespacedHelpers('leave');
+export default {
+  name: 'leaveList',
+  props: {
+    leaveList: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    // ...mapLeave(['delete']),
+    // async deleteBtn(id) {
+    //   const res = await this.delete(id);
+    //   this.$checkRes(res, '删除成功', '删除失败');
+    // },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.list {
+  width: 97%;
+  padding: 15px;
+  background-color: #fff;
+  border-radius: 15px;
+  margin: 0 5px 5px 5px;
+}
+.list .time p {
+  padding: 5px 0;
+}
+.list .ispass {
+  padding: 20px 0;
+}
+</style>

+ 12 - 0
src/router/index.js

@@ -160,6 +160,18 @@ const routes = [
     meta: { title: '查看评分', isleftarrow: true },
     component: () => import('../views/user/socre.vue'),
   },
+  //个人信息-退出审请
+  {
+    path: '/user/quit',
+    meta: { title: '退出管理', isleftarrow: true },
+    component: () => import('../views/user/quit.vue'),
+  },
+  {
+    path: '/user/quitReason',
+    meta: { title: '退出申请', isleftarrow: true },
+    component: () => import('../views/user/quitReason.vue'),
+  },
+
   //正在登陆
   {
     path: '/login',

+ 3 - 0
src/store/index.js

@@ -19,6 +19,8 @@ import termquest from '@frame/store/termquest';
 import task from '@frame/store/task';
 import dept from '@frame/store/dept';
 import login from '@frame/store/login';
+import sethead from '@frame/store/sethead';
+
 import * as ustate from '@frame/store/user/state';
 import * as umutations from '@frame/store/user/mutations';
 Vue.use(Vuex);
@@ -48,5 +50,6 @@ export default new Vuex.Store({
     task,
     dept,
     completion,
+    sethead,
   },
 });

+ 47 - 1
src/views/class/index.vue

@@ -23,6 +23,14 @@
               :stuIdAndGroupId="stuIdAndGroupId"
               :noGroupStudentNames="noGroupStudentNames"
               :classid="this.user.classid"
+              @onSubmit="onSubmit"
+              @openClick="openClick"
+              @opanSubmit="opanSubmit"
+              :form="form"
+              :show="show"
+              :columns="columns"
+              @onvalue="onvalue"
+              @queren="queren"
             ></classList>
           </span>
         </el-col>
@@ -43,6 +51,8 @@ import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 const { mapActions: mapGroup } = createNamespacedHelpers('group');
 const { mapActions: mapStudent } = createNamespacedHelpers('student');
 const { mapActions: mapclasses } = createNamespacedHelpers('classes');
+const { mapActions: mapSethead } = createNamespacedHelpers('sethead');
+
 export default {
   metaInfo: { title: '班级名单' },
   name: 'index',
@@ -54,6 +64,9 @@ export default {
     footInfo, //底部导航
   },
   data: () => ({
+    form: {},
+    columns: [],
+    show: false,
     // 班主任看班级名单
     headClassList: [],
     // 学生看学生名单
@@ -89,7 +102,9 @@ export default {
   methods: {
     ...mapclasses({ classList: 'query', classFetch: 'fetch' }),
     ...mapStudent({ stuQery: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
-    ...mapGroup(['query', 'create', 'delete', 'insert', 'exit']),
+    ...mapGroup(['query', 'create', 'delete', 'insert', 'exit', 'update']),
+    ...mapSethead({ Setheadupdates: 'update' }),
+
     // 班主任查询管理班级列表
     async searchInfo() {
       const res = await this.classList({ headteacherid: this.user.userid });
@@ -105,6 +120,9 @@ export default {
     async searchstu() {
       let classid = this.user.classid;
       const res = await this.stuQery({ classid });
+
+      console.log(res.data);
+
       this.$set(this, `stuNameList`, res.data);
     },
     // 查询组
@@ -112,12 +130,14 @@ export default {
       let stuid = this.user.userid;
       const result = await this.query();
       const groupList = result.data;
+
       this.$set(this, 'groupList', groupList);
       // 找出登陆者在哪个组
       // 找出组id
       let groupId = '';
       // 所有有组学生id
       let studentIds = [];
+
       var i = groupList.findIndex(value => {
         var v = value.students.findIndex(value => {
           studentIds.push(value.stuid);
@@ -125,6 +145,7 @@ export default {
         });
         return v != -1;
       });
+      console.log(studentIds);
       if (i != -1) {
         groupId = groupList[i].id;
       }
@@ -138,7 +159,10 @@ export default {
       // let job = this.user.job;
       // console.log(stuIdAndGroupId.job);
       //   stuIdAndGroupId.job = job;
+
       this.$set(this, 'stuIdAndGroupId', stuIdAndGroupId);
+      console.log(stuIdAndGroupId);
+
       let studentList = this.stuNameList;
       // 没有组的学生名字
       let noGroupStudentNames = [];
@@ -198,6 +222,28 @@ export default {
         this.findGroup();
       }
     },
+    async openClick() {},
+    async onSubmit({ data }) {
+      console.log(data);
+      let res = await this.Setheadupdates(data);
+      console.log(res);
+      this.show = false;
+    },
+    opanSubmit(item) {
+      this.form.groupid = item.id;
+      this.$set(this, 'columns', item.students);
+      if (this.user.job === '班长') {
+        this.show = true;
+      }
+    },
+    onvalue(value) {
+      this.form.stuid = value.value.stuid;
+    },
+    async queren(item) {
+      item.status = '1';
+      console.log(item);
+      const res = await this.create(item);
+    },
   },
 };
 </script>

+ 88 - 0
src/views/user/quit.vue

@@ -0,0 +1,88 @@
+<template>
+  <div id="leave">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <!-- <topInfo></topInfo> -->
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <el-col :span="24" class="leaveBtn">
+            <van-button round type="info" icon="smile" @click="onClickRight()">退出申请</van-button>
+          </el-col>
+          <el-col :span="24" class="leaveList">
+            <quitList :leaveList="leaveList"></quitList>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import quitList from '@/layout/user/quitList.vue';
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapLeave } = createNamespacedHelpers('leave');
+export default {
+  metaInfo: { title: '请假管理' },
+  name: 'leave',
+  props: {},
+  components: {
+    NavBar, //头部导航
+    quitList, //请假列表
+  },
+  data: () => ({
+    leaveList: [],
+    title: '',
+    isleftarrow: '',
+    transitionName: 'fade',
+    navShow: true,
+  }),
+  created() {
+    this.searchInfo();
+  },
+  computed: {},
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  watch: {
+    $route(to, from) {
+      this.title = to.meta.title;
+      this.isleftarrow = to.meta.isleftarrow;
+    },
+  },
+  methods: {
+    ...mapLeave(['query']),
+    async searchInfo({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      this.$set(this, `leaveList`, res.data);
+    },
+    // 跳转到请假
+    onClickRight() {
+      this.$router.push({ path: '/user/leaveDetail' });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+}
+.main {
+  min-height: 570px;
+}
+.main .leaveBtn {
+  text-align: center;
+  padding: 15px 0;
+}
+</style>

+ 89 - 0
src/views/user/quitReason.vue

@@ -0,0 +1,89 @@
+<template>
+  <div id="leaveDetail">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <leaveRequest :form="form" @submit="submitForm" @cancelClick="cancelClick"></leaveRequest>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import leaveRequest from '@/layout/user/leaveRequest.vue';
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapLeave } = createNamespacedHelpers('leave');
+export default {
+  name: 'leaveDetail',
+  props: {},
+  components: {
+    NavBar, //头部导航
+    leaveRequest, //请假申请
+  },
+  data: () => ({
+    form: {},
+    title: '',
+    isleftarrow: '',
+    transitionName: 'fade',
+    navShow: true,
+  }),
+  created() {},
+  computed: {
+    ...mapState(['user']),
+    keyWord() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      return main;
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  watch: {
+    $route(to, from) {
+      this.title = to.meta.title;
+      this.isleftarrow = to.meta.isleftarrow;
+    },
+  },
+  methods: {
+    ...mapLeave(['create']),
+    async submitForm(form) {
+      // this.form.studentid = '5e4f3d096a90e861b0f30871';
+      this.form.studentid = this.user.userid;
+      let data = this.form;
+      let res = await this.create(data);
+      if (res.errcode === 0) {
+        let msg = `${this.keyWord}添加成功`;
+        if (this.$checkRes(res, msg)) this.cancelClick();
+      } else {
+        let msg = `${this.keyWord}添加失败`;
+      }
+    },
+    cancelClick() {
+      this.$router.push({ path: '/user/leave' });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+}
+.main {
+  min-height: 570px;
+}
+</style>