소스 검색

录播课

natasha 2 년 전
부모
커밋
2e75b8dc3e

+ 1 - 0
package.json

@@ -20,6 +20,7 @@
         "core-js": "3.6.5",
         "element-china-area-data": "^6.0.2",
         "element-ui": "^2.13.2",
+        "he-tree-vue": "^2.0.10",
         "jquery": "^3.7.0",
         "js-base64": "^3.6.1",
         "js-cookie": "2.2.0",

+ 10 - 14
src/components/Upload.vue

@@ -16,6 +16,7 @@
       :file-list="fileList"
       :before-remove="beforeRemove"
       :on-remove="handleRemove"
+      :show-file-list="showList?false:true"
     >
       
       <el-button size="mini" type="primary">
@@ -42,11 +43,8 @@ export default {
     "filleNumber",
     "datafileList",
     "changeFillId",
-    "deleteImg",
-    "index",
-    "uiType",
-    "handleMp3Base64",
-    "index2",
+    "fileName",
+    "showList",
     "tips"
   ],
   data() {
@@ -102,17 +100,15 @@ export default {
     handleChange(file, fileList) {},
     handleSuccess(response, file, fileList) {
       if (response.status == 1) {
-        if (this.handleMp3Base64) {
-          this.handleMp3Base64(file);
-        }
-
         response.duration = response.file_info_list[0].media_duration
           ? response.file_info_list[0].media_duration
           : 10;
         this.$message.success("用户上传成功");
-
-        this.changeFillId(fileList, response.duration, this.index,this.index2);
-
+        if(this.fileName){
+            this.changeFillId(fileList, this.fileName);
+        }else{
+            this.changeFillId(fileList);
+        }
         this.loading.close();
       } else {
         this.fileList = [];
@@ -143,7 +139,7 @@ export default {
       });
     },
     handleRemove(file, fileList) {
-      this.changeFillId(fileList, "", this.index,this.index2);
+      this.changeFillId(fileList, this.fileName);
       this.$message.success("移除成功");
     },
     beforeRemove(file, fileList) {
@@ -170,7 +166,7 @@ export default {
           this.uploadTip = "只能上传.jpg, .jpeg, .png文件,大小不超过2MB"
           break;
         case "mp3":
-          this.accept = "audio/*";
+          this.accept = ".mp3,.MP3,.wav,.WAV";
           this.fileTypeName = "音频";
           this.uploadName = name + "音频";
           this.uploadTip = "只能上传音频文件,大小不超过20MB"

+ 52 - 11
src/store/global.js

@@ -1,26 +1,67 @@
 import Vue from 'vue'
+import { getLogin } from "@/api/ajax";
 export default {
-    install() {
-        Vue.prototype.$orgType = [{
-                value: '',
+    async install() {
+        let MethodName = "/OrgServer/DictManager/GetStudyPhaseList";
+        let typeListAll = [{
+            study_phase: -1,
+            study_phase_name: '全部'
+        }]
+        let typeList = []
+        await getLogin(MethodName, {})
+            .then((res) => {
+                if (res.status === 1) {
+                    typeListAll = typeListAll.concat(res.study_phase_list)
+                    typeList = res.study_phase_list
+                }
+            })
+            .catch(() => {
+
+            });
+        Vue.prototype.$orgTypeAll = typeListAll
+        Vue.prototype.$orgType = typeList
+        Vue.prototype.$checkStatusList = [{
+                value: -1,
                 label: '全部'
             },
             {
-                value: '0',
-                label: '小学'
+                value: 0,
+                label: '待审核'
             },
             {
-                value: '1',
-                label: '初中'
+                value: 3,
+                label: '被驳回'
             },
             {
-                value: '2',
-                label: '高中'
+                value: 1,
+                label: '未上架'
             },
             {
-                value: '3',
-                label: '大学'
+                value: 2,
+                label: '已上架'
             }
         ]
+        Vue.prototype.$checkStatusColorList = {
+            0: {
+                text: '待审核',
+                bg: '#C9CDD4',
+                color: ''
+            },
+            3: {
+                text: '被驳回',
+                bg: '#F53F3F',
+                color: '#F53F3F'
+            },
+            1: {
+                text: '未上架',
+                bg: '#165DFF',
+                color: ''
+            },
+            2: {
+                text: '已上架',
+                bg: '#00B42A',
+                color: ''
+            }
+        }
     }
 }

+ 196 - 19
src/views/content_manage/course_manage/CourseListNav.vue

@@ -1,20 +1,45 @@
 <template>
     <div class="course-list-nav">
         <el-menu
-            :default-active="activeMenuIndex"
+            default-active="1-1"
             :unique-opened="true"
+            :collapse="false"
             class="nav-menu"
-            @select="handleSelect">
-            <el-submenu index="123456">
+            v-loading="loading"
+            v-if="treeData.length>0">
+            <el-submenu index="abc">
                 <template slot="title">
                     <svg-icon icon-class="unordered-list"></svg-icon>
                     <span>课节列表</span>
                 </template>
-                <template v-for="(item,index) in data">
-                    <el-menu-item :index="item.index" :key="index" class="nav-item2">
-                        <span slot="title">{{item.title}}</span>
-                    </el-menu-item>
-                </template>
+                <el-menu-item-group class="aaa">
+                    <el-menu-item index="1-1">选项1</el-menu-item>
+                </el-menu-item-group>
+                <Tree ref="tree" :value="treeData" @drag="drag" @drop="drop">
+                    <div
+                        slot-scope="{ node, index, path }"
+                        class="tree_box"
+                    >
+                        <span
+                            :class="[
+                                'tree_box_item',
+                                'tree_box_leaf',
+                                activeIndex == node.id ? 'tree_box_item_active' : '',
+                            ]"
+                            @click="handleNodeClick(node, path)"
+                        >
+                            {{ node.name }}
+                        </span>
+                        <div class="btn_box">
+                            <el-popover placement="bottom" trigger="click" width="100">
+                                <div class="tree_other_btn" style="text-align:center">
+                                    <a class="tree_del" @click="remove(node, index)">删除</a>
+                                </div>
+                                <span slot="reference">···</span>
+                            </el-popover>
+                        </div>
+                    </div>
+                </Tree>
             </el-submenu>
         </el-menu>
         <el-button type="primary" size="small" @click="createCourse">创建课节</el-button>
@@ -22,28 +47,117 @@
 </template>
 
 <script>
+import { Tree, Fold, Draggable } from "he-tree-vue";
+import { getLogin } from "@/api/ajax";
 export default {
-  components: {},
+  components: {
+    Tree: Tree.mixPlugins([Fold, Draggable]),
+  },
   name: "courseListNav",
-  props: [ "data", "activeMenuIndex" ],
+  props: [ "treeData", "activeMenuIndex", "emptyQustion", "getItemInfo", "getCourseInfo", "itemsId" ],
   data() {
     return {
-      
+      activeIndex: "", // 高亮节点
+      oldId: "", // 移动节点的id
+      destId: "", // 目标节点id
+      loading: false,
+      oldList: []
     };
   },
-  watch: {},
+  watch: {
+    itemsId(newval, oldval) {
+      if (newval) {
+        this.activeIndex = newval
+      }
+    },
+  },
   computed: {
   },
   methods: {
-    handleSelect(key) {
-        
-    },
     // 创建课节
     createCourse(){
-
+        this.activeIndex = "";
+        this.emptyQustion('createCourseForm');
+    },
+    // 拖拽节点
+    drag(store) {
+      const data = store.dragNode;
+      this.oldId = data.id;
+    },
+    // 拖拽完成后执行
+    drop(store) {
+      if(!this.oldList[store.targetPath[0]]){
+        this.destId = this.oldList[this.oldList.length-1].id
+      }else{
+        this.destId = this.oldList[store.targetPath[0]].id
+      } 
+      this.onTreeDataChange();
+    },
+    onTreeDataChange() {
+        const MethodName = "/CourseServer/Manager/LBCourseManager/SwapLBCourseCSItemSort";
+        const data = {
+          id_swap1: this.oldId,
+          id_swap2: this.destId,
+        };
+        this.loading = true;
+        getLogin(MethodName, data)
+          .then((res) => {
+            this.loading = false;
+            this.$message.success("移动成功");
+            this.oldList = JSON.parse(JSON.stringify(this.treeData))
+          })
+          .catch(() => {
+            this.loading = false;
+          });
+    },
+    handleNodeClick(data) {
+      this.activeIndex = data.id;
+      this.getItemInfo(data.id)
+    },
+    remove(data, index) {
+      this.curIndex = data.level_index;
+      const is_courseware = data.is_courseware;
+      this.$confirm("确定要删除此课节吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          let MethodName = "/CourseServer/Manager/LBCourseManager/DeleteCSItemToFromLBCourse";
+          const datas = {
+            id: data.id
+          };
+          this.loading = true;
+          getLogin(MethodName, datas)
+            .then((res) => {
+              this.loading = false;
+              this.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+              this.getCourseInfo()
+              if(this.activeIndex==data.id){
+                //   this.activeIndex = "";
+                  this.emptyQustion('createCourseForm');
+              }
+            })
+            .catch(() => {
+              this.loading = false;
+            });
+        })
+        .catch(() => {});
+    },
+    // 得到课件信息
+    getItemInfos(){
+        this.getItemInfo(this.activeIndex)
     }
   },
   created() {
+    this.oldList = JSON.parse(JSON.stringify(this.treeData))
+    if(this.treeData.length>0){
+        this.activeIndex = this.treeData[0].id
+        this.getItemInfos()
+    }
   },
   mounted() {
   },
@@ -55,14 +169,77 @@ export default {
 <style lang="scss" scoped>
 .course-list-nav{
     width: 216px;
-    height: 100vh;
     background: #fff;
     text-align: center;
     .nav-menu{
-        max-height: 100vh;
+        max-height: calc(100vh - 52px);
         border: none;
         overflow: auto;
-        margin-bottom: 18px;
+    }
+    .tree_box {
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        height: 40px;
+        cursor: pointer;
+        position: relative;
+        font-size: 14px;
+        .btn_box {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-size: 16px;
+            position: absolute;
+            font-weight: bold;
+            letter-spacing: -3px;
+            right: 5px;
+            .tree_other_btn{
+                text-align: center;
+            }
+            > span {
+                margin-left: 10px;
+                cursor: pointer;
+                color: #2c2c2c;
+            }
+        }
+        .tree_box_item {
+            width: 100%;
+            padding-left: 40px;
+            color: #2c2c2c;
+            height: 100%;
+            line-height: 40px;
+            padding-right: 30px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            text-align: left;
+        }
+        .tree_box_item:hover {
+            color: #165DFF;
+        }
+        .tree_box_item_light,
+        .tree_box_leaf:hover  {
+            color: #165DFF;
+        }
+        .tree_box_item_active{
+            color: #165DFF !important;
+            background: #F2F3F5 !important;
+        }
+        .el-icon_box {
+            width: 24px;
+            text-align: center;
+            font-size: 0;
+            > img {
+            width: 100%;
+            margin-top: 4px;
+            }
+        }
+    }
+    .aaa{
+        display: none;
+    }
+    .el-button{
+        margin-top: 18px;
     }
 }
 </style>

+ 285 - 88
src/views/content_manage/course_manage/CreateRecorded.vue

@@ -3,7 +3,7 @@
     <Header />
     <div class="manage-root-contain">
         <nav-menu class="manage-root-contain-left" :activeMenuIndex="activeMenuIndex" v-if="stepIndex!==1"></nav-menu>
-        <course-list-nav class="manage-root-contain-left" v-else :data="courseList" activeMenuIndex="1"></course-list-nav>
+        <course-list-nav class="manage-root-contain-left" v-else :treeData="courseList" activeMenuIndex="1" :emptyQustion="emptyQustion" :getItemInfo="getItemInfo" :getCourseInfo="getCourseInfo" :itemsId="itemsId"></course-list-nav>
         <div class="manage-root-contain-right">
             <breadcrumb :breadcrumbList="breadcrumbList" class="breadcrumb-box"></breadcrumb>
             <div class="create-top">
@@ -28,45 +28,39 @@
             </div>
             <div class="create-bottom">
                 <el-form :model="organizeForm" :rules="rulesOrganize" ref="organizeForm" label-width="100px" class="registerForm" v-if="stepIndex===0">
-                    <el-form-item label="课程封面" prop="avatar">
-                        <el-upload
-                            class="avatar-uploader"
-                            action="https://jsonplaceholder.typicode.com/posts/"
-                            :show-file-list="false"
-                            :on-success="handleAvatarSuccess"
-                            :before-upload="beforeAvatarUpload">
-                            <el-image v-if="organizeForm.avatar" :src="organizeForm.avatar" fit="contain"></el-image>
-                            <i v-else class="el-icon-plus avatar-uploader-icon">Upload</i>
-                        </el-upload>
+                    <el-form-item label="课程封面" prop="cover_image_url">
+                        <upload :datafileList="organizeForm.cover_image_list" :changeFillId="handleAvatarSuccess" :fileName="'cover'" :showList="true" uploadType="image" :filleNumber="1" v-if="!organizeForm.cover_image_url" />
+                        <div class="cover-box" v-else @mouseover="Imagemouseover('coverFlag',true)" @mouseout="Imagemouseover('coverFlag',false)">
+                            <el-image :src="organizeForm.cover_image_url" fit="contain" style="max-width:200px;max-height:200px;"></el-image>
+                            <p v-show="coverFlag" @click="handleDeleteFile('cover',0)"><i class="el-icon-delete"></i></p>
+                        </div>
                     </el-form-item>
                     <el-form-item label="课程名称" prop="title">
-                        <el-input v-model="organizeForm.title" placeholder="请输入课程名称"></el-input>
+                        <el-input v-model="organizeForm.title" placeholder="请输入课程名称" @blur="handleTrim('organizeForm','title')"></el-input>
                     </el-form-item>
                     <el-form-item label="类型" prop="courseType">
-                        <el-radio-group v-model="organizeForm.courseType">
-                            <el-radio label="video">视频课</el-radio>
-                            <el-radio label="audio">音频课</el-radio>
+                        <el-radio-group v-model="organizeForm.courseType" :disabled="id?true:false">
+                            <el-radio :label="0">视频课</el-radio>
+                            <el-radio :label="1">音频课</el-radio>
                         </el-radio-group>
                     </el-form-item>
                     <el-form-item label="机构" prop="orgName">
-                        <el-select v-model="organizeForm.orgName" placeholder="请选择">
+                        <el-select v-model="organizeForm.orgName" filterable placeholder="请选择">
                             <el-option
-                                v-for="item in $orgType"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled">
+                                v-for="item in orgList"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
                             </el-option>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="教师" prop="teacher">
-                        <el-select v-model="organizeForm.teacher" multiple placeholder="请选择">
+                        <el-select v-model="organizeForm.teacher" multiple filterable allow-create default-first-option placeholder="请选择">
                             <el-option
-                                v-for="item in $orgType"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled">
+                                v-for="(item,i) in teacherList"
+                                :key="item+i"
+                                :label="item"
+                                :value="item">
                             </el-option>
                         </el-select>
                     </el-form-item>
@@ -80,21 +74,19 @@
                         <el-select v-model="organizeForm.study" placeholder="请选择">
                             <el-option
                                 v-for="item in $orgType"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled">
+                                :key="item.study_phase"
+                                :label="item.study_phase_name"
+                                :value="item.study_phase">
                             </el-option>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="标签" prop="tabs">
                         <el-select v-model="organizeForm.tabs" multiple filterable allow-create default-first-option placeholder="请选择">
                             <el-option
-                                v-for="item in $orgType"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                :disabled="item.disabled">
+                                v-for="(item,i) in tabsList"
+                                :key="item+i"
+                                :label="item"
+                                :value="item">
                             </el-option>
                         </el-select>
                     </el-form-item>
@@ -122,21 +114,23 @@
                     </el-form-item>
                 </el-form>
                 <div v-if="stepIndex===1">
+                    <div class="common-title-box" style="margin-bottom:32px">
+                        <h3>{{itemsId?'编辑课节':'创建课节'}}</h3>
+                    </div>
                     <el-form :model="createCourseForm" :rules="rulesCreateCourse" ref="createCourseForm" label-width="100px" class="registerForm">
                         <el-form-item label="课节名称" prop="title">
-                            <el-input v-model="createCourseForm.title" placeholder="请输入课节名称"></el-input>
+                            <el-input v-model="createCourseForm.title" placeholder="请输入课节名称" @blur="handleTrim('createCourseForm','title')"></el-input>
                         </el-form-item>
                         <el-form-item label="教师" prop="teacher">
                             <el-radio-group v-model="createCourseForm.teacher">
-                                <el-radio label="1">张老师</el-radio>
-                                <el-radio label="2">李老师</el-radio>
+                                <el-radio :label="itemO" v-for="(itemO,indexO) in organizeForm.teacher" :key="indexO"></el-radio>
                             </el-radio-group>
                         </el-form-item>
-                        <el-form-item label="课程视频" prop="videoResource" v-if="organizeForm.courseType==='video'">
-                            <upload :datafileList="createCourseForm.videoResource" uploadType="mp4" :filleNumber="1" />
+                        <el-form-item label="课程视频" prop="videoResource" v-if="organizeForm.courseType===0">
+                            <upload :datafileList="createCourseForm.videoResource" :changeFillId="handleAvatarSuccess" :fileName="'courseVideo'" uploadType="mp4" :filleNumber="1" />
                         </el-form-item>
                         <el-form-item label="课程音频" prop="audioResource" v-else>
-                            <upload :datafileList="createCourseForm.audioResource" uploadType="mp3" :filleNumber="1" />
+                            <upload :datafileList="createCourseForm.audioResource" :changeFillId="handleAvatarSuccess" :fileName="'courseAudio'" uploadType="mp3" :filleNumber="1" />
                         </el-form-item>
                         <el-form-item label="课节信息" prop="intro">
                             <Editor
@@ -146,10 +140,10 @@
                             />
                         </el-form-item>
                         <el-form-item label="课节资源" prop="resource">
-                            <upload :datafileList="createCourseForm.resource" tips="支持上传图片、文档、音频、视频等资料,单个最大200MB,总共不超1GB,支持预览功能" />
+                            <upload :datafileList="createCourseForm.resource" :changeFillId="handleAvatarSuccess" :fileName="'courseResource'" :filleNumber="99" tips="支持上传图片、文档、音频、视频等资料,单个最大200MB,总共不超1GB,支持预览功能" />
                         </el-form-item>
                         <el-form-item>
-                            <el-button size="small" @click="onCancel('createCourseForm')">取消</el-button>
+                            <!-- <el-button size="small" @click="onCancel('createCourseForm')">取消</el-button> -->
                             <el-button type="primary" size="small" @click="handleSaveCourse('createCourseForm')"><svg-icon icon-class="save-line"></svg-icon> 保存</el-button>
                         </el-form-item>
                     </el-form>
@@ -199,6 +193,7 @@ import "tinymce/plugins/preview";
 import "tinymce/plugins/contextmenu";
 import "tinymce/plugins/textcolor";
 import "tinymce/plugins/colorpicker";
+import { getLogin } from "@/api/ajax";
 
 export default {
   //import引入的组件需要注入到对象中才能使用
@@ -265,12 +260,13 @@ export default {
         ],
         id:this.$route.query.id?this.$route.query.id:'',
         stepIndex:0, // 步骤索引
-        newPwdFlag: false, // 查看新密码
-        comfirmPwdFlag: false, // 查看确认密码
+        coverFlag: false,
         organizeForm:{
-            avatar: '',
+            cover_image_url: '',
+            cover_image_list: [],
+            cover_image_id: null,
             title: '',
-            courseType: 'video',
+            courseType: 0,
             orgName: '',
             teacher: [],
             validity:'',
@@ -285,7 +281,7 @@ export default {
                 { required: true, message: '请输入课程名称', trigger: 'blur' }
             ],
             orgName: [
-                { required: true, message: '请输入机构', trigger: 'change' }
+                { required: true, message: '请选择机构', trigger: 'change' }
             ],
             courseType: [
                 { required: true, message: '请选择类型', trigger: 'change' }
@@ -306,28 +302,14 @@ export default {
                 { required: true, validator: validatePrice, trigger: 'blur' },
             ],
         },
-        courseList:[
-            {
-                id:'123',
-                title:'第一节 新高考趋势分析',
-                index: '1'
-            },
-            {
-                id:'123',
-                title:'第二节 英语阅读宏观技能',
-                index: '2'
-            },
-            {
-                id:'123',
-                title:'第三节 英语阅读微观技能',
-                index: '3'
-            },
-        ],
+        courseList:[],
         createCourseForm:{
             title:'',
-            teacher:'1',
+            teacher:'',
             videoResource:[],
             audioResource:[],
+            file_id:'',
+            file_url:'',
             intro:'',
             resource:[]
         },
@@ -346,6 +328,11 @@ export default {
             ],
         },
         init: null,
+        orgList:[],
+        teacherList:['李老师','赵老师'],
+        tabsList:['中英双语','少儿必读'],
+        recordedId: null, // 录播课id
+        itemsId: null, // 课节id
     }
   },
   //计算属性 类似于data概念
@@ -363,21 +350,25 @@ export default {
         if(type=='-'){
             if(this.stepIndex>0) this.stepIndex--
         }else{
-            if(this.stepIndex<2) this.stepIndex++
+            if(this.stepIndex===0){
+                this.$refs['organizeForm'].validate((valid) => {
+                    if (valid) {
+                        this.handleAddCourse()
+                    } else {
+                        return false;
+                    }
+                });
+            }else if(this.stepIndex===1){
+                this.stepIndex++
+            }
+            
         }
     },
-    // 级联选择器
-    handleCity(value){
-        console.log(value)
-    },
-    changeIcon(flag){
-        this[flag] = !this[flag]
-    },
     // 返回列表
     handleback(){
         localStorage.setItem("pageNumber",1)
         this.$router.push({
-            path: "/live_course",
+            path: "/recorded_course",
             query: {
                 
             },
@@ -385,37 +376,222 @@ export default {
     },
     //继续创建
     handleCreate(){
-        this.$router.replace('/createLive')
+        this.$router.replace({
+            path: "/createRecorded",
+            query: {
+                
+            },
+        })
         location.reload()
     },
     handleChange(value) {
         // console.log(value)
     },
-    handleAvatarSuccess(res, file) {
-        this.organizeForm.avatar = URL.createObjectURL(file.raw);
-    },
-    beforeAvatarUpload(file) {
-        const isLt2M = file.size / 1024 / 1024 < 2;
-        if (!isLt2M) {
-            this.$message.error('上传头像图片大小不能超过 2MB!');
+    handleAvatarSuccess(fileList,name) {
+        if(name==='cover'){
+            this.organizeForm.cover_image_list = fileList
+            this.organizeForm.cover_image_id = fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+            this.organizeForm.cover_image_url = fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
+        }else if(name==='courseVideo'){
+            this.createCourseForm.videoResource = fileList
+            this.createCourseForm.file_id = fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+            this.createCourseForm.file_url = fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
+        }else if(name==='courseAudio'){
+            this.createCourseForm.audioResource = fileList
+            this.createCourseForm.file_id = fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+            this.createCourseForm.file_url = fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
+        }else if(name==='courseResource'){
+            this.createCourseForm.resource = fileList
         }
-        return isLt2M;
     },
     // 取消 恢复到修改前状态
     onCancel(formName){
         this.$refs[formName].resetFields();
     },
+    emptyQustion(formName){
+        this.itemsId = null
+        this.$refs[formName].resetFields();
+    },
     // 保存课节
     handleSaveCourse(formName){
         this.$refs[formName].validate((valid) => {
           if (valid) {
-            alert('submit!');
+            let MethodName = "/CourseServer/Manager/LBCourseManager/AddCSItemToLBCourse";
+            let form = this.createCourseForm
+            let resource_file_id_list = []
+            form.resource.forEach(item => {
+                if(item.response&&item.response.file_info_list&&item.response.file_info_list[0]){
+                    resource_file_id_list.push(item.response.file_info_list[0].file_id)
+                }
+                
+            });
+            let data = {
+                name: form.title,
+                teacher_name: form.teacher,
+                file_id: form.file_id,
+                intro: form.intro,
+                resource_file_id_list: resource_file_id_list
+            }
+            if(this.itemsId){
+                MethodName = "/CourseServer/Manager/LBCourseManager/UpdateLBCourseCSItem";
+                data.id = this.itemsId
+            }else{
+                data.course_id = this.id?this.id:this.recordedId
+            }
+            getLogin(MethodName, data)
+            .then((res) => {
+                if(res.status===1){
+                    this.$message({
+                        type: 'success',
+                        message: '保存成功!'
+                    });
+                    if(res.id){
+                        this.itemsId = res.id
+                    }
+                    this.getCourseInfo()
+                }
+            })
+            .catch(() => {
+                this.loading = false
+            });
           } else {
-            console.log('error submit!!');
             return false;
           }
         });
-    }
+    },
+    Imagemouseover(item,flag) {
+      this[item] = flag
+    },
+    handleDeleteFile(item,i) {
+      this.$confirm("确定删除吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        if(item==='cover'){
+            this.organizeForm.cover_image_list.splice(i, 1);
+            this.organizeForm.cover_image_url = ''
+            this.organizeForm.cover_image_id = null
+        }
+      });
+    },
+    // 查询机构列表
+    getOrgList(){
+        let MethodName = "/OrgServer/Manager/PageQuery/PageQueryOrgList";
+        let data = {
+            name: '',
+            type: -1,
+            status: 1,
+            area_id: '',
+            creator_id: '',
+            page_capacity:50,
+            cur_page:1
+        }
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+               this.orgList = res.org_list
+            }
+        })
+        .catch(() => {
+        });
+    },
+    // 创建录播课
+    handleAddCourse(){
+        let MethodName = "/CourseServer/Manager/LBCourseManager/AddLBCourse";
+        let form = this.organizeForm
+        let data = {
+            cover_image_id: form.cover_image_id,
+            name: form.title,
+            study_phase: form.study,
+            type: form.courseType,
+            org_id: form.orgName,
+            teacher_name_list:form.teacher,
+            label_name_list: form.tabs,
+            effective_month_count: form.validity*1,
+            price: form.price,
+            price_discount: form.currentPrice,
+            intro: form.intro
+        }
+        if(this.id){
+            MethodName = "/CourseServer/Manager/LBCourseManager/UpdateLBCourse"
+            data.id = this.id
+        }
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+               this.recordedId = res.id
+               this.stepIndex++
+            }
+        })
+        .catch(() => {
+            this.loading = false
+        });
+    },
+    // 去掉前后空格
+    handleTrim(form,fild){
+        this[form][fild] = this[form][fild].trim()
+    },
+    // 获取课程信息
+    getCourseInfo(){
+        let MethodName = "/CourseServer/Manager/LBCourseManager/GetLBCourseInfo";
+        let data = {
+            id: this.id,
+            is_contain_cs_item:'true'
+        }
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+                this.courseList = res.cs_item_list
+                let form = this.organizeForm
+                form.cover_image_id = res.lb_course.cover_image_id
+                form.cover_image_url = res.lb_course.cover_image_url
+                form.cover_image_list.push[{
+                    id: res.lb_course.cover_image_id
+                }]
+                form.title = res.lb_course.name
+                form.study = res.lb_course.study_phase
+                form.courseType = res.lb_course.type
+                form.orgName = res.lb_course.org_id
+                form.teacher = res.lb_course.teacher_name_list
+                form.tabs = res.lb_course.label_name_list
+                form.validity = res.lb_course.effective_month_count
+                form.price = res.lb_course.price
+                form.currentPrice = res.lb_course.price_discount
+                form.intro = res.lb_course.intro
+            }
+        })
+        .catch(() => {
+            this.loading = false
+        });
+    },
+    // 获取课节信息
+    getItemInfo(id){
+        this.itemsId = id
+        let MethodName = "/CourseServer/Manager/LBCourseManager/GetLBCourseCSItemInfo";
+        let data = {
+            id: id
+        }
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+                let form = this.createCourseForm
+                form.title = res.lb_course_cs_item.name
+                form.teacher = res.lb_course_cs_item.teacher_name
+                form.file_id = res.lb_course_cs_item.file_id
+                form.file_url = res.lb_course_cs_item.file_url
+                form.audioResource = [{
+                    id:res.lb_course_cs_item.file_id,
+                    name:'123'
+                }]
+                form.intro = res.lb_course_cs_item.intro
+                form.resource = res.resource_file_list
+            }
+        })
+        .catch(() => {
+            this.loading = false
+        });
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
@@ -426,6 +602,7 @@ export default {
     }
     if(this.id){
         obj.text = '编辑课程'
+        this.getCourseInfo()
     }
     this.breadcrumbList.push(obj)
     let lang_url = "";
