Ver código fonte

审核任务

dusenyao 2 meses atrás
pai
commit
74c0d65783

+ 5 - 0
src/api/list.js

@@ -30,3 +30,8 @@ export function queryUserList(data) {
 export function queryOrgUserList(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=page_query-PageQueryMyOrgUserList_OrgManager`, data);
 }
+
+// 分页查询我的项目列表(审核人)
+export function PageQueryMyProjectList_Auditor(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=page_query-PageQueryMyProjectList_Auditor`, data);
+}

+ 50 - 0
src/api/project.js

@@ -97,7 +97,57 @@ export function SetMainAuditor(data) {
 /**
  * @description 得到章节节点审校人列表
  * @param {object} data
+ * @param {string} data.book_chapter_node_id 教材章节结构中的节点ID(包含章节或课件)
  */
 export function GetChapterNodeAuditorList(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=book_audit_manager-GetChapterNodeAuditorList`, data);
 }
+
+/**
+ * @description 得到我的教材课件任务列表(审校任务)
+ * @param {object} data
+ * @param {string} data.project_id 项目ID
+ */
+export function GetMyBookCoursewareTaskList_Audit(data) {
+  return http.post(
+    `${process.env.VUE_APP_EepServer}?MethodName=project_task_manager-GetMyBookCoursewareTaskList_Audit`,
+    data,
+  );
+}
+
+/**
+ * @description 得到我的教材课件任务列表(编辑任务)
+ * @param {object} data
+ * @param {string} data.project_id 项目ID
+ */
+export function GetMyBookCoursewareTaskList_Edit(data) {
+  return http.post(
+    `${process.env.VUE_APP_EepServer}?MethodName=project_task_manager-GetMyBookCoursewareTaskList_Edit`,
+    data,
+  );
+}
+
+/**
+ * @description 提交教材课件到审校流程
+ * @param {object} data
+ * @param {string} data.id 课件ID
+ */
+export function SubmitBookCoursewareToAuditFlow(data) {
+  return http.post(
+    `${process.env.VUE_APP_EepServer}?MethodName=project_task_manager-SubmitBookCoursewareToAuditFlow`,
+    data,
+  );
+}
+
+/**
+ * @description 完成教材课件当前流程节点的审校
+ * @param {object} data
+ * @param {string} data.id 课件ID
+ * @param {'true' | 'false'} data.is_pass 是否通过,只有当审校节点是终审是,这个字段才有作用
+ */
+export function FinishCoursewareCurFlowNodeAudit(data) {
+  return http.post(
+    `${process.env.VUE_APP_EepServer}?MethodName=book_audit_manager-FinishCoursewareCurFlowNodeAudit`,
+    data,
+  );
+}

+ 6 - 0
src/router/modules/project.js

@@ -47,6 +47,12 @@ const personalWorkPage = {
       },
       component: () => import('@/views/personal_workbench/check_task/index.vue'),
     },
+    // 我的审校任务 -> 审核
+    {
+      path: '/personal_workbench/check_task/audit/:id',
+      name: 'PersonalWorkbenchCheckAudit',
+      component: () => import('@/views/personal_workbench/check_task/audit/index.vue'),
+    },
     // 我的项目
     {
       path: '/personal_workbench/project',

+ 197 - 0
src/views/personal_workbench/check_task/audit/index.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="audit">
+    <MenuPage cur-key="check_task" />
+
+    <div class="audit__header">
+      <div class="menu">
+        <MenuPopover :id="id" :node-list="node_list" :book-name="courseware_info.book_name" @selectNode="selectNode" />
+
+        <span class="link" @click="goBackBookList">返回教材列表</span>
+      </div>
+      <div class="courseware">
+        <span class="name-path">{{ courseware_info.name_path }}</span>
+        <div class="operator">
+          <span v-if="isTrue(courseware_info.is_can_add_audit_remark)" class="link">添加审核意见</span>
+          <span
+            v-if="isTrue(courseware_info.is_can_finish_audit)"
+            class="link"
+            @click="finishCoursewareCurFlowNodeAudit"
+          >
+            审核完成
+          </span>
+        </div>
+      </div>
+    </div>
+
+    <main class="preview-main">
+      <span class="title">
+        <SvgIcon icon-class="menu-2" size="24" />
+        <span>{{ courseware_info.name_path }}</span>
+      </span>
+
+      <CoursewarePreview :data="data" :component-list="component_list" :background="background" />
+    </main>
+  </div>
+</template>
+
+<script>
+import MenuPage from '@/views/personal_workbench/menu.vue';
+import CoursewarePreview from '@/views/book/courseware/preview/CoursewarePreview.vue';
+import MenuPopover from '@/views/personal_workbench/common/MenuPopover.vue';
+
+import { isTrue } from '@/utils/common';
+import { GetBookCoursewareInfo, FinishCoursewareCurFlowNodeAudit } from '@/api/project';
+import { ContentGetCoursewareContent_View, ChapterGetBookChapterStructExpandList } from '@/api/book';
+
+export default {
+  name: 'AuditTaskPage',
+  components: {
+    MenuPage,
+    CoursewarePreview,
+    MenuPopover,
+  },
+  data() {
+    return {
+      id: this.$route.params.id || '',
+      project_id: this.$route.query.project_id || '',
+      courseware_info: {
+        is_can_add_audit_remark: 'false',
+        is_can_finish_audit: 'false',
+        cur_audit_flow_node_type: 0,
+      },
+      background: {
+        background_image_url: '',
+        background_position: {
+          left: 0,
+          top: 0,
+        },
+      },
+      node_list: [],
+      data: { row_list: [] },
+      component_list: [],
+      isTrue,
+    };
+  },
+  created() {
+    this.getBookCoursewareInfo(this.id);
+    this.getCoursewareComponentContent_View(this.id);
+    this.getBookChapterStructExpandList();
+  },
+  methods: {
+    /**
+     * 得到教材课件信息
+     * @param {string} id - 课件ID
+     */
+    getBookCoursewareInfo(id) {
+      GetBookCoursewareInfo({ id, is_contain_producer: 'true', is_contain_auditor: 'true' }).then(
+        ({ courseware_info }) => {
+          this.courseware_info = courseware_info;
+        },
+      );
+    },
+    /**
+     * 得到课件内容(展示内容)
+     * @param {string} id - 课件ID
+     */
+    getCoursewareComponentContent_View(id) {
+      ContentGetCoursewareContent_View({ id }).then(({ content, component_list }) => {
+        if (content) {
+          this.data = JSON.parse(content);
+        } else {
+          this.data = { row_list: [] };
+        }
+
+        if (component_list) this.component_list = component_list;
+      });
+    },
+    /**
+     * 得到教材章节结构展开列表
+     */
+    getBookChapterStructExpandList() {
+      ChapterGetBookChapterStructExpandList({
+        book_id: this.project_id,
+        node_deep_mode: 0,
+        is_contain_producer: 'true',
+        is_contain_auditor: 'true',
+      }).then(({ node_list }) => {
+        this.node_list = node_list;
+      });
+    },
+    /**
+     * 选择节点
+     * @param {string} nodeId - 节点ID
+     */
+    selectNode(nodeId) {
+      this.getCoursewareComponentContent_View(nodeId);
+      this.getBookCoursewareInfo(nodeId);
+    },
+    /**
+     * 提交课件到审核流程
+     */
+    finishCoursewareCurFlowNodeAudit() {
+      FinishCoursewareCurFlowNodeAudit({
+        id: this.id,
+        is_pass: this.courseware_info.cur_audit_flow_node_type === 2 ? 'true' : 'false',
+      }).then(() => {
+        this.$message.success('课件已提交审核');
+        this.getBookCoursewareInfo(this.id);
+      });
+    },
+    goBackBookList() {
+      this.$router.push({ path: `/personal_workbench/check_task` });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+@use '@/styles/mixin.scss' as *;
+
+.audit {
+  @include page-content(true);
+
+  &__header {
+    .menu {
+      display: flex;
+      justify-content: space-between;
+      width: 360px;
+      padding: 4px 8px;
+      border-right: $border;
+    }
+
+    .courseware {
+      display: flex;
+      flex-grow: 1;
+      align-items: center;
+      justify-content: space-between;
+      padding: 4px 8px;
+
+      .name-path {
+        font-size: 14px;
+      }
+    }
+  }
+
+  main.preview-main {
+    flex: 1;
+    width: 1100px;
+    background-color: #fff;
+    border: 3px solid #f44444;
+    border-radius: 16px;
+
+    .title {
+      display: inline-flex;
+      column-gap: 24px;
+      align-items: center;
+      min-width: 280px;
+      height: 64px;
+      padding: 18px 24px;
+      font-size: 20px;
+      color: #fff;
+      background-color: #f44444;
+      border-top-left-radius: 12px;
+      border-bottom-right-radius: 16px;
+    }
+  }
+}
+</style>

+ 229 - 2
src/views/personal_workbench/check_task/index.vue

@@ -1,21 +1,106 @@
 <template>
   <div class="check-task">
     <MenuPage cur-key="check_task" />
+
+    <div class="check-main">
+      <div class="textbook-container">
+        <div class="title">待审校的教材</div>
+        <div class="list-header">
+          <span class="cell">编号</span>
+          <span class="cell">名称</span>
+        </div>
+        <ul class="textbook-list">
+          <li
+            v-for="{ id, sn, name } in project_list"
+            :key="id"
+            class="textbook-item"
+            :class="{ active: cur_project_id === id }"
+            @click="selectProject(id)"
+          >
+            <span class="cell">{{ sn }}</span>
+            <span class="cell">{{ name }}</span>
+          </li>
+        </ul>
+      </div>
+      <div class="textbook-chapter">
+        <div class="chapter-header">
+          <span class="cell">教材内容</span>
+          <span class="cell">我的审校节点</span>
+          <span class="cell">状态</span>
+        </div>
+        <div v-for="chapter in courseware_list" :key="chapter.id" class="chapter-item">
+          <span class="path" @click="navigateToChapter(chapter.id)">{{ chapter.name_path }}</span>
+          <span class="audit-node-desc nowrap-ellipsis" :title="chapter.my_audit_node_desc">
+            {{ chapter.my_audit_node_desc }}
+          </span>
+          <span class="status">{{ chapter.status_name }}</span>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
 import MenuPage from '../menu.vue';
 
+import { GetMyBookCoursewareTaskList_Audit } from '@/api/project';
+import { PageQueryMyProjectList_Auditor } from '@/api/list';
+
 export default {
   name: 'CheckTaskPage',
   components: {
     MenuPage,
   },
   data() {
-    return {};
+    return {
+      project_list: [],
+      cur_project_id: '',
+      courseware_list: [],
+    };
+  },
+  created() {
+    this.queryMyProjectList_Auditor();
+  },
+  methods: {
+    /**
+     * 查询我的审校项目列表
+     */
+    queryMyProjectList_Auditor() {
+      PageQueryMyProjectList_Auditor({ page_capacity: 50, cur_page: 1 }).then(({ project_list }) => {
+        this.project_list = project_list;
+        if (this.project_list.length > 0) {
+          this.cur_project_id = this.project_list[0].id;
+          this.getMyBookCoursewareTaskList();
+        }
+      });
+    },
+    /**
+     * 查询当前项目的审校任务列表
+     */
+    getMyBookCoursewareTaskList() {
+      GetMyBookCoursewareTaskList_Audit({ project_id: this.cur_project_id }).then(({ courseware_list }) => {
+        this.courseware_list = courseware_list;
+      });
+    },
+    /**
+     * 选择项目
+     * @param {string} id - 项目ID
+     */
+    selectProject(id) {
+      this.cur_project_id = id;
+      this.getMyBookCoursewareTaskList();
+    },
+    /**
+     * 导航到章节
+     * @param {string} id - 章节ID
+     */
+    navigateToChapter(id) {
+      this.$router.push({
+        path: `/personal_workbench/check_task/audit/${id}`,
+        query: { project_id: this.cur_project_id },
+      });
+    },
   },
-  methods: {},
 };
 </script>
 
@@ -24,5 +109,147 @@ export default {
 
 .check-task {
   @include page-base;
+
+  .check-main {
+    display: flex;
+    flex: 1;
+    width: 100%;
+    height: 100%;
+    border-top: $border;
+
+    .textbook-container {
+      display: flex;
+      flex-direction: column;
+      width: 450px;
+      border-right: $border;
+
+      .title {
+        padding-left: 12px;
+        font-size: 14px;
+        font-weight: bold;
+        color: $font-light-color;
+      }
+
+      .list-header {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        height: 40px;
+        padding: 0 12px;
+        font-size: 14px;
+        color: $font-light-color;
+        background-color: #eee;
+        border-radius: 4px;
+
+        .cell {
+          font-size: 14px;
+          font-weight: bold;
+          text-align: center;
+
+          &:first-child {
+            width: 120px;
+          }
+
+          &:last-child {
+            flex: 1;
+          }
+        }
+      }
+
+      .textbook-list {
+        display: flex;
+        flex-direction: column;
+
+        .textbook-item {
+          display: flex;
+          align-items: center;
+          height: 40px;
+          padding: 0 12px;
+          font-size: 14px;
+          color: $font-light-color;
+          cursor: pointer;
+          background-color: #fff;
+          border-radius: 4px;
+
+          &:hover {
+            background-color: #f5f5f5;
+          }
+
+          &.active {
+            background-color: $main-active-color;
+          }
+
+          .cell {
+            text-align: center;
+
+            &:first-child {
+              width: 120px;
+            }
+
+            &:last-child {
+              flex: 1;
+            }
+          }
+        }
+      }
+    }
+
+    .textbook-chapter {
+      display: flex;
+      flex: 1;
+      flex-direction: column;
+
+      @mixin cell {
+        > span {
+          padding: 8px 12px;
+        }
+
+        :first-child {
+          flex: 1;
+          border-right: $border;
+        }
+
+        :nth-child(2) {
+          width: 120px;
+          text-align: center;
+          border-right: $border;
+        }
+
+        :last-child {
+          width: 80px;
+          text-align: center;
+        }
+      }
+
+      .chapter-header {
+        display: flex;
+        height: 40px;
+        font-size: 14px;
+        background-color: $main-background-color;
+        border-bottom: $border;
+
+        @include cell;
+
+        .cell {
+          font-weight: bold;
+          text-align: center;
+        }
+      }
+
+      .chapter-item {
+        display: flex;
+        align-items: center;
+        font-size: 14px;
+        border-bottom: $border;
+
+        .path {
+          color: $main-color;
+          cursor: pointer;
+        }
+
+        @include cell;
+      }
+    }
+  }
 }
 </style>

+ 133 - 0
src/views/personal_workbench/common/MenuPopover.vue

@@ -0,0 +1,133 @@
+<template>
+  <el-popover placement="bottom" trigger="click" popper-class="menu-popover">
+    <div class="menu-list">
+      <div
+        v-for="{ id: nodeId, name, deep, is_leaf_chapter, is_my_edit_task } in nodeList"
+        :key="nodeId"
+        :class="['menu-item', { active: curSelectId === nodeId }, { courseware: isTrue(is_leaf_chapter) }]"
+        :style="computedNameStyle(deep, isTrue(is_leaf_chapter))"
+        @click="selectNode(nodeId, isTrue(is_leaf_chapter))"
+      >
+        <SvgIcon
+          v-if="isTrue(is_leaf_chapter)"
+          size="12"
+          icon-class="menu-item"
+          :class-name="isTrue(is_my_edit_task) ? 'my-edit-task' : ''"
+        />
+        <span class="name">
+          {{ name }}
+        </span>
+      </div>
+    </div>
+    <el-button slot="reference">{{ bookName }}</el-button>
+  </el-popover>
+</template>
+
+<script>
+import { isTrue } from '@/utils/common';
+
+export default {
+  name: 'MenuPopover',
+  props: {
+    nodeList: {
+      type: Array,
+      required: true,
+    },
+    id: {
+      type: String,
+      default: '',
+    },
+    bookName: {
+      type: String,
+      default: '',
+    },
+  },
+  data() {
+    return {
+      isTrue,
+      curSelectId: this.id || '',
+    };
+  },
+  methods: {
+    /**
+     * 选择节点
+     * @param {string} nodeId - 节点ID
+     * @param {boolean} isLeaf - 是否是叶子节点
+     */
+    selectNode(nodeId, isLeaf) {
+      if (!isLeaf) return;
+      if (this.curSelectId === nodeId) return;
+      this.curSelectId = nodeId;
+      this.$emit('selectNode', nodeId);
+    },
+    /**
+     * 计算章节名称样式
+     * @param {number} deep - 节点深度
+     * @param {boolean} isLeaf - 是否是叶子节点
+     * @returns {Object} - 样式对象
+     */
+    computedNameStyle(deep, isLeaf) {
+      return {
+        'padding-left': `${(deep - 1) * 16}px`,
+        cursor: isLeaf ? 'pointer' : 'auto',
+      };
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.el-button {
+  max-width: 260px;
+  overflow: hidden;
+  font-size: 16px;
+  font-weight: bold;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+
+  &.el-popover__reference {
+    border: none;
+  }
+}
+
+.menu-popover {
+  .menu-list {
+    display: flex;
+    flex-direction: column;
+
+    .menu-item {
+      display: flex;
+      align-items: center;
+
+      &.courseware {
+        &:hover {
+          .name {
+            background-color: #f3f3f3;
+          }
+        }
+      }
+
+      .svg-icon {
+        margin-left: 4px;
+
+        &.my-edit-task {
+          color: $right-color;
+        }
+      }
+
+      .name {
+        flex: 1;
+        padding: 4px 8px 4px 4px;
+        border-radius: 4px;
+      }
+
+      &.active {
+        .name {
+          font-weight: bold;
+          background-color: $main-active-color !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 2 - 2
src/views/personal_workbench/edit_task/edit/index.vue

@@ -25,11 +25,11 @@
 </template>
 
 <script>
-import { GetBookCoursewareInfo, GetMyBookCoursewareTaskList } from '@/api/project';
-
 import CreatePage from '@/views/book/courseware/create/index.vue';
 import MenuPage from '@/views/personal_workbench/menu.vue';
 
+import { GetBookCoursewareInfo, GetMyBookCoursewareTaskList } from '@/api/project';
+
 export default {
   name: 'EditTaskPage',
   components: {

+ 42 - 4
src/views/personal_workbench/edit_task/index.vue

@@ -23,6 +23,10 @@
         </ul>
       </div>
       <div class="textbook-chapter">
+        <div class="chapter-header">
+          <span class="cell">教材内容</span>
+          <span class="cell">状态</span>
+        </div>
         <div v-for="chapter in courseware_list" :key="chapter.id" class="chapter-item">
           <span class="path" @click="navigateToChapter(chapter.id)">{{ chapter.name_path }}</span>
           <span class="status">{{ chapter.status_name }}</span>
@@ -36,7 +40,7 @@
 import MenuPage from '../menu.vue';
 
 import { PageQueryMyProjectList_Producer } from '@/api/list';
-import { GetMyBookCoursewareTaskList } from '@/api/project';
+import { GetMyBookCoursewareTaskList_Edit } from '@/api/project';
 
 export default {
   name: 'EditTask',
@@ -60,6 +64,9 @@ export default {
     queryMyProjectList_Producer() {
       PageQueryMyProjectList_Producer({ page_capacity: 50, cur_page: 1 }).then(({ project_list }) => {
         this.project_list = project_list;
+        if (this.project_list.length > 0) {
+          this.selectProject(this.project_list[0].id);
+        }
       });
     },
     selectProject(id) {
@@ -70,7 +77,7 @@ export default {
      * 得到我的教材课件任务列表
      */
     getMyBookCoursewareTaskList() {
-      GetMyBookCoursewareTaskList({ project_id: this.cur_project_id }).then(({ courseware_list }) => {
+      GetMyBookCoursewareTaskList_Edit({ project_id: this.cur_project_id }).then(({ courseware_list }) => {
         this.courseware_list = courseware_list;
       });
     },
@@ -178,16 +185,45 @@ export default {
       }
     }
 
+    @mixin cell {
+      > span {
+        padding: 8px 12px;
+      }
+
+      :first-child {
+        flex: 1;
+        border-right: $border;
+      }
+
+      :last-child {
+        width: 80px;
+        text-align: center;
+      }
+    }
+
     .textbook-chapter {
       display: flex;
       flex: 1;
       flex-direction: column;
 
+      .chapter-header {
+        display: flex;
+        height: 40px;
+        font-size: 14px;
+        background-color: $main-background-color;
+        border-bottom: $border;
+
+        @include cell;
+
+        .cell {
+          font-weight: bold;
+          text-align: center;
+        }
+      }
+
       .chapter-item {
         display: flex;
         align-items: center;
-        justify-content: space-between;
-        padding: 8px 12px;
         font-size: 14px;
         border-bottom: $border;
 
@@ -195,6 +231,8 @@ export default {
           color: $main-color;
           cursor: pointer;
         }
+
+        @include cell;
       }
     }
   }

+ 28 - 92
src/views/personal_workbench/edit_task/preview/index.vue

@@ -4,36 +4,17 @@
 
     <div class="task-preview__header">
       <div class="menu">
-        <el-popover placement="bottom" trigger="click" popper-class="menu-popover">
-          <div class="menu-list">
-            <div
-              v-for="{ id: nodeId, name, deep, is_leaf_chapter, is_my_edit_task } in node_list"
-              :key="nodeId"
-              :class="['menu-item', { active: curSelectId === nodeId }, { courseware: isTrue(is_leaf_chapter) }]"
-              :style="computedNameStyle(deep, isTrue(is_leaf_chapter))"
-              @click="selectNode(nodeId, isTrue(is_leaf_chapter))"
-            >
-              <SvgIcon
-                v-if="isTrue(is_leaf_chapter)"
-                size="12"
-                icon-class="menu-item"
-                :class-name="isTrue(is_my_edit_task) ? 'my-edit-task' : ''"
-              />
-              <span class="name">
-                {{ name }}
-              </span>
-            </div>
-          </div>
-          <el-button slot="reference">{{ courseware_info.book_name }}</el-button>
-        </el-popover>
+        <MenuPopover :id="id" :node-list="node_list" :book-name="courseware_info.book_name" @selectNode="selectNode" />
 
         <span class="link" @click="goBackBookList">返回教材列表</span>
       </div>
       <div class="courseware">
         <span class="name-path">{{ courseware_info.name_path }}</span>
         <div class="operator">
-          <span v-if="isTrue(courseware_info.is_my_edit_task)" class="link" @click="editTask">开始编辑</span>
-          <span v-if="isTrue(courseware_info.is_my_audit_task)" class="link">提交审核</span>
+          <span v-if="isTrue(courseware_info.is_can_start_edit)" class="link" @click="editTask">开始编辑</span>
+          <span v-if="isTrue(courseware_info.is_can_submit_audit)" class="link" @click="submitCoursewareToAuditFlow">
+            提交审核
+          </span>
         </div>
       </div>
     </div>
@@ -50,24 +31,25 @@
 </template>
 
 <script>
-import { GetBookCoursewareInfo } from '@/api/project';
-import { ContentGetCoursewareContent_View, ChapterGetBookChapterStructExpandList } from '@/api/book';
-import { isTrue } from '@/utils/common';
-
 import MenuPage from '@/views/personal_workbench/menu.vue';
 import CoursewarePreview from '@/views/book/courseware/preview/CoursewarePreview.vue';
+import MenuPopover from '@/views/personal_workbench/common/MenuPopover.vue';
+
+import { GetBookCoursewareInfo, SubmitBookCoursewareToAuditFlow } from '@/api/project';
+import { ContentGetCoursewareContent_View, ChapterGetBookChapterStructExpandList } from '@/api/book';
+import { isTrue } from '@/utils/common';
 
 export default {
   name: 'TaskPreviewPage',
   components: {
     MenuPage,
     CoursewarePreview,
+    MenuPopover,
   },
   data() {
     return {
       id: this.$route.params.id,
       project_id: this.$route.query.project_id,
-      curSelectId: this.$route.params.id,
       courseware_info: {
         is_my_edit_task: 'false',
         is_my_audit_task: 'false',
@@ -105,12 +87,26 @@ export default {
       });
     },
     /**
+     * 提交课件到审核流程
+     */
+    submitCoursewareToAuditFlow() {
+      SubmitBookCoursewareToAuditFlow({ id: this.id }).then(() => {
+        this.$message.success('课件已提交审核');
+        this.getBookCoursewareInfo(this.id);
+      });
+    },
+    /**
      * 得到课件内容(展示内容)
      * @param {string} id - 课件ID
      */
     getCoursewareComponentContent_View(id) {
       ContentGetCoursewareContent_View({ id }).then(({ content, component_list }) => {
-        if (content) this.data = JSON.parse(content);
+        if (content) {
+          this.data = JSON.parse(content);
+        } else {
+          this.data = { row_list: [] };
+        }
+
         if (component_list) this.component_list = component_list;
       });
     },
@@ -140,13 +136,9 @@ export default {
     },
     /**
      * 选择节点
-     * @param {string} nodeId 节点ID
-     * @param {boolean} isLeaf 是否是叶子节点
+     * @param {string} nodeId - 节点ID
      */
-    selectNode(nodeId, isLeaf) {
-      if (!isLeaf) return;
-      if (this.curSelectId === nodeId) return;
-      this.curSelectId = nodeId;
+    selectNode(nodeId) {
       this.getCoursewareComponentContent_View(nodeId);
       this.getBookCoursewareInfo(nodeId);
     },
@@ -179,19 +171,6 @@ export default {
       width: 360px;
       padding: 4px 8px;
       border-right: $border;
-
-      .el-button {
-        max-width: 260px;
-        overflow: hidden;
-        font-size: 16px;
-        font-weight: bold;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-      }
-
-      .el-popover__reference {
-        border: none;
-      }
     }
 
     .courseware {
@@ -231,46 +210,3 @@ export default {
   }
 }
 </style>
-
-<style lang="scss" scoped>
-.menu-popover {
-  .menu-list {
-    display: flex;
-    flex-direction: column;
-
-    .menu-item {
-      display: flex;
-      align-items: center;
-
-      &.courseware {
-        &:hover {
-          .name {
-            background-color: #f3f3f3;
-          }
-        }
-      }
-
-      .svg-icon {
-        margin-left: 4px;
-
-        &.my-edit-task {
-          color: $right-color;
-        }
-      }
-
-      .name {
-        flex: 1;
-        padding: 4px 8px 4px 4px;
-        border-radius: 4px;
-      }
-
-      &.active {
-        .name {
-          font-weight: bold;
-          background-color: $main-active-color !important;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 1
src/views/personal_workbench/project/ProductionEditorialManage.vue

@@ -295,7 +295,6 @@ export default {
       display: flex;
       flex: 1;
       justify-content: flex-end;
-      border-left: $border;
     }
   }