Przeglądaj źródła

已上架教材列表和预览

dusenyao 3 tygodni temu
rodzic
commit
016a9a2709

+ 9 - 0
src/api/book.js

@@ -16,6 +16,15 @@ export function ChapterGetBookChapterStruct(data) {
 }
 
 /**
+ * @description 得到教材基本信息
+ * @param {object} data
+ * @param {string} data.id 教材ID
+ */
+export function GetBookBaseInfo(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=book_manager-GetBookBaseInfo`, data);
+}
+
+/**
  * @description 得到教材章节结构展开列表
  * @param {object} data
  * @param {string} data.book_id - 教材ID

+ 20 - 0
src/api/list.js

@@ -43,3 +43,23 @@ export function PageQueryMyProjectList_Auditor(data) {
 export function PageQueryProjectList_OrgManager(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=page_query-PageQueryProjectList_OrgManager`, data);
 }
+
+/**
+ * @description 分页查询我的项目已上架教材列表(项目组长)
+ * @param {object} data
+ * @param {number} data.page_capacity - 每页容量
+ * @param {number} data.cur_page - 当前查询页码
+ */
+export function PageQueryMyProjectYSJBookList_Leader(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=page_query-PageQueryMyProjectYSJBookList_Leader`, data);
+}
+
+/**
+ * @description 分页查询已上架教材列表(机构管理员)
+ * @param {object} data
+ * @param {number} data.page_capacity - 每页容量
+ * @param {number} data.cur_page - 当前查询页码
+ */
+export function PageQueryYSJBookList_OrgManager(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=page_query-PageQueryYSJBookList_OrgManager`, data);
+}

+ 25 - 5
src/components/CommonPreview.vue

@@ -7,6 +7,7 @@
       <div class="courseware">
         <span class="name-path">{{ courseware_info.name_path }}</span>
         <span class="flow-nodename">{{ courseware_info.cur_audit_flow_node_name }}</span>
+        <slot name="middle" :courseware="courseware_info"></slot>
         <div class="operator">
           <slot name="operator" :courseware="courseware_info"></slot>
         </div>
@@ -15,7 +16,7 @@
 
     <div class="audit-content">
       <div class="main-container">
-        <main class="preview-main">
+        <main :class="['preview-main', { 'no-audit': !isShowAudit }]">
           <span class="title">
             <SvgIcon icon-class="menu-2" size="24" />
             <span>{{ courseware_info.name_path }}</span>
@@ -24,7 +25,7 @@
           <CoursewarePreview :data="data" :component-list="component_list" :background="background" />
         </main>
       </div>
-      <div class="remark-list">
+      <div v-if="isShowAudit" class="remark-list">
         <h5>审校批注</h5>
         <ul v-if="remark_list.length > 0">
           <li v-for="{ id: remarkId, content, remark_person_name, remark_time } in remark_list" :key="remarkId">
@@ -77,7 +78,7 @@ import {
   AddCoursewareAuditRemark,
   DeleteCoursewareAuditRemarkList,
 } from '@/api/project';
-import { ContentGetCoursewareContent_View, ChapterGetBookChapterStructExpandList } from '@/api/book';
+import { ContentGetCoursewareContent_View, ChapterGetBookChapterStructExpandList, GetBookBaseInfo } from '@/api/book';
 
 export default {
   name: 'CommonPreview',
@@ -100,6 +101,14 @@ export default {
       type: Boolean,
       default: false,
     },
+    isShowAudit: {
+      type: Boolean,
+      default: true,
+    },
+    isBook: {
+      type: Boolean,
+      default: false,
+    },
   },
   data() {
     return {
@@ -139,7 +148,7 @@ export default {
       this.getCoursewareComponentContent_View(this.id);
       this.getCoursewareAuditRemarkList(this.id);
     } else {
-      this.getProjectBaseInfo();
+      this.isBook ? this.getBookBaseInfo() : this.getProjectBaseInfo();
     }
     this.getBookChapterStructExpandList();
   },
@@ -149,6 +158,13 @@ export default {
         this.courseware_info = { ...project_info, book_name: project_info.name };
       });
     },