@@ -451,6 +628,7 @@ export default {
             "preview bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat",
         branding: false,
     }; //富文本初始化
+    this.getOrgList()
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
@@ -498,6 +676,25 @@ export default {
         line-height: 20px;
     }
 }
+.cover-box{
+    position: relative;
+    width: 200px;
+    height: 200px;
+    p{
+        position: absolute;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        height: 200px;
+        line-height: 200px;
+        font-size: 20px;
+        text-align: center;
+        cursor: pointer;
+        background: rgba(0, 0, 0, 0.3);
+        color: #F2F3F5;
+        margin: 0;
+    }
+}
 </style>
 
 <style lang="scss">

+ 109 - 301
src/views/content_manage/course_manage/RecordedCourse.vue

@@ -18,14 +18,14 @@
                         <el-input
                             placeholder="输入搜索内容"
                             v-model="searchInput">
-                            <i slot="suffix" class="el-input__icon el-icon-search" @click="getList" style="cursor: pointer;"></i>
+                            <i slot="suffix" class="el-input__icon el-icon-search" @click="getList(1)" style="cursor: pointer;"></i>
                         </el-input>
                     </div>
                     <div class="search-item">
                         <label>状态</label>
                         <el-select v-model="searchStatus" @change="getList" placeholder="请选择">
                             <el-option
