QYF-GitLab1
2025-01-18 cb9f0402039c2cdbb6aa8eb85ecece280c929b05
幼儿游戏与指导
157个文件已添加
2066 ■■■■■ 已修改文件
src/books/preschoolGameGuidance/Fonts/FZHTJW.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/Fonts/FZLTXIHJW.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/Fonts/FZLTZHJW.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/css/default.less 999 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0008-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0012-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0017-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0039-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0043-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0044-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0052-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0058-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0060-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0067-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0068-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0069-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0070-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0077-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0078-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0086-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0088-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0091-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0091-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0092-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0094-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0094-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0095-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0105-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0105-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0107-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0108-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0112-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0112-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0114-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0114-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0115-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0115-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0120-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0120-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0121-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0121-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0122-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0123-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0128-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0133-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0136-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0136-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0137-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0138-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0145-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0147-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0151-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0155-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0155-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0158-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0163-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0166-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0167-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0175-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0176-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0177-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0178-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0179-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0180-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0184-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0186-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0188-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0190-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0192-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0195-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0198-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0200-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0201-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0208-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0218-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0218-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0219-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0219-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0222-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0222-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0223-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0223-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0223-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0223-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0224-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0224-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0224-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0224-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0225-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0225-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0225-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0225-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0225-5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0225-6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0226-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0226-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0226-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0226-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0227-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0227-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0228-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0228-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0228-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0228-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0229-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0229-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0231-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0232-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0240-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0241-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0242-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0243-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0244-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0245-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0245-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0246-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0247-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0248-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0249-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0250-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0250-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0251-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0251-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0252-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0252-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0253-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0253-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0262-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0264-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0266-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0269-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0272-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0275-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/0276-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/FD.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/SMY.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/tb-1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/tb-10.png 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/tb-12.png 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/tb-5.png 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/tb-6.png 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/tb-9.png 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z10.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z7.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z8.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/images/z9.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/js/examinationList.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/js/tool.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/view/components/front001.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/view/components/index.vue 906 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/view/index.vue 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/books/preschoolGameGuidance/Fonts/FZHTJW.ttf
Binary files differ
src/books/preschoolGameGuidance/Fonts/FZLTXIHJW.ttf
Binary files differ
src/books/preschoolGameGuidance/Fonts/FZLTZHJW.ttf
Binary files differ
src/books/preschoolGameGuidance/css/default.less
New file
@@ -0,0 +1,999 @@
ul {
  list-style-type:none;
}
li {
  list-style-type:none;
}
@font-face{
font-family:'FZLTZHJW';
src:url('Fonts/FZLTZHJW.ttf');
}
@font-face{
font-family:'FZLTXIHJW';
src:url('Fonts/FZLTXIHJW.ttf');
}
@font-face{
font-family:'FZHTJW';
src:url('Fonts/FZHTJW.ttf');
}
.custom_tag2{
background-color:#F1BE49;
color: #FFFFFF;
display: inline-block;
padding:0.5px;
border-radius:1.5em;
font-size: 1.1em;
padding: 2px 10px 2px 10px;
font-weight: bold;
margin: 0;
text-indent: 0em;
margin-bottom:0.5em;
}
.custom_tag1{
background-color:#35ACD6;
color: #FFFFFF;
display: inline-block;
padding:1px;
font-size: 1.1em;
padding: 3px 10px 3px 10px;
font-weight: bold;
box-shadow: 15px 0px 0px 0px #F5D83E, -15px 0px 0px 0px #F5D83E;
margin: 0;
text-indent: 0em;
margin-bottom:0.5em;
}
.custom_tag{
background-color:#35509F;
color: #FFFFFF;
display: inline-block;
padding:1px;
border-radius:1.5em;
font-size: 1.1em;
padding: 10px 20px 10px 20px;
font-weight: bold;
box-shadow: 30px 0px 0px 0px #F5D83E;
margin: 0;
text-indent: 0em;
margin-bottom:0.5em;
}
span.under1{
border-bottom:2px solid #F0BD4A;
border-width: 2px;
}
div.bodycontent-div-center {
font-family: "DK-HEITI", "方正兰亭黑简体", "黑体";
margin: 1em 1em 1em 1em;
font-weight: normal;
border-width: 1.5px;
border-color: #dfb27d;
padding: 1em;
}
img.bodycontent-divcenter-image {
float:center; clear:both;height:140px;
margin: 15px;
}
.module_block{
display: flex;
font-size: 1.1em;
position: relative;
padding-left: 90px;
justify-content: center;
align-items: center;
margin-right:91px;
}
.module_block .custom1{
background-color:#9ACC77;
padding: 10px 20px;
color: #FFFFFF;
/* position: absolute; */
/* left:0; */
/* top: 50%; */
border-radius:0.5em 0em 0em 0.5em;
/* transform: translateY(-50%); */
}
.module_block .custom2{
background-color:#E9F3E0;
padding: 10px 20px;
color: #75A64E;
font-weight: bold;
border-radius:0em 0.5em 0.5em 0em;
}
div.bodycontent-div-left1 {
font-family: "DK-HEITI", "方正兰亭黑简体", "黑体";
margin: 1em 1em 1em 1em;
font-weight: normal;
border-width: 1.5px;
border-color: #dfb27d;
padding: 1em;
background-color: #F0F8FF;
}
div.bodycontent-div-left {
font-family: "DK-HEITI", "方正兰亭黑简体", "黑体";
margin: 1em 1em 1em 1em;
font-weight: normal;
border-width: 1.5px;
border-color: #dfb27d;
padding: 1em;
}
img.bodycontent-divright-image {
float:right; clear:both;height:140px;
margin: 15px;
}
img.bodycontent-divleft-image {
float:left; clear:both;height:110px;
margin: 15px;
}
div.bodystyle {
font-family:'FZLTXIHJW';
font-size: 18px;
text-align: justify;
margin:10%;
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;
}
div.sgc-toc-title {
font-size: 2em;
font-weight: bold;
margin-bottom: 1em;
text-align: center;
}
div.sgc-toc-level-1 {
margin-left: 0em;
}
div.sgc-toc-level-2 {
margin-left: 2em;
}
div.sgc-toc-level-3 {
margin-left: 2em;
}
div.sgc-toc-level-4 {
margin-left: 2em;
}
div.sgc-toc-level-5 {
margin-left: 2em;
}
div.sgc-toc-level-6 {
margin-left: 2em;
}
.imz{
width:100%;
text-align:center;
}
.note{
font-size: 0.85em;
}
.block
{
color:#00ADEF;
}
.block1
{
text-align: center;
}
.img{
font-weight: bold;
font-family:'FZLTXIHJW';
text-align: center;
font-size:0.85em;
margin-left: 0%;
margin-right: 0%;
text-indent: 0em;
}
.img1{
font-family:'FZLTXIHJW';
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;
font-family:'msyh';
}
.cover {
width:100%;
padding:0px;
}
.center {
text-align: center;
margin-left: 0%;
margin-right: 0%;
text-indent:0em;
}
.center-ss {
text-align: center;
color:#EF8472;
font-weight: bold;
margin-left: 0%;
margin-right: 0%;
text-indent:0em;
}
.left {
text-indent: 0em;
margin-left: 0%;
margin-right: 0%;
}
.left2 {
font-size:1.3em;
text-indent: 0em;
font-weight: bold;
margin-left: 0%;
margin-right: 0%;
}
.right {
text-align: right;
margin-left: 0%;
margin-right: 0%;
}
.left1 {
text-indent:0em;
margin-left:0%;
margin-right:0%;
}
.center1
{
text-align:center;
margin-left:0%;
margin-right:0%;
font-size:1.2em;
text-indent:0em;
font-weight:bold;
}
.right1 {
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:'FZLTZHJW';
color:#01AFEE;
font-weight:bold;
font-size:1.8em;
text-align:center;
margin-bottom:1em;
margin-top:1em;
text-indent:0em;
}
.h1-zt{
font-family:'FZLTZHJW';
line-height:2em;
color:#01AFEE;
font-weight:bold;
font-size:1.9em;
margin-bottom:1em;
margin-top:-0.5em;
text-indent:0em;
}
.h1-bk{
box-shadow:0em 0.1em 0em 0em #C3C2C0;
border-top-style:solid;
border-right-style:solid;
border-bottom-style:solid;
border-left-style:none;
padding:0.1em 0.8em 0.1em 0.5em;
font-weight:bold;
color: #000000;
margin-bottom:1em;
margin-top:1em;
}
.front {
font-family:'FZLTZHJW';
font-weight:bold;
font-size:1.8em;
color:#00ADEF;
margin-top: 0.5em;
margin-bottom:0.5em;
text-indent:0em;
text-align:center;
}
.zt-2{
font-size:1.3em;
font-weight:bold;
background-color:#6DCFF6;
border:1px solid #00ADF2;
}
.zt-4{
font-family:'FZLTZHJW';
color:#01AFEE;
font-size:1.8em;
color:#00ADEF;
margin-top: 0.5em;
margin-bottom:0.5em;
text-indent:0em;
text-align:right;
}
.zt-3{
font-size:1.3em;
font-weight:bold;
border:1px solid #00ADF2;
}
.left1{
text-indent:3em;
}
h2 {
font-family:'FZHTJW';
color:#00ADEF;
font-weight:bold;
text-align:center;
font-size:1.6em;
margin-bottom:0em;
margin-top:1.5em;
text-indent:2em;
}
.h2-zt{
font-family:'FZHTJW';
color:#00ADEF;
font-weight:bold;
font-size:1.4em;
margin-bottom:1em;
margin-top:0em;
text-indent:2.2em;
}
h3 {
font-family:'FZHTJW';
color:#03AFED;
font-weight:bold;
font-size:1.3em;
margin-bottom:1em;
margin-top:1em;
text-indent:0em;
}
h4 {
font-family:'FZHTJW';
font-weight:bold;
color:#03AFED;
margin-bottom:0.5em;
margin-top:1em;
font-size:1.2em;
text-indent:1em;
}
h5 {
font-family:'FZHTJW';
color:#03AFED;
margin-bottom:0.5em;
margin-top:1em;
font-size:1.15em;
text-indent:2em;
}
h6 {
font-family:'FZHTJW';
color:#00ADEF;
margin-bottom:0.5em;
margin-top:1em;
font-size:1.2em;
text-indent:0em;
border-bottom:2px solid #00ADEF;
}
.h6-zt{
margin-bottom:0em;
margin-top:-5em;
margin-left:0em;
}
.bb {
font-family:"cnepub", serif;
font-family:'FZHTJW';
color: #66CCCC;
font-size:1.1em;
margin-top:10px;
text-indent:2em;
margin-bottom:10px;
border-bottom:5px dotted #F4C388;
margin-left:2em;
margin-bottom:0.5em;
text-indent:0em;
}
.u {
text-decoration: underline; }
.img-0{
width:100%;
}
.img-a{
width:95%;
}
.img-b{
width:70%;
}
.img-c{
width:60%;
}
.img-d{
width:50%;
}
.img-e{
width:45%;
}
.img-f{
width:40%;
}
.img-g{
width:30%;
}
.img-h{
width:20%;
}
.img-i{
width:10%;
}
.img-j{
width:5%;
}
.img-zt{
height:6em;
margin-top:-1.5em;
margin-bottom:-0.4em;
margin-left:15%;
}
.inline{
height:2.5em;
margin-bottom:-0.3em;
}
.inline0{
height:3em;
}
.inline0-1{
height:2em;
}
.inline1{
height:2.2em;
margin-top:0.5em;
margin-bottom:-0.5em;
}
.inline2{
height:2.3em;
}
.img-qj{
height:7.5em;
margin-bottom:-3.4em;
margin-right:0.5em;
}
.bk-bwh{
background-color:#DFEBF7;
font-size:1.2em;
padding:25px;
border:4px dotted #197ABF;
}
div.bj{
margin-bottom:0em;
margin-top:-0.5em;
margin-left:-2.8em;
}
.un1{
border-bottom:2px solid #00ADEF;
}
.zt-1{
font-weight: bold;
font-size:1.2em;
text-indent:0em;
}
.zt-ls1{
color:#00ADEF;
font-weight: bold;
font-size:1.2em;
text-indent:0em;
}
.zt-ls2{
color:#00ADEF;
font-weight: bold;
text-align:center;
text-indent:0em;
}
.zt-ls{
color:#00ADEF;
text-indent:0em;
font-weight: bold;
}
span.lsyq-1{
background-color:#0082D4;
padding:0.2em 0.4em 0.2em 0.4em;
border-radius:1.2em;
margin-right:0.5em;
color:#FFFFFF;
font-weight: bold;
font-size:1.3em;
}
span.hsyq-1
{
background-color:#FFB7D4;
padding:0.2em 0.4em 0.2em 0.4em;
border-radius:1.2em;
margin-right:0.5em;
color:#FFFFFF;
font-weight: bold;
font-size:1.3em;
}
.zt-hs1{
font-weight: bold;
color:#F0855B;
font-size:1.2em;
}
.h1-zt1{
padding:5px 25px 5px 25px;
border-radius:10px 0px 0px 10px;
background-color:#5392C7;
font-size:1.2em;
color:#FFFFFF;
}
.h1-zt2{
padding:10px;
background-color:#B1DDE0;
margin-right:2em;
color:#FFFFFF;
padding:5px 50px 5px 25px;
border-radius:0px 5px 80px 0px;
font-size:1.2em;
}
div.bk{
border:2px solid #00ADEF;
padding:3px 10px 3px 10px;
margin-top:2em;
border-radius:1.5em;
margin-bottom:1em;
}
div.bk1{
margin-top:-2em;
margin-bottom:1.5em;
margin-left:-0.5em;
}
div.bk-1{
margin-top:-3em;
margin-bottom:1.5em;
margin-left:-2.5em;
}
div.bk2{
background:#8DD8F8;
border:2px solid #00ADEF;
padding:3px 10px 3px 10px;
margin-top:2em;
margin-bottom:1em;
}
div.bk3{
border:2px solid #00ADEF;
border-radius:1.5em;
padding:3px 10px 3px 10px;
margin-top:2em;
margin-bottom:1em;
}
p.bj1-qjms{
background-color:#5392C7;
color:#FFFFFF;
display:inline-block;
font-size:1em;
padding:0.1em 0.7em 0.12em 0.7em;
font-weight:bold;
border-radius:1.5em;
margin-left:0em;
text-align:center;
text-indent:0em;
position:absolute;
top:-2em;
}
span.bj1{
background-color:#00ADEF;
padding:0.2em 1em 0.2em 1em;
font-size:1em;
font-weight: bold;
color:#FFFFFF;
}
div.tp{
margin-bottom:0.2em;
margin-top:-3em;
margin-left:5.5em;
}
div.tp-1{
margin-bottom:0.2em;
margin-top:-2.7em;
margin-left:6.9em;
}
div.tp-2{
margin-bottom:0.2em;
margin-top:-2.8em;
margin-left:17.2em;
}
div.tp-3{
margin-bottom:0.2em;
margin-top:-2.9em;
margin-left:6em;
}
div.tp-4{
margin-bottom:0.2em;
margin-top:-2.9em;
margin-left:5em;
}
div.tp-5{
margin-bottom:0.2em;
margin-top:-2.9em;
margin-left:4em;
}
div.tp-6{
margin-bottom:0.2em;
margin-top:-2.7em;
margin-left:5em;
}
div.tp-7{
margin-bottom:0.2em;
margin-top:-2.8em;
margin-left:6em;
}
div.tp-8{
margin-bottom:0.2em;
margin-top:-2.9em;
margin-left:-1.2em;
}
div.tp-9{
margin-bottom:0.2em;
margin-top:-2.9em;
margin-left:-2.2em;
}
div.tp-10{
margin-bottom:0.2em;
margin-top:-2.9em;
margin-left:-1.8em;
}
.rwmb-1{
height:1.6em;
}
.rwmb-4{
height:2em;
}
.rwmb-5{
height:2em;
}
.rwmb-2{
height:2em;
}
.rwmb-3{
height:2em;
}
.rwmb-6{
height:2em;
}
span.bj2{
background-color:#00ADEF;
padding:0.2em 1.5em 0.2em 1em;
font-size:1.1em;
font-weight: bold;
text-indent:0em;
color:#FFFFFF;
border-radius:1.5em;
}
span.bj3{
background-color:#00ADEF;
padding:0.2em 1.5em 0.2em 1em;
font-size:1.1em;
font-weight: bold;
margin-left:-0.8em;
color:#FFFFFF;
border-radius:1.5em;
}
span.bj4{
background-color:#6DCFF6;
padding:0.2em 1.5em 0.2em 1em;
box-shadow: 0.2em 0.2em 0px 0px #00ADEF;
font-size:1.1em;
font-weight: bold;
margin-left:0em;
border-radius:1.5em;
}
div.bj1{
background-color:#AAE0FA;
padding:0.2em 0.5em 0.2em 0.5em;
border-radius:1em;
margin-bottom:0.5em;
margin-left:-0.6em;
margin-right:-0.6em;
margin-top:0.5em;
}
div.bj2-1{
background-color:#9ADBF9;
padding:0.1px 0.5px 0.1px 0.5px;
border-radius:1.5em;
margin-bottom:0.2em;
margin-left:-0.6em;
margin-right:-0.6em;
margin-top:-1.4em;
}
div.bj3{
background-color:#C7EAFD;
padding:0.8em 1.8em 0.5em 0.1em;
border-radius:1.5em;
margin-bottom:0.2em;
margin-left:-0.6em;
margin-right:-0.6em;
margin-top:-1.4em;
}
span.bj3-xyx{
background-color:#92B03E;
color:#FFFFFF;
border-radius:1.5em;
padding:5px 20px 5px 20px;
font-size:1em;
font-weight: bold;
}
.ts-1{
font-weight: bold;
}
.zt-h4{
background-color:#F0BD40;
padding:10px;
color:#FFFFFF;
margin-left:-2em;
border-radius:1.5em;
}
.qyls-h4{
  font-family: "HiFont Hei GB";
color:#6CB26C;
font-weight: bold;
padding:0.2em;
text-indent: 0em;
margin-left: 0%;
}
span.bj4-xyx{
background-color:#FA9D1A;
color:#FFFFFF;
border-radius:1.5em;
padding:5px 20px 5px 20px;
font-size:1em;
font-weight: bold;
}
.bj5{
background-color:#CFCBDC;
padding:20px;
border-radius:1em;
margin-bottom:1em;
margin-top:2.5em;
}
span.bj5-xyx{
background-color:#FFFFFF;
color:#7D719F;
border-radius:0.5em 0.5em 0em 0em;
padding:5px 20px 5px 20px;
font-size:1em;
font-weight: bold;
}
div.bj5-xyx{
margin-top:-4em;
margin-bottom:1.5em;
margin-left:-1.5em;
}
div.bj6{
margin-top:1.6em;
margin-bottom:-2.2em;
margin-left:-1.3em;
}
span.bj6-xyx{
background-color:#7B72A1;
border-radius:0.5em 0.5em 0em 0em;
padding:10px 20px 10px 20px;
font-size:1em;
font-weight: bold;
}
.zt-lvs1{
color:#95B321;
}
.zt-cs{
color:#FCA01B;
}
.zysx{
margin-top:-2.2em;
margin-left:-2em;
}
.zt-zysx{
font-family: "DK-HEITI", "方正兰亭黑简体", "黑体";
background-color:#24b8bc;
border-radius:1.5em;
color:#FFFFFF;
font-weight: bold;
padding:4px;
font-size:1.2em;
box-shadow: 0.2em 0.2em 0px 0px #c1e3e4;
}
.zt-zysx1{
font-family: "DK-HEITI", "方正兰亭黑简体", "黑体";
background-color:#96A7D5;
border-radius:1.5em;
color:#FFFFFF;
font-weight: bold;
padding:6px;
font-size:1.2em;
}
.zt-zysx2{
font-family: "DK-HEITI", "方正兰亭黑简体", "黑体";
background-color:#0071BD;
font-size:1.2em;
}
src/books/preschoolGameGuidance/images/0008-1.jpg
src/books/preschoolGameGuidance/images/0012-1.jpg
src/books/preschoolGameGuidance/images/0017-1.jpg
src/books/preschoolGameGuidance/images/0039-1.jpg
src/books/preschoolGameGuidance/images/0043-1.jpg
src/books/preschoolGameGuidance/images/0044-1.jpg
src/books/preschoolGameGuidance/images/0052-1.jpg
src/books/preschoolGameGuidance/images/0058-1.jpg
src/books/preschoolGameGuidance/images/0060-1.jpg
src/books/preschoolGameGuidance/images/0067-1.jpg
src/books/preschoolGameGuidance/images/0068-1.jpg
src/books/preschoolGameGuidance/images/0069-1.jpg
src/books/preschoolGameGuidance/images/0070-1.jpg
src/books/preschoolGameGuidance/images/0077-1.jpg
src/books/preschoolGameGuidance/images/0078-1.jpg
src/books/preschoolGameGuidance/images/0086-1.jpg
src/books/preschoolGameGuidance/images/0088-1.jpg
src/books/preschoolGameGuidance/images/0091-1.jpg
src/books/preschoolGameGuidance/images/0091-2.jpg
src/books/preschoolGameGuidance/images/0092-1.jpg
src/books/preschoolGameGuidance/images/0094-1.jpg
src/books/preschoolGameGuidance/images/0094-2.jpg
src/books/preschoolGameGuidance/images/0095-1.jpg
src/books/preschoolGameGuidance/images/0105-1.jpg
src/books/preschoolGameGuidance/images/0105-2.jpg
src/books/preschoolGameGuidance/images/0107-1.jpg
src/books/preschoolGameGuidance/images/0108-1.jpg
src/books/preschoolGameGuidance/images/0112-1.jpg
src/books/preschoolGameGuidance/images/0112-2.jpg
src/books/preschoolGameGuidance/images/0114-1.jpg
src/books/preschoolGameGuidance/images/0114-2.jpg
src/books/preschoolGameGuidance/images/0115-1.jpg
src/books/preschoolGameGuidance/images/0115-2.jpg
src/books/preschoolGameGuidance/images/0120-1.jpg
src/books/preschoolGameGuidance/images/0120-2.jpg
src/books/preschoolGameGuidance/images/0121-1.jpg
src/books/preschoolGameGuidance/images/0121-2.jpg
src/books/preschoolGameGuidance/images/0122-1.jpg
src/books/preschoolGameGuidance/images/0123-1.jpg
src/books/preschoolGameGuidance/images/0128-1.jpg
src/books/preschoolGameGuidance/images/0133-1.jpg
src/books/preschoolGameGuidance/images/0136-1.jpg
src/books/preschoolGameGuidance/images/0136-2.jpg
src/books/preschoolGameGuidance/images/0137-1.jpg
src/books/preschoolGameGuidance/images/0138-1.jpg
src/books/preschoolGameGuidance/images/0145-1.jpg
src/books/preschoolGameGuidance/images/0147-1.jpg
src/books/preschoolGameGuidance/images/0151-1.jpg
src/books/preschoolGameGuidance/images/0155-1.jpg
src/books/preschoolGameGuidance/images/0155-2.jpg
src/books/preschoolGameGuidance/images/0158-1.jpg
src/books/preschoolGameGuidance/images/0163-1.jpg
src/books/preschoolGameGuidance/images/0166-1.jpg
src/books/preschoolGameGuidance/images/0167-1.jpg
src/books/preschoolGameGuidance/images/0175-1.jpg
src/books/preschoolGameGuidance/images/0176-1.jpg
src/books/preschoolGameGuidance/images/0177-1.jpg
src/books/preschoolGameGuidance/images/0178-1.jpg
src/books/preschoolGameGuidance/images/0179-1.jpg
src/books/preschoolGameGuidance/images/0180-1.jpg
src/books/preschoolGameGuidance/images/0184-1.jpg
src/books/preschoolGameGuidance/images/0186-1.jpg
src/books/preschoolGameGuidance/images/0188-1.jpg
src/books/preschoolGameGuidance/images/0190-1.jpg
src/books/preschoolGameGuidance/images/0192-1.jpg
src/books/preschoolGameGuidance/images/0195-1.jpg
src/books/preschoolGameGuidance/images/0198-1.jpg
src/books/preschoolGameGuidance/images/0200-1.jpg
src/books/preschoolGameGuidance/images/0201-1.jpg
src/books/preschoolGameGuidance/images/0208-1.jpg
src/books/preschoolGameGuidance/images/0218-1.jpg
src/books/preschoolGameGuidance/images/0218-2.jpg
src/books/preschoolGameGuidance/images/0219-1.jpg
src/books/preschoolGameGuidance/images/0219-2.jpg
src/books/preschoolGameGuidance/images/0222-1.jpg
src/books/preschoolGameGuidance/images/0222-2.jpg
src/books/preschoolGameGuidance/images/0223-1.jpg
src/books/preschoolGameGuidance/images/0223-2.jpg
src/books/preschoolGameGuidance/images/0223-3.jpg
src/books/preschoolGameGuidance/images/0223-4.jpg
src/books/preschoolGameGuidance/images/0224-1.jpg
src/books/preschoolGameGuidance/images/0224-2.jpg
src/books/preschoolGameGuidance/images/0224-3.jpg
src/books/preschoolGameGuidance/images/0224-4.jpg
src/books/preschoolGameGuidance/images/0225-1.jpg
src/books/preschoolGameGuidance/images/0225-2.jpg
src/books/preschoolGameGuidance/images/0225-3.jpg
src/books/preschoolGameGuidance/images/0225-4.jpg
src/books/preschoolGameGuidance/images/0225-5.jpg
src/books/preschoolGameGuidance/images/0225-6.jpg
src/books/preschoolGameGuidance/images/0226-1.jpg
src/books/preschoolGameGuidance/images/0226-2.jpg
src/books/preschoolGameGuidance/images/0226-3.jpg
src/books/preschoolGameGuidance/images/0226-4.jpg
src/books/preschoolGameGuidance/images/0227-1.jpg
src/books/preschoolGameGuidance/images/0227-2.jpg
src/books/preschoolGameGuidance/images/0228-1.jpg
src/books/preschoolGameGuidance/images/0228-2.jpg
src/books/preschoolGameGuidance/images/0228-3.jpg
src/books/preschoolGameGuidance/images/0228-4.jpg
src/books/preschoolGameGuidance/images/0229-1.jpg
src/books/preschoolGameGuidance/images/0229-2.jpg
src/books/preschoolGameGuidance/images/0231-1.jpg
src/books/preschoolGameGuidance/images/0232-1.jpg
src/books/preschoolGameGuidance/images/0240-1.jpg
src/books/preschoolGameGuidance/images/0241-1.jpg
src/books/preschoolGameGuidance/images/0242-1.jpg
src/books/preschoolGameGuidance/images/0243-1.jpg
src/books/preschoolGameGuidance/images/0244-1.jpg
src/books/preschoolGameGuidance/images/0245-1.jpg
src/books/preschoolGameGuidance/images/0245-2.jpg
src/books/preschoolGameGuidance/images/0246-1.jpg
src/books/preschoolGameGuidance/images/0247-1.jpg
src/books/preschoolGameGuidance/images/0248-1.jpg
src/books/preschoolGameGuidance/images/0249-1.jpg
src/books/preschoolGameGuidance/images/0250-1.jpg
src/books/preschoolGameGuidance/images/0250-2.jpg
src/books/preschoolGameGuidance/images/0251-1.jpg
src/books/preschoolGameGuidance/images/0251-2.jpg
src/books/preschoolGameGuidance/images/0252-1.jpg
src/books/preschoolGameGuidance/images/0252-2.jpg
src/books/preschoolGameGuidance/images/0253-1.jpg
src/books/preschoolGameGuidance/images/0253-2.jpg
src/books/preschoolGameGuidance/images/0262-1.jpg
src/books/preschoolGameGuidance/images/0264-1.jpg
src/books/preschoolGameGuidance/images/0266-1.jpg
src/books/preschoolGameGuidance/images/0269-1.jpg
src/books/preschoolGameGuidance/images/0272-1.jpg
src/books/preschoolGameGuidance/images/0275-1.jpg
src/books/preschoolGameGuidance/images/0276-1.jpg
src/books/preschoolGameGuidance/images/FD.jpg
src/books/preschoolGameGuidance/images/SMY.jpg
src/books/preschoolGameGuidance/images/tb-1.png
src/books/preschoolGameGuidance/images/tb-10.png
src/books/preschoolGameGuidance/images/tb-12.png
src/books/preschoolGameGuidance/images/tb-5.png
src/books/preschoolGameGuidance/images/tb-6.png
src/books/preschoolGameGuidance/images/tb-9.png
src/books/preschoolGameGuidance/images/z1.jpg
src/books/preschoolGameGuidance/images/z10.jpg
src/books/preschoolGameGuidance/images/z2.jpg
src/books/preschoolGameGuidance/images/z3.jpg
src/books/preschoolGameGuidance/images/z4.jpg
src/books/preschoolGameGuidance/images/z5.jpg
src/books/preschoolGameGuidance/images/z6.jpg
src/books/preschoolGameGuidance/images/z7.jpg
src/books/preschoolGameGuidance/images/z8.jpg
src/books/preschoolGameGuidance/images/z9.jpg
src/books/preschoolGameGuidance/js/examinationList.js
New file
@@ -0,0 +1,28 @@
const testData = {
  2: {
    15: [66984, 66985, 66986],
  },
  3: {
    29: [67015, 67016, 67017, 67018, 67019, 67020, 67021],
  },
  4: {
    54: [67022, 67023, 67024, 67025, 67026, 67027, 67028, 67029, 67030],
  },
  5: {
    70: [67031, 67032, 67033, 67034, 67035, 67036, 67037, 67038, 67039],
  },
  6: {
    99: [67040, 67041, 67042, 67043, 67044, 67045, 67046, 67047],
  },
  7: {
    113: [67048, 67049, 67050, 67051, 67052, 67053, 67054, 67055],
  },
  8: {
    136: [67056, 67057, 67058, 67059, 67060, 67061],
  },
  9: {
    146: [67062, 67063, 67064, 67065, 67066, 67067],
  },
};
export default testData;
src/books/preschoolGameGuidance/js/tool.js
New file
@@ -0,0 +1,57 @@
import SparkMD5 from "spark-md5";
export function getFileMd5(file, chunkSize) {
  return new Promise((resolve, reject) => {
    let blobSlice =
      File.prototype.slice ||
      File.prototype.mozSlice ||
      File.prototype.webkitSlice;
    let chunks = Math.ceil(file.size / chunkSize);
    let currentChunk = 0;
    let spark = new SparkMD5.ArrayBuffer();
    let fileReader = new FileReader();
    fileReader.onload = function (e) {
      spark.append(e.target.result);
      currentChunk++;
      if (currentChunk < chunks) {
        loadNext();
      } else {
        const md5 = spark.end();
        resolve(md5);
      }
    };
    fileReader.onerror = function (e) {
      reject(e);
    };
    function loadNext() {
      let start = currentChunk * chunkSize;
      let end = start + chunkSize;
      if (end > file.size) {
        end = file.size;
      }
      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
    }
    loadNext();
  });
}
// 获取不受保护的图片
export function getPublicImage(md5, width, height) {
  let src = null;
  if (md5) {
    src = process.env.VUE_APP_API_URL + `/file/GetPreViewImage?md5=${md5}`;
  } else {
    return "";
  }
  if (width) src += `&width=${width}`;
  if (height) src += `&height=${height}`;
  return src;
}
// export function ForTable() {
//   const head = ["健康状况", "标志", "心理方面", "肉体方面", "社会方面"];
//   return head?.map((item) => {
//     return `<tr>${"<th>" + item + "</th>"}</tr>`;
//   });
// }
src/books/preschoolGameGuidance/view/components/front001.vue
src/books/preschoolGameGuidance/view/components/index.vue
New file
@@ -0,0 +1,906 @@
<!-- @format -->
<template>
  <div class="page-main" @scroll="throttledScrollHandler">
    <div id="searchDomBox" style="display: none">
      <div id="searchContent"></div>
    </div>
    <div class="public-sportsAndHealth" :style="{
      fontSize: fontSize ? fontSize + 'px' : '16px',
      transform: `scale(${pageZoom ? pageZoom : 1})`,
      transformOrigin: 'center top',
    }">
      <pageHeader v-if="showCatalogList.indexOf(1) > -1" :showPageList="loadPageList"></pageHeader>
      <chapterOne v-if="showCatalogList.indexOf(2) > -1" :showPageList="loadPageList"></chapterOne>
      <!-- <chapterTwo v-if="showCatalogList.indexOf(3) > -1" :showPageList="loadPageList"></chapterTwo>
      <chapterThree v-if="showCatalogList.indexOf(4) > -1" :showPageList="loadPageList"></chapterThree>
      <chapterFour v-if="showCatalogList.indexOf(5) > -1" :showPageList="loadPageList"></chapterFour>
      <chapterfive v-if="showCatalogList.indexOf(6) > -1" :showPageList="loadPageList"></chapterfive>
      <chapterSix v-if="showCatalogList.indexOf(7) > -1" :showPageList="loadPageList"></chapterSix>
      <chapterSeven v-if="showCatalogList.indexOf(8) > -1" :showPageList="loadPageList"></chapterSeven>
      <chapterEight v-if="showCatalogList.indexOf(9) > -1" :showPageList="loadPageList"></chapterEight>
      <chapterNine v-if="showCatalogList.indexOf(10) > -1" :showPageList="loadPageList"></chapterNine> -->
    </div>
  </div>
