mo 4 éve
szülő
commit
d6aeaa0436

+ 161 - 122
src/layout/components/Navbar.vue

@@ -4,217 +4,256 @@
 
     <!-- <breadcrumb class="breadcrumb-container" /> -->
     <div class="left-menu">
-      <i class='el-icon-location-information topIcon'></i>
+      <i class="el-icon-location-information topIcon"></i>
 
-      <el-popover placement="top-start"
-                  width="300"
-                  trigger="hover">
+      <el-popover placement="top-start" width="300" trigger="hover">
         <div class="popover-container">
           <!-- <p style="color: red">{{ organName }}</p> -->
-          <el-tag class="navbar_tag" type="info" v-for="item in organNameList" :key="item">{{ item }}</el-tag>
+          <el-tag
+            class="navbar_tag"
+            type="info"
+            v-for="item in organNameList"
+            :key="item"
+            >{{ item }}</el-tag
+          >
         </div>
-        <span slot="reference">{{ organName.length > 10 ? organName.substr(0, 10) + '...' : organName}}</span>
+        <span slot="reference">{{
+          organName.length > 10 ? organName.substr(0, 10) + "..." : organName
+        }}</span>
       </el-popover>
     </div>
     <div class="right-menu">
-      <div class="msginfo"
-           v-permission="'/journals'"
-           @click="gotoRecode">
-       <img src='@/assets/images/base/base-bell.svg'/>
+      <div class="msginfo" v-permission="'/journals'" @click="gotoRecode">
+        <img src="@/assets/images/base/base-bell.svg" />
         <!-- <div class="active"></div> -->
       </div>
-      <el-dropdown class="avatar-container"
-                   trigger="click">
-
+      <el-dropdown class="avatar-container" trigger="click">
         <div class="avatar-wrapper">
-          <img v-if="$store.getters.avatar"
-               :src="$store.getters.avatar"
-               class="user-avatar" />
-          <img v-else
-          class="user-avatar"
-               src="@/assets/images/base/placehorder-icon.png" />
+          <img
+            v-if="$store.getters.avatar"
+            :src="$store.getters.avatar"
+            class="user-avatar"
+          />
+          <img
+            v-else
+            class="user-avatar"
+            src="@/assets/images/base/placehorder-icon.png"
+          />
           <!-- <i class="el-icon-caret-bottom" /> -->
           <span>{{ username }}</span>
         </div>
-        <el-dropdown-menu slot="dropdown"
-                          class="user-dropdown">
+        <el-dropdown-menu slot="dropdown" class="user-dropdown">
           <!-- divided -->
 
           <el-dropdown-item>
-            <span style="display:block;"
-                  @click="resetPassWord">修改密码</span>
+            <span style="display: block" @click="resetPassWord">修改密码</span>
           </el-dropdown-item>
           <el-dropdown-item>
-            <span style="display:block;"
-                  @click="logout">退出</span>
+            <span style="display: block" @click="logout">退出</span>
           </el-dropdown-item>
         </el-dropdown-menu>
-
       </el-dropdown>
     </div>
-    <el-dialog title="修改密码"
-               width="500px"
-               append-to-body
-               :visible.sync="resetVisible">
-      <el-form :model="resetForm"
-               label-position='right'
-               label-width="100px"
-               ref='pwdForm'>
-        <el-form-item label="手机号"
-                      prop="phone">
-          <div>{{this.$store.getters.phone}}</div>
+    <el-dialog
+      title="修改密码"
+      width="500px"
+      append-to-body
+      :visible.sync="resetVisible"
+    >
+      <el-form
+        :model="resetForm"
+        label-position="right"
+        label-width="100px"
+        ref="pwdForm"
+      >
+        <el-form-item label="手机号" prop="phone">
+          <div>{{ this.$store.getters.phone }}</div>
         </el-form-item>
