wuhongyu 5 years ago
parent
commit
54f5ef6af9

+ 1 - 1
.env

@@ -1,5 +1,5 @@
 VUE_APP_AXIOS_BASE_URL = ''
 VUE_APP_ROOT_URL=/admin/
-VUE_APP_MODULE='student'
+VUE_APP_MODULE='mobiledirtea'
 VUE_APP_USER_TYPE = '4'
 VUE_APP_LIMIT = 10

+ 67 - 0
src/layout/class/achieve.vue

@@ -0,0 +1,67 @@
+<template>
+  <div id="achieve">
+    <el-row>
+      <el-col :span="24">
+        <van-tabs v-model="active">
+          <van-tab title="平时成绩">
+            <peaceAchieve v-on="$listeners" :peaceAchieveList="peaceAchieveList" :showPicker="showPicker" :peaceScore="peaceScore"></peaceAchieve>
+          </van-tab>
+          <van-tab title="作业成绩">
+            <homeworkAchiece
+              v-on="$listeners"
+              :lesslist="lesslist"
+              :lesson="lesson"
+              :achieveList="achieveList"
+              :deptList="deptList"
+              :show="show"
+              :form="form"
+              :names="names"
+              :score="score"
+            ></homeworkAchiece>
+          </van-tab>
+        </van-tabs>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import peaceAchieve from '@/layout/class/achieveList/peaceAchieve.vue';
+import homeworkAchiece from '@/layout/class/achieveList/homeworkAchiece.vue';
+export default {
+  name: 'achieve',
+  props: {
+    peaceAchieveList: null, //平时成绩
+    showPicker: null, //平時成绩显示
+    peaceScore: null, //平时成绩分数
+    achieveList: null, //作业成绩
+    show: null, //显示弹框
+    form: null, //修改form
+    deptList: null,
+    lesson: null,
+    lesslist: null,
+    names: null,
+    score: null,
+  },
+  components: {
+    peaceAchieve, //平時成績
+    homeworkAchiece, //作业成绩
+  },
+  data: () => ({
+    active: 0,
+  }),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+/deep/.van-tabs__line {
+  width: 50% !important;
+  background-color: #405ffe;
+}
+/deep/.van-tab--active {
+  color: #405ffe;
+}
+</style>

+ 137 - 0
src/layout/class/achieveList/homeworkAchiece.vue

@@ -0,0 +1,137 @@
+<template>
+  <div id="homeworkAchiece">
+    <el-row>
+      <el-col :span="24" class="list">
+        <van-collapse v-model="openCollapse">
+          <van-collapse-item :name="index" v-for="(item, index) in achieveList" :key="index">
+            <div slot="title" class="title" @click="clickcds(item.id)">
+              <span class="name">{{ item.stuname }}</span>
+            </div>
+            <van-row v-for="(tag, index) in item.lesson" :key="index">
+              <el-col :span="18">
+                <van-col :span="24" class="score"> 名称:{{ tag.name }} </van-col>
+                <van-col :span="24" class="score"> 作业分: {{ tag.score }}分</van-col>
+              </el-col>
+              <el-col :span="6" class="anniu">
+                <van-col :span="3" class="score">
+                  <van-button v-if="user.job == '学委' || user.type == '3'" type="primary" size="mini" @click="clickBtn(tag.taskid, tag.name, tag.score)"
+                    >上成绩</van-button
+                  >
+                </van-col>
+              </el-col>
+            </van-row>
+          </van-collapse-item>
+        </van-collapse>
+      </el-col>
+    </el-row>
+    <van-dialog v-model="show" title="学生成绩上传" :showConfirmButton="false">
+      <van-form @submit="onSubmit">
+        <span class="lesson">课程名称</span><span class="lesson">{{ names }}</span>
+        <van-field v-model="form.score" name="作业分数" :value="score" label="作业分数" placeholder="请输入作业分数" />
+        <div style="margin: 16px;">
+          <van-button round block type="info" native-type="submit">
+            提交
+          </van-button>
+        </div>
+      </van-form>
+    </van-dialog>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+export default {
+  name: 'homeworkAchiece',
+  props: {
+    achieveList: null,
+    show: null,
+    form: null,
+    lessonList: null,
+    deptList: null,
+    lesson: null,
+    lesslist: null,
+    names: null,
+    score: null,
+  },
+  components: {},
+  data: () => ({
+    ruleForm: {
+      region: '',
+    },
+    value: '',
+    columns: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
+    showPicker: false,
+    openCollapse: [],
+  }),
+  created() {},
+  computed: { ...mapState(['user']) },
+  methods: {
+    onConfirm(value) {
+      this.value = value;
+      this.showPicker = false;
+    },
+    clickcds(id) {
+      console.log(id);
+      this.$emit('submitss', { id: id });
+    },
+    clickBtn(taskid, name, score) {
+      console.log(taskid);
+      console.log(name);
+
+      this.$emit('clickDialog', { id: taskid, name: name, score: score });
+    },
+    onSubmit() {
+      this.$emit('submit', { data: this.form });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.list {
+  margin: 5px;
+  width: 97%;
+  padding: 0 10px;
+  border-radius: 15px;
+}
+.list .title {
+  float: left;
+  width: 100%;
+}
+.list .name {
+  float: left;
+  width: 80%;
+  font-size: 20px;
+}
+/deep/.van-cell {
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+}
+/deep/.van-collapse-item__content {
+  border-bottom-left-radius: 10px;
+  border-bottom-right-radius: 10px;
+  padding: 5px 10px;
+}
+/deep/.van-collapse-item {
+  margin: 0 0 10px 0;
+}
+/deep/.el-collapse-item__content {
+  padding: 10px 0 10px 0;
+}
+.list .score {
+  padding: 5px 0;
+  font-size: 18px;
+}
+.anniu {
+  padding: 20px 0 0 0;
+}
+.lesson {
+  font-size: 14px;
+  padding: 0 21px 0 16px;
+  color: #323233;
+}
+</style>

+ 68 - 0
src/layout/class/achieveList/peaceAchieve.vue

@@ -0,0 +1,68 @@
+<template>
+  <div id="peaceAchieve">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list" v-for="(item, index) in peaceAchieveList" :key="index">
+          <el-col :span="12" class="name">
+            {{ item.name }}
+          </el-col>
+          <el-col :span="8" class="score">
+            <span>分数:{{ item.selfscore }}分</span>
+          </el-col>
+          <el-col :span="4" class="score">
+            <el-button type="primary" v-if="user.job == '学委' || user.type == '3'" size="mini" @click="showBtn(item.id)" round>选择</el-button>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+    <van-popup v-model="showPicker" position="bottom">
+      <van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
+    </van-popup>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+export default {
+  name: 'peaceAchieve',
+  props: {
+    peaceAchieveList: null,
+    showPicker: null,
+    peaceScore: null,
+  },
+  components: {},
+  data: () => ({
+    columns: ['1', '2', '3', '4', '5', '7', '8', '9', '10'],
+  }),
+  created() {},
+  computed: {
+    ...mapState(['user']),
+  },
+  methods: {
+    showBtn(id) {
+      this.$emit('showBtn', id);
+    },
+    onConfirm(value) {
+      this.$emit('onConfirm', value);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  padding: 0 30px;
+}
+.list {
+  border-bottom: 1px dashed #333;
+}
+.list .name {
+  padding: 15px 15px;
+}
+.list .score {
+  padding: 15px 0;
+}
+.list .score span {
+  padding: 0 7px 0 0;
+}
+</style>

+ 202 - 0
src/layout/class/classStuList.vue

@@ -0,0 +1,202 @@
+<template>
+  <div id="classStuList">
+    <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">
+          <headStuList
+            :headStuList="headStuList"
+            :assignShow="assignShow"
+            :assignForm="assignForm"
+            :job_list="job_list"
+            @assign="clickAssign"
+            @outForm="outAssignShow"
+            @onForm="onAssignShow"
+            @handleClose="handleClose"
+            :classid="this.id"
+          ></headStuList>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import headStuList from '@/layout/class/headStuList.vue';
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapStudent } = createNamespacedHelpers('student');
+export default {
+  name: 'classStuList',
+  props: {},
+  components: {
+    NavBar, //头部导航
+    headStuList, //学生列表
+  },
+  data: () => ({
+    headStuList: [],
+    assignShow: false,
+    assignForm: {},
+    job_list: [],
+
+    job1: [
+      {
+        name: '班长',
+      },
+      {
+        name: '学委',
+      },
+      {
+        name: '普通学生',
+      },
+    ],
+    job2: [
+      {
+        name: '班长',
+      },
+
+      {
+        name: '普通学生',
+      },
+    ],
+
+    job3: [
+      {
+        name: '学委',
+      },
+
+      {
+        name: '普通学生',
+      },
+    ],
+
+    job4: [
+      {
+        name: '普通学生',
+      },
+    ],
+
+    title: '',
+    isleftarrow: '',
+    navShow: true,
+  }),
+  created() {
+    this.searchInfo();
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    ...mapState(['user']),
+  },
+  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: {
+    ...mapStudent({ list: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
+    // 查询学生列表-并带有职务
+    async searchInfo() {
+      let classid = this.id;
+      const res = await this.list({ classid });
+      console.log(res.data);
+
+      if (this.$checkRes(res)) {
+        this.$set(this, `headStuList`, res.data);
+      }
+    },
+    //点击派遣
+    async clickAssign({ id, item }) {
+      var banzhang = this.headStuList.filter(item => item.job == '班长');
+      var xuewei = this.headStuList.filter(item => item.job == '学委');
+      console.log(banzhang);
+      console.log(xuewei.length);
+
+      if (xuewei.length == '1') {
+        if (banzhang.length == '2') {
+          if (item.job == '班长') {
+            this.$set(this, `job_list`, this.job2);
+          } else if (item.job == '学委') {
+            this.$set(this, `job_list`, this.job3);
+          } else {
+            this.$set(this, `job_list`, this.job4);
+          }
+        } else if (banzhang.length < '2') {
+          console.log('cc');
+
+          if (item.job == '学委') {
+            this.$set(this, `job_list`, this.job1);
+          } else {
+            this.$set(this, `job_list`, this.job2);
+          }
+        } else if (xuewei.length == '0') {
+        }
+      } else if (xuewei.length == '0') {
+        console.log('a');
+
+        if (banzhang.length == '0') {
+          this.$set(this, `job_list`, this.job1);
+        } else if (banzhang.length == '2') {
+          if (item.job == '班长') {
+            this.$set(this, `job_list`, this.job1);
+          } else {
+            this.$set(this, `job_list`, this.job3);
+          }
+        } else {
+          this.$set(this, `job_list`, this.job1);
+        }
+      }
+
+      this.assignShow = true;
+      const res = await this.fet(id);
+      this.$set(this, `assignForm`, res.data);
+    },
+    //指派职务
+    async onAssignShow(assignForm) {
+      console.log(assignForm);
+
+      let data = this.assignForm;
+
+      let res = await this.updates(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '成功',
+          type: 'success',
+        });
+      }
+      this.outAssignShow();
+      this.searchInfo();
+    },
+    outAssignShow() {
+      this.assignShow = false;
+    },
+    handleClose() {
+      this.assignShow = false;
+    },
+  },
+};
+</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>

+ 58 - 0
src/layout/class/headClassList.vue

@@ -0,0 +1,58 @@
+<template>
+  <div id="headClassList">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24" class="list" v-for="(item, index) in headClassList" :key="index">
+          <el-col :span="16" class="mess">
+            <p>班级:{{ item.name }}</p>
+            <p>班级人数:{{ item.number }}</p>
+
+            <p>期:{{ item.term }} 开始时间:{{ item.startdate }}</p>
+          </el-col>
+          <el-col :span="8" class="btn">
+            <el-button type="primary" @click="clickStu(item.id)" round>班级信息</el-button>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'headClassList',
+  props: {
+    headClassList: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    clickStu(id) {
+      this.$emit('clickStu', id);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.list {
+  background: #fff;
+  margin: 10px;
+  width: 94%;
+  padding: 10px;
+  border-radius: 20px;
+}
+.list .mess p {
+  padding: 5px 0;
+}
+.list .btn {
+  padding: 20px 0;
+  text-align: center;
+}
+</style>

+ 96 - 0
src/layout/class/headStuList.vue

@@ -0,0 +1,96 @@
+<template>
+  <div id="headStuList">
+    <el-row type="flex" justify="center" style="padding:10px 0">
+      <el-col :span="6">
+        <el-button type="primary" plain size="mini" @click.native="$router.push({ path: '/class/achieve', query: { classid: $attrs.classid } })">
+          查看平时成绩
+        </el-button>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="6" class="list" v-for="(item, index) in headStuList" :key="index" @click.native="clickAssign(item)">
+          <p class="name" :style="`font-size:${changeNum(item.name)}px`">{{ item.name }}</p>
+          <p class="job" v-if="item.job">{{ item.job }}<i class="el-icon-circle-check"></i></p>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog title="指派职务" width="90%" :visible.sync="assignShow" :before-close="handleClose">
+      <el-form :model="assignForm">
+        <el-form-item label="学生姓名">
+          {{ assignForm.name }}
+        </el-form-item>
+        <el-form-item label="学生职务">
+          <el-select v-model="assignForm.job" placeholder="请选择学生职务">
+            <el-option v-for="(item, index) in job_list" :key="index" :label="item.name" :value="item.name"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="outAssignShow">取 消</el-button>
+        <el-button type="primary" @click="onAssignShow">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'headStuList',
+  props: {
+    headStuList: null,
+    assignForm: null,
+    assignShow: null,
+    job_list: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    clickAssign(item) {
+      let id = item.id;
+
+      this.$emit('assign', { id, item });
+    },
+    outAssignShow() {
+      this.$emit('outForm');
+    },
+    onAssignShow(id) {
+      this.$emit('onForm', { data: this.assignForm });
+    },
+    handleClose() {
+      this.$emit('handleClose');
+    },
+    changeNum(name) {
+      if (name.length >= 5) {
+        return 10;
+      } else {
+        return 15;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.info {
+  margin: 15px 0 0 0;
+}
+.list {
+  text-align: center;
+  border: 1px solid #2c69fe;
+  width: 70px;
+  margin: 0 11px 10px 12px;
+  padding: 5px 0px;
+  border-radius: 10px;
+}
+.list .job {
+  font-size: 10px;
+  color: #405ffe;
+}
+</style>

+ 4 - 1
src/layout/user/clickBtn.vue

@@ -15,11 +15,14 @@
           <van-cell is-link @click="$router.push({ path: '/user/homework' })">作业管理</van-cell>
         </el-col>
         <el-col :span="24" class="native" v-if="this.user.type === '1'">
-          <van-cell is-link @click="$router.push({ path: '/user/pingfenclass' })">评分</van-cell>
+          <van-cell is-link @click="$router.push({ path: '/user/score' })">评分</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 :span="24" class="native" v-if="this.user.type === '1'">
+          <van-cell is-link @click="$router.push({ path: '/user/classInfos' })">班级信息</van-cell>
+        </el-col>
         <!-- <el-col :span="24" class="native" v-if="this.user.type === '3'">
           <van-cell is-link @click="$router.push({ path: '/user/terstudent' })">查看任课教师</van-cell>
         </el-col> -->

+ 13 - 0
src/router/index.js

@@ -67,12 +67,25 @@ const routes = [
     meta: { title: '请假&退出管理', isleftarrow: true },
     component: () => import('../views/user/teaLeave.vue'),
   },
+  // 个人中心-班级信息
+  {
+    path: '/user/classInfos',
+    name: 'user_classInfos',
+    meta: { title: '班级信息', isleftarrow: true },
+    component: () => import('../views/user/classInfos.vue'),
+  },
   {
     path: '/user/personalDetail',
     name: 'user_personalDetail',
     meta: { title: '个人信息', isleftarrow: true },
     component: () => import('../views/user/personalDetail.vue'),
   },
+  {
+    path: '/user/score',
+    name: 'user_score',
+    meta: { title: '学生评分', isleftarrow: true },
+    component: () => import('../views/user/score.vue'),
+  },
 ];
 
 const router = new VueRouter({

+ 154 - 0
src/views/class/info/classInfo.vue

@@ -0,0 +1,154 @@
+<template>
+  <div id="classInfo">
+    <el-col :span="24" class="messageInfo">
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">班级名称</p>
+          <p class="name">{{ classinfo.name }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">班级人数</p>
+          <p class="name">{{ classinfo.number }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">批次</p>
+          <p class="name">{{ classinfo.batch }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">期</p>
+          <p class="name">{{ classinfo.term }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">礼仪课老师</p>
+          <p class="name">{{ classinfo.lyteacher }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">用餐地点</p>
+          <p class="name">{{ classinfo.yclocation }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">拓展计划地点</p>
+          <p class="name">{{ classinfo.kzjhlocation }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">开班仪式地点</p>
+          <p class="name">{{ classinfo.kbyslocation }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">教室位置</p>
+          <p class="name">{{ classinfo.jslocation }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="mess">
+        <el-col :span="22" class="info">
+          <p class="title">班级类型</p>
+          <p class="name">{{ classinfo.type }}</p>
+        </el-col>
+        <el-col :span="2" class="icon">
+          <van-icon name="arrow" />
+        </el-col>
+      </el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: classes } = createNamespacedHelpers('classes');
+export default {
+  name: 'classInfo',
+  props: {},
+  components: {},
+  data: () => ({
+    classinfo: {},
+  }),
+  created() {
+    this.search();
+  },
+  computed: {
+    ...mapState(['user', 'classid']),
+  },
+  methods: {
+    ...classes(['fetch']),
+    async search() {
+      const classinfo = await this.fetch(this.classid);
+      console.log(classinfo);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.messageInfo {
+  margin: 0 0 10px 0;
+}
+.mess {
+  min-height: 50px;
+  border-bottom: 1px solid #efeff4;
+}
+.info {
+  padding: 0 15px;
+}
+.info .title {
+  font-size: 14px;
+  color: #92a1b1;
+  padding: 4px 0;
+}
+.info .name {
+  font-size: 16px;
+  color: #000;
+}
+.icon {
+  padding: 11px 0;
+  font-size: 20px;
+  color: #ccc;
+}
+</style>

+ 42 - 0
src/views/user/classInfos.vue

@@ -0,0 +1,42 @@
+<template>
+  <div id="classInfos">
+    <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">
+          <classInfo></classInfo>
+        </el-col>
+        <el-col :span="24" class="foot">
+          <footInfo></footInfo>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import footInfo from '@/layout/common/footInfo.vue';
+import classInfo from '@/layout/class/classInfo.vue';
+export default {
+  name: 'classInfos',
+  props: {},
+  components: {
+    NavBar,
+    footInfo,
+    classInfo,
+  },
+  data: () => ({
+    title: '',
+    isleftarrow: '',
+    navShow: true,
+  }),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped></style>

+ 78 - 0
src/views/user/score.vue

@@ -0,0 +1,78 @@
+<template>
+  <div id="score">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="true" :title="pageTitle" :isleftarrow="true"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main"> </el-col>
+        <el-col :span="24" class="foot">
+          <footInfo></footInfo>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import NavBar from '@/layout/common/topInfo.vue';
+import footInfo from '@/layout/common/footInfo.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: student } = createNamespacedHelpers('student');
+const { mapActions: uploadtask } = createNamespacedHelpers('uploadtask');
+export default {
+  name: 'score',
+  props: {},
+  components: { NavBar, footInfo },
+  data: function() {
+    return {
+      list: [],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...student(['query']),
+    ...uploadtask({ getTaskList: 'query' }),
+    async search() {
+      let res = await this.query({ classid: this.classid });
+      let classList = [];
+      if (this.$checkRes(res)) {
+        classList = res.data;
+      }
+      let classTask = await this.getTaskList({ classid: this.classid });
+      if (this.$checkRes(classTask)) {
+        classList = classList.map(i => {
+          let r = classTask.data.filter(f => f.studentid == i.id);
+          // if (r.length > 0) {
+          r = r.map(task => {
+            let score = 0;
+            if (task.answers.length > 0) {
+              let s = task.answers.reduce((prev, next) => prev + next.questionscore * 1, 0);
+              score = _.isNumber(s) ? s : 0;
+            }
+            return score;
+          });
+          i.taskScore = r.reduce((prev, next) => prev + next * 1, 0);
+          // }
+          return i;
+        });
+        this.$set(this, `list`, classList);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user', 'classid']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 2 - 2
vue.config.js

@@ -2,8 +2,8 @@ const path = require('path');
 const question = path.resolve(__dirname, '../question-examine');
 const frame = path.resolve(__dirname, '../frame');
 module.exports = {
-  publicPath: process.env.NODE_ENV === 'development' ? '/' : '/student',
-  outputDir: 'student',
+  publicPath: process.env.NODE_ENV === 'development' ? '/' : '/mobiledirtea',
+  outputDir: 'mobiledirtea',
   configureWebpack: config => {
     Object.assign(config, {
       // 开发生产共同配置