-                                v-for="item in searchStatusList"
+                                v-for="item in $checkStatusList"
                                 :key="item.value"
                                 :label="item.label"
                                 :value="item.value">
@@ -36,10 +36,10 @@
                         <label>学段</label>
                         <el-select v-model="searchStudy" @change="getList" placeholder="请选择">
                             <el-option
-                                v-for="item in studyList"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value">
+                                v-for="item in $orgTypeAll"
+                                :key="item.study_phase"
+                                :label="item.study_phase_name"
+                                :value="item.study_phase">
                             </el-option>
                         </el-select>
                     </div>
@@ -67,30 +67,22 @@
                         width="64">
                     </el-table-column>
                     <el-table-column
-                        prop="title"
+                        prop="name"
                         label="名称"
                         sortable
                         min-width="128">
                     </el-table-column>
                     <el-table-column
-                        prop="teacher"
+                        prop="teacher_name_desc"
                         label="教师"
                         width="80"
                         sortable>
-                        <template slot-scope="scope">
-                            <p class="teacher-list">
-                                {{formatterTracher(scope.row)}}
-                            </p>
-                        </template>
                     </el-table-column>
                     <el-table-column
-                        prop="study"
+                        prop="study_phase_name"
                         label="学段"
                         width="80"
                         sortable>
