WINDOWS-7IFQK7E\EDY 2 years ago
parent
commit
79bf56e7e3

BIN
src/assets/img/delete.png


BIN
src/assets/img/edit.png


+ 332 - 3
src/pages/personal/components/Attention/index.vue

@@ -1,13 +1,342 @@
 <template>
   <!-- 我关注的人 -->
-  <div>我关注的人</div>
+  <el-card>
+    <div class="myAttention">
+      <div class="searchDiv">
+        <div class="switch">
+          <div class="switchDiv">
+            <div
+              class="list"
+              :class="activeSwitch == index ? 'active' : ''"
+              v-for="(item, index) in switchData"
+              :key="item"
+              @click="initSwitch(index)"
+            >
+              {{ item }}
+            </div>
+          </div>
+        </div>
+
+        <div style="display: flex; align-items: center">
+          <div class="searchValue">
+            <input type="text" placeholder="搜索关键字" v-model="searchKey" />
+            <div class="searchBtn" @click="initData">
+              <img src="/kczy/searchIcon.png" alt="" />
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class="teacher-list" v-show="activeSwitch == '0'">
+        <el-row :gutter="20">
+          <el-col
+            :span="8"
+            v-for="item in teacherAttentionData"
+            :key="item.name"
+            @click="goToPage(item.url)"
+          >
+            <div class="item" :style="{ background: item.bgColor }">
+              <img :src="item.img" alt="" />
+
+              <div class="js-name">{{ item.name }}</div>
+              <div class="ss-subject">
+                {{ item.subject }}
+              </div>
+              <ul class="">
+                <li>
+                  <div>{{ item.coursenumber }}</div>
+                  课程数量
+                </li>
+                <li>
+                  <div>{{ item.watchnumber }}</div>
+                  观看数量
+                </li>
+                <li>
+                  <div>{{ item.attentionnumber }}</div>
+                  被关注数
+                </li>
+              </ul>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="teacher-list" v-show="activeSwitch == '1'">
+        <el-row :gutter="20">
+          <el-col
+            :span="8"
+            v-for="item in studentAttentionData"
+            :key="item.name"
+            @click="goToPage(item.url)"
+          >
+            <div class="item" :style="{ background: item.bgColor }">
+              <img :src="item.img" alt="" />
+
+              <div class="js-name">{{ item.name }}</div>
+              <div class="ss-subject">
+                {{ item.grade }}
+              </div>
+              <ul class="">
+                <li>
+                  <div>{{ item.homeworknumber }}</div>
+                  作业
+                </li>
+                <li>
+                  <div>{{ item.watchnumber }}</div>
+                  观看数量
+                </li>
+                <li>
+                  <div>{{ item.attentionnumber }}</div>
+                  关注的人
+                </li>
+              </ul>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+    </div>
+  </el-card>
 </template>
 
 <script>
 export default {
+  data() {
+    return {
+      switchData: ["教师", "学生"],
+      activeSwitch: 0,
+      teacherAttentionData: [
+        {
+          img: "/images/home/c-1.png",
+          name: "何红旗",
+          subject: "数学老师",
+          coursenumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-2.png",
+          name: "冯雪梅",
+          subject: "数学老师",
+          coursenumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-4.png",
+          name: "张美英",
+          subject: "英语老师",
+          coursenumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-4.png",
+          name: "周毅维",
+          subject: "体育老师",
+          coursenumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-5.png",
+          name: "何红旗",
+          subject: "数学老师",
+          coursenumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-6.png",
+          name: "赵美娟",
+          subject: "语文老师",
+          coursenumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+      ],
+      studentAttentionData: [
+        {
+          img: "/images/home/c-1.png",
+          name: "何红旗",
+          grade: "高中",
+          homeworknumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-2.png",
+          name: "冯雪梅",
+          grade: "初中",
+          homeworknumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-4.png",
+          name: "张美英",
+          grade: "高中",
+          homeworknumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-4.png",
+          name: "周毅维",
+          grade: "小学",
+          homeworknumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-5.png",
+          name: "何红旗",
+          grade: "小学",
+          homeworknumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+        {
+          img: "/images/home/c-6.png",
+          name: "赵美娟",
+          grade: "高中",
+          homeworknumber: "12",
+          watchnumber: "78",
+          attentionnumber: "245",
+        },
+      ],
+    };
+  },
+  methods: {
+    initSwitch(index) {
+      this.activeSwitch = index;
+    },
+    goToPage(url) {
+      console.log(url);
+      this.$router.push({ name: url });
+    },
+  },
+};
+</script>
 
+<style lang="scss" scoped>
+.searchDiv {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-right: 80px;
+  .searchValue {
+    width: 350px;
+    height: 50px;
+    margin: 0 auto;
+    background: #ffffff;
+    border-radius: 8px;
+    overflow: hidden;
+    position: relative;
+    input {
+      width: 100%;
+      height: 100%;
+      outline: 0;
+      box-sizing: border-box;
+      padding-left: 10px;
+      background: #f6f8fa;
+    }
+    .searchBtn {
+      width: 26px;
+      height: 26px;
+      background: #00a3ff;
+      border-radius: 6px;
+      position: absolute;
+      right: 5px;
+      top: 50%;
+      transform: translate(-50%, -50%);
+      text-align: center;
+      vertical-align: middle;
+      cursor: pointer;
+      img {
+        display: block;
+        text-align: center;
+        margin: 6px auto 0;
+      }
+    }
+  }
 }
-</script>
+.myAttention {
+  min-height: 400px;
+  .switch {
+    display: inline-block;
+    margin-bottom: 35px;
+    border: 1px solid #dbe7ec;
+    padding: 3px;
+    border-radius: 12px;
+    margin-left: 20px;
+    .switchDiv {
+      display: flex;
 
-<style>
+      .list {
+        cursor: pointer;
+        color: #666;
+        line-height: 36px;
+        padding: 0 20px;
+        &.active {
+          background: #e8f3fa;
+          color: #000;
+          border-radius: 12px;
+        }
+      }
+    }
+  }
+  .el-col {
+    margin-bottom: 25px;
+  }
+  .teacher-list {
+    padding: 0px 100px;
+  }
+  .item {
+    width: 380px;
+    height: 320px;
+    border-radius: 8px;
+    padding: 30px;
+
+    cursor: pointer;
+    background: #fcfeff;
+    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.08),
+      0 6px 20px 0 rgba(0, 0, 0, 0.08);
+    img {
+      width: 70px;
+      height: 70px;
+      margin: 0 auto;
+      border-radius: 50%;
+    }
+    .js-name {
+      font-size: 20px;
+      font-family: PingFangSC, PingFangSC-Semibold;
+      font-weight: 600;
+      text-align: center;
+      color: #171721;
+      margin-top: 30px;
+    }
+    .ss-subject {
+      font-size: 16px;
+      font-family: PingFangSC, PingFangSC-Regular;
+      font-weight: 400;
+      text-align: center;
+      color: #949494;
+      margin-top: 8px;
+    }
+  }
+  ul {
+    display: flex;
+    align-items: flex-start;
+    margin-top: 30px;
+    li {
+      width: 90px;
+      height: 60px;
+      border: 1px dashed #e4e6ef;
+      border-radius: 6px;
+      padding: 5px 10px;
+      & + li {
+        margin-left: 30px;
+      }
+    }
+  }
+}
 </style>

+ 57 - 22
src/pages/personal/components/MyCourse/api.js

@@ -65,42 +65,77 @@ export const ssyskc_delete = (data = {}) =>
   })
 
 // 协同备课创建
