Преглед на файлове

updata_1+gdy_8 bug修复

guojy преди 1 година
родител
ревизия
93073fd308

+ 30 - 0
src/course/api/index.js

@@ -29,6 +29,36 @@ export function getAdminTokenId(token) {
         })
     })
 }
+//获取免费课程详情
+export function getFreeCourseList(data) {
+    return new Promise((resolve, reject) => {
+        if(getCourseId()){
+            axiosKc('get', `/mkt/admin/${getCourseId()}/subject/free`, data).then(res => {
+                if (res.data.code == 1) {
+                    resolve(res.data.data)
+                } else {
+                    Message(res.data.message)
+                    reject(res.data.message)
+                }
+            })
+        }
+    })
+}
+//修改免费课程
+export function editFreeCourseList(data) {
+    return new Promise((resolve, reject) => {
+        if(getCourseId()){
+            axiosKc('post', `/mkt/admin/${getCourseId()}/subject/free`, data).then(res => {
+                if (res.data.code == 1) {
+                    resolve(res.data.data)
+                } else {
+                    Message(res.data.message)
+                    reject(res.data.message)
+                }
+            })
+        }
+    })
+}
 //获取课程列表
 export function getCourseList(data) {
     return new Promise((resolve, reject) => {

+ 19 - 5
src/course/courseManage/create.vue

@@ -44,11 +44,20 @@
         </div> -->
       </el-form-item>
       <el-form-item label="价格:" prop="price">
-        <el-input-number
+        <!-- <el-input-number
           v-model="courseDeail.price"
           :min="0"
           :max="10000000"
           label="课程价格"
+        ></el-input-number> -->
+        <el-input v-model="courseDeail.price" maxlength="4" style="width: 100px;" placeholder="请输入课程价格" size="normal" clearable></el-input>
+      </el-form-item>
+      <el-form-item label="浏览量:" prop="price">
+        <el-input-number
+          v-model="courseDeail.baseClick"
+          :min="0"
+          :max="10000000"
+          label="浏览次数"
         ></el-input-number>
       </el-form-item>
       <el-form-item label="是否上架:">
@@ -153,6 +162,7 @@ export default {
       courseDeail: {
         name: "",
         price: 0,
+        baseClick:100,
         thumb: [],
         enable: true,
         images: [],
@@ -167,7 +177,9 @@ export default {
           ],
           price: [
             { required: true, message: '请输入课程价格', trigger: 'blur' },
-            { type:'number',min: 1, message: '价格至少为1', trigger: 'blur' }
+          ],
+          baseClick: [
+            { required: true, message: '请输入浏览量', trigger: 'blur' },
           ],
           thumb: [
             { required: true, message: '请选择预览图', trigger: 'change' },
@@ -232,7 +244,8 @@ export default {
     validateURL() {
       let result = false;
       result = this.courseDeail.sections.every((item) => {
-        return item.link !== '' && item.name !== "";
+        let reg = /^[^\u4e00-\u9fff]*$/
+        return reg.test(item.link) && item.name !== "";
         // return validateURL(item.link) && item.name !== "";
       });
       return result;
@@ -248,7 +261,7 @@ export default {
     //课程详情数据转换展示
     uploadToData(data) {
       data.enable = data.enable == 1 ? true : false;
-      data.price = Number(data.price);
+      // data.price = Number(data.price);
       let arr = []
       data.images.forEach(item=>{
         arr.push({name:item,url:item})
@@ -334,7 +347,7 @@ export default {
         this.courseDeail.images.length &&
         this.courseDeail.thumb.length &&
         this.courseDeail.price &&
-        this.courseDeail.price !== 0 &&
+        this.courseDeail.baseClick != undefined &&
         this.validateURL()
       ) {
         this.$confirm("确定保存当前课程信息?", "提示", {
@@ -406,6 +419,7 @@ export default {
           price: 0,
           thumb: [],
           enable: true,
+          baseClick:100,
           images: [],
           sections: [],
         };

+ 256 - 0
src/course/courseManage/freeEdit.vue

@@ -0,0 +1,256 @@
+<!-- 课程创建/修改 -->
+
+<template>
+  <div class="pjc">
+    <el-page-header @back="$router.go(-1)" :content="title" style="margin-bottom: 30px;"></el-page-header>
+    <el-form :model="courseDeail" label-width="110px" :rules="rules">
+      <el-form-item label="课程免费章节" size="normal">
+        <div class="sectionout">
+          <div
+            class="sectionInner"
+            v-for="(item, index) in courseDeail.sections"
+            :key="index"
+          >
+            <div class="sectionName">
+              <el-input v-model.trim="item.name" placeholder="请输入章节名..."></el-input>
+            </div>
+            <div class="sectionUrl">
+              <el-input v-model.trim="item.link" placeholder="请输入章节链接..."></el-input>
+            </div>
+            <div class="del">
+              <el-button
+                type="text"
+                size="mini"
+                plain
+                @click="sectionDel(index, item)"
+                style="color: #f89881"
+                >删除</el-button
+              >
+            </div>
+          </div>
+          <div class="addSection">
+            <el-button plain @click="addSection">+</el-button>
+          </div>
+        </div>
+      </el-form-item>
+
+      <el-form-item style="display: flex; flex-direction: row-reverse">
+        <el-button @click="$router.go(-1)">取消</el-button>
+        <el-button @click="iffirm">保存</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import {getFreeCourseList,editFreeCourseList} from '../api'
+export default {
+  name: "courseFreeEdit",
+  data() {
+    return {
+      title: "",
+      // 个人信息
+      courseDeail: {
+        sections: [],
+      },
+      rules: {
+          // images: [
+          //   { required: true, message: '请选择介绍图', trigger: 'change' },
+          //   {type:'array',trigger:'change'}
+          // ],
+        }
+    };
+  },
+  methods: {
+    //章节信息校验
+    validateURL() {
+      let result = false;
+      result = this.courseDeail.sections.every((item) => {
+        let reg = /^[^\u4e00-\u9fff]*$/
+        return reg.test(item.link) && item.name !== "";
+        // return validateURL(item.link) && item.name !== "";
+      });
+      return result;
+    },
+    // 获取课程详情
+    getCourseDetail() {
+      getFreeCourseList().then((res) => {
+          this.courseDeail.sections = res.sections;
+      }).catch(err=>{
+        console.error(err)
+      });
+    },
+    // 添加章节
+    addSection() {
+      let section = {
+        name: "",
+        link: "",
+      };
+      this.courseDeail.sections.push(section);
+    },
+    // 删除章节
+    sectionDel(index, item) {
+      this.$confirm("确定删除当前章节?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.courseDeail.sections.splice(index, 1);
+        })
+        .catch((err) => {
+          this.$message({
+            type: "info",
+            message: "已取消",
+          });
+        });
+    },
+    //保存
+    iffirm() {
+      if (
+        this.validateURL()
+      ) {
+        this.$confirm("确定保存当前课程信息?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "info",
+        })
+          .then(() => {
+              this.saveAlter();
+          })
+          .catch(() => {
+            this.$message({
+              type: "info",
+              message: "已取消",
+            });
+          });
+      } else {
+        this.$message({
+          type: "warning",
+          message: "章节列表未填写正确",
+        });
+      }
+    },
+    //修改保存
+    saveAlter() {
+      let data = {
+        sections:JSON.stringify(this.courseDeail.sections)
+      };
+      editFreeCourseList(data).then(res=>{
+        this.$message({
+            message: "修改成功!",
+            type: "success",
+            showClose: true,
+            duration: 2000,
+          });
+          this.$router.push("/course/courseManage");
+      }).catch(err=>{
+        console.error(err)
+      })
+    },
+    //判断新建/修改
+    init() {
+      this.title = "编辑免费课程";
+      this.getCourseDetail();
+    },
+  },
+  created() {
+    this.init();
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.pjc {
+  width: 900px;
+  height: auto;
+  margin: 0 auto;
+  margin-top: 10px;
+  background-color: #fff;
+  border-radius: 5px;
+  padding: 30px 60px;
+  h3 {
+    color: #000;
+    text-align: center;
+    margin: 30px 0;
+  }
+  form {
+    legend {
+      font-size: 20px;
+      color: #000;
+      line-height: 30px;
+      font-weight: bold;
+      margin-bottom: 22px;
+    }
+    .el-form-item {
+      .el-select {
+        width: 380px;
+      }
+    }
+  }
+}
+.sectionout {
+  .sectionInner {
+    display: flex;
+    // justify-content: space-between;
+    align-items: center;
+    margin-bottom: 10px;
+    .sectionName {
+      width: 150px;
+      margin-right: 20px;
+    }
+    .sectionUrl {
+      width: 250px;
+      margin-right: 20px;
+    }
+    .sectionDel {
+    }
+  }
+}
+.img_all {
+  display: flex;
+  flex-wrap: wrap;
+  & > div {
+    margin-right: 10px;
+    margin-bottom: 10px;
+  }
+  .imgout{
+    position: relative;
+    .imgDelete{
+      width: 100%;
+      height: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      cursor: pointer;
+      position: absolute;
+      left:0;
+      top:0;
+      background-color: rgba(0,0,0,.3);
+      opacity: 0;
+      transition: opacity 0.3s ease;
+    } 
+    &:hover{
+      .imgDelete{
+        opacity:1;
+      }
+    }
+  }
+}
+.cursor {
+  & > div {
+    height: 100px;
+    width: 100px;
+    background-color: #fbfdff;
+    border: 1px dashed #c0ccda;
+    border-radius: 5px;
+    font-size: 30px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    i{
+      font-size: 28px;
+      color: #8c939d;
+    }
+  }
+}
+</style>

+ 8 - 1
src/course/courseManage/home.vue

@@ -1,9 +1,12 @@
 <template>
   <div class="page">
-    <el-header height="">
+    <el-header style="display: flex;justify-content: space-between;" height="">
       <el-button type="primary" size="default" @click="courseCreate" plain
         >+ 添加课程</el-button
       >
+      <el-button type="primary" size="default" @click="courseFreeCreate" plain
+        >编辑免费课程</el-button
+      >
     </el-header>
     <el-container class="course_data">
       <el-table :data="courseList" border stripe highlight-current-row v-loading="loading">
@@ -93,6 +96,10 @@ export default {
     courseCreate() {
       this.$router.push("/course/courseCreate");
     },
+    // 跳转编辑免费课程课程
+    courseFreeCreate(){
+      this.$router.push("/course/freeCourseEdit");
+    },
     // 删除
     deleteCourse(id) {
       deleteCourse(id).then((res) => {

+ 8 - 4
src/okr/components/project/Milestone.vue

@@ -213,7 +213,7 @@
             </Tooltip>
           </div>
           <span>权重</span>
-          <el-input@input="item.weight = item.weight.replace(/[^\d]/g, '');" class="input" style="width: 80px;" size="small" v-model="item.weight" clearable/>
+          <el-input @input="item.weight = item.weight.replace(/[^\d]/g, '');" class="input" style="width: 80px;" size="small" v-model="item.weight" clearable/>
           <span>%</span>
         </div>
         <div class="flex-box-ce flex-box-end" style="margin-top: 20px;">
@@ -675,14 +675,18 @@
       },
       returnStatus(item){
         //statistics.plan_primary_delay		主任务中逾期的任务
-        let isGq=this.$moment().format('YYYY-MM-DD')>item.end_date;//是否过期
+        let isGq= new Date().getTime() > new Date(item.end_date).getTime();//是否过期
+        let plansStatusArr = []
+        item.plans.forEach(item2=>{
+          plansStatusArr.push(taskStatus(item2.composite_state))
+        })
         let status='#409EFF';
         if(isGq){
-          if(item.statistics.plan_primary_delay>0){
+          if(plansStatusArr.some(e=>e.value == 3)){
             status='#f56c6c';
           }
         }else{
-          if(item.statistics.plan_primary_delay>0){
+          if(plansStatusArr.some(e=>e.value == 3)){
             status='#FF9600';
           }
         }

+ 5 - 0
src/okr/components/project/ProjectTj.vue

@@ -8,6 +8,11 @@
              <span>{{item.name}}</span>
              </Tooltip>
           </div>
+          <div class="tab-item clamp" >
+            <Tooltip preHtml="本页面统计项目内的所有任务数(含子任务)">
+             <span>统计说明<i class="el-icon-question" style="font-size: 16px;position: relative;top: 1px;"></i></span>
+             </Tooltip>
+          </div>
       </div>
     </div>
     <div class="flex-box-ce" style="margin-bottom: 10px;" v-loading="loading">

+ 1 - 1
src/okr/views/project/myProject.vue

@@ -82,7 +82,7 @@
                         <template v-else>
                           <span v-if="item.day>0" class="green">剩余{{item.day}}天</span>
                           <span v-if="item.day==0" class="green">剩余1天</span>
-                          <span v-if="item.day<0" class="red">逾期{{Math.abs(item.day)}}天</span>
+                          <span v-if="item.day<0&&item.composite_state != 4" class="red">逾期{{Math.abs(item.day)}}天</span>
                         </template>
                         <Progress :inputStyle="{ height: '14px', width: '140px', lineHeight: '14px' }" :status="item.composite_state==3? 3:1" :value="Number(item.process)" style="margin-left: 10px;"></Progress>
                       </div>

+ 1 - 1
src/permission.js

@@ -14,7 +14,7 @@ function filterWhite(path) {
 }
 // 免登名单
 const whiteList1 = ['/login', '/loginbytoken', '/reg', '/forgetPwd', '/resetPwd', '/android', '/bindingPhone', '/demo', '/swiperShow', '/weixin', '/screen', '/screenSan', '/tySelect']
-const whiteList2 = ['/course', '/course/statistics', '/courseLogin', '/course/adminSetting', '/course/courseManage','/course/courseCreate', '/course/dealerManage']
+const whiteList2 = ['/course', '/course/statistics','/freeCourseEdit', '/courseLogin', '/course/adminSetting', '/course/courseManage','/course/courseCreate', '/course/dealerManage']
 const whiteList = whiteList1.concat(whiteList2)
 router.beforeEach((to, from, next) => {
   if (Vue.$axiosUserRequestList.length > 0) { // 强行中断时才向下执行

+ 9 - 9
src/point/views/attendance/attendance_classnew.vue

@@ -170,8 +170,8 @@
           break_time: ['12:00', '13:00'],
           is_break_time: false,
           is_card: false,
-          allowed_late_time: 30,
-          serious_late_time: 30,
+          // allowed_late_time: 30,
+          // serious_late_time: 30,
           time_list: [{
             id: 0,
             checkin_time: '8:00',
@@ -179,7 +179,7 @@
             end_time: '18:00',
             dinner_time: '18:30'
           }, ],
-          absenteeism_late_time: 30,
+          // absenteeism_late_time: 30,
         },
         multipleSelection: [],
         RuleDetailDialogVisible: false,
@@ -428,9 +428,9 @@
           break_time: ['12:00', '13:00'],
           is_break_time: false,
           is_card: false,
-          allowed_late_time: 3,
-          serious_late_time: 20,
-          absenteeism_late_time: 30,
+          // allowed_late_time: 3,
+          // serious_late_time: 20,
+          // absenteeism_late_time: 30,
           time_list: [{
             id: 0,
             checkin_time: '8:00',
@@ -467,9 +467,9 @@
                 self.formdata.id = res.data.data.id
                 self.formdata.is_break_time = res.data.data.is_break_time == 1
                 self.formdata.is_card = res.data.data.is_card == 1
-                self.formdata.allowed_late_time = res.data.data.allowed_late_time
-                self.formdata.serious_late_time = res.data.data.serious_late_time
-                self.formdata.absenteeism_late_time = res.data.data.absenteeism_late_time
+                // self.formdata.allowed_late_time = res.data.data.allowed_late_time
+                // self.formdata.serious_late_time = res.data.data.serious_late_time
+                // self.formdata.absenteeism_late_time = res.data.data.absenteeism_late_time
 
                 self.RuleDetailDialogVisible = true
               } else {

+ 9 - 0
src/router/course.js

@@ -10,6 +10,15 @@ const routes = [
             keepAlive: true
         },
     },
+    {
+        path: 'freeCourseEdit',
+        name: 'freeCourseEdit',
+        component: () => import('@/course/courseManage/freeEdit'),
+        label: '编辑免费课程',
+        meta: {
+            keepAlive: false
+        },
+    },
     {
         path: 'courseManage',
         name: 'courseManage',