-        <el-form-item label="新密码"
-                      :rules="[{ required: true, message: '密码不能为空',trigger: 'blur'},{pattern:/^[\w]{6,20}$/,message:'密码为6-20位',trigger: 'blur'}]"
-                      prop="password">
-          <el-input v-model.trim="resetForm.password"
-                    type='password'
-                    style="width:180px"
-                    autocomplete="off"></el-input>
+        <el-form-item
+          label="新密码"
+          :rules="[
+            { required: true, message: '密码不能为空', trigger: 'blur' },
+            {
+              pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
+              message: '密码为6-20位数字和字母组合',
+              trigger: 'blur',
+            },
+          ]"
+          prop="password"
+        >
+          <el-input
+            v-model.trim="resetForm.password"
+            type="password"
+            style="width: 180px"
+            autocomplete="off"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="再次输入"
-                      :rules="[{ required: true, message: '密码不能为空',trigger: 'blur'},{pattern:/^[\w]{6,20}$/,message:'密码为6-20位',trigger: 'blur'}]"
-                      prop="password2">
-          <el-input v-model.trim="resetForm.password2"
-                    type='password'
-                    style="width:180px"
-                    autocomplete="off"></el-input>
+        <el-form-item
+          label="再次输入"
+          :rules="[
+            { required: true, message: '密码不能为空', trigger: 'blur' },
+            {
+              pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
+              message: '密码为6-20位数字和字母组合',
+              trigger: 'blur',
+            },
+          ]"
+          prop="password2"
+        >
+          <el-input
+            v-model.trim="resetForm.password2"
+            type="password"
+            style="width: 180px"
+            autocomplete="off"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="验证码"
-                      :rules="[{ required: true, message: '验证码不能为空',trigger: 'blur'}]"
-                      prop="authCode"
-                      style="">
-          <el-input v-model.trim="resetForm.authCode"
-                    style="width:180px"
-                    autocomplete="off"></el-input>
-          <el-button :disabled="isDisable"
-                     @click="getCode">{{ btnName }}</el-button>
+        <el-form-item
+          label="验证码"
+          :rules="[
+            { required: true, message: '验证码不能为空', trigger: 'blur' },
+          ]"
+          prop="authCode"
+          style=""
+        >
+          <el-input
+            v-model.trim="resetForm.authCode"
+            style="width: 180px"
+            autocomplete="off"
+          ></el-input>
+          <el-button :disabled="isDisable" @click="getCode">{{
+            btnName
+          }}</el-button>
         </el-form-item>
       </el-form>
-      <div slot="footer"
-           class="dialog-footer">
+      <div slot="footer" class="dialog-footer">
         <el-button @click="resetVisible = false">取 消</el-button>
-        <el-button type="primary"
-                   @click="submitResetPassWord">确 定</el-button>
+        <el-button type="primary" @click="submitResetPassWord">确 定</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import qs from 'qs'
-import axios from 'axios'
+import qs from "qs";
+import axios from "axios";
 import { mapGetters } from "vuex";
 // import Breadcrumb from '@/components/Breadcrumb'
 // import Hamburger from '@/components/Hamburger'