-export const xtbk_add = (data = {})=>{
+export const xtbk_add = (data = {}) => {
   return request({
-    url:'/zhjy/xtbk/add',
-    data:{
-      zhjy_xtbk:data.zhjy_xtbk
+    url: '/zhjy/xtbk/add',
+    data: {
+      zhjy_xtbk: data.zhjy_xtbk
     }
   })
 }
 // 协同备课编辑
-export const xtbk_edit = (data={})=>{
+export const xtbk_edit = (data = {}) => {
   return request({
-    url:'/zhjy/xtbk/edit',
-    data:{
+    url: '/zhjy/xtbk/edit',
+    data: {
       zx_id,
-      zhjy_xtbk:data.zhjy_xtbk
+      zhjy_xtbk: data.zhjy_xtbk
     }
   })
 }
 // 协同备课删除
-export const xtbk_delete = (data={}) =>{
+export const xtbk_delete = (data = {}) => {
   return request({
-    url:'/zhjy/xtbk/delete',
+    url: '/zhjy/xtbk/delete',
     data,
   })
 }
-
-
 export const xtbk_list = (data = {}) =>
-    request({
-        url: '/zhjy/xtbk/index',
-        data,
-    })
+  request({
+    url: '/zhjy/xtbk/index',
+    data,
+  })
 export const user_avatar = (data = {}) =>
-    request({
-        url: '/user/main/user_avatar',
-        data: {
-            user_id: data.user_id
-        }
-    })
+  request({
+    url: '/user/main/user_avatar',
+    data: {
+      user_id: data.user_id
+    }
+  })
+
+//同步教研列表
+export const tbjy_list = (data = {}) =>
+  request({
+    url: '/zhjy/tbjy/index',
+    data,
+  })
+//同步教研新建
+export const tbjy_add = (data = {}) => {
+  return request({
+    url: '/zhjy/tbjy/add',
+    data: {
+      zhjy_tbjy: data.zhjy_tbjy
+
+    }
+
+  })
+}
+//同步教研编辑
+export const tbjy_edit = (data = {}) => {
+  return request({
+    url: '/zhjy/tbjy/edit',
+    data: {
+      zhjy_tbjy: data.zhjy_tbjy
+
+    }
+
+  })
+}
+//同步教研删除
+
+export const tbjy_delete = (data = {}) => {
+  return request({
+    url: '/zhjy/tbjy/delete',
+    data,
+  })
+}

+ 587 - 0
src/pages/personal/components/MyCourse/tbjy-create.vue

@@ -0,0 +1,587 @@
+<template>
+  <!-- 创建课程 -->
+  <div class="createCourse">
+    <el-card>
+      <div style="padding: 0 75px">
+        <span class="title">同步教研</span>
+        <span class="subTitle"
+          >我的课程 - 我创建的 -
+          <span class="pointer" @click="goBack">同步教研</span> -
+          <span style="color: #000">创建</span></span
+        >
+      </div>
+    </el-card>
+
+    <el-card>
+      <div style="color: #050026; font-size: 18px; font-weight: 400">创建</div>
+      <div class="formContent">
+        <el-form
+          :model="formline"
+          ref="formline"
+          size="large"
+          label-position="top"
+          class="demo-ruleForm"
+        >
+          <div class="must">
+            <div class="label">课程封面图</div>
+            <div class="uploadDiv">
+              <div style="display: flex">
+                <el-upload
+                  class="mainUpload"
+                  action=""
+                  accept=".png, .jpg, .jpeg"
+                  :auto-upload="false"
+                  list-type="picture-card"
+                  :on-change="handleMainChange"
+                  :file-list="fileList"
+                >
+                  <el-icon v-if="fileList.length == 0">
+                    <Picture />
+                  </el-icon>
+                  <img
+                    v-else
+                    :src="fileList[0].url"
+                    alt=""
+                    style="width: 100%; height: 100%"
+                  />
+                </el-upload>
+                <div
+                  style="font-size: 12px; margin-left: 20px; position: relative"
+                >
+                  <div style="color: #949494">
+                    支持格式:jpg,png,jpeg(200kb以内) 建议尺寸600x320
+                  </div>
+                  <div
+                    style="color: #f35421; position: absolute; bottom: 0"
+                    v-if="fileList.length == 0"
+                  >
+                    {{ mainTip }}
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <el-form-item label="主讲老师" prop="zjjs">
+            <el-input v-model="formline.zjjs" placeholder="请输入主讲" />
+          </el-form-item>
+          <el-form-item label="教研简介" prop="jyjj">
+            <el-input
+              v-model="formline.jyjj"
+              type="textarea"
+              rows="5"
+              placeholder="请输入教研简介"
+            />
+          </el-form-item>
+          <el-form-item label="教研名称" prop="jymc">
+            <el-input v-model="formline.jymc" placeholder="请输入教研名称" />
+          </el-form-item>
+          <div class="type flex">
+            <el-form-item class="el-nj" label="年级" prop="nj">
+              <el-select v-model="formline.nj" placeholder="请选择年级">
+                <el-option
+                  v-for="(item, index) in gradeData"
+                  :key="index"
+                  label="item.grade_name"
+                  value="item.grade_name"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="学科" prop="xk">
+              <el-select v-model="formline.xk" placeholder="请选择学科">
+                <el-option label="区域一" value="shanghai"></el-option>
+              </el-select>
+            </el-form-item>
+          </div>
+          <div style="display: flex">
+            <el-form-item
+              style="flex: 1"
+              label="开始时间"
+              prop="ks_start_datetime"
+            >
+              <el-config-provider :locale="local">
+                <el-date-picker
+                  v-model="formline.kssj"
+                  :disabled-date="pickerStartTime"
+                  type="datetime"
+                  placeholder="选择日期时间"
+                ></el-date-picker>
+              </el-config-provider>
+            </el-form-item>
+            <el-form-item
+              style="flex: 1; margin-left: 20px"
+              label="结束时间"
+              prop="ks_end_datetime"
+            >
+              <el-config-provider :locale="local">
+                <el-date-picker
+                  v-model="formline.jssj"
+                  :disabled-date="pickerEndTime"
+                  type="datetime"
+                  placeholder="选择日期时间"
+                ></el-date-picker>
+              </el-config-provider>
+            </el-form-item>
+          </div>
+
+          <el-form-item label="备课老师">
+            <!-- <el-input v-model="formline.zy" /> -->
+          </el-form-item>
+          <el-form-item>
+            <el-checkbox
+              class="read"
+              v-model="isRead"
+              label="已阅读并同意《课程上传协议》"
+              size="large"
+            />
+          </el-form-item>
+          <el-form-item>
+            <div class="btnDiv">
+              <el-button type="primary" @click="formSubmit()">提 交</el-button>
+              <el-button>关 闭</el-button>
+            </div>
+          </el-form-item>
+        </el-form>
+      </div>
+    </el-card>
+  </div>
+</template>
+  
+  <script>
+import {
+  grade_list,
+  subject_list,
+  tbjy_add,
+  tbjy_edit,
+  upload_file,
+} from "./api";
+
+import { Picture, FolderOpened } from "@element-plus/icons-vue";
+import { ElConfigProvider } from "element-plus";
+import zhcn from "element-plus/lib/locale/lang/zh-cn";
+export default {
+  data() {
+    return {
+      local: zhcn,
+      formline: {
+        fm: "",
+        jyzj: "",
+        jyjj: "",
+        jymc: "",
+        nj: "",
+        xk: "",
+        kssj: "",
+        jssj: "",
+        bkls: "",
+      },
+      //   rules: {
+      //     ks_name: [{ required: true, message: "请输入主讲", trigger: "blur" }],
+      //     ks_kss: [
+      //       { required: true, message: "请输入教研简介", trigger: "blur" },
+      //     ],
+      //     ks_brief: [
+      //       { required: true, message: "请输入教研名称", trigger: "blur" },
+      //     ],
+      //     ks_nj: [{ required: true, message: "请选择年级", trigger: "change" }],
+      //     ks_xk: [{ required: true, message: "请选择学科", trigger: "change" }],
+      //     ks_start_datetime: [
+      //       {
+      //         required: true,
+      //         message: "请选择开始时间",
+      //         trigger: "change",
+      //         type: "date",
+      //       },
+      //     ],
+      //     ks_end_datetime: [
+      //       {
+      //         required: true,
+      //         message: "请选择结束时间",
+      //         trigger: "change",
+      //         type: "date",
+      //       },
+      //     ],
+      //   },
+      fileList: [],
+      mainFileData: ["png", "jpg", "jpeg"],
+      mainFileSize: 200,
+      mainTip: "",
+      attachList: [],
+      attachFileData: ["ppt", "pptx", "pdf", "mp4"],
+      attachFileSize: 500,
+      attachTip: "",
+      gradeData: [],
+      subjectData: [],
+      isRead: false,
+      pickerStartTime: (time) => {
+        let beginDateVal = this.formline.ks_end_datetime;
+        if (beginDateVal) {
+          return time.getTime() > new Date(beginDateVal).getTime();
+        }
+      },
+      pickerEndTime: (time) => {
+        let beginDateVal = this.formline.ks_start_datetime;
+        if (beginDateVal) {
+          return time.getTime() < new Date(beginDateVal).getTime();
+        }
+      },
+    };
+  },
+  components: { Picture, FolderOpened, ElConfigProvider },
+  methods: {
+    goBack() {
+      this.$router.go(-1);
+    },
+
+    addData() {
+      this.formline = {
+        fm: "",
+        jyzj: "",
+        jyjj: "",
+        jymc: "",
+        nj: "",
+        xk: "",
+        kssj: "",
+        jssj: "",
+        bkls: "",
+      };
+    },
+    editData(item) {
+      this.id = item.zt_id;
+      this.formline.fm = item.zt_img;
+      this.formline.zjjs = item.zt_zrjs;
+      this.formline.jyjj = item.zt_content;
+      this.formline.jymc = item.grade_name;
+      this.formline.nj = item.subject_name;
+      this.formline.xk = item.zt_name;
+      //   this.formline.kssj = item.zt_name;
+      //   this.formline.jssj = item.zt_name;
+    },
+    formSubmit() {
+      let data = {
+        zt_img: this.formline.fm,
+        zt_zrjs: this.formline.zjjs,
+        zt_content: this.formline.jyjj,
+        zt_name: this.formline.jymc,
+        grade_name: this.formline.nj,
+        subject_name: this.formline.xk,
+      };
+      if (!this.isEdit) {
+        tbjy_add(data).then((res) => {
+          if (res.code == 1) {
+            this.$message({
+              message: "添加成功!",
+              type: "success",
+            });
+
+            this.formlineVisible = false;
+            this.getListData();
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error",
+            });
+          }
+        });
+      } else {
+        data.zt_id = this.id;
+        tbjy_edit(data).then((res) => {
+          if (res.code == 1) {
+            this.$message({
+              message: "编辑成功!",
+              type: "success",
+            });
+
+            this.getListData();
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error",
+            });
+          }
+        });
+      }
+    },
+    //年级
+    gradeListData() {
+      let data = {
+        page: 1,
+        limit: 9999,
+      };
+      grade_list(data).then((res) => {
+        if (res.code == 1) {
+          this.gradeList = res.data.page_data;
+          let obj = {
+            grade_id: "",
+            grade_name: "全部",
+          };
+          this.gradeList.unshift(obj);
+          console.log(this.gradeList);
+        }
+      });
+    },
+    //科目列表
+    subjectListData() {
+      let data = {
+        page: 1,
+        limit: 9999,
+      };
+      subject_list(data).then((res) => {
+        if (res.code == 1) {
+          this.subjectList = res.data.page_data;
+          let obj = {
+            subject_id: "",
+            subject_name: "全部",
+          };
+          this.subjectList.unshift(obj);
+        }
+      });
+    },
+    // 封面图
+    handleMainChange(file) {
+      let fileType = file.name.substring(file.name.lastIndexOf(".") + 1);
+      const isJPG = this.mainFileData.includes(fileType);
+      const sizeLimit = file.size / 1024 < this.mainFileSize;
+      if (!isJPG) {
+        this.mainTip = "上传文件只能是jpg,png,jpeg格式";
+      }
+      if (!sizeLimit) {
+        this.mainTip = "上传文件不能超过200KB";
+      }
+      if (isJPG && sizeLimit) {
+        this.fileList = [file];
+      } else {
+        this.fileList = [];
+      }
+
+      if (this.fileList.length == 0) {
+        return false;
+      }
+
+      upload_file(file.raw).then((res) => {
+        if (res.code == 1) {
+          this.formline.ks_img = res.data.url;
+        } else {
+          this.mainTip = "上传失败";
+        }
+      });
+    },
+
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid && this.formline.ks_img != "" && this.formline.ks_kj == "") {
+          // alert('submit!');
+          console.log(this.formline);
+        } else {
+          if (this.formline.ks_img == "") {
+            this.mainTip = "请上传课程封面图";
+          }
+          if (this.formline.ks_kj == "") {
+            this.attachTip = "请上传源文件";
+          }
+        }
+      });
+    },
+  },
+  created() {
+    this.gradeListData();
+    this.subjectListData();
+  },
+};
+</script>
+  
+  <style lang="scss" scoped>
+.createCourse {
+  .el-card {
+    margin-bottom: 15px;
+    background: #fff;
+  }
+  .pointer {
+    cursor: pointer;
+  }
+  .title {
+    font-size: 18px;
+    color: #050026;
+  }
+  .subTitle {
+    font-size: 14px;
+    color: #949494;
+    margin-left: 45px;
+  }
+  .formContent {
+    width: 575px;
+    margin: auto;
+    .must {
+      display: flex;
+      align-items: center;
+      margin-bottom: 22px;
+      .label {
+        color: #949494;
+        font-size: 14px;
+        margin-right: 15px;
+        &::after {
+          content: "*";
+          color: #f35421;
+          margin-left: 4px;
+        }
+      }
+      .uploadDiv {
+        flex: 1;
+        .el-upload--picture-card {
+          width: 180px;
+          height: 96px;
+        }
+      }
+    }
+    .showType {
+      width: 100%;
+      height: 40px;
+      background: #f9f9f9;
+      border-radius: 6px;
+      display: flex;
+      align-items: center;
+      padding: 0 20px;
+      .typeItem {
+        color: #fff;
+        font-size: 13px;
+        padding: 3px 8px;
+        border-radius: 6px;
+        margin-right: 20px;
+        line-height: 22px;
+      }
+    }
+    .type {
+      margin-bottom: 10px;
+      justify-content: space-between;
+      .el-form-item {
+        width: 273px;
+      }
+      .flex {
+        display: flex;
+        align-items: baseline;
+        .label {
+          font-size: 13px;
+          color: #333;
+          &::after {
+            content: "*";
+            color: #f35421;
+            margin-left: 4px;
+          }
+        }
+        .valueDiv {
+          margin-left: 15px;
+          flex: 1;
+          display: flex;
+          flex-wrap: wrap;
+          color: #949494;
+          padding-bottom: 15px;
+          font-weight: 400;
+          font-size: 14px;
+          .item {
+            padding: 3px 5px;
+            margin-right: 20px;
+            margin-bottom: 5px;
+            &.active {
+              color: #00a3ff;
+              border-radius: 6px;
+              background: rgba($color: #00a3ff, $alpha: 0.1);
+            }
+          }
+        }
+      }
+    }
+    .btnDiv {
+      text-align: center;
+      width: 100%;
+      .el-button {
+        background: #f4f4f4;
+        border: none;
+        width: 160px;
+        height: 50px;
+        color: #41387f;
+        font-family: PingFangSC, PingFangSC-Semibold;
+      }
+      .el-button--primary {
+        background: #00a3ff;
+        margin-right: 80px;
+        color: #fff;
+      }
+    }
+  }
+}
+</style>
+  
+  <style lang="scss">
+.createCourse {
+  .el-card {
+    margin-bottom: 15px;
+    background: #fff;
+    .el-form {
+      .el-form-item {
+        &.is-required {
+          .el-form-item__label {
+            &::before {
+              display: none;
+            }
+            &::after {
+              content: "*";
+              color: #f35421;
+              margin-left: 4px;
+            }
+          }
+        }
+        .el-form-item__label {
+          color: #949494;
+          font-size: 14px;
+          position: relative;
+        }
+        .el-form-item__content {
+          .el-select {
+            width: 100%;
+          }
+          .el-input {
+            width: 100%;
+            .el-input__wrapper {
+              width: 100%;
+              box-shadow: none;
+              background: #f9f9f9;
+              border-radius: 6px;
+            }
+          }
+          .el-textarea {
+            .el-textarea__inner {
+              box-shadow: none;
+              background: #f9f9f9;
+              border-radius: 6px;
+              //   color: #d0d0d0;
+            }
+          }
+          .el-checkbox.read {
+            .el-checkbox__inner {
+              border-radius: 50%;
+            }
+          }
+          .el-input__inner {
+            // color: #d0d0d0;
+          }
+        }
+      }
+      .uploadDiv {
+        .mainUpload {
+          .el-upload--picture-card {
+            width: 180px;
+            height: 96px;
+          }
+          .el-upload-list--picture-card .el-upload-list__item {
+            display: none;
+          }
+        }
+        .attachUpload {
+          .el-upload--picture-card {
+            width: 65px;
+            height: 65px;
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 417 - 4
src/pages/personal/components/MyCourse/tbjy.vue

@@ -1,13 +1,426 @@
 <template>
-  <!-- 同步教研 -->
-  <div>同步教研</div>
+  <!-- 双师一生 -->
+  <div class="ssysContent">
+    <el-card>
+      <div style="padding: 0 75px">
+        <span class="title">同步教研</span>
+        <span class="subTitle"
+          >我的课程 - 我创建的 - <span style="color: #000">同步教研</span></span
+        >
+      </div>
+    </el-card>
+
+    <div class="searchDiv" style="display: flex; justify-content: flex-end">
+      <el-button type="primary" @click="addData()">创建</el-button>
+      <div class="searchValue">
+        <input type="text" placeholder="搜索关键字" v-model="keyword" />
+        <div class="searchBtn" @click="initData">
+          <img src="/kczy/searchIcon.png" alt="" />
+        </div>
+      </div>
+    </div>
+    <div class="line"></div>
+    <div class="nav">
+      <div>
+        <span>年级</span>
+        <el-tabs v-model="firstForm.grade" @click="initData">
+          <el-tab-pane
+            v-for="(item, index) in gradeList"
+            :key="index"
+            :label="item.grade_name"
+            :name="item.grade_id"
+          ></el-tab-pane>
+        </el-tabs>
+      </div>
+
+      <div>
+        <span>科目</span>
+        <el-tabs v-model="firstForm.subject" @click="initData">
+          <el-tab-pane
+            v-for="(item, index) in subjectList"
+            :key="index"
+            :label="item.subject_name"
+            :name="item.subject_id"
+          ></el-tab-pane>
+        </el-tabs>
+      </div>
+    </div>
+
+    <div class="list-right">
+      <div v-for="(item, index) in wholeData" :key="index">
+        <img :src="https + item.zt_img" alt="" />
+        <div class="main">
+          <p class="main-title">{{ item.zt_name }}</p>
+          <img
+            @click="editData(item.zt_id)"
+            class="edit"
+            src="@/assets/img/edit.png"
+            alt=""
+          />
+          <img
+            @click="deleteData(item.zt_id)"
+            class="delete"
+            src="@/assets/img/delete.png"
+            alt=""
+          />
+
+          <p class="main-content">{{ item.zt_content }}</p>
+          <div>
+            <img src="@/assets/img/zhjy/img_3.png" alt="" />{{ item.zt_zrjs }}
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
+import { grade_list, tbjy_list, subject_list, tbjy_delete } from "./api";
+
 export default {
+  data() {
+    return {
+      activeName: "1",
+      wholeData: [],
+      resultData: [],
+      keyword: "",
+      https: window.GLOBAL_CONFIG.api,
+      gradeList: [],
+      subjectList: [],
+      grade_id: "",
+      subject_id: "",
+      firstForm: {
+        grade: "",
+        subject: "",
+      },
+      isRead: false,
+    };
+  },
+  methods: {
+    //年级
+    gradeListData() {
+      let data = {
+        page: 1,
+        limit: 9999,
+      };
+      grade_list(data).then((res) => {
+        if (res.code == 1) {
+          this.gradeList = res.data.page_data;
+          let obj = {
+            grade_id: "",
+            grade_name: "全部",
+          };
+          this.gradeList.unshift(obj);
+        }
+      });
+    },
+    //科目列表
+    subjectListData() {
+      let data = {
+        page: 1,
+        limit: 9999,
+      };
+      subject_list(data).then((res) => {
+        if (res.code == 1) {
+          this.subjectList = res.data.page_data;
+          let obj = {
+            subject_id: "",
+            subject_name: "全部",
+          };
+          this.subjectList.unshift(obj);
+        }
+      });
+    },
+    initData() {
+      let data = {
+        page: this.page,
+        limit: this.limit,
+        keyword: this.keyword,
+        grade_id: this.firstForm.grade,
+        subject_id: this.firstForm.subject,
+      };
 
-}
+      tbjy_list(data).then((res) => {
+        if (res.code == 1) {
+          this.wholeData = res.data.page_data;
+        }
+      });
+    },
+
+    addData() {
+      this.$router.push({ name: "tbjy-create" });
+    },
+    editData(id) {
+      this.$router.push({ name: "tbjy-create", query: { id: id } });
+    },
+    deleteData(id) {
+      let data = {
+        zt_id: id,
+      };
+      this.$confirm("确认删除该课程?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          tbjy_delete(data).then((res) => {
+            if (res.code == 1) {
+              this.$message({
+                message: "课程删除成功!",
+                type: "success",
+              });
+              this.initData();
+            } else {
+              this.$message({
+                message: res.msg,
+                type: "error",
+              });
+            }
+          });
+        })
+        .catch(() => {});
+    },
+  },
+  // async created() {
+  //   await this.gradeListData();
+  //   await this.subjectListData();
+  // },
+  mounted() {
+    this.initData();
+    this.gradeListData();
+    this.subjectListData();
+    // const _this = this;
+    // document.onkeydown = function (e) {
+    //   e = window.event || e;
+    //   if (
+    //     _this.$route.name == "course-ssys" &&
+    //     (e.code === "Enter" || e.code === "enter")
+    //   ) {
+    //     // 登录事件
+    //     _this.initData();
+    //   }
+    // };
+  },
+};
 </script>
 
-<style>
+<style lang="scss" scoped>
+.ssysContent {
+  .el-card {
+    margin-bottom: 15px;
+    background: #fff;
+  }
+  .pointer {
+    cursor: pointer;
+  }
+  .title {
+    font-size: 18px;
+    color: #050026;
+  }
+  .subTitle {
+    font-size: 14px;
+    color: #949494;
+    margin-left: 45px;
+  }
+  .searchDiv {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0 80px;
+    .menuDiv {
+      display: flex;
+      margin-bottom: -10px;
+      .list {
+        margin: 0 20px;
+        padding: 0 10px;
+        color: #949494;
+        position: relative;
+        line-height: 40px;
+        font-size: 14px;
+        &::after {
+          content: "";
+          width: 0;
+          height: 2px;
+          background: rgba(0, 131, 197, 0.8);
+          position: absolute;
+          bottom: -10px;
+          left: 50%;
+          transform: translateX(-50%);
+          transition: width linear 0.1s;
+        }
+        &:hover {
+          color: rgba(0, 131, 197, 0.8);
+        }
+        &.active {
+          color: rgba(0, 131, 197, 0.8);
+          font-size: 16px;
+          &::after {
+            width: 100%;
+          }
+        }
+      }
+    }
+    .el-button {
+      width: 100px;
+      height: 40px;
+      margin-right: 40px;
+    }
+    .searchValue {
+      width: 350px;
+      height: 50px;
+
+      background: #ffffff;
+      border-radius: 8px;
+      overflow: hidden;
+      position: relative;
+      input {
+        width: 100%;
+        height: 100%;
+        outline: 0;
+        box-sizing: border-box;
+        padding-left: 10px;
+        background: #f6f8fa;
+      }
+      .searchBtn {
+        width: 26px;
+        height: 26px;
+        background: #00a3ff;
+        border-radius: 6px;
+        position: absolute;
+        right: 5px;
+        top: 50%;
+        transform: translate(-50%, -50%);
+        text-align: center;
+        vertical-align: middle;
+        cursor: pointer;
+        img {
+          display: block;
+          text-align: center;
+          margin: 6px auto 0;
+        }
+      }
+    }
+  }
+  .line {
+    height: 1px;
+    background: #eaeaea;
+    width: calc(100% + 40px);
+    margin-left: -20px;
+    margin-top: 10px;
+  }
+  .nav {
+    width: 1400px;
+    margin: 0 auto;
+    display: flex;
+    flex-direction: column;
+    margin-bottom: 20px;
+    div {
+      display: flex;
+      span {
+        padding-top: 10px;
+        display: inline-block;
+        width: 50px;
+        height: 50px;
+        font-size: 16px;
+        font-family: PingFangSC, PingFangSC-Semibold;
+        font-weight: 600;
+        text-align: center;
+        color: #000000;
+        line-height: 21px;
+      }
+    }
+  }
+  .list-right {
+    width: 1400px;
+    display: flex;
+    flex-wrap: wrap;
+    margin: 0 auto;
+
+    & > div {
+      box-sizing: border-box;
+      width: calc(50% - 40px);
+      height: 150px;
+      display: flex;
+      margin-bottom: 20px;
+
+      box-shadow: 0px 15px 24px 0px rgba(161, 153, 168, 0.18);
+      &:nth-of-type(odd) {
+        margin-right: 40px;
+      }
+      img {
+        height: 150px;
+        margin-right: 12px;
+      }
+      .main {
+        display: inline-block;
+        display: flex;
+        flex-direction: column;
+
+        width: 100%;
+
+        position: relative;
+        .main-title {
+          width: 60%;
+          vertical-align: top;
+          font-size: 16px;
+          font-family: PingFangSC, PingFangSC-Medium;
+          font-weight: 500;
+          text-align: left;
+          color: #050026;
+          line-height: 22px;
+          margin-bottom: 5px;
+        }
+        .edit,
+        .delete {
+          width: 18px;
+          height: 17px;
+          position: absolute;
+          top: 10px;
+          right: 10px;
+        }
+        .edit {
+          position: absolute;
+          top: 10px;
+          right: 50px;
+        }
+        .main-content {
+          display: inline-block;
+          font-size: 14px;
+          font-family: PingFangSC, PingFangSC-Regular;
+          font-weight: 400;
+          text-align: left;
+          color: #949494;
+          line-height: 20px;
+        }
+        div {
+          width: 186px;
+          height: 20px;
+          display: inline-block;
+          font-size: 14px;
+          font-family: PingFangSC, PingFangSC-Medium;
+          font-weight: 500;
+          text-align: left;
+          color: #050026;
+          line-height: 20px;
+          margin-top: 60px;
+          img {
+            display: inline-block;
+            width: 24px;
+            height: 24px;
+            border-radius: 50%;
+            margin-right: 8px;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+
+<style lang="scss" >
+.ssysContent {
+  .resultCard .el-card__body {
+    padding: 0 !important;
+  }
+}
 </style>

+ 21 - 17
src/pages/personal/sz/index.vue

@@ -18,27 +18,31 @@
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </el-upload>
         </div>
-        <div>
-          昵称: <el-input v-model="input" placeholder="请输入昵称"></el-input>
-        </div>
-        <div>
-          手机号码:
-          <el-input v-model="input" placeholder="请输入手机号码"></el-input>
-        </div>
-        <div>
-          任教学科:
-          <el-input v-model="input" placeholder="请输入任教学科"></el-input>
-        </div>
-        <div>
-          学校: <el-input v-model="input" placeholder="请输入学校"></el-input>
-        </div>
+        <el-form-item label="昵称" prop="">
+          <el-input v-model="imageUrl" placeholder="请输入昵称" />
+        </el-form-item>
+        <el-form-item label="手机号码:" prop="">
+          <el-input v-model="imageUrl" placeholder="请输入手机号码" />
+        </el-form-item>
+        <el-form-item label="任教学科:" prop="">
+          <el-input v-model="imageUrl" placeholder="请输入任教学科" />
+        </el-form-item>
+        <el-form-item label="学校:" prop="">
+          <el-input v-model="imageUrl" placeholder="请输入学校" />
+        </el-form-item>
+
         <el-checkbox v-model="checked"
           >已阅读并同意《课程上传协议》</el-checkbox
         >
 
-        <div class="btn">
-          <el-button type="primary">接受</el-button><el-button>关闭</el-button>
-        </div>
+        <el-form-item>
+          <el-checkbox
+            class="read"
+            v-model="isRead"
+            label="已阅读并同意《课程上传协议》"
+            size="large"
+          />
+        </el-form-item>
       </div>
     </div>
   </div>

+ 3 - 0
src/pages/zhjy/zhjyzxxx/zxxxsp/index.vue

@@ -217,6 +217,9 @@ export default {
         kk_id: "",
         kf_id: "",
       },
+      limit: 10,
+      total: 0,
+      cur_page: 1,
       ke_id: "",
       activeName: "first",
       https: window.GLOBAL_CONFIG.api,

+ 3 - 0
src/pages/zhjy/zhjyzxxx/zxxxxq/index.vue

@@ -116,6 +116,9 @@ export default {
         kf_id: "",
       },
       ke_id: "",
+      limit: 10,
+      total: 0,
+      cur_page: 1,
     };
   },
   methods: {

+ 7 - 2
src/router/index.js

@@ -238,8 +238,8 @@ export default createRouter({
 					component: () => import("~/pages/personal/components/MyCourse/xtbk.vue"),
 				},
 				{
-					path:'xtbk-create',
-					name:'xtbk-create',
+					path: 'xtbk-create',
+					name: 'xtbk-create',
 					component: () => import("~/pages/personal/components/MyCourse/xtbk-create.vue"),
 				},
 				{
@@ -249,6 +249,11 @@ export default createRouter({
 					component: () => import("~/pages/personal/components/MyCourse/tbjy.vue"),
 				},
 				{
+					path: 'tbjy-create',
+					name: 'tbjy-create',
+					component: () => import("~/pages/personal/components/MyCourse/tbjy-create.vue"),
+				},
+				{
 					path: 'course-kczy',
 					name: 'course-kczy',
 					title: '课程资源',