-                        <template slot-scope="scope">
-                            {{formatterStudy(scope.row)}}
-                        </template>
                     </el-table-column>
                     <el-table-column
                         prop="type"
@@ -98,9 +90,9 @@
                         width="80" 
                         sortable>
                         <template slot-scope="scope">
-                            <svg-icon icon-class="music" v-if="scope.row.type==='0'"></svg-icon>
-                            <svg-icon icon-class="video-camera" v-if="scope.row.type==='1'"></svg-icon>
-                            {{formatterType(scope.row)}}
+                            <svg-icon icon-class="video-camera" v-if="scope.row.type===0"></svg-icon>
+                            <svg-icon icon-class="music" v-if="scope.row.type===1"></svg-icon>
+                            {{scope.row.type_name}}
                         </template>
                     </el-table-column>
                     <el-table-column
@@ -109,32 +101,32 @@
                         width="154" 
                         sortable>
                         <template slot-scope="scope">
-                            <span class="currectPrice">¥{{scope.row.price | cutMoneyFiter}}</span>
-                            <span class="oldPrice">(¥{{scope.row.oldPrice | cutMoneyFiter}})</span>
+                            <span class="currectPrice">¥{{scope.row.price_discount | cutMoneyFiter}}</span>
+                            <span class="oldPrice">(¥{{scope.row.price | cutMoneyFiter}})</span>
                         </template>
                     </el-table-column>
                     <el-table-column