-import { resetPassword } from '@/api/buildTeam'
+import { resetPassword } from "@/api/buildTeam";
 export default {
-  data () {
+  data() {
     return {
-      username: '',
+      username: "",
       organName: this.$store.getters.organName,
       organNameList: [],
       resetVisible: false,
       resetForm: {
-        phone: '',
-        authCode: '',
-        password: '',
-        password2: ''
+        phone: "",
+        authCode: "",
+        password: "",
+        password2: "",
       },
       isDisable: false, // 是否允许发送验证码
       timerCount: 60,
-      btnName: '获取验证码'
-    }
+      btnName: "获取验证码",
+    };
   },
   components: {
     // Breadcrumb,
     // Hamburger
   },
   computed: {
-    ...mapGetters(["sidebar", "avatar"])
+    ...mapGetters(["sidebar", "avatar"]),
   },
-  mounted () {
+  mounted() {
     // 手动加入
     this.toggleSideBar();
     this.username = this.$store.getters.name;
-    this.organNameList = this.organName.split(',')
+    this.organNameList = this.organName.split(",");
   },
   methods: {
-    toggleSideBar () {
+    toggleSideBar() {
       this.$store.dispatch("app/toggleSideBar");
     },
-    async logout () {
+    async logout() {
       await this.$store.dispatch("user/logout");
       // await this.$store.dispatch("permission/removePermission")
       this.$router.push(`/login`);
-      window.location.reload()
-
+      window.location.reload();
     },
-    gotoRecode () {
-      this.$router.push('/journal/journal')
+    gotoRecode() {
+      this.$router.push("/journal/journal");
     },
-    resetPassWord () {
+    resetPassWord() {
       this.resetVisible = true;
     },
-    submitResetPassWord () {
+    submitResetPassWord() {
       if (this.resetForm.password !== this.resetForm.password2) {
-        this.$message.error('两次密码必须相同')
-        return
+        this.$message.error("两次密码必须相同");
+        return;
       }
-      this.$refs['pwdForm'].validate(res => {
+      this.$refs["pwdForm"].validate((res) => {
         if (res) {
           // 发请求
-          resetPassword({ authCode: this.resetForm.authCode, mobile: this.$store.getters.phone, newPassword: this.resetForm.password }).then(res => {
+          resetPassword({
+            authCode: this.resetForm.authCode,
+            mobile: this.$store.getters.phone,
+            newPassword: this.resetForm.password,
+          }).then((res) => {
             if (res.code == 200) {
               // 修改成功
-              this.$message.success('修改成功')
-              this.logout()
+              this.$message.success("修改成功");
+              this.logout();
             }
-          })
+          });
         }
-      })
+      });
     },
-    getCode () {
+    getCode() {
       // 获取验证码
       if (!this.$store.getters.phone) {
-        this.$message.error('请输入正确的手机号')
-        return
+        this.$message.error("请输入正确的手机号");
+        return;
       }
       if (!this.isDisable) {
         this.isDisable = true;
         // 发请求成功后开启定时器
         // 发送验证码
-        axios.post('/api-web/code/sendSms', qs.stringify({ mobile: this.$store.getters.phone })).then(res => {
-          if (res.data.code == 200) {
-            let timer = setInterval(res => {
-              if (this.timerCount <= 0) {
-                clearInterval(timer)
-                this.isDisable = false;
-                this.btnName = '获取验证码';
-                this.timerCount = 60;
-              } else {
-                this.timerCount--;
-                this.btnName = `${this.timerCount}s后重试`
-              }
-            }, 1000)
-          }
-        })
-
+        axios
+          .post(
+            "/api-web/code/sendSms",
+            qs.stringify({ mobile: this.$store.getters.phone })
+          )
+          .then((res) => {
+            if (res.data.code == 200) {
+              let timer = setInterval((res) => {
+                if (this.timerCount <= 0) {
+                  clearInterval(timer);
+                  this.isDisable = false;
+                  this.btnName = "获取验证码";
+                  this.timerCount = 60;
+                } else {
+                  this.timerCount--;
+                  this.btnName = `${this.timerCount}s后重试`;
+                }
+              }, 1000);
+            }
+          });
       }
-    }
+    },
   },
   watch: {
-    resetVisible (val) {
+    resetVisible(val) {
       if (!val) {
         this.resetForm = {
-          phone: '',
-          authCode: '',
-          password: '',
-          password2: ''
-        }
+          phone: "",
+          authCode: "",
+          password: "",
+          password2: "",
+        };
       }
-    }
-  }
+    },
+  },
 };
 </script>
 

+ 5 - 5
src/views/studentManager/studentList.vue

@@ -499,10 +499,10 @@
           prop="password"
           label-width="120px"
           :rules="[
-            { required: true, message: '密码不能为空', trigger: 'blur' },
+             { required: true, message: '密码不能为空', trigger: 'blur' },
             {
-              pattern: /^[\w]{6,20}$/,
-              message: '密码为6-20位',
+              pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
+              message: '密码为6-20位数字和字母组合',
               trigger: 'blur',
             },
           ]"
@@ -516,8 +516,8 @@
           :rules="[
             { required: true, message: '密码不能为空', trigger: 'blur' },
             {
-              pattern: /^[\w]{6,20}$/,
-              message: '密码为6-20位',
+              pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
+              message: '密码为6-20位数字和字母组合',
               trigger: 'blur',
             },
           ]"

+ 4 - 4
src/views/teacherManager/teacherList.vue

@@ -322,8 +322,8 @@
           :rules="[
             { required: true, message: '密码不能为空', trigger: 'blur' },
             {
-              pattern: /^[\w]{6,20}$/,
-              message: '密码为6-20位',
+              pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
+              message: '密码为6-20位数字和字母组合',
               trigger: 'blur',
             },
           ]"
@@ -337,8 +337,8 @@
           :rules="[
             { required: true, message: '密码不能为空', trigger: 'blur' },
             {
-              pattern: /^[\w]{6,20}$/,
-              message: '密码为6-20位',
+              pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
+              message: '密码为6-20位数字和字母组合',
               trigger: 'blur',
             },
           ]"

+ 3 - 15
src/views/teamDetail/componentClass/calenderStudentList.vue

@@ -10,7 +10,7 @@
     />
     <otherform :form="other" ref="other" />
 
