闫增涛
2024-05-22 0df037ea5a1ee04e35eb339ff1fcddf658e4901f
英语
9个文件已修改
16个文件已添加
1204 ■■■■■ 已修改文件
src/App.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0011-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0012-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0012-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0012-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0012-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0012-5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0012-6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0013-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0013-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0013-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0014-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/0018-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/SMY.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/dy1-le1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/images/dy1-wordbank.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/assets/main.less 648 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/view/components/header.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/view/components/index.vue 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/English/view/index.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/embedded/assets/main.less 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/embedded/view/components/header.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/embedded/view/index.vue 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue
@@ -3,6 +3,7 @@
    <childHealth v-if="activeBook.name == 'childHealth'"></childHealth>
    <book v-if="activeBook.name == 'content'"></book>
    <embedded v-if="activeBook.name == 'embedded'"></embedded>
    <english v-if="activeBook.name == 'english'"></english>
  </div>
</template>
@@ -10,6 +11,7 @@
import childHealth from "./books/childHealth/view/index.vue";
import book from "./books/content/index.vue";
import embedded from "./books/embedded/view/index.vue";
import english from "./books/English/view/index.vue"
export default {
  name: "App",
@@ -17,6 +19,7 @@
    childHealth,
    book,
    embedded,
    english
  },
  data() {
    return {
src/assets/js/config.js
@@ -1,6 +1,6 @@
import axios from "axios";
export const requestCtx = "https://jsek.bnuic.com"; // 请求地址
export const resourceCtx = "http://182.92.203.7:3007/books/resource/3"; // 资源请求地址
export const resourceCtx = "http://182.92.203.7:3007/books/resource/4"; // 资源请求地址
export const publicCtx = "http://182.92.203.7:3007/books/book/1"; // 资源请求地址
export let activeBook = {}; // 资源请求地址
export let goodsStore = "";
src/books/English/assets/images/0011-2.jpg
src/books/English/assets/images/0012-1.jpg
src/books/English/assets/images/0012-2.jpg
src/books/English/assets/images/0012-3.jpg
src/books/English/assets/images/0012-4.jpg
src/books/English/assets/images/0012-5.jpg
src/books/English/assets/images/0012-6.jpg
src/books/English/assets/images/0013-1.jpg
src/books/English/assets/images/0013-2.jpg
src/books/English/assets/images/0013-3.jpg
src/books/English/assets/images/0014-1.jpg
src/books/English/assets/images/0018-1.jpg
src/books/English/assets/images/SMY.jpg
src/books/English/assets/images/dy1-le1.jpg
src/books/English/assets/images/dy1-wordbank.jpg
src/books/English/assets/main.less
@@ -0,0 +1,648 @@
.english-book {
  .ls1 {
    font-family: "Times New Roman";
    color: #30aad1;
    font-weight: bold;
  }
  .hs {
    font-family: "Times New Roman";
    color: #ea6b00;
    font-weight: bold;
  }
  .zs1 {
    font-family: "Times New Roman";
    color: #857eb4;
    font-weight: bold;
  }
  span.under1 {
    border-bottom: 2px solid #f0bd4a;
    border-width: 2px;
  }
  div.bodystyle {
    font-family: "Times New Roman", "宋体";
    font-size: 18px;
    text-align: justify;
    margin: 5%;
    line-height: 30px;
  }
  span.zt-0 {
    color: #0087af;
  }
  p.pzt-0 {
    color: #0087af;
    font-size: 18px;
  }
  p.pzt-0-right {
    font-size: 18px;
    color: #0087af;
    text-align: right;
  }
  p.pzt-1 {
    font-weight: bold;
    color: #0087af;
    font-size: 18px;
  }
  .note {
    font-size: 0.85em;
  }
  .img-right {
    font-family: "Times New Roman", "宋体";
    text-align: right;
    font-size: 0.85em;
    color: #5d78bb;
    margin-left: 0%;
    margin-right: 5%;
    text-indent: 0em;
  }
  .img {
    font-family: "Times New Roman", "宋体";
    text-align: center;
    font-size: 0.8em;
    color: #5d78bb;
    margin-left: 0%;
    margin-right: 0%;
    text-indent: 0em;
  }
  .img1 {
    font-family: "Times New Roman", "宋体";
    text-align: right;
    font-size: 0.85em;
    margin-left: 0%;
    margin-right: 2em;
    text-indent: 0em;
  }
  p {
    margin-top: 1em;
    text-indent: 2em;
    line-height: 30px;
    font-size: 18px;
    text-align: justify;
  }
  .cover {
    width: 100%;
    padding: 0px;
  }
  .center {
    text-align: center;
    margin-left: 0%;
    margin-right: 0%;
    text-indent: 0em;
  }
  .center1 {
    font-family: "Times New Roman", "宋体";
    text-align: center;
    margin-left: 0%;
    margin-right: 0%;
    text-indent: 0em;
  }
  .left {
    text-indent: 0em;
    margin-left: 0%;
    margin-right: 0%;
  }
  .right {
    text-align: right;
    margin-left: 0%;
    margin-right: 0%;
  }
  .right1 {
    font-family: "Times New Roman", "宋体";
    text-align: right;
    margin-left: 0%;
    margin-right: 0%;
  }
  .quote {
    margin-top: 0%;
    margin-bottom: 0%;
    margin-left: 1em;
    margin-right: 1em;
    text-align: justify;
    font-family: "cnepub", serif;
  }
  h1 {
    font-family: "Times New Roman", "宋体";
    text-align: center;
    font-size: 2em;
    margin-bottom: 0.5cm;
    margin-top: 0.5cm;
  }
  h1.front {
    font-family: "Times New Roman", "宋体";
    color: #b898c7;
    text-align: center;
    font-size: 1.8em;
    margin-bottom: 0.5cm;
    margin-top: 0.5cm;
  }
  h1.lefth1 {
    font-family: "Times New Roman", "宋体";
    text-align: right;
    font-size: 2em;
    margin-bottom: 0.5cm;
    margin-top: 0.5cm;
  }
  h2 {
    font-family: "Times New Roman", "宋体";
    font-weight: bold;
    font-size: 1.2em;
    margin-top: 0.2em;
    margin-bottom: 0.2em;
    text-indent: 0em;
  }
  h3 {
    font-family: "Times New Roman", "宋体";
    color: #5877ba;
    font-weight: bold;
    font-size: 1.15em;
    margin-top: 2em;
    text-align: left;
    margin-bottom: 2em;
    text-indent: 0em;
  }
  h3.lefth3 {
    font-family: "Times New Roman", "宋体";
    color: #5877ba;
    font-weight: bold;
    font-size: 1.15em;
    margin-top: 2em;
    text-align: center;
    margin-bottom: 2em;
    text-indent: 0em;
    text-align: left;
  }
  h4 {
    font-family: "Times New Roman", "宋体";
    font-weight: bold;
    color: #5877ba;
    font-size: 1.1em;
    margin-top: 0.2em;
    margin-bottom: 1em;
    text-indent: 0em;
  }
  h4.h4-zt {
    font-family: "Times New Roman", "宋体";
    font-weight: bold;
    color: #7bb4e3;
    font-size: 1.1em;
    margin-top: 0.2em;
    margin-bottom: 1em;
    text-indent: 0em;
  }
  h5 {
    font-family: "Times New Roman", "宋体";
    font-weight: bold;
    color: #c96653;
    font-size: 1em;
    margin-top: 0.2em;
    margin-bottom: 1em;
    text-indent: 2em;
  }
  h6 {
    font-family: "cnepub", serif;
    font-family: "Times New Roman", "宋体";
    color: #36c3f4;
    font-size: 1.1em;
    margin-top: 10px;
    text-indent: 2em;
    margin-bottom: 10px;
  }
  .u {
    text-decoration: underline;
  }
  .img-0 {
    width: 100%;
  }
  .imz {
    width: 96%;
    text-align: center;
  }
  .img-a {
    width: 95%;
  }
  .img-b {
    width: 80%;
  }
  .img-c {
    width: 70%;
  }
  .img-d {
    width: 60%;
  }
  .img-e {
    width: 50%;
  }
  .img-f {
    width: 40%;
  }
  .img-g {
    width: 30%;
  }
  .img-gh1 {
    width: 30%;
    text-align: right;
  }
  .img-gh2 {
    width: 45%;
    text-align: right;
  }
  .img-h {
    width: 20%;
  }
  .img-i {
    width: 10%;
  }
  .img-j {
    width: 5%;
  }
  .inline {
    height: 1em;
    margin-bottom: -0.3em;
  }
  .inline1 {
    height: 1.9em;
    margin-bottom: -0.4em;
  }
  .em_dot {
    -webkit-text-emphasis-style: dot;
    -moz-text-emphasis-style: dot;
    -ms-text-emphasis-style: dot;
    text-emphasis-style: dot;
    -webkit-text-emphasis-position: under;
    -moz-text-emphasis-position: under;
    -ms-text-emphasis-position: under;
    text-emphasis-position: under;
  }
  .fieldset {
    border: 2px solid #5f5f5d;
    font-size: 0.9em;
    margin-left: 1.5em;
    margin-right: 1.5em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-2 {
    border: 2px solid #e9a10e;
    font-size: 0.9em;
    margin-left: 3em;
    margin-right: 3em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-1 {
    border: 3px dotted #3fb084;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-3 {
    border: 5px double #0da687;
    background: #ebf5ec;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-4 {
    border: 5px double #e6a20f;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-5 {
    border: 5px double #e6a20f;
    background: #f6ead0;
    font-size: 0.9em;
    margin-left: 2em;
    margin-right: 2em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-6 {
    border: 5px double #02a381;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-61 {
    border: 5px dotted #d2dbc6;
    background: #eaf4eb;
    font-size: 0.9em;
    margin-left: 2em;
    margin-right: 2em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-7 {
    border: 5px solid #e8a20c;
    background: #f6ead0;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-8 {
    border: 3px solid #e8a20c;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  .fieldset-9 {
    border: 5px dotted #01a4e9;
    font-size: 0.9em;
    margin-left: 1em;
    margin-right: 1em;
    margin-top: 1em;
    margin-bottom: 1em;
    padding: 0.3em 0.5em 0.3em 0.5em;
    font-family: "Times New Roman", "宋体";
  }
  span.linethrough {
    text-decoration: line-through;
  }
  .border {
    /*˹���-�߿���*/
    border-width: 1px;
    border-style: solid;
  }
  /* 新增样式 */
  .custom_title1 {
    font-family: "Times New Roman", "宋体";
    background-color: rgb(125, 164, 64);
    width: 70vw;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
    color: #ffffff;
    padding: 10px 0;
    border-radius: 20px;
    display: flex;
    align-items: center;
    font-size: 21px;
    margin-bottom: 0.5cm;
    margin-top: 0.5cm;
  }
  .title_icon {
    width: 50px;
    margin: 0 20px 0 15px;
  }
  .custom_chapter {
    font-family: "Times New Roman", "宋体";
    color: rgb(108, 152, 65);
    padding: 15px 10px;
    background-color: rgb(202, 217, 180);
    position: relative;
    display: inline-block;
    padding: 10px;
    font-size: 19px;
    left: 50%;
    transform: translateX(-50%);
    margin-bottom: 0.2cm;
    margin-top: 0.2cm;
  }
  .custom_chapter::before {
    font-family: "Times New Roman", "宋体";
    content: "";
    width: 12px;
    height: 60%;
    background-color: rgb(125, 164, 64);
    position: absolute;
    left: -12px;
    top: 50%;
    transform: translateY(-50%);
  }
  .custom_chapter::after {
    font-family: "Times New Roman", "宋体";
    content: "";
    width: 12px;
    height: 60%;
    background-color: rgb(125, 164, 64);
    position: absolute;
    right: -12px;
    top: 50%;
    transform: translateY(-50%);
  }
  .custom_title2 {
    color: rgb(154, 106, 17);
    background: url(image/xt.png) no-repeat;
    background-size: 100% 100%;
    display: inline-block;
    padding: 18px;
    font-size: 21px;
    margin-bottom: 0.2cm;
    margin-top: 0.2cm;
    font-family: "Times New Roman", "宋体";
  }
  .img-gn {
    height: 1.6em;
    margin-bottom: -0.4em;
  }
  .img-gn1 {
    height: 2.5em;
    margin-bottom: -0.4em;
  }
  .img-gn2 {
    height: 2em;
    margin-bottom: -0.5em;
  }
  .img-gn-zt {
    height: 2.5em;
    margin-bottom: -0.4em;
  }
  .div-img-h3 {
    display: flex;
    align-items: center;
  }
  .div-img-h3 h3 {
    flex: 1;
  }
  .bold1 {
    font-weight: bold;
    font-size: 1.1em;
  }
  .lvz {
    font-family: "Times New Roman", "宋体";
    color: #6eb92c;
    font-weight: bold;
  }
  ul {
    list-style-type: none;
  }
  li {
    list-style-type: none;
  }
  p.hr {
    padding: 0.3em;
    line-height: 1.5em;
    border-bottom: 1px solid #f49a4c;
  }
  .zt-ls {
    color: #99b4df;
    font-weight: bold;
  }
  .zt-cs {
    color: #f5ae08;
    font-weight: bold;
  }
  div.bk {
    border: 3px dotted #f49a4c;
    padding: 15px;
    margin-bottom: 2em;
    margin-top: 0.5em;
  }
  div.bk-11 {
    border: 3px double #f49a4c;
    border-radius: 2em;
    padding: 15px;
    margin-bottom: 2em;
    margin-top: 0.5em;
  }
  div.bk-12 {
    background: #1bada0;
    color: #ffffff;
    border-radius: 2em;
    padding: 15px;
    margin-bottom: 2em;
    margin-top: 0.5em;
  }
  div.bk-13 {
    border: 3px dashed #dddddd;
    border-radius: 2em;
    padding: 15px;
    margin-bottom: 2em;
    margin-top: 0.5em;
  }
  div.bk-14 {
    border: 3px solid #e7a310;
    padding: 15px;
    margin-bottom: 2em;
    margin-top: 0.5em;
  }
  .bjh3 {
    border: 10px dotted #faeec6;
    background: #0da785;
    padding: 0.2em 0.4em 0.2em 0.4em;
    color: #ffffff;
    border-radius: 1em;
    margin-top: -1em;
    margin-left: 0.5em;
    margin-right: 0.5em;
    margin-bottom: -0.8em;
    font-size: 1.1em;
    font-weight: bold;
  }
  div.bkbj {
    border: 1px dotted #e9f6fe;
    background: #e9f6fe;
    padding: -0.01em;
  }
  div.bj-note {
    background: #fde2d1;
    padding: 0.3em 0.5em 0.3em 0.5em;
  }
  div.bk-wh {
    border: 3px dotted #f49a4c;
    padding: 0.3em 0.5em 0.3em 0.5em;
    margin-bottom: 2em;
    margin-left: 2em;
    margin-right: 2em;
    border-radius: 1em;
    margin-top: 0.5em;
  }
  div.dy1-bj4 {
    background: #f8be6c;
    padding: 0.01em 1em 0.01em 1em;
    color: #000000;
    margin-left: 0.2em;
    margin-right: 0.2em;
    margin-bottom: 0.2em;
    margin-top: 0.5em;
    font-size: 1.3em;
    font-weight: bold;
  }
  div.dy1-bj5 {
    background: #f6ead0;
    padding: 0.01em 1em 0.01em 1em;
    color: #000000;
    margin-top: -1em;
    font-size: 1.3em;
    font-weight: bold;
    margin-left: 0.2em;
    margin-right: 0.2em;
  }
  div.un-h2 {
    display: flex;
    border-bottom: 10px double #0183bf;
    align-items: center;
  }
}
src/books/English/view/components/header.vue
New file
@@ -0,0 +1,126 @@
<template>
  <div class="chapter" num="0">
    <!-- 1 -->
    <div class="page-box" page="1">
      <p class="center"><img class="img-0" alt="" src="image/SMY.jpg" /></p>
    </div>
    <!-- 2 -->
    <div class="page-box" page="2">
      <div class="bodystyle">
        <p><b>图书在版编目(CIP)数据</b></p>
        <p>
          新标准通用职场英语:基础模块一/刘大利,罗忠明,邓冬至主编.—北京:北京师范大学出版社,2023.9
        </p>
        <p>新标准通用职场英语/王朝晖总主编</p>
        <p>ISBN 978-7-303-29145-8</p>
        <p>Ⅰ.①新… Ⅱ.①刘…②罗…③邓… Ⅲ.①英语-高等职业教育-教材 Ⅳ.①H319.39</p>
        <p>中国版本图书馆CIP数据核字(2023)第092550号</p>
        <p><br /></p>
        <p><br /></p>
        <p><b>图书意见反馈 gaozhifk@bnupg.com 010-58805079</b></p>
        <p>营销中心电话 010-58802755 58800035</p>
        <p><br /></p>
        <p>出版发行:北京师范大学出版社 www.bnup.com</p>
        <p>     北京市西城区新街口外大街12-3号</p>
        <p>     邮政编码:100088</p>
        <p>印  刷:北京盛通印刷股份有限公司</p>
        <p>经  销:全国新华书店</p>
        <p>开  本:889mm×1194mm 1/16</p>
        <p>印  张:10.25</p>
        <p>字  数:246千字</p>
        <p>版  次:2023年9月第1版</p>
        <p>印  次:2023年9月第1次印刷</p>
        <p>定  价:48.80元</p>
        <p>策划编辑:易新</p>
        <p>责任编辑:陈倩</p>
        <p>美术编辑:陈涛 焦丽</p>
        <p>装帧设计:陈涛 焦丽</p>
        <p>责任校对:陈荟</p>
        <p>责任印制:马洁</p>
        <p class="center"><b>版权所有 侵权必究</b></p>
        <p class="center"><b>反盗版、侵权举报电话:</b>010-58800697</p>
        <p class="block2">北京读者服务部电话:010-58808104</p>
        <p class="block2">外埠邮购电话:010-58808083</p>
        <p class="block2">本书如有印装质量问题,请与印制管理部联系调换。</p>
        <p class="block2">印制管理部电话:010-58808284</p>
      </div>
    </div>
    <!-- 3 -->
    <div class="page-box" page="3">
      <div class="bodystyle">
        <h1 id="a003" class="front">前言</h1>
        <p>
          《新标准通用职场英语》的编写团队以党的教育方针为宗旨,贯彻党的二十大报告精神,对标《高等职业教育专科英语课程标准(2021年版)》,遵循《高等学校课程思政建设指导纲要》的要求,参照《中国英语能力等级量表》四级和五级能力要求,立足高职英语教学实际,进行设计和编写,既注重提升学生的核心素养、促进普职融通,又全方位融入课程思政,落实立德树人根本任务。
        </p>
        <p class="center"><b>一、教材编写理念</b></p>
        <p><span class="kaiti">1.全面贯彻落实新课程标准要求</span></p>
        <p>
          《新标准通用职场英语》系列教材全面对标《高等职业教育专科英语课程标准(2021年版)》,充分突出高职英语课程的思想性、科学性、职业性、时代性,关注各学段的衔接性,实现价值引领,培养学生的必备能力和关键能力。
        </p>
        <p>
          <span class="kaiti">2.全程融入课程思政,彰显语言课程的育人功能</span>
        </p>
        <p>
          教材从单元主题、素材选取、练习设置等各方面综合设计,紧密联系中国社会和文化,弘扬正能量。在提升学生核心素养的同时,引导学生关注社会,关注他人,潜移默化地培养学生的家国情怀和人文素养,增强学生在多元文化交流环境中讲述中国故事和推介中国文化的能力。教材以“立德树人”为根本任务,立足新时代中国职业教育大背景,以职业为关键词,选取职业与个人、职业与社会、职业与环境主题的语言材料,在助力语言教学的同时,引导学生贡献社会、关心社会、爱岗敬业,实现公共英语课程培根铸魂、启智增慧的功能,促进学生全面发展。
        </p>
        <p><span class="kaiti">3.基于产出导向理念,实施项目化教学</span></p>
        <p>
          教材基于产出导向的理念,打破传统听、说、读、写分板块编写的体例,进行一单元一项目的项目化教学设计,综合运用听、说、读、写、看等多种语言技能和融媒体手段,搭建语言支架,层层递进,环环相扣,助力学生最终完成单元项目任务。
        </p>
        <p><span class="kaiti">4.满足教与学的多元需求</span></p>
        <p>
          高职扩招之后,学生呈多元化层级结构,对学习的需求也变得多元化。本套教材,基于高职学生公共英语课程的现状调研,聚焦教学内容、教学活动、教学模式等方面,着力开发新形态教材和相关资源,满足高职院校学生的多种学习需求。
        </p>
        <p class="center"><b>二、教材体系设计</b></p>
        <p><span class="kaiti">1.项目为导向的单元设计</span></p>
        <p>
          每个单元包含三个子项目。输入材料由浅入深,从语言、内容、结构上逐渐搭建支架,引领学生有针对性地探索、学习,最终完成单元项目。
        </p>
        <p><span class="kaiti">2.职场为导向的情境设置</span></p>
        <p>
          将单元项目融入职场情境,结合行业和企业对高职学生语言技能的要求,从求职应聘、生产服务、营销售后等典型职业场景规划语言学习内容,创设学习情境和具体学习任务,培养学生在职场环境中用英语进行沟通的能力及解决职场问题的能力。
        </p>
        <p><span class="kaiti">3.混合式学习为导向的教学模式</span></p>
        <p>
          依托北师大“京师乐学”和“京师E课”平台,开发与教材深度融合的移动数字级创新慕课平台。数字课程包含视频微课、在线练习、互动讨论等,与教材有机结合,相互依托。线上线下深度融合,赋能教学。
        </p>
        <p class="center"><b>三、教材特色</b></p>
        <p>1.紧扣新课标要求,突出学生核心素养培养,落实立德树人根本任务</p>
        <p>
          基于学生现有的英语水平和未来的工作需求,针对基础模块课程,结合职场情境设计任务,通过多模态语篇和不同类型体裁的学习素材,夯实学生的听、说、读、写、译、看等技能,提高学生的职场涉外沟通能力,开拓学生的国际视野。单元项目设置聚焦思辨和创新思维训练,旨在提升学生的语言思维能力,使其养成善于探究的思维品格。自我评估环节旨在检测学生的学习效果,使其适时调整学习策略,促进自主学能的提升。
        </p>
        <p>
          <span class="kaiti">2.运用信息技术,建设融媒体资源,赋能教学</span>
        </p>
        <p>
          在遵循语言习得规律的基础上,探究将传统纸质教材融入丰富的融媒体教学资源的路径与方法,充分利用现代化的教学手段和出版社的信息化平台,克服传统教材知识容量有限、内容更新周期慢、图文形式单一、缺乏与学生的互动和反馈等的局限性,针对当代学生依赖互联网、注重阅读体验、感知和接受新事物能力强的特点,更新教材内容和呈现形式,应用信息技术和资源,形成“纸质教材+微课堂+云资源”
          等融媒体教学资源的线上线下教学新形态,满足学生碎片化学习、自主学习、个性化学习的需求,增加学生的参与度,从而提高学生的学习效率。
        </p>
        <p class="center"><b>四、教材创新</b></p>
        <p><span class="kaiti">1.项目导向,任务创设情境化</span></p>
        <p>
          教材编写团队紧扣新课标主题类别话题要求,以层层递进的项目化任务为引领,通过引导学生完成精心设计的情境语言任务,帮助学生全面学习并掌握与主题和情境相关的语言文化知识,提高学生的语言沟通交流能力。
        </p>
        <p><span class="kaiti">2.学用结合,能力培养系统化</span></p>
        <p>
          教材采用系统化的教学设计,以发展学生的核心素养为核心,将学用结合的原则贯穿教学活动全过程,让学生习得的技能有用武之地。
        </p>
        <p class="center"><b>五、编写队伍</b></p>
        <p>
          《新标准通用职场英语》系列教材由成都纺织高等专科学校的王朝晖担任总主编,由四川文轩职业学院的刘大利、四川建筑职业技术学院的罗忠明和邓冬至担任主编,本册由成都纺织高等专科学校的贾丽萍、成都职业技术学院的刘海燕、四川开放大学的侯书华担任副主编。具体编写人员均为多年从事高职公共英语教学与研究的领军人物、骨干教师、双师型素质教师。编写团队教学、管理经验丰富,熟悉语言教学规律,了解职业教育理念,关注职业教育教学的政策和动态,确保了本套教材的编写质量。
        </p>
        <p>
          囿于水平,教材疏漏之处难免。我们真诚欢迎专家、师生对教材提出宝贵意见和建议,以便我们动态完善教材,更好地服务高职外语教育教学,服务广大师生。
        </p>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: "page-header",
};
</script>
<style lang="less" scoped></style>
src/books/English/view/components/index.vue
@@ -1,15 +1,300 @@
<template>
  <div>
  <div class="page-main" @scroll="throttledScrollHandler">
    <div class="page-content">
      <pageHeader></pageHeader>
      <chapterOne></chapterOne>
    </div>
  </div>
</template>
<script>
import pageHeader from './header.vue'
import chapterOne from './chapter001.vue'
  export default {
    name:'pageContent'
  name: "pageContent",
  components:{pageHeader,chapterOne},
  data() {
    return {
      catalogLength: 2, // 总章节数
      showCatalogList: [], // 显示的章节
      loadThreshold: 300, // 触发加载阈值
      throttleThreshold: 100, // 节流阈值
      previousScrollTop: 0,
      throttledScrollHandler: null,
      observer: null,
    };
  },
  watch: {
    showCatalogList: {
      handler(newVal, oldVal) {
        if (
          this.$store.state.qiankun &&
          this.$store.state.qiankun.catalogChange
        ) {
          // 调用父层方法
          this.$store.state.qiankun.catalogChange({
            showCatalogList: newVal,
          });
  }
        // 启动页码观察
        setTimeout(() => {
          this.initObservation();
        }, 500);
      },
    },
  },
  mounted() {
    // 默认加载章节
    this.showCatalogList = [0, 1];
    // 滚动监听节流
    this.throttledScrollHandler = _.throttle(
      this.scrollFun,
      this.throttleThreshold,
      { leading: true, trailing: false }
    );
    // 定义子层方法
    if (this.setGlobalState) {
      // 提供页面跳转功能
      this.setGlobalState({
        gotoPage: (catalog, page) => {
          this.gotoPage(catalog, page);
        },
        // 渲染笔记、高亮、划线
        renderSign: (type, data) => {
          this.renderSign(type, data);
        },
        // 删除笔记、高亮、划线
        delSign: (data) => {
          this.delSign(data);
        },
      });
    }
    // 创建一个新的 Intersection Observer 实例,用于观察目标元素和执行相应的回调函数。
    // new IntersectionObserver(callback, options):使用之前定义的 callback 回调函数和 options 配置选项来初始化 Intersection Observer 实例。
    this.observer = new IntersectionObserver(this.pageChangeCallback, {
      root: null, // 指定根元素,这里设为 null,表示选取整个视窗作为根元素。
      rootMargin: "0px", // 指定根元素的边界,这里设为 "0px",表示根元素的边界和视窗的边界重合
      threshold: 0.5, // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。
    });
    // 启动页码观察
    setTimeout(() => {
      this.initObservation();
    }, 500);
    // 测试页面跳转
    // setTimeout(() => {
    //   this.gotoPage(5, 100);
    //   setTimeout(() => {
    //     this.renderSign("Note", {
    //       id: "2ACA9359",
    //       txt: "营养素和热量,才能",
    //       page: "100",
    //       type: "Highlight",
    //       color: "#F5E12A"
    //     });
    //     setTimeout(() => {
    //       this.delSign({
    //         ids: ["2ACA9359"]
    //       });
    //     }, 2000);
    //   }, 1000);
    // }, 3000);
  },
  methods: {
    // 滚动监听
    scrollFun(event) {
      // 判断向上滚动还是向下滚动
      if (event.target.scrollTop > this.previousScrollTop) {
        // 向下
        const currentScrollTop =
          event.target.scrollTop + event.target.offsetHeight;
        if (
          currentScrollTop >=
          event.target.scrollHeight - this.loadThreshold
        ) {
          // 到达阈值
          if (
            this.showCatalogList[this.showCatalogList.length - 1] <
            this.catalogLength
          ) {
            // 加载下一章
            this.showCatalogList.push(
              this.showCatalogList[this.showCatalogList.length - 1] + 1
            );
            if (this.showCatalogList.length > 3) {
              // 超过三章隐藏顶部一章
              this.showCatalogList.shift();
            }
          }
        }
      } else if (event.target.scrollTop < this.previousScrollTop) {
        // 向上
        const currentScrollTop = event.target.scrollTop;
        if (currentScrollTop <= this.loadThreshold) {
          // 到达阈值
          if (this.showCatalogList[0] > 0) {
            // 加载上一章
            this.showCatalogList.unshift(this.showCatalogList[0] - 1);
            if (this.showCatalogList.length > 3) {
              // 超过三章隐藏底部一章
              this.showCatalogList.pop();
            }
          }
        }
      }
      // showCatalogList 当前显示的三个章节,watch监听传递给主应用
      // 更新上一次滚动的位置
      this.previousScrollTop = event.target.scrollTop;
    },
    // 章节、页面跳转
    gotoPage(catalog, page) {
      if (catalog >= 0 && catalog <= this.catalogLength) {
        // 处理渲染章节
        if (catalog == 0) {
          this.showCatalogList = [0, 1];
        } else if (catalog == this.catalogLength) {
          this.showCatalogList = [
            this.catalogLength - 2,
            this.catalogLength - 1,
            this.catalogLength,
          ];
        } else {
          this.showCatalogList = [catalog - 1, catalog, catalog + 1];
        }
        setTimeout(() => {
          // 跳转页码
          const pageDom = (
            this.container ? this.container : document
          ).querySelector(`[page="${page}"]`);
          if (pageDom) {
            pageDom.scrollIntoView();
          } else {
            console.log("页码错误!");
          }
        }, 500);
      } else {
        console.log("章节错误!");
      }
    },
    // 渲染标记
    renderSign(type, data) {
      const existence = (
        this.container ? this.container : document
      ).querySelector(`[dataid="${data.id}"]`);
      // 去重
      if (!existence) {
        const pageDom = (
          this.container ? this.container : document
        ).querySelector(`[page="${data.page}"]`);
        let reg = new RegExp(`${data.txt}`, "ig");
        switch (type) {
          case "Highlight":
            // 高亮
            pageDom.innerHTML = pageDom.innerHTML.replace(
              reg,
              `<span datatype="Highlight" dataid="${data.id}" style="background: ${data.color};" class="highLight" onclick="signClick('Highlight','${data.id}','${data.chapterNum}')">${data.txt}</span>`
            );
            break;
          case "Dashing":
            // 划线
            pageDom.innerHTML = pageDom.innerHTML.replace(
              reg,
              `<span datatype="Dashing" dataid="${data.id}" style="text-decoration-color:${data.color};" class="underline" onclick="signClick('Dashing','${data.id}','${data.chapterNum}')">${data.txt}</span>`
            );
            break;
          case "Note":
            // 笔记
            pageDom.innerHTML = pageDom.innerHTML.replace(
              reg,
              `<span datatype="Note" dataid="${data.id}" style="border-bottom-color:${data.color}" class="notesline" onclick="signClick('Note','${data.id}','${data.chapterNum}')">${data.txt}<img src="${NoteIcon}" style="cursor: pointer" /></span>`
            );
            break;
        }
      }
    },
    // 删除标记渲染
    delSign({ ids, type }) {
      if (ids && ids.length) {
        for (let i = 0; i < ids.length; i++) {
          const id = ids[i];
          const dom = (
            this.container ? this.container : document
          ).querySelector(`[dataid="${id}"]`);
          dom.parentNode.innerHTML = dom.parentNode.innerHTML.replace(
            dom.outerHTML,
            dom.outerText
          );
        }
      }
      if (type) {
        const doms = (
          this.container ? this.container : document
        ).querySelectorAll(`[datatype="${type}"]`);
        for (let i = 0; i < doms.length; i++) {
          const dom = doms[i];
          dom.parentNode.innerHTML = dom.parentNode.innerHTML.replace(
            dom.outerHTML,
            dom.outerText
          );
        }
      }
    },
    initObservation() {
      const sections = (
        this.container ? this.container : document
      ).querySelectorAll(".page-box");
      //observer 观察每个元素,以便在它们进入或离开视窗时触发回调函数。
      sections.forEach((section) => {
        const isObserver = section.getAttribute("observer");
        if (!isObserver) {
          this.observer.observe(section);
          section.setAttribute("observer", "1");
        }
      });
    },
    pageChangeCallback(entries, observer) {
      //entries:代表观察到的目标元素的集合。 observer:代表观察者对象。
      entries.forEach((entry) => {
        //entry.isIntersecting:检查当前目标元素是否与根元素相交。
        if (entry.isIntersecting) {
          const target = entry.target;
          //entry.target:获取当前目标元素
          const page = target.getAttribute("page");
          const catalogDom = this.tool.getParentNodeByClassName(
            target,
            "chapter"
          );
          const catalog = catalogDom.getAttribute("num");
          console.log("page", page, catalog);
          // 返回页码和章节信息
          if (this.$store.state.qiankun && this.$store.state.qiankun.pageChange)
            this.$store.state.qiankun.pageChange({
              page: page,
              catalog: catalog,
            });
          // const sections = Array.from(document.querySelectorAll(".section"));
          //sections:获取所有具有 .section 类名的元素,并转换为数组。
          // let index = sections.findIndex((section) => section === target) + 1;
          //index:查找当前目标元素在 sections 数组中的索引,并加 1,用于确定当前页码。
        }
      });
    },
  },
};
</script>
<style lang="less" scoped>
.page-main {
  width: 100%;
  height: 100%;
  overflow: auto;
  .page-content {
    max-width: 816px;
    min-width: 375px;
    margin: 0 auto;
    padding-bottom: 100px;
  }
}
</style>
src/books/English/view/index.vue
@@ -1,15 +1,82 @@
<template>
  <div class="english-book">
  <div
    class="english-book"
    @mouseup="handleMouseUp"
    :style="{
      fontSize: fontSize ? fontSize + 'px' : '16px',
      transform: `scale(${pageZoom ? pageZoom : 1})`,
    }"
  >
    <pageContent></pageContent>
  </div>
</template>
<script>
import pageContent from "./components/index.vue";
  export default {
    name:'english-book'
  name: "english-book",
  components: { pageContent },
  computed: {
    fontSize() {
      return this.$store.state.qiankun.fontSize;
    },
    pageZoom() {
      return this.$store.state.qiankun.scale / 100;
    },
  },
  methods: {
    getParentWithClass(element, className) {
      while (element.parentElement) {
        element = element.parentElement;
        if (element.classList.contains(className)) {
          return element;
  }
      }
    },
    handleMouseUp(e) {
      const selection = (
        this.container ? this.container : window
      ).getSelection();
      const txt = selection.toString();
      if (selection.type != "none" && txt) {
        let node = selection.anchorNode.parentNode;
        let pageHtml = this.getParentWithClass(
          selection.anchorNode,
          "page-box"
        );
        let chapterDom = this.getParentWithClass(
          selection.anchorNode,
          "chapter"
        );
        let chapterNum;
        if (chapterDom) chapterNum = chapterDom.getAttribute("num");
        if (pageHtml) {
          const page = pageHtml.getAttribute("page");
          // 监听选中文本事件,并触发父层方法
          if (this.$store.state.qiankun.windowSelection) {
            this.$store.state.qiankun.windowSelection({
              chapterNum,
              txt,
              page,
              x: e.x,
              y: e.y,
            });
          }
        }
      } else {
        if (this.$store.state.qiankun.windowSelection) {
          this.$store.state.qiankun.windowSelection({
            chapterNum: "",
            txt: "",
            page: "",
            x: e.x,
            y: e.y,
          });
        }
      }
    },
  },
};
</script>
<style lang="less" scoped>
</style>
<style lang="less" scoped></style>
src/books/embedded/assets/main.less
@@ -781,6 +781,11 @@
  .tl-cn {
    text-align: center;
  }
  .cover-box {
    width: 815px;
    height: 1125px;
    object-fit: contain;
  }
}
body {
  background-color: #e6e6e6;
src/books/embedded/view/components/header.vue
@@ -3,7 +3,7 @@
    <!-- 封面 -->
    <div class="page-box" page="1">
      <h1 class="frontCover" title="封面">
        <img alt="封面" src="../../assets/images/device_phone_Frontcover.jpg" />
        <img alt="封面" src="../../assets/images/device_phone_Frontcover.jpg" class="cover-box" />
      </h1>
    </div>
    <!-- 作者简介 -->
@@ -31,7 +31,7 @@
    <!-- 封面 -->
    <div class="page-box" page="3">
      <h1 class="frontCover" title="封面">
        <img alt="封面" src="../../assets/images/device_phone_Frontcover.jpg" />
        <img alt="封面" src="../../assets/images/device_phone_Frontcover.jpg" class="cover-box">
      </h1>
    </div>
    <!-- 内容简介 -->
src/books/embedded/view/index.vue
@@ -38,46 +38,6 @@
  mounted() {
  },
  methods: {
    getBookInfo() {
      let query = {
        path: "*",
        queryType: "*",
        productId: this.config.bookId,
        favoriteTypes: "FavoriteBookCity",
        itemFields: {
          "SysType=": "CmsFolder",
        },
        coverSize: {
          height: 300,
        },
        fields: {
          seriesName: [],
          author: [],
          isbn: [],
          publicationDate: [],
          bookClassification: [],
          paperPrice: [],
          JDLink: [],
          tmallLink: [],
          dangdangLink: [],
          weidianLink: [],
          content: [],
          authorIntroduction: [],
          // isApplyPaperBook: [],
          // isApplyEBook: [],
          isApplyBook: [],
          isSell: [],
          pdf: [],
          protectedEpub: [],
          probationPage: [], //pdf试读页数
          freeEpubPage: [], //epub试读百分比
        },
      };
      this.MG.store.getProductDetail(query).then((res) => {
        this.$data.bookData = res.datas;
        this.$store.commit("setRootCmsItemId", res.datas.rootCmsItemId);
      });
    },
    getParentWithClass(element, className) {
      while (element.parentElement) {
        element = element.parentElement;
vue.config.js
@@ -2,8 +2,8 @@
// import {publicCtx} from '@/assets/js/config'
const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
  publicPath: 'http://182.92.203.7:3007/books/book/3',
  // publicPath:'/books/book/1',
  // publicPath: 'http://182.92.203.7:3007/books/book/3',
  publicPath:'/books/book/1',
  transpileDependencies: true,
  lintOnSave: false,
  // devServer: {