+
+    getBookBaseInfo() {
+      GetBookBaseInfo({ id: this.projectId }).then(({ book_info }) => {
+        this.courseware_info = { ...this.courseware_info, ...book_info, book_name: book_info.name };
+      });
+    },
+
     /**
      * 得到教材课件信息
      * @param {string} id - 课件ID
@@ -156,7 +172,7 @@ export default {
     getBookCoursewareInfo(id) {
       GetBookCoursewareInfo({ id, is_contain_producer: 'true', is_contain_auditor: 'true' }).then(
         ({ courseware_info }) => {
-          this.courseware_info = courseware_info;
+          this.courseware_info = { ...this.courseware_info, ...courseware_info };
         },
       );
     },
@@ -337,6 +353,10 @@ export default {
     border-radius: 4px;
     box-shadow: 0 2px 4px rgba(0, 0, 0, 10%);
 
+    &.no-audit {
+      margin: 0 auto;
+    }
+
     .title {
       display: inline-flex;
       column-gap: 24px;

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

@@ -112,6 +112,12 @@ const projectPage = {
       name: 'ProjectManageBook',
       component: () => import('@/views/project_manage/book/index.vue'),
     },
+    // 机构用户 -> 项目管理 -> 已上架教材 -> 预览教材
+    {
+      path: 'book/preview/:projectId',
+      name: 'ProjectManageBookPreview',
+      component: () => import('@/views/project_manage/book/BookPreview.vue'),
+    },
 
     // 机构管理员 -> 项目管理 -> 已立项
     {
@@ -143,6 +149,12 @@ const projectPage = {
       name: 'ProjectManageBook',
       component: () => import('@/views/project_manage/org/book/index.vue'),
     },
+    // 机构管理员 -> 项目管理 -> 已上架教材 -> 预览教材
+    {
+      path: 'org/book/preview/:projectId',
+      name: 'ProjectManageOrgBookPreview',
+      component: () => import('@/views/project_manage/org/book/OrgBookPreview.vue'),
+    },
   ],
 };
 

+ 25 - 11
src/views/personal_workbench/check_task/audit/index.vue

@@ -8,21 +8,21 @@
         <span
           v-if="isTrue(courseware.is_can_finish_audit)"
           class="link"
-          @click="finishCoursewareCurFlowNodeAudit('false')"
+          @click="finishCoursewareCurFlowNodeAudit('false', 'complete')"
         >
           审校完成
         </span>
         <span
           v-if="isTrue(courseware.is_can_audit_pass)"
           class="link"
-          @click="finishCoursewareCurFlowNodeAudit('true')"
+          @click="finishCoursewareCurFlowNodeAudit('true', 'pass')"
         >
           审核通过
         </span>
         <span
           v-if="isTrue(courseware.is_can_audit_reject)"
           class="link"
-          @click="finishCoursewareCurFlowNodeAudit('false')"
+          @click="finishCoursewareCurFlowNodeAudit('false', 'reject')"
         >
           审核驳回
         </span>
@@ -49,6 +49,11 @@ export default {
     return {
       id: this.$route.params.id || '',
       project_id: this.$route.query.project_id || '',
+      actionTip: {
+        complete: '是否确认审校完成?',
+        pass: '是否确认审校通过?',
+        reject: '是否确认审校驳回?',
+      },
       isTrue,
     };
   },
@@ -56,15 +61,24 @@ export default {
     /**
      * 提交课件到审校流程
      * @param {'true'|'false'} is_pass - 是否通过审校
+     * @param {'complete'|'pass'|'reject'} action - 操作类型
      */