-    <div v-for="(item,index) in conrseTypeList" :key="index" style="margin-bottom:30px">
+    <!-- <div v-for="(item,index) in conrseTypeList" :key="index" style="margin-bottom:30px">
       <el-alert :title="getTypeName(item.courseType)" :closable="false" class="alert" type="info">
       </el-alert>
        <descriptions :column="2">
@@ -21,19 +21,7 @@
              <el-input v-model="item.courseCurrentPrice" size='mini'></el-input>
       </descriptions-item>
       </descriptions>
-    </div>
-    <!-- <descriptions :column="2">
-      <descriptions-item label="原价:">{{
-
-      }}</descriptions-item>
-      <descriptions-item label="现价:">
-        <overflow-text
-          :text="auditDto.musicGroupName"
-          width="100%"
-        ></overflow-text>
-      </descriptions-item>
-    </descriptions> -->
-    <!--  -->
+    </div> -->
     <el-table
       :data="dataList"
       :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
@@ -246,7 +234,7 @@ export default {
         }
       });
       this.dataList = Object.values(data);
-      this.getNewClassType(this.dataList[0]?.courseList);
+      // this.getNewClassType(this.dataList[0]?.courseList);
     },
     getNewClassType(arr) {
       console.log(this.$options)

+ 1 - 1
src/views/teamDetail/teamClassList.vue

@@ -18,7 +18,7 @@
             v-model.trim="searchForm.search"
             clearable
             @keyup.enter.native="search"
-            placeholder="请输入课班级编号"
+            placeholder="乐团&班级编号"
           ></el-input>
         </el-form-item>
         <el-form-item prop="organIdList">

+ 8 - 0
src/views/withdrawal-application/api.js

@@ -6,3 +6,11 @@ export const musicGroupQuitQeryPage = data => {
     params: data
   })
 }
+
+// 获取学生作业记录
+export const getStudentHomeWorks = data => {
+  return request({
+    url: '/api-web/webCurseHomework/getStudentHomeWorks',
+    params: data
+  })
+}

+ 17 - 4
src/views/withdrawal-application/modals/afterWork.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-form :inline="true" :model="searchForm">
+    <el-form :inline="true" :model="searchForm" ref='searchForm'>
       <el-form-item prop="timer">
         <el-date-picker
           v-model.trim="searchForm.timer"
@@ -32,7 +32,7 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="danger" @click="getList">搜索</el-button>
+        <el-button type="danger" @click="search">搜索</el-button>
         <el-button type="primary" @click="onReset">重置</el-button>
       </el-form-item>
     </el-form>
@@ -75,11 +75,16 @@
         </template>
       </el-table-column>
       <!-- content -->
-      <el-table-column align="center" label="提交作业">
+      <el-table-column align="center" label="是否提交">
         <template slot-scope="scope">
           <div>{{ scope.row.status ? "是" : "否" }}</div>
         </template>
       </el-table-column>