</template>
<script>
import Vue from 'vue'
import pageHeader from './front001'
import chapterOne from './chapter001.vue'
// import chapterTwo from './chapter002.vue'
// import chapterThree from './chapter003.vue'
// import chapterFour from './chapter004.vue'
// import chapterfive from './chapter005.vue'
// import chapterSix from './chapter006.vue'
// import chapterSeven from './chapter007.vue'
// import chapterEight from './chapter008.vue'
// import chapterNine from './chapter009.vue'
import NoteIcon from '@/assets/images/biji.png'
import _ from 'lodash'
import getQuestionList from '@/assets/methods/examination'
import testData from '../../js/examinationList'
import Swiper from 'swiper/bundle'
import 'swiper/swiper-bundle.css'
import Viewer from 'viewerjs'
import 'viewerjs/dist/viewer.css'
export default {
  data() {
    return {
      catalogLength: 10, // 总章节数
      showCatalogList: [], // 显示的章节
      loadThreshold: 300, // 触发加载阈值
      throttleThreshold: 100, // 节流阈值
      previousScrollTop: 0,
      throttledScrollHandler: null,
      observer: null,
      loadPageObserver: null,
      loadPageList: [],
      questionDataMap: {},
      renderSignMap: {},
      highlightData: null,
    }
  },
  computed: {
    fontSize() {
      return this.$store.state.qiankun.fontSize
    },
    pageZoom() {
      return this.$store.state.qiankun.scale / 100
    },
  },
  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()
          this.initThemeColor()
        }, 500)
      },
    },
    loadPageList: {
      handler(newVal, oldVal) {
        setTimeout(() => {
          this.initSwiper()
          this.initViewer()
          // this.readText()
        }, 200)
      },
    },
    pageZoom: {
      handler(newVal, oldVal) {
        const scrollBox = (
          this.container ? this.container : document
        ).querySelector('.page-main')
        scrollBox.scrollTop = (scrollBox.scrollTop / oldVal) * newVal
      },
    },
  },
  mounted() {
    // 默认加载章节
    this.showCatalogList = [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.handelSignData(type, data)
          // this.renderSign(type, data);
        },
        // 删除笔记、高亮、划线
        delSign: (data) => {
          this.delSign(data)
        },
        // 全文检索
        searchBookByKeyword: (keyword) => {
          return this.searchTextByPage(keyword)
        },
        // 跳转检索结果位置
        jumpSearchItem: (data) => {
          this.searchItemLocation(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,表示当目标元素一半或更多显示在视窗中时触发回调函数。
    })
    this.loadPageObserver = new IntersectionObserver(this.loadPageCallback, {
      root: null, // 指定根元素,这里设为 null,表示选取整个视窗作为根元素。
      rootMargin: '0px', // 指定根元素的边界,这里设为 "0px",表示根元素的边界和视窗的边界重合
      threshold: 0, // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。
    })
    // 启动页码观察
    setTimeout(() => {
      this.initObservation()
      this.initThemeColor()
    }, 500)
    // 测试页面跳转
    // setTimeout(() => {
    //   this.gotoPage(1, 41)
      //   setTimeout(() => {
      //     this.renderSign("Highlight", {
      //       id: "2ACA9359",
      //       txt: "题一学习主题一 运动",
      //       page: "10",
      //       type: "Highlight",
      //       color: "#F5E12A"
      //     });
      // setTimeout(() => {
      //   this.delSign({
      //     ids: ["2ACA9359"]
      //   });
      // }, 2000);
      //}, 5000);
      // const pageDom = (this.container ? this.container : document)
      //   .querySelector("#app")
      //   .querySelectorAll(".page-box");
      // 检索
      // console.log(this.searchTextByPage("保护内脏器官"), "searchTextByPage");
      // 检索跳转
      // this.searchItemLocation({
      //   catalog: 2,
      //   page: 10,
      //   txt: " 运动系统是由骨、骨连结和骨骼肌三部分组成的。全身的骨通过骨连结组成人体骨骼(见图1-1)。骨骼是人体的支架,具有保护内脏器官、供肌肉附着和作为肌肉运动的杠杆等作用。在神经系统的支配下,肌肉收缩牵动所附着的骨绕着关节转动,使身体产生各种动作。所以,运动系统具有运动、支持和保护等功能,幼年时期的骨骼还具有造血功能。 ",
      //   txtIndex: 57
      // });
    // }, 500)
  },
  methods: {
    swdtChange(data) {
      console.log('子应用pdf', data)
      if (this.$store.state.qiankun && this.$store.state.qiankun.openPDF) {
        if (data.type == 'pdf') {
          this.$store.state.qiankun.openPDF({
            data: data.data,
          })
        } else {
          this.$store.state.qiankun.chooseWords({
            type: data.type,
            data: data.data,
          })
        }
      }
    },
    changeDomViewer() {
      this.initViewer()
    },
    // setZoom1() {
    //   let scale = this.$store.state.qiankun.scale + 10;
    //   const scrollBox = (
    //     this.container ? this.container : document
    //   ).querySelector(".page-main");
    //   this.$store.commit("setZoom", scale);
    // },
    // setZoom2() {
    //   let scale = this.$store.state.qiankun.scale - 10;
    //   const scrollBox = (
    //     this.container ? this.container : document
    //   ).querySelector(".page-main");
    //   this.$store.commit("setZoom", scale);
    // },
    // 滚动监听
    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('章节错误!')
      }
    },
    // 处理标记数据
    handelSignData(type, data) {
      if (this.loadPageList.indexOf(Number(data.page)) > -1) {
        // 立即渲染
        this.renderSign(type, data)
      }
      // 储存数据
      if (!this.renderSignMap[type]) this.renderSignMap[type] = {}
      if (!this.renderSignMap[type][data.page])
        this.renderSignMap[type][data.page] = []
      this.renderSignMap[type][data.page].push(data)
    },
    // 渲染标记
    renderSign(type, data) {
      // 父层设置禁止渲染标记时不再进行渲染
      if (this.$store.state.qiankun.disableSign) {
        return false
      }
      const existence = (
        this.container ? this.container : document
      ).querySelector(`[dataid="${data.id}"]`)
      // 去重
      if (!existence) {
        const pageDom = (
          this.container ? this.container : document
        ).querySelector(`[page="${data.page}"]`)
        // 创建 createTreeWalker 迭代器,用于遍历文本节点,保存到一个数组
        const treeWalker = document.createTreeWalker(
          pageDom,
          NodeFilter.SHOW_TEXT
        )
        const allTextNodes = []
        let currentNode = treeWalker.nextNode()
        while (currentNode) {
          allTextNodes.push(currentNode)
          currentNode = treeWalker.nextNode()
        }
        for (let i = 0; i < allTextNodes.length; i++) {
          const textDom = allTextNodes[i]
          if (textDom.textContent.indexOf(data.txt) > -1) {
            let reg = new RegExp(`${data.txt}`, 'ig')
            switch (type) {
              case 'Highlight':
                // 高亮
                textDom.parentNode.innerHTML =
                  textDom.parentNode.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':
                // 划线
                textDom.parentNode.innerHTML =
                  textDom.parentNode.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':
                // 笔记
                textDom.parentNode.innerHTML =
                  textDom.parentNode.innerHTML.replace(
                    reg,
                    `<span datatype="Note" dataid="${data.id}" style="border-bottom-color:${data.color}" class="notesline" onclick="signClick('Note','${data.id}','${data.chapterNum}')" onmouseover="noteHover('Note','${data.id}','${data.chapterNum}')" onmouseout="noteOut('Note')">${data.txt}<img src="${NoteIcon}"/></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')
      sections.forEach((section) => {
        if (this.config.activeBook && this.config.activeBook.tryPageCount) {
          const page = section.getAttribute('page')
          if (Number(page) > this.config.activeBook.tryPageCount) {
            let chapterDom = this.getParentWithClass(section, 'chapter')
            const chapterNum = chapterDom.getAttribute('num')
            this.catalogLength = Number(chapterNum) - 1
            section.remove()
            return false
          }
        }
        // observer 观察每个元素,以便在它们进入或离开视窗时触发回调函数。
        const isObserver = section.getAttribute('observer')
        const isLoadObserver = section.getAttribute('loadObserver')
        if (!isObserver) {
          this.observer.observe(section)
          section.setAttribute('observer', '1')
        }
        if (!isLoadObserver) {
          this.loadPageObserver.observe(section)
          section.setAttribute('loadObserver', '1')
        }
      })
    },
    initThemeColor() {
      // 获取各种需要主题色的节点
      const colorDom = (
        this.container ? this.container : document
      ).querySelectorAll('.theme-color')
      const backgroundColorDom = (
        this.container ? this.container : document
      ).querySelectorAll('.theme-back')
      const borderColorDom = (
        this.container ? this.container : document
      ).querySelectorAll('.theme-border')
      // 获取配置的主题色
      const bookThemeColor =
        this.config.activeBook && this.config.activeBook.bookThemeColor
          ? this.config.activeBook.bookThemeColor
          : null
      const chapterThemeColor =
        this.config.activeBook && this.config.activeBook.chapterThemeColor
          ? this.config.activeBook.chapterThemeColor
          : null
      const pageThemeColor =
        this.config.activeBook && this.config.activeBook.pageThemeColor
          ? this.config.activeBook.pageThemeColor
          : null
      colorDom.forEach((domItem) => {
        // 获取章节、页码
        let pageDom = this.getParentWithClass(domItem, 'page-box')
        let chapterDom = this.getParentWithClass(domItem, 'chapter')
        let page, chapterNum
        if (pageDom) page = pageDom.getAttribute('page')
        if (chapterDom) chapterNum = chapterDom.getAttribute('num')
        // 向上匹配主题色
        const themeColor =
          page && pageThemeColor && pageThemeColor[page]
            ? pageThemeColor[page]
            : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
              ? chapterThemeColor[chapterNum]
              : bookThemeColor
        if (themeColor) {
          domItem.style.color = themeColor
        }
      })
      backgroundColorDom.forEach((domItem) => {
        // 获取章节、页码
        let pageDom = this.getParentWithClass(domItem, 'page-box')
        let chapterDom = this.getParentWithClass(domItem, 'chapter')
        let page, chapterNum
        if (pageDom) page = pageDom.getAttribute('page')
        if (chapterDom) chapterNum = chapterDom.getAttribute('num')
        // 向上匹配主题色
        const themeColor =
          page && pageThemeColor && pageThemeColor[page]
            ? pageThemeColor[page]
            : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
              ? chapterThemeColor[chapterNum]
              : bookThemeColor
        if (themeColor) {
          domItem.style.backgroundColor = themeColor
        }
      })
      borderColorDom.forEach((domItem) => {
        // 获取章节、页码
        let pageDom = this.getParentWithClass(domItem, 'page-box')
        let chapterDom = this.getParentWithClass(domItem, 'chapter')
        let page, chapterNum
        if (pageDom) page = pageDom.getAttribute('page')
        if (chapterDom) chapterNum = chapterDom.getAttribute('num')
        // 向上匹配主题色
        const themeColor =
          page && pageThemeColor && pageThemeColor[page]
            ? pageThemeColor[page]
            : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
              ? chapterThemeColor[chapterNum]
              : bookThemeColor
        if (themeColor) {
          domItem.style.borderColor = themeColor
        }
      })
    },
    getParentWithClass(element, className) {
      console.log(element, className, 'element, className')
      while (element.parentElement) {
        element = element.parentElement
        if (element.classList.contains(className)) {
          return element
        }
      }
    },
    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')
          let text = null
          if (target.querySelector('p')) {
            text = target.querySelector('p').textContent.substring(0, 50)
          }
          // 返回页码和章节信息
          if (this.$store.state.qiankun && this.$store.state.qiankun.pageChange)
            this.$store.state.qiankun.pageChange({
              page: page,
              catalog: catalog,
              text,
            })
          // const sections = Array.from(document.querySelectorAll(".section"));
          //sections:获取所有具有 .section 类名的元素,并转换为数组。
          // let index = sections.findIndex((section) => section === target) + 1;
          //index:查找当前目标元素在 sections 数组中的索引,并加 1,用于确定当前页码。
        }
      })
    },
    loadPageCallback(entries, observer) {
      entries.forEach(async (entry) => {
        if (entry.isIntersecting) {
          const target = entry.target
          const page = target.getAttribute('page')
          if (this.loadPageList.indexOf(Number(page)) == -1) {
            const catalogDom = this.tool.getParentNodeByClassName(
              target,
              'chapter'
            )
            // 添加页码
            this.loadPageList.push(Number(page))
            const catalog = catalogDom.getAttribute('num')
            if (!this.questionDataMap[page]) {
              if (testData && testData[catalog]) {
                if (testData[catalog][page]) {
                  if (Array.isArray(testData[catalog][page])) {
                    this.questionDataMap[page] = await getQuestionList(
                      page,
                      testData[catalog][page],
                      this.config.activeBook
                    )
                  } else {
                    const obj = {}
                    for (let key in testData[catalog][page]) {
                      obj[key] = await getQuestionList(
                        [],
                        testData[catalog][page][key],
                        this.config.activeBook
                      )
                    }
                    this.questionDataMap[page] = obj
                  }
                }
              }
            }
            // 渲染这一页的标记
            for (const key in this.renderSignMap) {
              if (this.renderSignMap[key][page]) {
                this.renderSignMap[key][page].forEach((item) => {
                  this.renderSign(key, item)
                })
              }
            }
            // 处理高亮
            if (this.highlightData) {
              // 高亮行
              setTimeout(() => {
                // 获取页面所有text节点
                const pageTextList = document.createTreeWalker(
                  target,
                  NodeFilter.SHOW_TEXT
                )
                // 匹配关键字
                const allPageTextNodes = []
                let currentNode = pageTextList.nextNode()
                while (currentNode) {
                  allPageTextNodes.push(currentNode)
                  currentNode = pageTextList.nextNode()
                }
                for (let i = 0; i < allPageTextNodes.length; i++) {
                  const textDom = allPageTextNodes[i]
                  let txtIndex = textDom.textContent.indexOf(
                    this.highlightData.txt
                  )
                  if (txtIndex > -1) {
                    textDom.parentNode.style.transition =
                      'background-color 0.8s'
                    textDom.parentNode.scrollIntoView()
                    textDom.parentNode.style.backgroundColor = '#79bbf0'
                    setTimeout(() => {
                      textDom.parentNode.style.backgroundColor = ''
                    }, 1000)
                  }
                }
              }, 100)
            }
            if (this.loadPageList.length > 5) {
              // 超过5页
              this.loadPageList.shift()
            }
          }
        }
      })
    },
    initSwiper() {
      const doms = (
        this.container ? this.container : document
      ).querySelectorAll('.swiper-img')
      for (let i = 0; i < doms.length; i++) {
        const dom = doms[i]
        new Swiper(dom, {
          loop: false, // 无缝
          autoplay: {
            //自动开始
            delay: 3000, //时间间隔
            disableOnInteraction: false, //*手动操作轮播图后不会暂停*
          },
          paginationClickable: true,
          slidesPerView: 1, // 一组三个
          spaceBetween: 30, // 间隔
          // 如果需要前进后退按钮
          navigation: {
            nextEl: dom.querySelector('.swiper-button-next'),
            prevEl: dom.querySelector('.swiper-button-prev'),
          },
          // 窗口变化,重新init,针对F11全屏和放大缩小,必须加
          observer: true,
          observeParents: true,
          // // 如果需要分页器
          // pagination: {
          //   el: (this.container ? this.container : document).querySelector(
          //     ".swiper-pagination"
          //   ),
          //   clickable: true // 分页器可以点击
          // }
        })
      }
      const pptDoms = (
        this.container ? this.container : document
      ).querySelectorAll('.swiper_ppt')
      for (let i = 0; i < pptDoms.length; i++) {
        const dom = pptDoms[i]
        new Swiper(dom, {
          loop: false, // 无缝
          autoplay: false,
          paginationClickable: true,
          slidesPerView: 1, // 一组三个
          spaceBetween: 30, // 间隔
          // 如果需要前进后退按钮
          navigation: {
            nextEl: dom.querySelector('.swiper-button-next'),
            prevEl: dom.querySelector('.swiper-button-prev'),
          },
          // 窗口变化,重新init,针对F11全屏和放大缩小,必须加
          observer: true,
          observeParents: true,
          on: {
            init: (value) => {
              let currentPage = value.activeIndex + 1 // 获取当前页(从1开始计数)
              let totalPages = value.slides.length // 获取总页数
              var paginationInfoEl = dom.querySelector('.pageBox')
              if (paginationInfoEl)
                paginationInfoEl.textContent = currentPage + '/' + totalPages
            },
            slideChange: (value) => {
              let currentPage = value.activeIndex + 1 // 获取当前页(从1开始计数)
              let totalPages = value.slides.length // 获取总页数
              var paginationInfoEl = dom.querySelector('.pageBox')
              if (paginationInfoEl)
                paginationInfoEl.textContent = currentPage + '/' + totalPages
            },
          },
        })
      }
    },
    initViewer() {
      const doms = (
        this.container ? this.container : document
      ).querySelectorAll('.openImgBox')
      for (let i = 0; i < doms.length; i++) {
        const dom = doms[i]
        new Viewer(dom, {
          container: this.container
            ? this.container.querySelector('#app')
            : 'body',
          navbar: true, // 显示导航栏
          toolbar: true, // 显示工具栏
          title: true, // 显示标题
        })
      }
    },
    // 根据关键字全文检索
    searchTextByPage(keyword) {
      const searchResult = []
      let catalogIndex = 0
      // 所有章节组件(每本书制作时单独配置)
      const pageData = {
        pageHeader,
        chapterOne,
        chapterTwo,
        chapterThree,
        chapterFour,
        chapterfive,
        chapterSix,
        chapterSeven,
        chapterEight,
        chapterNine
        // assemblyOne,
        // assemblyTwo,
      }
      // 遍历所有章节文件
      for (const key in pageData) {
        catalogIndex++
        let pageComponent, pageExample
        // 先渲染一次当前章节文件(这时页面的内容为空),获取页码信息
        pageComponent = Vue.extend(pageData[key])
        pageExample = new pageComponent({
          propsData: {
            showPageList: [],
            questionData: {},
            isSearch: true,
          },
        })
        pageExample.$mount(
          (this.container ? this.container : document).querySelector(
            '#searchContent'
          )
        )
        // 获取页码
        const pageDom = (this.container ? this.container : document)
          .querySelector('#searchDomBox')
          .querySelectorAll('.page-box')
        const pages = []
        for (let i = 0; i < pageDom.length; i++) {
          const pageDomItem = pageDom[i]
          pages.push(Number(pageDomItem.getAttribute('page')))
        }
        // 获取页面结束,卸载销毁
        pageExample.$destroy()
          ; (this.container ? this.container : document).querySelector(
            '#searchDomBox'
          ).innerHTML = '<div id="searchContent"></div>'
        // 遍历页码
        if (pages.length) {
          for (let i = 0; i < pages.length; i++) {
            const pageNum = pages[i]
            // 动态渲染对应章节的页码
            pageComponent = Vue.extend(pageData[key])
            pageExample = new pageComponent({
              propsData: {
                showPageList: [pageNum],
                questionData: {},
                isSearch: true,
              },
            })
            pageExample.$mount(
              (this.container ? this.container : document).querySelector(
                '#searchContent'
              )
            )
            // 获取对应页面dom
            const thisPageDom = (this.container ? this.container : document)
              .querySelector('#searchDomBox')
              .querySelector(`[page="${pageNum}"]`)
            if (thisPageDom) {
              // 获取页面所有text节点
              const pageTextList = document.createTreeWalker(
                thisPageDom,
                NodeFilter.SHOW_TEXT
              )
              // 匹配关键字
              const allPageTextNodes = []
              let currentNode = pageTextList.nextNode()
              while (currentNode) {
                allPageTextNodes.push(currentNode)
                currentNode = pageTextList.nextNode()
              }
              for (let i = 0; i < allPageTextNodes.length; i++) {
                const textDom = allPageTextNodes[i]
                let txtIndex = textDom.textContent.indexOf(keyword)
                if (txtIndex > -1) {
                  // 记录关键字所在页码、章节以及匹配到的段落
                  searchResult.push({
                    page: pageNum,
                    catalog: catalogIndex,
                    txt: textDom.textContent,
                    txtIndex: txtIndex,
                  })
                }
              }
              // 结束,卸载销毁
              pageExample.$destroy()
                ; (this.container ? this.container : document).querySelector(
                  '#searchDomBox'
                ).innerHTML = '<div id="searchContent"></div>'
            }
          }
        }
      }
      // 输出搜索结果
      console.log(searchResult)
      return searchResult
    },
    // 根据检索结果跳转对应位置并高亮
    searchItemLocation(data) {
      // 记录高亮信息
      this.highlightData = data
      // 跳转
      this.gotoPage(data.catalog, data.page, () => { })
    },
    // readText() {
    //   const doms = (
    //     this.container ? this.container : document
    //   ).querySelectorAll('.read-aloud')
    //   for (let index = 0; index < doms.length; index++) {
    //     const dom = doms[index]
    //     let id = null
    //     dom.addEventListener('click', (e) => {
    //       if (e.srcElement.nodeName == 'svg') {
    //         id = dom.getAttribute('readId')
    //       } else if (e.srcElement.nodeName == 'g') {
    //         const svgDom = e.srcElement.parentNode
    //         id = svgDom.getAttribute('readId')
    //       } else {
    //         const svgDom = e.srcElement.parentNode.parentNode
    //         id = svgDom.getAttribute('readId')
    //       }
    //       const item = (
    //         this.container ? this.container : document
    //       ).querySelector('#' + id).innerText
    //       console.log(item, 233)
    //     })
    //   }
    // },
  },
  components: {
    pageHeader,
    chapterOne,
    // chapterTwo,
    // chapterThree,
    // chapterFour,
    // chapterfive,
    // chapterSix,
    // chapterSeven,
    // chapterEight,
    // chapterNine
    // assemblyOne,
    // assemblyTwo,
    // ChapterFour,
    // ChapterFive,
    // chapterSix,
    // chapterSeven,
    // chapterEight,
    // chapterNine,
    // chapter010,
    // chapter011,
    // chapter012,
    // chapter013,
    // chapter014,
    // chapter015,
    // chapter016,
    // chapter017,
    // chapter018,
  },
}
</script>
src/books/preschoolGameGuidance/view/index.vue
New file
@@ -0,0 +1,76 @@
<template>
  <div class="temp-bookInnerContentSports" @mouseup="handleMouseUp">
    <pageContent></pageContent>
  </div>
</template>
<script>
import pageContent from "./components/index.vue";
export default {
  components: {
    pageContent,
  },
  data() {
    return {};
  },
  mounted() { },
  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">
@import "../css/default.less";
</style>