-                        prop="status"
+                        prop="status_name"
                         label="状态"
                         width="104" >
                         <template slot-scope="scope">
                             <div class="status-box">
-                                <span :style="{background:statusList[scope.row.status].bg}"></span>
-                                <b :style="{color:statusList[scope.row.status].color}">{{statusList[scope.row.status].text}}</b>
+                                <span :style="{background:$checkStatusColorList[scope.row.status].bg}"></span>
+                                <b :style="{color:$checkStatusColorList[scope.row.status].color}">{{$checkStatusColorList[scope.row.status].text}}</b>
                             </div>
                         </template>
                     </el-table-column>
                     <el-table-column
-                        prop="creator"
+                        prop="creator_name"
                         label="创建人"
-                        min-width="80"
+                        min-width="90"
                         sortable>
                     </el-table-column>
                     <el-table-column
-                        prop="data"
+                        prop="create_time"
                         label="创建时间"
                         sortable
-                        width="160">
+                        width="165">
                     </el-table-column>
                     <el-table-column
                         fixed="right"
@@ -142,13 +134,6 @@
                         width="220">
                         <template slot-scope="scope">
                             <el-button
-                                @click.native.prevent="handleLookInfo(scope.row)"
-                                type="text"
-                                size="small"
-                                class="primary-btn">
-                                信息
-                            </el-button>
-                            <el-button
                                 @click.native.prevent="handleEdit(scope.row)"
                                 type="text"
                                 size="small"
@@ -156,11 +141,11 @@
                                 编辑
                             </el-button>
                             <el-button
-                                @click.native.prevent="handleUp(scope.row, scope.$index)"
+                                @click.native.prevent="handleCheck(scope.row, scope.$index)"
                                 type="text"
                                 size="small"
                                 class="primary-btn"
-                                v-if="scope.row.status==='2'||scope.row.status==='3'">
+                                v-if="scope.row.status===0||scope.row.status===3">
                                 审核
                             </el-button>
                             <el-button
@@ -168,7 +153,7 @@
                                 type="text"
                                 size="small"
                                 class="primary-btn"
-                                v-if="scope.row.status==='0'">
+                                v-if="scope.row.status===1">
                                 上架
                             </el-button>
                             <el-button
@@ -176,7 +161,7 @@
                                 type="text"
                                 size="small"
                                 class="red-btn"
-                                v-else-if="scope.row.status==='1'">
+                                v-else-if="scope.row.status===2">
                                 下架
                             </el-button>
                             <el-button
@@ -212,6 +197,7 @@ import Header from "../../../components/Header.vue";
 import NavMenu from "../../../components/NavMenu.vue"
 import Breadcrumb from '../../../components/Breadcrumb.vue';
 import { cutMoneyFiter } from '@/utils/defined';
+import { getLogin } from "@/api/ajax";
 
 export default {
   //import引入的组件需要注入到对象中才能使用
@@ -249,211 +235,24 @@ export default {
             }
         ],
         searchInput:'',