+            <el-table-column align="center" prop="isView" label="是否查看">
+        <template slot-scope="scope">
+          <div>{{ scope.row.isView ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
       <el-table-column align="center" prop="isReplied" label="是否评价">
         <template slot-scope="scope">
           <div>{{ scope.row.isReplied ? "是" : "否" }}</div>
@@ -139,9 +144,17 @@ export default {
       this.searchForm.timer = [dayjs(new Date().setDate(1)).format('YYYY-MM-DD'), dayjs(new Date()).format('YYYY-MM-DD')];
     }
     this.searchForm.search = this.studentId;
+    this.getList()
   },
   methods: {
-    onReset() {},
+    onReset() {
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    search(){
+      this.rules.page =1;
+      this.getList()
+    },
     getList() {
       const { timer, ...rest } = this.searchForm;
       let obj = {

+ 168 - 32
src/views/withdrawal-application/modals/courseWork.vue

@@ -1,43 +1,179 @@
 <template>
   <div>
-     <el-form
-        :inline="true"
-        :model="searchForm"
+    <el-form :inline="true" :model="searchForm" ref="searchForm">
+      <el-form-item>
+        <el-date-picker
+          v-model.trim="searchForm.courseTimer"
+          style="width: 400px"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="至"
+          start-placeholder="上课开始日期"
+          end-placeholder="上课结束日期"
+          :picker-options="{
+            firstDayOfWeek: 1,
+          }"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item prop="status">
+        <el-select placeholder="是否提交" v-model="searchForm.status" clearable>
+          <el-option label="是" value="1"></el-option>
+          <el-option label="否" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="isReplied">
+        <el-select
+          placeholder="是否回复"
+          v-model="searchForm.isReplied"
+          clearable
+        >
+          <el-option label="是" value="1"></el-option>
+          <el-option label="否" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="search" type="danger">搜索</el-button>
+        <el-button @click="onReSet" type="primary">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+
+    <el-table
+      style="width: 100%"
+      :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
+      :data="tableList"
+    >
+             <el-table-column
+            align="center"
+            prop="courseScheduleId"
+            label="课程编号"
+          ></el-table-column>
+          <el-table-column
+            align="center"
+            prop="courseName"
+            label="课程名称"
+          ></el-table-column>
+            <el-table-column
+            align="center"
+            prop="groupName"
+            label="课程组名称"
+          ></el-table-column>
+      <el-table-column
+        align="center"
+        prop="createTime"
+        label="布置时间"
+        width="150"
       >
-        <el-form-item>
-          <el-date-picker
-            v-model.trim="searchForm.courseTimer"
-            style="width: 420px"
-            type="daterange"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="上课开始日期"
-            end-placeholder="上课结束日期"
-            :picker-options="{
-              firstDayOfWeek: 1,
-            }"
-          ></el-date-picker>
-        </el-form-item>
-        <el-form-item>
-          <el-button @click="search" type="danger">搜索</el-button>
-          <el-button @click="onReSet" type="primary">重置</el-button>
-        </el-form-item>
-      </el-form>
+        <template slot-scope="scope">{{
+          scope.row.createTime | dateForMinFormat
+        }}</template>
+      </el-table-column>
+      <el-table-column
+        align="center"
+        prop="teacherName"
+        label="布置老师"
+      ></el-table-column>
+      <el-table-column align="center" prop="title" label="作业内容">
+        <template slot-scope="scope">
+          <div>
+            <div >
+              {{ scope.row.content }}
+            </div>
+          </div>
+        </template>
+      </el-table-column>
+      <!-- content -->
+      <el-table-column align="center" label="是否提交">
+        <template slot-scope="scope">
+          <div>{{ scope.row.status ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="isView" label="是否查看">
+        <template slot-scope="scope">
+          <div>{{ scope.row.isView ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+           <el-table-column align="center" prop="isReplied" label="是否回复">
+        <template slot-scope="scope">
+          <div>{{ scope.row.isReplied ? "是" : "否" }}</div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column align="center"
+                           label="操作"
+                           fixed="right">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text"
+                           v-permission="'afterWorkList/look'"
+                           @click="lookDetail(scope.row)">查看</el-button>
+              </div>
+            </template>
+          </el-table-column> -->
+    </el-table>
+    <pagination
+      :total="rules.total"
+      :page.sync="rules.page"
+      :limit.sync="rules.limit"
+      :page-sizes="rules.page_size"
+      @pagination="getList"
+    />
   </div>
 </template>
 <script>
+import pagination from "@/components/Pagination/index";
+import { getTimes } from "@/utils";
+import { getStudentHomeWorks } from "../api";
+import dayjs from "dayjs";
 export default {
-  data(){
-    return{
-
+  props:['studentId'],
+  components: { pagination },
+  data() {
+    return {
+      searchForm: {
+        courseTimer: [],
+        status: "",
+        isReplied: "",
+        userId: "",
+      },
+      tableList: [],
+      rules: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50], // 选择限制显示条数
+      },
+    };
+  },
+  mounted() {
+        if (this.searchForm.courseTimer?.length < 1) {
+      this.searchForm.courseTimer = [dayjs(new Date().setDate(1)).format('YYYY-MM-DD'), dayjs(new Date()).format('YYYY-MM-DD')];
     }
+    this.searchForm.userId = this.studentId;
+    this.getList()
   },
-  mounted(){
-
+  methods: {
+    search() {
+      this.rules.page = 1;
+      this.getList()
+    },
+    onReSet() {
+         this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    async getList() {
+      const { courseTimer, ...rest } = this.searchForm;
+      let obj = {
+        ...rest,
+        page: this.rules.page,
+        rows: this.rules.limit,
+        ...getTimes(courseTimer, ["startTime", "endTime"], "YYYY-MM-DD"),
+      };
+      try {
+        const ruselt = await getStudentHomeWorks(obj);
+        this.tableList = ruselt.data.rows;
+      } catch {}
+    },
   },
-  methods:{
-    search(){},
-    onReSet(){}
-  }
-}
+};
 </script>