Просмотр исходного кода

1、页面变动 2、问题修改

dsy 1 неделя назад
Родитель
Сommit
6a9f259d6f

+ 1 - 1
.env

@@ -11,4 +11,4 @@ VUE_APP_BookWebSI = '/GCLSBookWebSI/ServiceInterface'
 VUE_APP_EepServer = '/EEPServer/SI'
 
 #version
-VUE_APP_VERSION = '2026.03.26'
+VUE_APP_VERSION = '2026.03.27'

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "eep_page",
-  "version": "2026.03.26",
+  "version": "2026.03.27",
   "private": true,
   "main": "main.js",
   "description": "智慧梧桐数字教材编辑器",

+ 19 - 0
src/api/project.js

@@ -326,3 +326,22 @@ export function DeleteLabel(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=project_resource_manager-DeleteLabel`, data);
 }
 
+/**
+ * @description 项目申请操作
+ * @param {object} data
+ * @param {string} data.project_id 项目ID
+ * @param {number} data.operate_type 操作类型(1:申请上架,2:申请下架,3:申请修订,4:撤回重做,5:申请改错)
+ */
+export function ProjectRequestOperate(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=project_manager-ProjectRequestOperate`, data);
+}
+
+/**
+ * @description 项目审核操作
+ * @param {object} data
+ * @param {string} data.project_id 项目ID
+ * @param {'true'|'false'} data.is_pass 是否通过审核
+ */
+export function ProjectAuditOperate(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=project_manager-ProjectAuditOperate`, data);
+}

+ 1 - 0
src/components/CommonPreview.vue

@@ -748,6 +748,7 @@ export default {
           if (title_list) this.title_list = title_list || [];
           if (background) {
             this.background = JSON.parse(background);
+            this.$emit('updateBackground', this.background);
           }
 
           if (content) {

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

@@ -191,18 +191,6 @@ const projectPage = {
       name: 'ProjectVisNetwork',
       component: () => import('@/views/project_manage/project/ProjectVisNetwork.vue'),
     },
-    // 机构用户 -> 项目管理 -> 已上架教材
-    {
-      path: 'book',
-      name: 'ProjectManageBook',
-      component: () => import('@/views/project_manage/book/index.vue'),
-    },
-    // 机构用户 -> 项目管理 -> 已上架教材 -> 预览教材
-    {
-      path: 'book/preview/:projectId',
-      name: 'ProjectManageBookPreview',
-      component: () => import('@/views/project_manage/book/BookPreview.vue'),
-    },
 
     // 机构管理员 -> 项目管理 -> 已立项
     {
@@ -216,18 +204,6 @@ const projectPage = {
       name: 'ProjectManageOrgProjectPreview',
       component: () => import('@/views/project_manage/org/project/OrgProjectPreview.vue'),
     },
-    // 机构管理员 -> 项目管理 -> 已终审
-    {
-      path: 'org/final',
-      name: 'ProjectManageFinal',
-      component: () => import('@/views/project_manage/org/final/index.vue'),
-    },
-    // 机构管理员 -> 项目管理 -> 已终审 -> 预览项目
-    {
-      path: 'org/final/preview/:projectId',
-      name: 'ProjectManageOrgFinalPreview',
-      component: () => import('@/views/project_manage/org/final/OrgFinalPreview.vue'),
-    },
     // 机构管理员 -> 项目管理 -> 已上架教材
     {
       path: 'org/book',

+ 16 - 5
src/views/book/courseware/create/components/common/ModuleBase.vue

@@ -2,15 +2,16 @@
   <div class="module-wrapper" @click="clickWrapper">
     <div
       class="horizontal-line top"
-      :style="{ backgroundColor: id === getCurSettingId() ? activeBgColor : borderColor.value }"
+      :style="{ backgroundColor: lineColor }"
       @mousedown="dragStart($event, 'ns-resize', 'top')"
     ></div>
     <div
       class="vertical-line left"
-      :style="{ backgroundColor: id === getCurSettingId() ? activeBgColor : borderColor.value }"
+      :style="{ backgroundColor: lineColor }"
       @mousedown="dragStart($event, 'ew-resize', 'left')"
     ></div>
-    <div class="module" draggable="false">
+
+    <div :class="['module', { active: getCurSettingId() === id }]" draggable="false">
       <div class="module-top">
         <span class="title" @mousedown="dragComponentStart($event)">{{ componentNameList[type] }}</span>
         <div class="module-icon">
@@ -27,14 +28,15 @@
         <slot name="content"></slot>
       </div>
     </div>
+
     <div
       class="vertical-line right"
-      :style="{ backgroundColor: id === getCurSettingId() ? activeBgColor : borderColor.value }"
+      :style="{ backgroundColor: lineColor }"
       @mousedown="dragStart($event, 'ew-resize', 'right')"
     ></div>
     <div
       class="horizontal-line bottom"
-      :style="{ backgroundColor: id === getCurSettingId() ? activeBgColor : borderColor.value }"
+      :style="{ backgroundColor: lineColor }"
       @mousedown="dragStart($event, 'ns-resize', 'bottom')"
     ></div>
   </div>
@@ -74,6 +76,11 @@ export default {
       checked: false,
     };
   },
+  computed: {
+    lineColor() {
+      return this.id === this.getCurSettingId() ? this.activeBgColor : this.borderColor.value;
+    },
+  },
   created() {
     document.addEventListener('mousemove', this.dragMove);
     document.addEventListener('mouseup', this.dragEnd);
@@ -185,6 +192,10 @@ export default {
     overflow: auto;
     background-color: #fff;
 
+    &.active {
+      box-shadow: 0 0 0 3px #82b4ff;
+    }
+
     &-top {
       display: flex;
       justify-content: space-between;

+ 2 - 0
src/views/book/courseware/create/components/question/fill/Fill.vue

@@ -48,11 +48,13 @@
           <el-button @click="openMultilingual">多语言</el-button>
         </div>
 
+        <div v-if="data.answer.answer_list.length > 0" class="title">答案:</div>
         <div class="correct-answer">
           <el-input
             v-for="(item, i) in data.answer.answer_list.filter(({ type }) => type === 'any_one')"
             :key="item.mark"
             v-model="item.value"
+            placeholder="多个答案可用‘/’分割"
             @blur="handleTone(item.value, i)"
           >
             <span slot="prefix">{{ i + 1 }}.</span>

+ 10 - 4
src/views/create_project/createProject.vue

@@ -65,6 +65,11 @@
             <label>作者</label>
             <el-input v-model="project.editor" type="text" placeholder="请输入作者" maxlength="20" />
           </div>
+
+          <div class="project-item">
+            <label>版本</label>
+            <el-input v-model="project.version" type="text" placeholder="请输入版本" maxlength="20" />
+          </div>
         </div>
       </el-form-item>
       <el-form-item label="内容简介" prop="content_intro">
@@ -179,6 +184,7 @@ export default {
         member_id_list: [], // 组员列表
         cover_image_file_id: '', // 封面图片文件ID
         editor: '', // 作者
+        version: '', // 版本
       },
       imageUrl: '', // 封面图片URL
       formRules: {
@@ -304,7 +310,7 @@ export default {
               align-items: center;
               justify-content: center;
               width: 418px;
-              height: 235px;
+              height: 280px;
               overflow: hidden;
               cursor: pointer;
               border: 1px dashed #d9d9d9;
@@ -317,9 +323,9 @@ export default {
 
             &-icon {
               width: 418px;
-              height: 235px;
+              height: 280px;
               font-size: 28px;
-              line-height: 235px;
+              line-height: 280px;
               color: #8c939d;
               text-align: center;
             }
@@ -327,7 +333,7 @@ export default {
             .avatar {
               display: block;
               max-width: 418px;
-              max-height: 235px;
+              max-height: 280px;
             }
           }
         }

+ 1 - 1
src/views/create_project/selectProjectMembers.vue

@@ -58,7 +58,7 @@
 
     <div slot="footer">
       <el-button @click="dialogClose">取消</el-button>
-      <el-button type="primary" @click="confirm">添加</el-button>
+      <el-button type="primary" @click="confirm">确定</el-button>
     </div>
   </el-dialog>
 </template>

+ 0 - 1
src/views/personal_workbench/common/menu.vue

@@ -30,7 +30,6 @@ export default {
     let subMenuList = [
       { key: '/personal_workbench/project', name: '我的项目' },
       { key: '/project_manage/project', name: '项目管理' },
-      { key: '/project_manage/book', name: '已上架教材' },
     ];
 
     const onlyMenuList = [{ key: '/personal_workbench/check_task', name: '我的审核任务' }];

+ 7 - 1
src/views/personal_workbench/edit_task/preview/index.vue

@@ -2,7 +2,13 @@
   <div class="task-preview">
     <MenuPage only-key="/personal_workbench/edit_task" />
 
-    <CommonPreview :id="id" ref="preview" :project-id="project_id" type="edit_preview">
+    <CommonPreview
+      :id="id"
+      ref="preview"
+      :project-id="project_id"
+      type="edit_preview"
+      @updateBackground="background = $event"
+    >
       <template #operator="{ courseware }">
         <el-popover placement="bottom" width="155" trigger="click">
           <el-link type="primary" @click="openCreateTemplateDialog(0)">保存本页为模板</el-link>

+ 9 - 3
src/views/personal_workbench/project/ProjectInfoManage.vue

@@ -52,6 +52,7 @@
           <span>作品标签</span>
           <span>所属课题</span>
           <span>作者</span>
+          <span>版本</span>
         </div>
         <div class="project-item info-list">
           <div class="info-item">
@@ -82,6 +83,11 @@
             <span>{{ project.editor }}</span>
             <span v-if="isManage" class="link" @click="showUpdateField('editor', project.editor)">更改</span>
           </div>
+
+          <div class="info-item">
+            <span>{{ project.version }}</span>
+            <span v-if="isManage" class="link" @click="showUpdateField('version', project.version)">更改</span>
+          </div>
         </div>
       </div>
 
@@ -428,21 +434,21 @@ export default {
           align-items: center;
           justify-content: center;
           width: 373px;
-          height: 248px;
+          height: 288px;
           overflow: hidden;
 
           img {
             display: block;
             flex: none;
             max-width: 373px;
-            max-height: 248px;
+            max-height: 288px;
           }
         }
       }
     }
 
     .table-fourcolumn:first-child {
-      grid-template-rows: 40px 258px;
+      grid-template-rows: 40px 298px;
       grid-template-columns: 120px 1fr 120px 1fr;
     }
 

+ 5 - 1
src/views/personal_workbench/project/components/UpdateProjectField.vue

@@ -6,7 +6,9 @@
     :close-on-click-modal="false"
     @close="handleClose"
   >
-    <template v-if="['name', 'editor', 'category', 'language', 'topic', 'reader', 'publisher'].includes(field)">
+    <template
+      v-if="['name', 'editor', 'category', 'language', 'topic', 'reader', 'publisher', 'version'].includes(field)"
+    >
       <el-input v-model="stringValue" type="text" />
     </template>
 
@@ -92,6 +94,7 @@ export default {
         editor: '作者',
         reader: '读者对象',
         publisher: '出版单位',
+        version: '版本',
         // 多行文本
         content_intro: '内容简介',
         background: '选题背景',
@@ -182,6 +185,7 @@ export default {
           'content_count_YG',
           'word_count_YG',
           'plan_publish_date',
+          'version',
         ].includes(this.field)
       ) {
         this.$emit('updateProjectFieldValue', this.field, this.stringValue);

+ 3 - 2
src/views/personal_workbench/project/index.vue

@@ -11,6 +11,7 @@
         </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="version" label="版本" width="80" header-align="center" />
         <el-table-column prop="create_time" label="创建时间" width="180" header-align="center" />
         <el-table-column prop="leader_name_desc" label="项目组长" width="260" header-align="center" />
         <el-table-column prop="member_name_desc" label="项目成员" header-align="center" />
@@ -112,7 +113,7 @@ export default {
 @use '@/styles/mixin.scss' as *;
 
 .project {
-  @include page-base;
-  @include table-list;
+  @includes page-base;
+  @includes table-list;
 }
 </style>

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

@@ -1,61 +0,0 @@
-<template>
-  <div class="book-preview">
-    <MenuPage cur-key="/project_manage/book" />
-
-    <CommonPreview ref="preview" :project-id="project_id" :is-show-audit="false" :is-book="true">
-      <template #operator="{ courseware, projectId }">
-        <span class="link">查看教材信息</span>
-        <span class="link" @click="createBookPreviewURL(projectId)">生成预览链接</span>
-        <span v-if="isTrue(courseware.is_can_request_xiajia)" class="link">申请下架</span>
-        <span class="link" @click="goBackToProjectList">返回教材列表</span>
-      </template>
-    </CommonPreview>
-
-    <PreviewURL :url="preview_url" :visible.sync="visible" />
-  </div>
-</template>
-
-<script>
-import MenuPage from '@/views/personal_workbench/common/menu.vue';
-import CommonPreview from '@/components/CommonPreview.vue';
-import PreviewURL from '@/views/project_manage/common/PreviewURL.vue';
-
-import { isTrue } from '@/utils/validate';
-import { CreateBookPreviewURL } from '@/api/app';
-
-export default {
-  name: 'BookPreview',
-  components: {
-    MenuPage,
-    CommonPreview,
-    PreviewURL,
-  },
-  data() {
-    return {
-      project_id: this.$route.params.projectId || '',
-      isTrue,
-      preview_url: '',
-      visible: false,
-    };
-  },
-  methods: {
-    goBackToProjectList() {
-      this.$router.push({ path: '/project_manage/book' });
-    },
-    createBookPreviewURL(book_id) {
-      CreateBookPreviewURL({ book_id }).then(({ url }) => {
-        this.preview_url = url;
-        this.visible = true;
-      });
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-@use '@/styles/mixin.scss' as *;
-
-.book-preview {
-  @include page-content(true);
-}
-</style>

+ 0 - 93
src/views/project_manage/book/index.vue

@@ -1,93 +0,0 @@
-<template>
-  <div class="book">
-    <MenuPage cur-key="/project_manage/book" />
-
-    <div class="book-list">
-      <el-table :data="list">
-        <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="80" header-align="center" />
-        <el-table-column prop="project_sn" label="项目编号" width="120" header-align="center" />
-        <el-table-column prop="project_name" label="项目名称" width="240" header-align="center" />
-        <el-table-column prop="content_count" label="教材页面数" width="120" header-align="center" align="center" />
-        <el-table-column prop="shangjia_time" label="上架时间" header-align="center" width="160" />
-        <el-table-column label="已申请下架" header-align="center" align="center">
-          <template slot-scope="{ row }">
-            <span style="color: #f53f3f">
-              {{ isTrue(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"
-              @click="
-                $router.push({
-                  path: `/book_info/${row.id}`,
-                  query: { isManage: false, backPath: '/project_manage/book' },
-                })
-              "
-            >
-              查看信息
-            </span>
-            <span class="link" @click="previewCourseware(row.id)">预览教材</span>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <PaginationPage :total="total" @getList="pageQueryMyProjectYSJBookList_Leader" />
-    </div>
-  </div>
-</template>
-
-<script>
-import PaginationPage from '@/components/PaginationPage.vue';
-import MenuPage from '@/views/personal_workbench/common/menu.vue';
-
-import { PageQueryMyProjectYSJBookList_Leader } from '@/api/list';
-import { isTrue } from '@/utils/validate';
-
-export default {
-  name: 'BookPage',
-  components: {
-    PaginationPage,
-    MenuPage,
-  },
-  data() {
-    return {
-      list: [],
-      total: 0,
-      cur_page_begin_index: 0,
-      isTrue,
-    };
-  },
-  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>
-
-<style lang="scss" scoped>
-@use '@/styles/mixin.scss' as *;
-
-.book {
-  @include page-base;
-  @include table-list;
-}
-</style>

+ 1 - 2
src/views/project_manage/common/ProjectMenu.vue

@@ -34,8 +34,7 @@ export default {
         { key: 'book', name: '已上架教材' },
       ],
       ORG_MANAGER: [
-        { key: 'org/project', name: '已立项' },
-        { key: 'org/final', name: '已终审' },
+        { key: 'org/project', name: '项目' },
         { key: 'org/book', name: '已上架教材' },
         { key: 'org/authorization', name: '教材第三方应用授权' },
         { key: 'org/offlinepackageauth', name: '离线包授权' },

+ 0 - 126
src/views/project_manage/org/final/OrgFinalPreview.vue

@@ -1,126 +0,0 @@
-<template>
-  <div class="org-final-preview">
-    <ProjectMenu cur-key="org/final" />
-
-    <CommonPreview ref="preview" :project-id="project_id">
-      <template #operator="{ courseware }">
-        <span class="link">查看项目信息</span>
-        <span class="link">查看教材信息</span>
-        <span v-if="isTrue(courseware.is_can_shangjia_book)" class="link" @click="openConfirmBookDialog">上架</span>
-        <span
-          v-if="isTrue(courseware.is_can_reject_shangjia_book_request)"
-          class="link"
-          @click="rejectShangjiaBookRequest"
-        >
-          驳回上架请求
-        </span>
-        <span v-if="isTrue(courseware.is_can_rollback_project)" class="link" @click="rollbackProject">退改</span>
-        <span
-          v-if="isTrue(courseware.is_can_reject_rollback_project_request)"
-          class="link"
-          @click="rejectRollbackProjectRequest"
-        >
-          驳回退改请求
-        </span>
-        <span class="link" @click="goBackBookList">返回项目列表</span>
-      </template>
-    </CommonPreview>
-
-    <ConfirmBookInfo :project-id="project_id" :visible.sync="visible" @confirm="shangjiaBook" />
-  </div>
-</template>
-
-<script>
-import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
-import CommonPreview from '@/components/CommonPreview.vue';
-import ConfirmBookInfo from './components/ConfirmBookInfo.vue';
-
-import { isTrue } from '@/utils/validate';
-import { ShangjiaBook, RollbackProject, RejectShangjiaBookRequest, RejectRollbackProjectRequest } from '@/api/project';
-
-export default {
-  name: 'OrgFinalPreview',
-  components: {
-    ProjectMenu,
-    CommonPreview,
-    ConfirmBookInfo,
-  },
-  data() {
-    return {
-      project_id: this.$route.params.projectId || '',
-      isTrue,
-      visible: false,
-    };
-  },
-  methods: {
-    openConfirmBookDialog() {
-      this.visible = true;
-    },
-    shangjiaBook() {
-      const loading = this.$loading('正在上架教材,请稍等...');
-      ShangjiaBook({ project_id: this.project_id })
-        .then(() => {
-          this.$message.success('上架成功');
-          this.$refs.preview.getProjectBaseInfo();
-        })
-        .finally(() => {
-          loading.close();
-          this.visible = false;
-        });
-    },
-    rollbackProject() {
-      this.$confirm('确定要退改吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          RollbackProject({ project_id: this.project_id }).then(() => {
-            this.$message.success('退改成功');
-            this.$refs.preview.getProjectBaseInfo();
-          });
-        })
-        .catch(() => {});
-    },
-    rejectShangjiaBookRequest() {
-      this.$confirm('确定要驳回上架请求吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          RejectShangjiaBookRequest({ project_id: this.project_id }).then(() => {
-            this.$message.success('驳回上架请求成功');
-            this.$refs.preview.getProjectBaseInfo();
-          });
-        })
-        .catch(() => {});
-    },
-    rejectRollbackProjectRequest() {
-      this.$confirm('确定要驳回退改请求吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          RejectRollbackProjectRequest({ project_id: this.project_id }).then(() => {
-            this.$message.success('驳回退改请求成功');
-            this.$refs.preview.getProjectBaseInfo();
-          });
-        })
-        .catch(() => {});
-    },
-    goBackBookList() {
-      this.$router.push({ path: '/project_manage/org/final' });
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-@use '@/styles/mixin.scss' as *;
-
-.org-final-preview {
-  @include page-content(true);
-}
-</style>

+ 0 - 96
src/views/project_manage/org/final/components/ConfirmBookInfo.vue

@@ -1,96 +0,0 @@
-<template>
-  <el-dialog
-    :visible="visible"
-    width="600px"
-    title="上架教材(确认教材信息)"
-    :close-on-click-modal="false"
-    @close="dialogClose"
-  >
-    <div class="book-details">
-      <span class="label">名称</span>
-      <span class="book-info">{{ book_info.name }}</span>
-      <span class="label">版本</span>
-      <span class="book-info">{{ book_info.version }}</span>
-      <span class="label">英文名称</span>
-      <span class="book-info">{{ book_info.name_english }}</span>
-      <span class="label">所属丛书</span>
-      <span class="book-info">{{ book_info.series_name }}</span>
-      <span class="label">国际标准图书编号(ISBN)</span>
-      <span class="book-info">{{ book_info.isbn }}</span>
-      <span class="label">作者</span>
-      <span class="book-info">{{ book_info.author }}</span>
-      <span class="label">价格</span>
-      <span class="book-info">{{ book_info.price }}</span>
-    </div>
-
-    <div slot="footer">
-      <el-button type="primary" @click="confirm">上架教材</el-button>
-      <el-button @click="dialogClose">取消</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-import { GetBookBaseInfo } from '@/api/book';
-
-export default {
-  name: 'ConfirmBookInfo',
-  props: {
-    projectId: {
-      type: String,
-      required: true,
-    },
-    visible: {
-      type: Boolean,
-      default: false,
-    },
-  },
-  data() {
-    return {
-      book_info: {
-        name: '',
-        version: '',
-        name_english: '',
-        series_name: '',
-        isbn: '',
-        author: '',
-        price: '',
-      },
-    };
-  },
-  created() {
-    this.getBookBaseInfo();
-  },
-  methods: {
-    getBookBaseInfo() {
-      GetBookBaseInfo({ id: this.projectId }).then(({ book_info }) => {
-        this.book_info = book_info;
-      });
-    },
-    dialogClose() {
-      this.$emit('update:visible', false);
-    },
-    confirm() {
-      this.$emit('confirm');
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-.book-details {
-  display: grid;
-  grid-template-columns: 200px 1fr;
-
-  .label,
-  .book-info {
-    padding: 4px 8px;
-    border-bottom: $border;
-  }
-
-  .label {
-    text-align: right;
-    background-color: $fill-color;
-  }
-}
-</style>

+ 0 - 87
src/views/project_manage/org/final/index.vue

@@ -1,87 +0,0 @@
-<template>
-  <div class="final">
-    <ProjectMenu cur-key="org/final" />
-
-    <div class="final-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="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_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="教材版本" align="center" header-align="center" />
-
-        <el-table-column label="操作" fixed="right" width="240" align="center" header-align="center">
-          <template slot-scope="{ row }">
-            <span
-              class="link"
-              @click="
-                $router.push({
-                  path: `/personal_workbench/project_info/${row.id}`,
-                  query: { isManage: false, backPath: '/project_manage/org/final' },
-                })
-              "
-              >查看信息</span
-            >
-            <span class="link" @click="previewProject(row.id)">预览项目</span>
-            <span class="link">预览历史版本</span>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <PaginationPage :total="total" @getList="pageQueryProjectList_OrgManager" />
-    </div>
-  </div>
-</template>
-
-<script>
-import PaginationPage from '@/components/PaginationPage.vue';
-import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
-
-import { PageQueryProjectList_OrgManager } from '@/api/list';
-
-export default {
-  name: 'OrgFinalPage',
-  components: {
-    PaginationPage,
-    ProjectMenu,
-  },
-  data() {
-    return {
-      list: [],
-      total: 0,
-      cur_page_begin_index: 0,
-    };
-  },
-  methods: {
-    pageQueryProjectList_OrgManager(data) {
-      PageQueryProjectList_OrgManager({ ...data, status: 1 }).then(
-        ({ total_count, cur_page_begin_index, project_list }) => {
-          this.total = total_count;
-          this.cur_page_begin_index = cur_page_begin_index;
-          this.list = project_list;
-        },
-      );
-    },
-    previewProject(projectId) {
-      this.$router.push({ path: `/project_manage/org/final/preview/${projectId}` });
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-@use '@/styles/mixin.scss' as *;
-
-.final {
-  @include page-base;
-  @include table-list;
-}
-</style>

+ 15 - 8
src/views/project_manage/org/project/index.vue

@@ -11,17 +11,15 @@
         </el-table-column>
         <el-table-column prop="sn" label="编号" width="140" header-align="center" />
         <el-table-column prop="name" label="名称" width="260" header-align="center" />
+        <el-table-column prop="version" label="版本" width="100" header-align="center" />
         <el-table-column prop="org_name" label="所属机构" width="120" header-align="center" />
         <el-table-column prop="leader_name_desc" label="项目组长" width="140" 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 label="退改" header-align="center" align="center">
-          <template slot-scope="{ row }">
-            <span style="color: #f53f3f">{{ isTrue(row.is_rollback) ? '√' : '' }}</span>
-          </template>
-        </el-table-column>
+        <el-table-column prop="status_name" label="状态" width="120" header-align="center" />
+        <el-table-column prop="request_status_name" label="申请状态" header-align="center" />
 
-        <el-table-column fixed="right" label="操作" width="150" align="center" header-align="center">
+        <el-table-column fixed="right" label="操作" width="350" align="center" header-align="center">
           <template slot-scope="{ row }">
             <span
               class="link"
@@ -34,11 +32,13 @@
               >查看信息</span
             >
             <span class="link" @click="previewProject(row.id)">预览项目</span>
+            <span class="link" @click="projectAuditOperate(row.id, 'true')">审核通过</span>
+            <span class="link" @click="projectAuditOperate(row.id, 'false')">审核拒绝</span>
           </template>
         </el-table-column>
       </el-table>
 
-      <PaginationPage :total="total" @getList="pageQueryProjectList_OrgManager" />
+      <PaginationPage ref="pagination" :total="total" @getList="pageQueryProjectList_OrgManager" />
     </div>
   </div>
 </template>
@@ -49,6 +49,7 @@ import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
 
 import { PageQueryProjectList_OrgManager } from '@/api/list';
 import { isTrue } from '@/utils/validate';
+import { ProjectAuditOperate } from '@/api/project';
 
 export default {
   name: 'OrgProjectPage',
@@ -65,8 +66,14 @@ export default {
     };
   },
   methods: {
+    projectAuditOperate(project_id, is_pass) {
+      ProjectAuditOperate({ project_id, is_pass }).then(() => {
+        this.$message.success('操作成功');
+        this.$refs.pagination.getList();
+      });
+    },
     pageQueryProjectList_OrgManager(data) {
-      PageQueryProjectList_OrgManager({ ...data, status: 0 }).then(
+      PageQueryProjectList_OrgManager({ ...data, status: -1 }).then(
         ({ total_count, cur_page_begin_index, project_list }) => {
           this.total = total_count;
           this.cur_page_begin_index = cur_page_begin_index;

+ 55 - 13
src/views/project_manage/project/index.vue

@@ -11,19 +11,13 @@
         </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="version" label="版本" width="100" 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="status_name" label="状态" width="120" header-align="center" />
-        <el-table-column prop="request_status_name" label="申请状态" width="120" header-align="center" />
-        <el-table-column prop="version" label="教材版本" width="120" header-align="center" />
-        <el-table-column label="退改" header-align="center" align="center" width="60">
-          <template slot-scope="{ row }">
-            <span style="color: #f53f3f">{{ isTrue(row.is_rollback) ? '√' : '' }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="version_desc_YSJ" label="已上架教材版本" header-align="center" />
+        <el-table-column prop="request_status_name" label="申请状态" header-align="center" />
 
-        <el-table-column label="操作" fixed="right" width="400" align="center" header-align="center">
+        <el-table-column label="操作" fixed="right" width="310" align="center" header-align="center">
           <template slot-scope="{ row }">
             <span
               class="link"
@@ -38,12 +32,48 @@
             <span class="link" @click="previewProject(row.id)">预览项目</span>
             <span class="link" @click="viewMindMap(row.id)">思维导图</span>
             <span class="link" @click="viewVisNetwork(row.id)">知识图谱</span>
-            <span class="link">预览历史版本</span>
+            <template v-if="row.cur_can_operate_button_list?.length > 0">
+              <span
+                v-if="row.cur_can_operate_button_list.includes(1)"
+                class="link"
+                @click="projectRequestOperate(row.id, 1)"
+              >
+                申请上架
+              </span>
+              <span
+                v-if="row.cur_can_operate_button_list.includes(2)"
+                class="link"
+                @click="projectRequestOperate(row.id, 2)"
+              >
+                申请下架
+              </span>
+              <span
+                v-if="row.cur_can_operate_button_list.includes(3)"
+                class="link"
+                @click="projectRequestOperate(row.id, 3)"
+              >
+                申请修订
+              </span>
+              <span
+                v-if="row.cur_can_operate_button_list.includes(4)"
+                class="link"
+                @click="projectRequestOperate(row.id, 4)"
+              >
+                撤回重做
+              </span>
+              <span
+                v-if="row.cur_can_operate_button_list.includes(5)"
+                class="link"
+                @click="projectRequestOperate(row.id, 5)"
+              >
+                申请改错
+              </span>
+            </template>
           </template>
         </el-table-column>
       </el-table>
 
-      <PaginationPage :total="total" @getList="queryMyProjectList_Leader" />
+      <PaginationPage ref="pagination" :total="total" @getList="queryMyProjectList_Leader" />
     </div>
   </div>
 </template>
@@ -54,6 +84,7 @@ import MenuPage from '@/views/personal_workbench/common/menu.vue';
 
 import { PageQueryMyProjectList_Leader } from '@/api/list';
 import { isTrue } from '@/utils/validate';
+import { ProjectRequestOperate } from '@/api/project';
 
 export default {
   name: 'ProjectManage',
@@ -70,6 +101,17 @@ export default {
     };
   },
   methods: {
+    /**
+     * 项目操作
+     * @param project_id: 项目ID
+     * @param operate_type: 1-申请上架 2-申请下架 3-申请修订 4-撤回重做 5-申请改错
+     */
+    projectRequestOperate(project_id, operate_type) {
+      ProjectRequestOperate({ project_id, operate_type }).then(() => {
+        this.$message.success('操作成功');
+        this.$refs.pagination.getList();
+      });
+    },
     queryMyProjectList_Leader(data) {
       PageQueryMyProjectList_Leader(data).then(({ total_count, cur_page_begin_index, project_list }) => {
         this.total = total_count;
@@ -94,7 +136,7 @@ export default {
 @use '@/styles/mixin.scss' as *;
 
 .project-manage {
-  @include page-base;
-  @include table-list;
+  @includes page-base;
+  @includes table-list;
 }
 </style>