-        searchType: '',
-        searchStatus: '',
-        searchStudy: '',
-        searchStatusList:[
-            {
-                value:'',
-                label:'全部'
-            },
-            {
-                value:'1',
-                label:'已上架'
-            },
-            {
-                value:'0',
-                label:'未上架'
-            },
-            {
-                value:'2',
-                label:'待审核'
-            },
-            {
-                value:'3',
-                label:'被驳回'
-            }
-        ],
+        searchType: -1,
+        searchStatus: -1,
+        searchStudy: -1,
         typeList:[
             {
-                value:'',
+                value:-1,
                 label:'全部'
             },
             {
-                value:'0',
+                value:0,
                 label:'视频'
             },
             {
-                value:'1',
+                value:1,
                 label:'音频'
             }
         ],
-        studyList:[
-            {
-                value:'',
-                label:'全部'
-            },
-            {
-                value:'0',
-                label:'初一'
-            },
-            {
-                value:'1',
-                label:'初二'
-            },
-            {
-                value:'2',
-                label:'初三'
-            },
-            {
-                value:'3',
-                label:'高一'
-            }
-        ],
-        statusList:{
-            '1':{
-                text:'已上架',
-                bg:'#00B42A',
-                color:''
-            },
-            '0':{
-                text:'未上架',
-                bg:'#165DFF',
-                color:''
-            },
-            '2':{
-                text:'待审核',
-                bg:'#C9CDD4',
-                color:''
-            },
-            '3':{
-                text:'被驳回',
-                bg:'#F53F3F',
-                color:'#F53F3F'
-            }
-        },
-        tableData:[
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'1',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'1',
-                type:'1',
-                price:'12',
-                oldPrice:'16',
-                status:'0',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'0',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'2',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'3',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'1',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'1',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'2',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'1',
-                creator:'张三',
-                data:'2018-02-03'
-            },
-            {
-                id:'1',
-                title:'高考特辑',
-                teacher:['张老师','李老师'],
-                study:'2',
-                type:'0',
-                price:'12',
-                oldPrice:'16',
-                status:'3',
-                creator:'张三',
-                data:'2018-02-03'
-            }
-        ],
+        tableData:[],
         pageSize: window.localStorage.getItem('pageSize')?Number(window.localStorage.getItem('pageSize')):10, 
         pageNumber: window.localStorage.getItem('pageNumber')?Number(window.localStorage.getItem('pageNumber')):1,
         tableHeight: "" // 表格高度
