dusenyao преди 3 седмици
родител
ревизия
d1946c3a8c

+ 2 - 0
src/api/project.js

@@ -11,6 +11,7 @@ export function CreateProject(data) {
 /**
  * @description 得到项目基本信息
  * @param {object} data
+ * @param {string} data.id 项目ID
  */
 export function GetProjectBaseInfo(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=project_manager-GetProjectBaseInfo`, data);
@@ -194,6 +195,7 @@ export function DeleteCoursewareAuditRemarkList(data) {
  * @description 申请上架教材
  * @param {object} data
  * @param {string} data.project_id 项目ID
+ * @parma {object} data.book_info 申请上架教材需要完善的教材信息
  */
 export function RequestShangjiaBook(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=project_manager-RequestShangjiaBook`, data);

+ 0 - 6
src/utils/index.js

@@ -1,10 +1,4 @@
 /**
- * @description 生成指定位随机数的函数
- * @param {number} length 随机数的位数
- * @param {boolean} isUpperCase 是否大写
- * @returns {string} 随机36进制数
- */
-/**
  * 生成指定位随机数的函数
  * @param {number} length 随机数的位数
  * @param {boolean} isUpperCase 是否大写

+ 1 - 1
src/views/project_manage/book/BookPreview.vue

@@ -6,7 +6,7 @@
       <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>
+        <span class="link" @click="goBackToProjectList">返回教材列表</span>
       </template>
     </CommonPreview>
   </div>

+ 3 - 1
src/views/project_manage/book/index.vue

@@ -19,7 +19,7 @@
         <el-table-column label="已申请下架" header-align="center" align="center">
           <template slot-scope="{ row }">
             <span style="color: #f53f3f">
-              {{ row.is_request_xiajia ? '√' : '' }}
+              {{ isTrue(row.is_request_xiajia) ? '√' : '' }}
             </span>
           </template>
         </el-table-column>
@@ -42,6 +42,7 @@ import PaginationPage from '@/components/PaginationPage.vue';
 import ProjectMenu from '../common/ProjectMenu.vue';
 
 import { PageQueryMyProjectYSJBookList_Leader } from '@/api/list';
+import { isTrue } from '@/utils/common';
 
 export default {
   name: 'BookPage',
@@ -54,6 +55,7 @@ export default {
       list: [],
       total: 0,
       cur_page_begin_index: 0,
+      isTrue,
     };
   },
   methods: {

+ 1 - 1
src/views/project_manage/org/book/OrgBookPreview.vue

@@ -12,7 +12,7 @@
         <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>
+        <span class="link" @click="goBackProjectList">返回教材列表</span>
       </template>
     </CommonPreview>
   </div>

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

@@ -6,17 +6,20 @@
       <template #operator="{ courseware }">
         <span class="link">查看项目信息</span>
         <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_shangjia_book)" class="link" @click="openConfirmBookDialog">上架</span>
         <span v-if="isTrue(courseware.is_can_rollback_project)" class="link" @click="rollbackProject">退改</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/common';
 import { ShangjiaBook, RollbackProject } from '@/api/project';
@@ -26,14 +29,19 @@ export default {
   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 })
@@ -43,6 +51,7 @@ export default {
         })
         .finally(() => {
           loading.close();
+          this.visible = false;
         });
     },
     rollbackProject() {

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

@@ -0,0 +1,97 @@
+<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;
+  border: $border;
+
+  .label,
+  .book-info {
+    padding: 4px 8px;
+    border-bottom: $border;
+  }
+
+  .label {
+    text-align: right;
+    background-color: $fill-color;
+  }
+}
+</style>

+ 13 - 3
src/views/project_manage/project/ProjectPreview.vue

@@ -4,7 +4,7 @@
 
     <CommonPreview ref="preview" :project-id="project_id">
       <template #operator="{ courseware }">
-        <span v-if="isTrue(courseware.is_can_request_shangjia_book)" class="link" @click="requestShangjiaBook">
+        <span v-if="isTrue(courseware.is_can_request_shangjia_book)" class="link" @click="openRequestBookDialog">
           申请上架
         </span>
         <span v-if="isTrue(courseware.is_can_request_rollback_project)" class="link" @click="requestRollbackProject">
@@ -13,12 +13,15 @@
         <span class="link" @click="goBackBookList">返回项目列表</span>
       </template>
     </CommonPreview>
+
+    <RequestBook :project-id="project_id" :visible.sync="requestBookVisible" @confirm="requestShangjiaBook" />
   </div>
 </template>
 
 <script>
 import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
 import CommonPreview from '@/components/CommonPreview.vue';
+import RequestBook from './components/RequestBook.vue';
 
 import { isTrue } from '@/utils/common';
 import { RequestShangjiaBook, RequestRollbackProject } from '@/api/project';
@@ -28,22 +31,29 @@ export default {
   components: {
     ProjectMenu,
     CommonPreview,
+    RequestBook,
   },
   data() {
     return {
       project_id: this.$route.params.projectId || '',
       isTrue,
+      requestBookVisible: false,
     };
   },
   methods: {
     goBackBookList() {
       this.$router.push({ path: `/project_manage/project` });
     },
+    // 打开申请上架对话框
+    openRequestBookDialog() {
+      this.requestBookVisible = true;
+    },
     // 申请上架
-    requestShangjiaBook() {
-      RequestShangjiaBook({ project_id: this.project_id }).then(() => {
+    requestShangjiaBook(data) {
+      RequestShangjiaBook(data).then(() => {
         this.$message.success('申请上架成功');
         this.$refs.preview.getProjectBaseInfo();
+        this.requestBookVisible = false;
       });
     },
     // 申请退回

+ 102 - 0
src/views/project_manage/project/components/RequestBook.vue

@@ -0,0 +1,102 @@
+<template>
+  <el-dialog
+    :visible="visible"
+    width="500px"
+    title="申请上架(填写教材信息)"
+    :close-on-click-modal="false"
+    @close="dialogClose"
+  >
+    <el-form ref="form" label-width="200px" :model="book_info">
+      <el-form-item label="名称">
+        <el-input v-model="book_info.name" disabled />
+      </el-form-item>
+      <el-form-item label="版本">
+        <el-input v-model="book_info.version" />
+      </el-form-item>
+      <el-form-item label="英文名称">
+        <el-input v-model="book_info.name_english" />
+      </el-form-item>
+      <el-form-item label="所属丛书">
+        <el-input v-model="book_info.series_name" />
+      </el-form-item>
+      <el-form-item label="国际标准图书编号(ISBN)">
+        <el-input v-model="book_info.isbn" />
+      </el-form-item>
+      <el-form-item label="作者">
+        <el-input v-model="book_info.author" />
+      </el-form-item>
+      <el-form-item label="价格">
+        <el-input v-model="book_info.price" type="number" step="0.01" @input="onPriceInput" />
+      </el-form-item>
+    </el-form>
+
+    <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: 'RequestBook',
+  props: {
+    projectId: {
+      type: String,
+      required: true,
+    },
+    visible: {
+      type: Boolean,
+      required: true,
+    },
+  },
+  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;
+      });
+    },
+    onPriceInput(value) {
+      const regex = /^\d+(\.\d{0,2})?$/;
+      if (!regex.test(value)) {
+        this.book_info.price = value.slice(0, -1);
+      }
+    },
+    dialogClose() {
+      this.$emit('update:visible', false);
+    },
+    confirm() {
+      this.$emit('confirm', {
+        project_id: this.projectId,
+        book_info: {
+          name: this.book_info.name,
+          version: this.book_info.version,
+          name_english: this.book_info.name_english,
+          series_name: this.book_info.series_name,
+          isbn: this.book_info.isbn,
+          author: this.book_info.author,
+          price: this.book_info.price,
+        },
+      });
+    },
+  },
+};
+</script>