-    finishCoursewareCurFlowNodeAudit(is_pass) {
-      FinishCoursewareCurFlowNodeAudit({
-        id: this.id,
-        is_pass,
-      }).then(() => {
-        this.$message.success('操作成功');
-        this.getBookCoursewareInfo(this.id);
-      });
+    finishCoursewareCurFlowNodeAudit(is_pass, action) {
+      this.$confirm(this.actionTip[action], '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          FinishCoursewareCurFlowNodeAudit({
+            id: this.id,
+            is_pass,
+          }).then(() => {
+            this.$message.success('操作成功');
+            this.$refs.preview.getBookCoursewareInfo(this.id);
+          });
+        })
+        .catch(() => {});
     },
     goBackBookList() {
       this.$router.push({ path: `/personal_workbench/check_task` });

+ 1 - 1
src/views/personal_workbench/project/index.vue

@@ -4,7 +4,7 @@
 
     <div class="project-list">
       <el-table :data="list">
-        <el-table-column label="序号" width="80" header-align="center" align="center" class-name="index-column">
+        <el-table-column label="序号" width="60" header-align="center" align="center" class-name="index-column">
           <template slot-scope="{ $index }">
             {{ cur_page_begin_index + $index }}
           </template>

+ 47 - 0
src/views/project_manage/book/BookPreview.vue

@@ -0,0 +1,47 @@
+<template>
+  <div class="book-preview">
+    <ProjectMenu cur-key="book" />
+
+    <CommonPreview ref="preview" :project-id="project_id" :is-show-audit="false" :is-book="true">
+      <template #operator="{ courseware }">
+        <span class="link">查看教材信息</span>
+        <span v-if="isTrue(courseware.is_can_request_xiajia)" class="link">申请下架</span>
+        <span class="link" @click="goBackToProjectList">返回项目列表</span>
+      </template>
+    </CommonPreview>
+  </div>
+</template>
+
+<script>
+import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
+import CommonPreview from '@/components/CommonPreview.vue';
+
+import { isTrue } from '@/utils/common';
+
+export default {
+  name: 'BookPreview',
+  components: {
+    ProjectMenu,
+    CommonPreview,
+  },
+  data() {
+    return {
+      project_id: this.$route.params.projectId || '',
+      isTrue,
+    };
+  },
+  methods: {
+    goBackToProjectList() {
+      this.$router.push({ path: '/project_manage/book' });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+@use '@/styles/mixin.scss' as *;
+
+.book-preview {
+  @include page-content(true);
+}
+</style>

+ 30 - 10
src/views/project_manage/book/index.vue

@@ -4,28 +4,35 @@
 
     <div class="book-list">
       <el-table :data="list">
-        <el-table-column label="序号" width="80" class-name="index-column" align="center" header-align="center">
+        <el-table-column label="序号" width="60" class-name="index-column" align="center" header-align="center">
           <template slot-scope="{ $index }">
             {{ cur_page_begin_index + $index }}
           </template>
         </el-table-column>
         <el-table-column prop="sn" label="编号" width="120" header-align="center" />
         <el-table-column prop="name" label="名称" width="240" header-align="center" />
-        <el-table-column prop="version" label="版本" width="100" header-align="center" />
+        <el-table-column prop="version" label="版本" width="80" header-align="center" />
         <el-table-column prop="project_sn" label="项目编号" width="120" header-align="center" />
-        <el-table-column prop="project_name" label="项目名称" width="180" header-align="center" />
-        <el-table-column prop="project_leader" label="项目组长" width="180" header-align="center" />
-        <el-table-column prop="create_date" label="创建日期" width="140" header-align="center" />
-        <el-table-column prop="content_count_SJ" label="教材内容数" width="120" header-align="center" />
-        <el-table-column prop="publish_date" label="上架日期" header-align="center" />
+        <el-table-column prop="project_name" label="项目名称" width="240" header-align="center" />
+        <el-table-column prop="content_count_SJ" label="教材页面数" width="120" header-align="center" />
+        <el-table-column prop="publish_time" label="上架时间" header-align="center" />
+        <el-table-column label="已申请下架" header-align="center" align="center">
+          <template slot-scope="{ row }">
+            <span style="color: #f53f3f">
+              {{ row.is_request_xiajia ? '√' : '' }}
+            </span>
+          </template>
+        </el-table-column>
+
         <el-table-column label="操作" fixed="right" width="150" header-align="center">
           <template slot-scope="{ row }">
-            <span class="link danger">申请下架</span>
+            <span class="link">查看信息</span>
+            <span class="link" @click="previewCourseware(row.id)">预览教材</span>
           </template>
         </el-table-column>
       </el-table>
 
-      <PaginationPage :total="total" @getList="" />
+      <PaginationPage :total="total" @getList="pageQueryMyProjectYSJBookList_Leader" />
     </div>
   </div>
 </template>
@@ -34,6 +41,8 @@
 import PaginationPage from '@/components/PaginationPage.vue';
 import ProjectMenu from '../common/ProjectMenu.vue';
 
+import { PageQueryMyProjectYSJBookList_Leader } from '@/api/list';
+
 export default {
   name: 'BookPage',
   components: {
@@ -47,7 +56,18 @@ export default {
       cur_page_begin_index: 0,
     };
   },
-  methods: {},
+  methods: {
+    pageQueryMyProjectYSJBookList_Leader(data) {
+      PageQueryMyProjectYSJBookList_Leader(data).then(({ total_count, cur_page_begin_index, book_list }) => {
+        this.total = total_count;
+        this.cur_page_begin_index = cur_page_begin_index;
+        this.list = book_list;
+      });
+    },
+    previewCourseware(projectId) {
+      this.$router.push({ path: `/project_manage/book/preview/${projectId}` });
+    },
+  },
 };
 </script>
 

+ 53 - 0
src/views/project_manage/org/book/OrgBookPreview.vue

@@ -0,0 +1,53 @@
+<template>
+  <div class="org-book-preview">
+    <ProjectMenu cur-key="org/book" />
+
+    <CommonPreview ref="preview" :project-id="project_id" :is-show-audit="false" :is-book="true">
+      <template #middle="{ courseware }">
+        <div style="width: 100%">
+          <span v-if="isTrue(courseware.is_request_xiajia)" class="link danger">申请下架</span>
+        </div>
+      </template>
+      <template #operator="{ courseware }">
+        <span class="link">查看项目信息</span>
+        <span class="link">查看教材信息</span>
+        <span v-if="isTrue(courseware.is_can_xiajia)" class="link">下架</span>
+        <span class="link" @click="goBackProjectList">返回项目列表</span>
+      </template>
+    </CommonPreview>
+  </div>
+</template>
+
+<script>
+import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
+import CommonPreview from '@/components/CommonPreview.vue';
+
+import { isTrue } from '@/utils/common';
+
+export default {
+  name: 'OrgBookPreview',
+  components: {
+    ProjectMenu,
+    CommonPreview,
+  },
+  data() {
+    return {
+      project_id: this.$route.params.projectId || '',
+      isTrue,
+    };
+  },
+  methods: {
+    goBackProjectList() {
+      this.$router.push({ path: '/project_manage/org/book' });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+@use '@/styles/mixin.scss' as *;
+
+.org-book-preview {
+  @include page-content(true);
+}
+</style>

+ 54 - 2
src/views/project_manage/org/book/index.vue

@@ -1,21 +1,73 @@
 <template>
   <div class="book org">
     <ProjectMenu cur-key="org/book" />
+
+    <div class="book-list">
+      <el-table :data="list">
+        <el-table-column label="序号" width="60" align="center" header-align="center" class-name="index-column">
+          <template slot-scope="{ $index }">
+            {{ cur_page_begin_index + $index }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="sn" label="编号" width="140" header-align="center" />
+        <el-table-column prop="name" label="名称" width="240" header-align="center" />
+        <el-table-column prop="project_sn" label="项目编号" width="140" header-align="center" />
+        <el-table-column prop="project_name" label="项目名称" width="240" header-align="center" />
+        <el-table-column prop="org_name" label="所属机构" width="120" header-align="center" />
+        <el-table-column prop="content_count" label="教材页面数" width="100" header-align="center" />
+        <el-table-column prop="shangjia_time" label="上架时间" width="180" header-align="center" />
+        <el-table-column label="已申请下架" width="100" align="center" header-align="center">
+          <template slot-scope="{ row }">
+            <span style="color: #f53f3f">
+              {{ row.is_request_xiajia ? '√' : '' }}
+            </span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="操作" fixed="right" width="160" align="center" header-align="center">
+          <template slot-scope="{ row }">
+            <span class="link">查看信息</span>
+            <span class="link" @click="previewBook(row.id)">预览信息</span>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <PaginationPage :total="total" @getList="pageQueryYSJBookList_OrgManager" />
+    </div>
   </div>
 </template>
 
 <script>
 import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
+import PaginationPage from '@/components/PaginationPage.vue';
+
+import { PageQueryYSJBookList_OrgManager } from '@/api/list';
 
 export default {
   name: 'OrgBookPage',
   components: {
     ProjectMenu,
+    PaginationPage,
   },
   data() {
-    return {};
+    return {
+      list: [],
+      total: 0,
+      cur_page_begin_index: 0,
+    };
+  },
+  methods: {
+    pageQueryYSJBookList_OrgManager(data) {
+      PageQueryYSJBookList_OrgManager(data).then(({ total_count, book_list, cur_page_begin_index }) => {
+        this.list = book_list;
+        this.total = total_count;
+        this.cur_page_begin_index = cur_page_begin_index;
+      });
+    },
+    previewBook(id) {
+      this.$router.push({ path: `/project_manage/org/book/preview/${id}` });
+    },
   },
-  methods: {},
 };
 </script>
 

+ 10 - 5
src/views/project_manage/org/final/OrgFinalPreview.vue

@@ -8,7 +8,7 @@
         <span class="link">查看教材信息</span>
         <span v-if="isTrue(courseware.is_can_shangjia_book)" class="link" @click="shangjiaBook">上架</span>
         <span v-if="isTrue(courseware.is_can_rollback_project)" class="link" @click="rollbackProject">退改</span>
-        <span class="link" @click="goBackBookList">返回教材列表</span>
+        <span class="link" @click="goBackBookList">返回项目列表</span>
       </template>
     </CommonPreview>
   </div>
@@ -35,10 +35,15 @@ export default {
   },
   methods: {
     shangjiaBook() {
-      ShangjiaBook({ project_id: this.project_id }).then(() => {
-        this.$message.success('上架成功');
-        this.$refs.preview.getProjectBaseInfo();
-      });
+      const loading = this.$loading('正在上架教材,请稍等...');
+      ShangjiaBook({ project_id: this.project_id })
+        .then(() => {
+          this.$message.success('上架成功');
+          this.$refs.preview.getProjectBaseInfo();
+        })
+        .finally(() => {
+          loading.close();
+        });
     },
     rollbackProject() {
       this.$confirm('确定要退改吗?', '提示', {

+ 5 - 13
src/views/project_manage/org/final/index.vue

@@ -4,7 +4,7 @@
 
     <div class="final-list">
       <el-table :data="list">
-        <el-table-column label="序号" width="80" align="center" header-align="center" class-name="index-column">
+        <el-table-column label="序号" width="60" align="center" header-align="center" class-name="index-column">
           <template slot-scope="{ $index }">
             {{ cur_page_begin_index + $index }}
           </template>
@@ -13,17 +13,10 @@
         <el-table-column prop="name" label="名称" width="240" header-align="center" />
         <el-table-column prop="org_name" label="所属机构" width="120" header-align="center" />
         <el-table-column prop="leader_name_desc" label="项目组长" width="120" header-align="center" />
-        <el-table-column prop="create_date" label="创建日期" width="180" header-align="center" />
-        <el-table-column prop="content_count_SJ" label="教材内容数" width="100" header-align="center" />
-        <el-table-column label="申请状态" width="80" align="center">
-          <template slot-scope="{ row }">
-            <span :style="{ color: row.request_status === 2 ? '#f53f3f' : '' }">
-              {{ requestStatusList[row.request_status] }}
-            </span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="version" label="申请上架教材版本" width="80" align="center" header-align="center" />
-        <el-table-column prop="version_desc_YSJ" label="已上架教材版本" header-align="center" />
+        <el-table-column prop="create_time" label="创建时间" width="180" header-align="center" />
+        <el-table-column prop="content_count_SJ" label="教材页面数" width="100" header-align="center" />
+        <el-table-column prop="request_status_name" label="申请状态" width="100" align="center" />
+        <el-table-column prop="version" label="教材版本" width="80" align="center" header-align="center" />
 
         <el-table-column label="操作" fixed="right" width="240" align="center" header-align="center">
           <template slot-scope="{ row }">
@@ -56,7 +49,6 @@ export default {
       list: [],
       total: 0,
       cur_page_begin_index: 0,
-      requestStatusList: ['无', '申请上架', '申请退改'],
     };
   },
   methods: {

+ 1 - 1
src/views/project_manage/org/project/OrgProjectPreview.vue

@@ -4,7 +4,7 @@
 
     <CommonPreview ref="preview" :project-id="project_id">
       <template #operator>
-        <span class="link" @click="goBackBookList">返回教材列表</span>
+        <span class="link" @click="goBackBookList">返回项目列表</span>
       </template>
     </CommonPreview>
   </div>

+ 1 - 1
src/views/project_manage/org/project/index.vue

@@ -4,7 +4,7 @@
 
     <div class="project-list">
       <el-table :data="list">
-        <el-table-column label="序号" width="80" align="center" header-align="center" class-name="index-column">
+        <el-table-column label="序号" width="60" align="center" header-align="center" class-name="index-column">
           <template slot-scope="{ $index }">
             {{ cur_page_begin_index + $index }}
           </template>

+ 1 - 1
src/views/project_manage/project/ProjectPreview.vue

@@ -10,7 +10,7 @@
         <span v-if="isTrue(courseware.is_can_request_rollback_project)" class="link" @click="requestRollbackProject">
           申请退回
         </span>
-        <span class="link" @click="goBackBookList">返回教材列表</span>
+        <span class="link" @click="goBackBookList">返回项目列表</span>
       </template>
     </CommonPreview>
   </div>

+ 1 - 1
src/views/project_manage/project/index.vue

@@ -4,7 +4,7 @@
 
     <div class="project-manage-list">
       <el-table :data="list">
-        <el-table-column label="序号" width="80" align="center" header-align="center" class-name="index-column">
+        <el-table-column label="序号" width="60" align="center" header-align="center" class-name="index-column">
           <template slot-scope="{ $index }">
             {{ cur_page_begin_index + $index }}
           </template>