@@ -468,45 +267,29 @@ export default {
   //方法集合
   methods: {
     // 查询列表
-    getList(){
-    },
-    // 处理类型
-    formatterType(row){
-        let typeCn = ''
-        let list = this.typeList
-        if(row.type){
-            for(let i=0;i<list.length;i++){
-                if(row.type===list[i].value){
-                    typeCn = list[i].label
-                }
-            }
-        }else{
-            typeCn = '未知'
+    getList(page){
+        if(page){
+            this.pageNumber = page
         }
-        return typeCn
-    },
-    // 处理老师
-    formatterTracher(row){
-        let teacher = ''
-        if(row.teacher){
-           teacher = row.teacher.join() 
+        let MethodName = "/CourseServer/Manager/PageQuery/PageQueryLBCourseList";
+        let data = {
+            search_content: this.searchInput.trim(),
+            study_phase: this.searchStudy,
+            status: this.searchStatus,
+            type: this.searchType,
+            page_capacity:this.pageSize,
+            cur_page:this.pageNumber
         }
-        return teacher
-    },
-    // 处理学段
-    formatterStudy(row){
-        let studyCn = ''
-        let list = this.studyList
-        if(row.study){
-            for(let i=0;i<list.length;i++){
-                if(row.type===list[i].value){
-                    studyCn = list[i].label
-                }
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+               this.tableData = res.lb_course_list
+               this.total_count = res.total_count
             }
-        }else{
-            studyCn = '未知'
-        }
-        return studyCn
+        })
+        .catch(() => {
+            this.loading = false
+        });
     },
     // 创建机构或者编辑信息
     handleEdit(row){
@@ -522,36 +305,25 @@ export default {
             },
         });
     },
-    // 信息
-    handleLookInfo(row){
-        window.localStorage.setItem('pageSize',this.pageSize)
-        window.localStorage.setItem('pageNumber',this.pageNumber)
-        this.$router.push({
-            path: "/peopleList",
-            query: {
-                id: row?row.id:''
-            },
-        });
-    },
     // 停用 启用
     handleUp(row, index) {
-      let Mname = "book-book_manager-SetPublishStatusForBook";
+      let Mname = "/CourseServer/Manager/LBCourseManager/ShelveLBCourse";
       let updataData = JSON.parse(JSON.stringify(row));
       let data = {
-        book_id: row.id
+        id: row.id
       };
-      if (row.publish_status == 0) {
+      if (row.status === 1) {
         // 下架状态
-        data.publish_status = 1;
-        updataData.publish_status = 1;
-      } else if (row.publish_status == 1) {
-        data.publish_status = 0;
-        updataData.publish_status = 0;
+        data.is_pass = "true";
+        updataData.status = 2;
+      } else if (row.status === 2) {
+        data.is_pass = "false";
+        updataData.status = 1;
       }
-    //   getContent(Mname, data).then(res => {
-    //     this.$message.success("操作成功");
-    //     this.$set(this.tableData, index, updataData);
-    //   });
+      getLogin(Mname, data).then(res => {
+        this.$message.success("操作成功");
+        this.$set(this.tableData, index, updataData);
+      });
     },
     // 删除
     handleDelete(row){
@@ -560,22 +332,57 @@ export default {
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          this.$message({
-            type: 'success',
-            message: '删除成功!'
-          });
+            let Mname = "/CourseServer/Manager/LBCourseManager/DeleteLBCourse";
+            let data = {
+                id: row.id,
+                is_force_delete: "true"
+            };
+            getLogin(Mname, data).then(res => {
+                this.$message({
+                    type: 'success',
+                    message: '删除成功!'
+                });
+                this.getList(1)
+            });
         }).catch(() => {
-          this.$message({
-            type: 'info',
-            message: '已取消删除'
-          });          
+               
         });
     },
     handleSizeChange(val) {
         this.pageSize = val
+        this.pageNumber = 1
+        this.getList()
     },
     handleCurrentChange(val) {
         this.pageNumber = val
+        this.getList()
+    },
+    // 审核
+    handleCheck(row, index){
+        let Mname = "/CourseServer/Manager/LBCourseManager/AuditLBCourse";
+        let updataData = JSON.parse(JSON.stringify(row));
+        let data = {
+            id: row.id
+        };
+        this.$confirm('审核', '提示', {
+          confirmButtonText: '审核通过',
+          cancelButtonText: '驳回',
+          type: 'warning'
+        }).then(() => {
+            data.is_pass = "true";
+            updataData.status = 1;
+            getLogin(Mname, data).then(res => {
+                this.$message.success("操作成功");
+                this.$set(this.tableData, index, updataData);
+            });
+        }).catch(() => {
+            data.is_pass = "false";
+            updataData.status = 3;
+            getLogin(Mname, data).then(res => {
+                this.$message.success("操作成功");
+                this.$set(this.tableData, index, updataData);
+            });      
+        });
     },
     //计算table高度(动态设置table高度)
     getTableHeight() {
@@ -591,6 +398,7 @@ export default {
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
     this.getTableHeight();
+    this.getList()
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {

+ 52 - 13
src/views/organize_manage/CreateOrganize.vue

@@ -28,30 +28,33 @@
             <div class="create-bottom">
                 <el-form :model="organizeForm" :rules="rulesOrganize" ref="organizeForm" label-width="100px" class="registerForm">
                     <template v-if="stepIndex===0">
-                        <el-form-item label="机构名称" prop="orgName">
-                            <el-input v-model="organizeForm.orgName" placeholder="请输入机构名称"></el-input>
+                        <el-form-item label="机构名称" prop="name">
+                            <el-input v-model="organizeForm.name" placeholder="请输入机构名称"></el-input>
                         </el-form-item>
-                        <el-form-item label="机构代码" prop="orgCode">
-                            <el-input v-model="organizeForm.orgCode" placeholder="请输入机构代码"></el-input>
+                        <el-form-item label="机构代码" prop="sn">
+                            <el-input v-model="organizeForm.sn" placeholder="请输入机构代码"></el-input>
                             <p class="tips">4-8位英文或数字</p>
                         </el-form-item>
                         <el-form-item label="机构类型" prop="orgType">
                             <el-select v-model="organizeForm.orgType" placeholder="请选择">
                                 <el-option
                                     v-for="item in $orgType"
-                                    :key="item.value"
-                                    :label="item.label"
-                                    :value="item.value"
-                                    :disabled="item.disabled">
+                                    :key="item.study_phase"
+                                    :label="item.study_phase_name"
+                                    :value="item.study_phase">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item label="所在地区" prop="selectedOptions">
                             <el-cascader
                                 size="medium"
-                                :options="provinceAndCityData"
+                                :options="province_list"
+                                :props="props"
                                 v-model="organizeForm.selectedOptions"
                                 @change="handleCity">
+                                <template slot-scope="{ data }">
+                                    <span>{{ data.name }}</span>
+                                </template>
                             </el-cascader>
                         </el-form-item>
                         <el-form-item label="人员上限" prop="personalCeil">
@@ -121,6 +124,7 @@
 import Header from "../../components/Header.vue";
 import NavMenu from "../../components/NavMenu.vue"
 import Breadcrumb from '../../components/Breadcrumb.vue';
+import { getLogin } from "@/api/ajax";
 import {
   provinceAndCityData
 } from "element-china-area-data";
@@ -214,8 +218,8 @@ export default {
         newPwdFlag: false, // 查看新密码
         comfirmPwdFlag: false, // 查看确认密码
         organizeForm:{
-            orgName: '',
-            orgCode: '',
+            name: '',
+            sn: '',
             orgType: '',
             selectedOptions: [],
             personalCeil: 50,
@@ -227,10 +231,10 @@ export default {
             confirmPwd:'', // 确认密码
         },
         rulesOrganize:{
-            orgName:[
+            name:[
                 { required: true, message: '请输入机构名称', trigger: 'blur' }
             ],
-            orgCode: [
+            sn: [
                 { required: true, validator: validateCode, trigger: 'blur' },
                 { min: 4, max: 8, message: '请输入 4-8 位英文或数字', trigger:'change' }
             ],
@@ -263,6 +267,24 @@ export default {
             email:[
                 { required: true, validator: validateEmail, trigger: 'blur' },
             ]
+        },
+        province_list:[],
+        props: {
+          lazy: true,
+          lazyLoad (node, resolve) {
+            let MethodName = "/OrgServer/DictManager/GetCityList";
+            let list = []
+            getLogin(MethodName, {province_id:node.data.id})
+            .then((res) => {
+                if(res.status===1){
+                    res.city_list.forEach(item=>{
+                        item.leaf = true
+                    })
+                    list = res.city_list
+                    resolve(list);
+                }
+            })
+          }
         }
     }
   },
@@ -308,6 +330,22 @@ export default {
     },
     handleChange(value) {
         // console.log(value);
+    },
+    // 获取省份列表
+    getProvinceList(){
+        let MethodName = "/OrgServer/DictManager/GetProvinceList";
+        getLogin(MethodName, {})
+        .then((res) => {
+            if(res.status===1){
+               res.province_list.forEach(item => {
+                    item.children = []
+               });
+               this.province_list = res.province_list
+            }
+        })
+        .catch(() => {
+            this.loading = false
+        });
     }
   },
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -321,6 +359,7 @@ export default {
         obj.text = '编辑机构'
     }
     this.breadcrumbList.push(obj)
+    this.getProvinceList()
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {

+ 60 - 112
src/views/organize_manage/index.vue

@@ -25,10 +25,10 @@
                         <label>机构类型</label>
                         <el-select v-model="searchType" @change="getList" placeholder="请选择">
                             <el-option
-                                v-for="item in $orgType"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value">
+                                v-for="item in $orgTypeAll"
+                                :key="item.study_phase"
+                                :label="item.study_phase_name"
+                                :value="item.study_phase">
                             </el-option>
                         </el-select>
                     </div>
@@ -76,22 +76,19 @@
                         min-width="268">
                     </el-table-column>
                     <el-table-column
-                        prop="type"
+                        prop="type_name"
                         label="机构类型"
                         width="112">
-                        <template slot-scope="scope">
-                            {{formatterType(scope.row)}}
-                        </template>
                     </el-table-column>
                     <el-table-column
-                        prop="members"
+                        prop="person_count"
                         label="成员数"
                         width="85">
                     </el-table-column>
                     <el-table-column
                         prop="status"
                         label="状态"
-                        width="112" >
+                        width="80" >
                         <template slot-scope="scope">
                             <div class="status-box">
                                 <span :style="{background:statusList[scope.row.status].bg}"></span>
@@ -100,31 +97,31 @@
                         </template>
                     </el-table-column>
                     <el-table-column
-                        prop="areaCn"
+                        prop="city_name"
                         label="所在地区"
-                        width="112" >
+                        width="132" >
                     </el-table-column>
                     <el-table-column
-                        prop="creator"
+                        prop="creator_name"
                         label="创建人"
                         min-width="88">
                     </el-table-column>
                     <el-table-column
-                        prop="admin"
+                        prop="manager_name"
                         label="管理员"
                         width="88">
                     </el-table-column>
                     <el-table-column
-                        prop="createData"
+                        prop="create_time"
                         label="创建时间"
                         sortable
-                        width="160">
+                        width="165">
                     </el-table-column>
                     <el-table-column
-                        prop="expirationDate"
+                        prop="effective_date_end"
                         label="到期时间"
                         sortable
-                        width="160">
+                        width="165">
                     </el-table-column>
                     <el-table-column
                         fixed="right"
@@ -150,7 +147,7 @@
                                 type="text"
                                 size="small"
                                 class="primary-btn"
-                                v-if="scope.row.status==='0'&&scope.row.type!=='0'">
+                                v-if="scope.row.status===0">
                                 开启
                             </el-button>
                             <el-button
@@ -158,7 +155,7 @@
                                 type="text"
                                 size="small"
                                 class="red-btn"
-                                v-else-if="scope.row.status==='1'&&scope.row.type!=='0'">
+                                v-else-if="scope.row.status===1">
                                 停用
                             </el-button>
                         </template>
@@ -186,6 +183,7 @@
 import Header from "../../components/Header.vue";
 import NavMenu from "../../components/NavMenu.vue"
 import Breadcrumb from '../../components/Breadcrumb.vue';
+import { getLogin } from "@/api/ajax";
 import {
   provinceAndCityData
 } from "element-china-area-data";
@@ -212,43 +210,21 @@ export default {
             }
         ],
         searchInput: '',
-        searchType: '',
-        searchStatus: '',
+        searchType: -1,
+        searchStatus: -1,
         searchCreator: '', 
-        searchArea:[],
-        typeList:[
-            {
-                value:'',
-                label:'全部'
-            },
-            {
-                value:'0',
-                label:'小学'
-            },
-            {
-                value:'1',
-                label:'初中'
-            },
-            {
-                value:'2',
-                label:'高中'
-            },
-            {
-                value:'3',
-                label:'大学'
-            }
-        ],
+        searchArea:"",
         searchStatusList:[
             {
-                value:'',
+                value:-1,
                 label:'全部'
             },
             {
-                value:'1',
+                value:1,
                 label:'正常'
             },
             {
-                value:'0',
+                value:0,
                 label:'停用'
             }
         ],
@@ -278,44 +254,7 @@ export default {
                 label:'李四'
             }
         ],
-        tableData:[
-            {
-                id:'1',
-                name:'青岛科技大学',
-                type:'0',
-                members:40,
-                status:'1',
-                areaCn:'河北 / 石家庄',
-                creator:'何家洪',
-                admin:'周志伟',
-                createData:'2018-02-03',
-                expirationDate:'2018-02-03'
-            },
-            {
-                id:'2',
-                name:'青岛科技大学',
-                type:'1',
-                members:40,
-                status:'0',
-                areaCn:'河北 / 石家庄',
-                creator:'何家洪',
-                admin:'周志伟',
-                createData:'2018-02-03',
-                expirationDate:'2018-02-03'
-            },
-            {
-                id:'3',
-                name:'青岛科技大学',
-                type:'1',
-                members:40,
-                status:'1',
-                areaCn:'河北 / 石家庄',
-                creator:'何家洪',
-                admin:'周志伟',
-                createData:'2018-02-03',
-                expirationDate:'2018-02-03'
-            },
-        ],
+        tableData:[],
         pageSize: window.localStorage.getItem('pageSize')?Number(window.localStorage.getItem('pageSize')):10, 
         pageNumber: window.localStorage.getItem('pageNumber')?Number(window.localStorage.getItem('pageNumber')):1,
         tableHeight: "" // 表格高度
@@ -331,21 +270,26 @@ export default {
   methods: {
     // 查询列表
     getList(){
-    },
-    // 处理账户类型
-    formatterType(row){
-        let typeCn = ''
-        let list = this.typeList
-        if(row.type){
-            for(let i=0;i<list.length;i++){
-                if(row.type===list[i].value){
-                    typeCn = list[i].label
-                }
-            }
-        }else{
-            typeCn = '未知'
+        let MethodName = "/OrgServer/Manager/PageQuery/PageQueryOrgList";
+        let data = {
+            name: this.searchInput.trim(),
+            type: this.searchType,
+            status: this.searchStatus,
+            area_id: this.searchArea,
+            creator_id: this.searchCreator,
+            page_capacity:this.pageSize,
+            cur_page:this.pageNumber
         }
-        return typeCn
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+               this.tableData = res.org_list
+               this.total_count = res.total_count
+            }
+        })
+        .catch(() => {
+            this.loading = false
+        });
     },
     // 创建机构或者编辑信息
     handleEdit(row){
@@ -374,29 +318,32 @@ export default {
     },
     // 停用 启用
     handleUp(row, index) {
-      let Mname = "book-book_manager-SetPublishStatusForBook";
+      let Mname = "/OrgServer/Manager/OrgManager/EnableOrg";
       let updataData = JSON.parse(JSON.stringify(row));
       let data = {
-        book_id: row.id
+        id: row.id
       };
-      if (row.publish_status == 0) {
+      if (row.status === 0) {
         // 下架状态
-        data.publish_status = 1;
-        updataData.publish_status = 1;
-      } else if (row.publish_status == 1) {
-        data.publish_status = 0;
-        updataData.publish_status = 0;
+        data.is_enable = "true";
+        updataData.status = 1;
+      } else if (row.status === 1) {
+        data.is_enable = "false";
+        updataData.status = 0;
       }
-    //   getContent(Mname, data).then(res => {
-    //     this.$message.success("操作成功");
-    //     this.$set(this.tableData, index, updataData);
-    //   });
+      getLogin(Mname, data).then(res => {
+        this.$message.success("操作成功");
+        this.$set(this.tableData, index, updataData);
+      });
     },
     handleSizeChange(val) {
         this.pageSize = val
+        this.pageNumber = 1
+        this.getList()
     },
     handleCurrentChange(val) {
         this.pageNumber = val
+        this.getList()
     },
     //计算table高度(动态设置table高度)
     getTableHeight() {
@@ -412,6 +359,7 @@ export default {
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
     this.getTableHeight();
+    this.getList()
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {

+ 18 - 15
src/views/people_manage/index.vue

@@ -119,7 +119,7 @@
                                 type="text"
                                 size="small"
                                 class="primary-btn"
-                                v-if="scope.row.status===0&&scope.row.account_type!==1">
+                                v-if="scope.row.status===0">
                                 开启
                             </el-button>
                             <el-button
@@ -127,7 +127,7 @@
                                 type="text"
                                 size="small"
                                 class="red-btn"
-                                v-else-if="scope.row.status==='1'&&scope.row.type!=='0'">
+                                v-else-if="scope.row.status===1">
                                 停用
                             </el-button>
                         </template>
@@ -284,29 +284,32 @@ export default {
     },
     // 停用 启用
     handleUp(row, index) {
-      let Mname = "book-book_manager-SetPublishStatusForBook";
+      let Mname = "/OrgServer/Manager/SysUserManager/EnableSysUser";
       let updataData = JSON.parse(JSON.stringify(row));
       let data = {
-        book_id: row.id
+        id: row.id
       };
-      if (row.publish_status == 0) {
+      if (row.status === 0) {
         // 下架状态
-        data.publish_status = 1;
-        updataData.publish_status = 1;
-      } else if (row.publish_status == 1) {
-        data.publish_status = 0;
-        updataData.publish_status = 0;
+        data.is_enable = "true";
+        updataData.status = 1;
+      } else if (row.status === 1) {
+        data.is_enable = "false";
+        updataData.status = 0;
       }
-    //   getContent(Mname, data).then(res => {
-    //     this.$message.success("操作成功");
-    //     this.$set(this.tableData, index, updataData);
-    //   });
+      getLogin(Mname, data).then(res => {
+        this.$message.success("操作成功");
+        this.$set(this.tableData, index, updataData);
+      });
     },
     handleSizeChange(val) {
         this.pageSize = val
+        this.pageNumber = 1
+        this.getList()
     },
     handleCurrentChange(val) {
         this.pageNumber = val
+        this.getList()
     },
     //计算table高度(动态设置table高度)
     getTableHeight() {
@@ -331,7 +334,7 @@ export default {
             this.loading = false
         });
     },
-    // 用户状态列表
+    // 用户类型列表
     getUserAccountTypeList(){
         let MethodName = "/OrgServer/DictManager/GetSysUserAccountTypeList";
         getLogin(MethodName, {})