add:科学实验室;

This commit is contained in:
小杨 2024-11-19 15:58:08 +08:00
parent bd485409e3
commit 24f2d0ef4b
11 changed files with 610 additions and 6 deletions

View File

@ -1,9 +1,9 @@
@font-face { @font-face {
font-family: "iconfont"; /* Project id 2794390 */ font-family: "iconfont"; /* Project id 2794390 */
src: url('iconfont.woff2?t=1728543886557') format('woff2'), src: url('iconfont.woff2?t=1732002934577') format('woff2'),
url('iconfont.woff?t=1728543886557') format('woff'), url('iconfont.woff?t=1732002934577') format('woff'),
url('iconfont.ttf?t=1728543886557') format('truetype'), url('iconfont.ttf?t=1732002934577') format('truetype'),
url('iconfont.svg?t=1728543886557#iconfont') format('svg'); url('iconfont.svg?t=1732002934577#iconfont') format('svg');
} }
.iconfont { .iconfont {
@ -14,6 +14,26 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-a-shiyanpingshiyanyanjiu:before {
content: "\e9a0";
}
.icon-banji2:before {
content: "\e6c0";
}
.icon-set:before {
content: "\e691";
}
.icon-shouye:before {
content: "\e637";
}
.icon-gongzuotai:before {
content: "\e690";
}
.icon-A1:before { .icon-A1:before {
content: "\e635"; content: "\e635";
} }

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,45 @@
{ {
"id": "2794390", "id": "2794390",
"name": "electron", "name": "文枢2.1",
"font_family": "iconfont", "font_family": "iconfont",
"css_prefix_text": "icon-", "css_prefix_text": "icon-",
"description": "", "description": "",
"glyphs": [ "glyphs": [
{
"icon_id": "41507853",
"name": "实验瓶",
"font_class": "a-shiyanpingshiyanyanjiu",
"unicode": "e9a0",
"unicode_decimal": 59808
},
{
"icon_id": "1017928",
"name": "班级",
"font_class": "banji2",
"unicode": "e6c0",
"unicode_decimal": 59072
},
{
"icon_id": "376364",
"name": "设置",
"font_class": "set",
"unicode": "e691",
"unicode_decimal": 59025
},
{
"icon_id": "5835474",
"name": "首页",
"font_class": "shouye",
"unicode": "e637",
"unicode_decimal": 58935
},
{
"icon_id": "19108133",
"name": "工作台",
"font_class": "gongzuotai",
"unicode": "e690",
"unicode_decimal": 59024
},
{ {
"icon_id": "11657531", "icon_id": "11657531",
"name": "A", "name": "A",

View File

@ -14,6 +14,16 @@
/> />
<missing-glyph /> <missing-glyph />
<glyph glyph-name="a-shiyanpingshiyanyanjiu" unicode="&#59808;" d="M404.602646 837.887844l-16.783367-7.405737-128.245981-56.577561-16.787416-7.405736-16.787416-7.405737 100.716399-228.298334a18.342257 18.342257 0 0 1 24.189104-9.37763l161.816764 71.384985a18.338207 18.338207 0 0 1 9.377631 24.189104L421.390062 845.293581l-16.787416-7.405737zM422.325396 869.563666L202.995737 772.80725A18.354404 18.354404 0 0 1 193.614058 748.614097l25.735846-58.342952a18.350355 18.350355 0 0 1 24.193153-9.38168L462.872715 777.645881a18.350355 18.350355 0 0 1 9.38168 24.193153l-25.739895 58.347001a18.342257 18.342257 0 0 1-24.189104 9.377631zM921.226676 261.831663L517.555315 623.259148l-12.240318-13.669638-161.812715-71.384985-18.346306 0.076932 1.886863-540.157186c-0.149815-39.065362 14.386322-70.158119 40.940079-87.540747 26.549708-17.37858 60.853372-18.265324 96.590404-2.498272L895.547517 99.994654c35.765376 15.77515 58.193137 41.677008 63.157289 72.935776 4.956053 31.254719-8.353218 62.833364-37.47813 88.901233zM921.226676 261.831663l-136.445333 122.168337H325.694501l1.348338-385.879778c-0.149815-39.065362 14.386322-70.158119 40.940079-87.540747 26.549708-17.37858 60.853372-18.265324 96.590404-2.498272l430.974195 191.909402c35.765376 15.77515 58.193137 41.677008 63.157289 72.935776 4.956053 31.258768-8.353218 62.837413-37.47813 88.905282z" horiz-adv-x="1039" />
<glyph glyph-name="banji2" unicode="&#59072;" d="M865.793707 531.61984c0 12.357973-10.03008 22.386347-22.386347 22.386347-12.357973 0-22.386347-10.03008-22.386347-22.386347 0-61.743787-50.19136-111.93344-111.935147-111.93344s-111.935147 50.19136-111.935147 111.93344c0 12.357973-10.03008 22.386347-22.386347 22.386347-12.357973 0-22.386347-10.03008-22.386347-22.386347 0-86.413653 70.294187-156.70784 156.70784-156.70784S865.793707 445.206187 865.793707 531.61984zM1059.054933 208.631467c58.876587 23.237973 99.48672 81.08544 99.48672 145.916587 0 71.637333-47.684267 132.082347-115.24608 150.528 0.67072 8.820053 1.611093 17.55136 1.611093 26.550613 0 185.183573-150.662827 335.802027-335.802027 335.802027-185.183573 0-335.802027-150.618453-335.802027-335.802027 0-9.043627 1.477973-17.73056 2.194773-26.594987-67.428693-18.536107-115.024213-78.93504-115.024213-150.483627 0-64.832853 40.564053-122.68032 99.442347-145.916587L287.470933 1.59744c-4.118187-11.685547 2.059947-24.446293 13.70112-28.520107 2.46272-0.84992 4.969813-1.252693 7.386453-1.252693 9.222827 0 17.90976 5.77536 21.133653 14.999893l80.413013 229.643947c0.402773 1.02912 0.67072 2.148693 0.940373 3.268267 2.46272 11.55072-4.432213 23.058773-15.849813 26.238293-2.776747 0.807253-5.59616 0.896-8.193707 0.761173-47.72864 13.298347-81.75616 57.623893-81.75616 107.815253 0 49.206613 31.43168 91.24864 76.741973 106.069333 25.879893-117.306027 113.322667-215.048533 230.137173-250.374827l-72.174933-206.226773c-4.118187-11.685547 2.059947-24.446293 13.745493-28.520107 2.46272-0.896 4.92544-1.252693 7.386453-1.252693 9.268907 0 17.865387 5.77536 21.133653 14.999893l80.18944 229.15072c2.10432 6.045013 1.56672 12.670293-1.611093 18.26816-3.089067 5.59616-8.46336 9.581227-14.73024 10.970453-132.125013 29.146453-227.985067 148.60288-227.985067 283.997867 0 160.469333 130.56 291.027627 291.027627 291.027627s291.027627-130.56 291.027627-291.027627c0-12.043947-0.761173-23.86432-2.148693-35.551573-14.327467-116.993707-97.158827-213.03296-211.10784-244.642133-5.95456-1.657173-10.970453-5.686613-13.88032-11.19232-2.82112-5.46304-3.31264-11.910827-1.252693-17.73056l81.62304-233.270613c3.268267-9.222827 11.864747-14.999893 21.133653-14.999893 2.46272 0 4.92544 0.3584 7.386453 1.252693 11.685547 4.07552 17.819307 16.83456 13.745493 28.520107l-74.011307 211.46624c110.052693 38.99904 190.55616 131.76832 214.95808 245.225813 45.535573-14.685867 77.190827-56.818347 77.190827-106.15808 0-50.773333-34.833067-95.501653-83.457707-108.30848-2.194773 0-4.522667-0.31232-6.760107-1.02912-11.461973-3.403093-18.044587-15.849813-15.179093-27.446613 0.402773-1.431893 0.896-2.776747 1.477973-4.118187l79.428267-226.822827c3.223893-9.222827 11.820373-14.999893 21.087573-14.999893 2.46272 0 4.969813 0.402773 7.432533 1.252693 11.641173 4.07552 17.819307 16.83456 13.70112 28.520107L1059.054933 208.631467z" horiz-adv-x="1366" />
<glyph glyph-name="set" unicode="&#59025;" d="M512 558.182c-115.665 0-209.455-93.789-209.455-209.455 0-115.665 93.789-209.455 209.455-209.455s209.455 93.789 209.455 209.455c0 115.665-93.789 209.455-209.455 209.455zM512 185.818c-89.972 0-162.909 72.937-162.909 162.909 0 89.972 72.937 162.909 162.909 162.909s162.909-72.937 162.909-162.909c0-89.972-72.937-162.909-162.909-162.909zM907.636 465.091l-66.746 0c-4.143 11.59-8.797 22.9-14.057 33.932l47.197 47.197c18.199 18.199 18.199 47.663 0 65.815l-98.723 98.723c-18.199 18.199-47.663 18.199-65.815 0l-47.43-47.43c-10.938 5.213-22.109 10.1-33.652 14.196l0 66.839c0 25.693-20.852 46.545-46.545 46.545l-139.636 0c-25.693 0-46.545-20.852-46.545-46.545l0-66.839c-11.59-4.096-22.807-8.89-33.792-14.15l-47.383 47.383c-18.153 18.199-47.663 18.199-65.815 0l-98.723-98.723c-18.199-18.199-18.199-47.663 0-65.815l47.29-47.29c-5.26-10.985-10.1-22.249-14.196-33.839l-66.7 0c-25.693 0-46.545-20.852-46.545-46.545l0-139.636c0-25.693 20.852-46.545 46.545-46.545l66.746 0c4.143-11.59 8.797-22.9 14.057-33.885l-47.197-47.197c-18.199-18.153-18.199-47.663 0-65.815l98.723-98.723c18.199-18.199 47.663-18.199 65.815 0l47.43 47.43c10.938-5.213 22.109-10.1 33.652-14.196l0-66.886c0-25.693 20.852-46.545 46.545-46.545l139.636 0c25.693 0 46.545 20.852 46.545 46.545l0 66.746c11.59 4.143 22.9 8.797 33.885 14.057l47.197-47.197c18.199-18.199 47.663-18.199 65.815 0l98.723 98.723c18.199 18.199 18.199 47.663 0 65.815l-47.43 47.43c5.213 10.938 10.1 22.109 14.196 33.652l66.932 0c25.693 0 46.545 20.852 46.545 46.545l0 139.636c0 25.74-20.852 46.592-46.545 46.592zM907.636 302.182c0-12.847-10.426-23.273-23.273-23.273l-78.243 0c-7.54-31.837-20.108-61.673-36.817-88.762l55.343-55.389c9.076-9.076 9.076-23.831 0-32.908l-65.815-65.815c-9.076-9.076-23.831-9.076-32.908 0l-55.343 55.343c-27.089-16.71-56.925-29.277-88.762-36.817l0-78.196c0-12.847-10.426-23.273-23.273-23.273l-93.091 0c-12.847 0-23.273 10.426-23.273 23.273l0 78.243c-31.837 7.54-61.673 20.108-88.762 36.817l-55.343-55.343c-9.076-9.076-23.831-9.076-32.908 0l-65.815 65.815c-9.076 9.076-9.076 23.831 0 32.908l55.343 55.389c-16.71 27.043-29.277 56.879-36.817 88.716l-78.243 0c-12.847 0-23.273 10.426-23.273 23.273l0 93.091c0 12.847 10.426 23.273 23.273 23.273l78.243 0c7.54 31.837 20.108 61.673 36.817 88.762l-55.389 55.343c-9.076 9.076-9.076 23.831 0 32.908l65.815 65.815c9.076 9.076 23.831 9.076 32.908 0l55.343-55.343c27.136 16.71 56.972 29.277 88.809 36.817l0 78.243c0 12.847 10.426 23.273 23.273 23.273l93.091 0c12.847 0 23.273-10.426 23.273-23.273l0-78.243c31.837-7.54 61.673-20.108 88.762-36.817l55.343 55.343c9.076 9.076 23.831 9.076 32.908 0l65.815-65.815c9.076-9.076 9.076-23.831 0-32.908l-55.343-55.343c16.71-27.089 29.277-56.879 36.817-88.762l78.243 0c12.847 0 23.273-10.426 23.273-23.273l0-93.091z" horiz-adv-x="1024" />
<glyph glyph-name="shouye" unicode="&#58935;" d="M960 448c-6.4 0-12.9 1.9-18.6 6L512 760.7 82.6 454c-14.4-10.2-34.4-6.9-44.6 7.5-10.3 14.4-6.9 34.4 7.5 44.6l448 320c11.1 7.9 26.1 7.9 37.2 0l448-320c14.4-10.3 17.7-30.3 7.5-44.6-6.4-8.8-16.2-13.5-26.2-13.5zM608-64H416c-17.7 0-32 14.3-32 32V256c0 17.7 14.3 32 32 32h192c17.7 0 32-14.3 32-32v-288c0-17.7-14.3-32-32-32z m-160 64h128V224H448v-224zM832-64H192c-52.9 0-96 43.1-96 96V512c0 17.7 14.3 32 32 32s32-14.3 32-32v-480c0-17.6 14.4-32 32-32h640c17.6 0 32 14.4 32 32V512c0 17.7 14.3 32 32 32s32-14.3 32-32v-480c0-52.9-43.1-96-96-96z" horiz-adv-x="1024" />
<glyph glyph-name="gongzuotai" unicode="&#59024;" d="M320.284444 810.666667a85.333333 85.333333 0 0 0 85.333334-85.333334v-234.951111H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333334V725.333333a85.333333 85.333333 0 0 0 85.333334 85.333334h149.617777m0 85.333333H170.666667a170.666667 170.666667 0 0 1-170.666667-170.666667v-149.617777a170.666667 170.666667 0 0 1 170.666667-170.666667h320.284444V725.333333a170.666667 170.666667 0 0 1-170.666667 170.666667zM405.617778 277.617778V42.666667a85.333333 85.333333 0 0 0-85.333334-85.333334H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333334v149.617777a85.333333 85.333333 0 0 0 85.333334 85.333334h234.951111m85.333333 85.333333H170.666667a170.666667 170.666667 0 0 1-170.666667-170.666667V42.666667a170.666667 170.666667 0 0 1 170.666667-170.666667h149.617777a170.666667 170.666667 0 0 1 170.666667 170.666667V362.951111zM853.333333 277.617778a85.333333 85.333333 0 0 0 85.333334-85.333334V42.666667a85.333333 85.333333 0 0 0-85.333334-85.333334h-149.617777a85.333333 85.333333 0 0 0-85.333334 85.333334v234.951111H853.333333m0 85.333333H533.048889V42.666667a170.666667 170.666667 0 0 1 170.666667-170.666667H853.333333a170.666667 170.666667 0 0 1 170.666667 170.666667v149.617777a170.666667 170.666667 0 0 1-170.666667 170.666667zM853.333333 810.666667a85.333333 85.333333 0 0 0 85.333334-85.333334v-149.617777a85.333333 85.333333 0 0 0-85.333334-85.333334h-234.951111V725.333333a85.333333 85.333333 0 0 0 85.333334 85.333334H853.333333m0 85.333333h-149.617777a170.666667 170.666667 0 0 1-170.666667-170.666667v-320.284444H853.333333a170.666667 170.666667 0 0 1 170.666667 170.666667V725.333333a170.666667 170.666667 0 0 1-170.666667 170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="A1" unicode="&#58933;" d="M449 339h121.5L507.5 505.5zM782 834H242C143 834 62 753 62 654v-540c0-99 81-180 180-180h540c99 0 180 81 180 180V654c0 99-81 180-180 180z m-139.5-675l-40.5 103.5H422L381.5 159H287L462.5 609H557l180-450h-94.5z" horiz-adv-x="1024" /> <glyph glyph-name="A1" unicode="&#58933;" d="M449 339h121.5L507.5 505.5zM782 834H242C143 834 62 753 62 654v-540c0-99 81-180 180-180h540c99 0 180 81 180 180V654c0 99-81 180-180 180z m-139.5-675l-40.5 103.5H422L381.5 159H287L462.5 609H557l180-450h-94.5z" horiz-adv-x="1024" />
<glyph glyph-name="A" unicode="&#59119;" d="M841.589844 779.507813a65.917969 65.917969 0 0 0 65.917969-65.917969v-659.179688a65.917969 65.917969 0 0 0-65.917969-65.917969H182.410156a65.917969 65.917969 0 0 0-65.917969 65.917969V713.589844a65.917969 65.917969 0 0 0 65.917969 65.917969h659.179688z m0-49.438477H182.410156a16.479492 16.479492 0 0 1-16.21582-13.513183L165.930664 713.589844v-659.179688a16.479492 16.479492 0 0 1 13.513183-16.21582L182.410156 37.930664h659.179688a16.479492 16.479492 0 0 1 16.21582 13.513183L858.069336 54.410156V713.589844a16.479492 16.479492 0 0 1-13.513183 16.21582L841.589844 730.069336zM539.059326 614.712891l188.85498-461.425782h-69.543456l-53.822022 139.746094H411.606933L360.916016 153.287109H296.118652l177.1875 461.425782h65.786133z m-34.277344-48.449707c-5.899658-29.597168-14.172364-58.996582-24.884033-88.165284L429.207031 342.80127h156.456299l-48.153076 127.781982-4.779053 12.689209a1170.900879 1170.900879 0 0 0-27.982178 82.990723z" horiz-adv-x="1024" /> <glyph glyph-name="A" unicode="&#59119;" d="M841.589844 779.507813a65.917969 65.917969 0 0 0 65.917969-65.917969v-659.179688a65.917969 65.917969 0 0 0-65.917969-65.917969H182.410156a65.917969 65.917969 0 0 0-65.917969 65.917969V713.589844a65.917969 65.917969 0 0 0 65.917969 65.917969h659.179688z m0-49.438477H182.410156a16.479492 16.479492 0 0 1-16.21582-13.513183L165.930664 713.589844v-659.179688a16.479492 16.479492 0 0 1 13.513183-16.21582L182.410156 37.930664h659.179688a16.479492 16.479492 0 0 1 16.21582 13.513183L858.069336 54.410156V713.589844a16.479492 16.479492 0 0 1-13.513183 16.21582L841.589844 730.069336zM539.059326 614.712891l188.85498-461.425782h-69.543456l-53.822022 139.746094H411.606933L360.916016 153.287109H296.118652l177.1875 461.425782h65.786133z m-34.277344-48.449707c-5.899658-29.597168-14.172364-58.996582-24.884033-88.165284L429.207031 342.80127h156.456299l-48.153076 127.781982-4.779053 12.689209a1170.900879 1170.900879 0 0 0-27.982178 82.990723z" horiz-adv-x="1024" />

Before

Width:  |  Height:  |  Size: 362 KiB

After

Width:  |  Height:  |  Size: 371 KiB

View File

@ -121,6 +121,12 @@ const headerMenus = [
id: 4, id: 4,
icon: '#icon-iconfontzhizuobiaozhunbduan3-1', icon: '#icon-iconfontzhizuobiaozhunbduan3-1',
disabled: true disabled: true
},
{
name: '实验室',
id: 5,
icon: '#icon-a-shiyanpingshiyanyanjiu',
path: '/experiment'
} }
] ]

View File

@ -49,6 +49,12 @@ export const constantRoutes = [
name: 'resource', name: 'resource',
meta: {title: '资源库'} meta: {title: '资源库'}
}, },
{
path: '/experiment',
component: () => import('@/views/experiment/index.vue'),
name: 'experiment',
meta: {title: '实验室'}
},
{ {
path: '/prepare', path: '/prepare',
component: () => import('@/views/prepare/index.vue'), component: () => import('@/views/prepare/index.vue'),

View File

@ -0,0 +1,330 @@
<template>
<div class="book-wrap">
<el-scrollbar height="100%">
<div class="book-name flex" @click="dialogVisible = true">
<span>{{ curBook.data.itemtitle }}</span>
<i class="iconfont icon-xiangyou"></i>
</div>
<div class="book-list" v-loading="treeLoading">
<el-tree :data="treeData" accordion :props="defaultProps" node-key="id"
:default-expanded-keys="defaultExpandedKeys" :current-node-key="curNode.data.id" highlight-current
@node-click="handleNodeClick">
<template #default="{ node }">
<span :title="node.label" class="tree-label">{{ node.label }}</span>
</template>
</el-tree>
</div>
</el-scrollbar>
</div>
<!--弹窗 选择教材-->
<el-dialog v-model="dialogVisible" append-to-body :show-close="false" width="550"
style="border-radius: 10px; padding: 10px 15px;">
<template #header>
<div class="choose-book-header flex">
<span>切换教材</span>
<i class="iconfont icon-guanbi" @click="dialogVisible = false"></i>
</div>
</template>
<div class="textbook-container">
<el-scrollbar height="450px">
<div class="textbook-item flex" v-for="item in subjectList" :class="curBook.data.id == item.id ? 'active-item' : ''"
:key="item.id" @click="changeBook(item)">
<img v-if="item.avartar" :src="item.avartar.indexOf('http') === 0 ? item.avartar : BaseUrl + item.avartar" class="textbook-img" alt="">
<div v-else class="textbook-img">
<i class="iconfont icon-jiaocaixuanze" style="font-size: 40px;"></i>
</div>
<span class="book-name">{{ item.itemtitle }}</span>
</div>
</el-scrollbar>
</div>
</el-dialog>
</template>
<script setup>
import { onMounted, ref, nextTick, toRaw, reactive } from 'vue';
import { cloneDeep } from 'lodash'
import { listEvaluation } from '@/api/subject'
const BaseUrl = import.meta.env.VITE_APP_BUILD_BASE_PATH
// emit
const emit = defineEmits(['nodeClick', 'changeBook'])
// List
const unitList = ref([])
const subjectList = ref([])
const dialogVisible = ref(false)
//
const treeData = ref([])
const defaultProps = {
children: 'children',
label: 'itemtitle',
class: 'textbook-tree'
}
//
const subjectParams = reactive(
{
edusubject: '科学',
edustage:'小学',
itemkey: 'version',
orderby: 'orderidx asc',
pageSize: 10000
}
)
//
const unitParams = reactive({
edusubject:'科学',
edustage:'小学',
itemgroup: 'textbook',
orderby: 'orderidx asc',
pageSize: 10000
})
//
const curBook = reactive({
data: {}
})
//
const curNode = reactive({
data:{}
})
const treeLoading = ref(false)
//
const defaultExpandedKeys = ref([])
//
const changeBook = (data) => {
curBook.data = data
treeData.value = getTreeData(data.id)
//
nextTick(() =>{
defaultExpandedKeys.value = [treeData.value[0].id]
curNode.data = getLastLevelData(treeData.value)[0]
handleNodeClick(curNode.data)
})
//
setTimeout(() => {
dialogVisible.value = false
}, 100);
}
const getLastLevelData = (tree) => {
let lastLevelData = [];
//
function traverseTree(nodes) {
nodes.forEach((node) => {
//
if (node.children && node.children.length > 0) {
traverseTree(node.children);
} else {
//
lastLevelData.push(node);
}
});
}
//
traverseTree(tree);
//
return lastLevelData;
}
// id
const findParentByChildId = (treeData, targetNodeId) => {
//
//
for (let node of treeData) {
// ID
if (node.children && node.children.some(child => child.id === targetNodeId)) {
// ID ID
return node;
}
//
if (node.children) {
let parentNode = findParentByChildId(node.children, targetNodeId);
if (parentNode) {
return parentNode;
}
}
}
// null
return null;
}
const handleNodeClick = (data) => {
/**
* data : 当前节点数据
*/
let nodeData = cloneDeep(toRaw(data));
//label label
nodeData.label = nodeData.itemtitle
// null
let parent = {
id: nodeData.parentid,
label: nodeData.parenttitle,
itemtitle: nodeData.parenttitle
}
const parentNode = nodeData.parentid ? parent : null
nodeData.parentNode = parentNode
let curData = {
textBook: {
curBookId: curBook.data.id,
curBookName: curBook.data.itemtitle,
curBookImg: BaseUrl + curBook.data.avartar,
curBookPath: curBook.data.fileurl
},
node: nodeData
}
// :electron-store
emit('nodeClick', curData)
}
//
const getTreeData = (bookId) =>{
// id
let data = unitList.value.filter(item => item.rootid == bookId && item.level == 1)
data.forEach( item => {
item.children = unitList.value.filter( item2 => item2.parentid == item.id && item2.level == 2)
})
return data
}
onMounted( async () => {
treeLoading.value = true
try{
//
const { rows } = await listEvaluation(subjectParams)
//
const res = await listEvaluation(unitParams)
unitList.value = [...res.rows]
//
curBook.data = rows[0]
// ""rows
treeData.value = getTreeData(rows[0].id)
nextTick(() =>{
//
defaultExpandedKeys.value = [treeData.value[0].id]
curNode.data = getLastLevelData(treeData.value)[0]
handleNodeClick(curNode.data)
})
} finally{
treeLoading.value = false
}
})
</script>
<style lang="scss" scoped>
.book-wrap {
width: 300px;
height: 100%;
background: #ffffff;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(99, 99, 99, 0.06);
display: flex;
flex-direction: column;
position: relative;
.book-name {
background-color: #ffffff;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 45px;
padding: 0 15px;
z-index: 1;
justify-content: space-between;
align-items: center;
color: #3b3b3b;
cursor: pointer;
border-bottom: solid #f4f5f7 1px;
font-size: 15px;
font-weight: 600;
border-radius: 10px 10px 0 0;
}
.book-list {
padding: 45px 10px 0 10px;
flex: 1;
}
}
:deep(.choose-dialog) {
border-radius: 10px;
}
.choose-book-header {
justify-content: space-between;
font-size: 15px;
font-weight: bold;
.icon-guanbi {
font-size: 20px;
cursor: pointer;
}
}
.textbook-container {
.textbook-item {
padding: 10px 20px;
align-items: center;
border-radius: 5px;
cursor: pointer;
.book-name {
margin-left: 20px;
color: #3b3b3b;
font-size: 13px;
}
&:hover {
background: #f4f7f9;
}
}
.active-item {
background-color: #f4f7f9;
.book-name {
color: #368fff;
font-weight: bold
}
}
.textbook-img {
width: 55px;
height: 70px;
display: flex;
align-items: center;
justify-content: center;
}
}
:deep(.el-tree-node) {
.el-tree-node__content {
height: 40px;
border-radius: 10px;
&:hover {
background-color: #eaf3ff;
}
}
}
.tree-label {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
:deep(.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content) {
background-color: #eaf3ff !important;
color: #409EFF
}
</style>

View File

@ -0,0 +1,197 @@
<template>
<div class="page-resource flex">
<!--左侧 教材 目录-->
<experimentBook @node-click="getData"/>
<div class="page-right">
<!-- 排序 -->
<div style="margin-left: 5px;margin-top: 10px;height: 45px;">
<el-form size="large">
<el-form-item label="排序:">
<div
:class="['score-circle', { 'active': active == item.active }]"
v-for="(item,index) in screenList" :key="index" @click="chooseItem(item)">
<el-text
:style="{fontWeight:'bold', color: active == item.active ? 'rgb(57, 184, 244)':'rgb(131,131,131)' }"
size="large">{{ item.title }}</el-text>
</div>
</el-form-item>
</el-form>
</div>
<div class="list-content">
<div class="list-container">
<div class="content-list" v-for="(item, index) in experimentList" :key="index">
<el-image style="width: 100%;border-radius: 8px;" :src="item.src" :fit="contain" />
<div style="text-align: left;">
<el-text size="large" type="default">{{ item.title }}</el-text>
</div>
<div style="text-align: left;display: flex;align-items: center;">
<el-icon type="info"><View /></el-icon><el-text size="small" type="info">{{ item.nums }}</el-text>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import experimentBook from './components/experimentBook.vue';
import { View } from '@element-plus/icons-vue'
//
const screenList = ref([
{
title: '使用最多',
active:1,
},
{
title: '最新发布',
active:2,
}
])
const active = ref(1)
//
const experimentList = ref([
{
title: '123',
nums:12,
src:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
},
{
title: '123',
nums:12,
src:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
},
{
title: '123',
nums:12,
src:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
},
{
title: '123',
nums:12,
src:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
},
{
title: '123',
nums:12,
src:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
},
{
title: '123',
nums:12,
src:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
},
])
const getData = (data) => {
const { textBook, node } = data
console.log(textBook,node,'asdsa');
}
const chooseItem = (item) => {
active.value = item.active
}
</script>
<style lang="scss" scoped>
.page-resource {
height: 100%;
padding: 10px 15px 0;
.page-right {
min-width: 0;
display: flex;
flex-direction: column;
flex: 1;
margin-left: 20px;
height: 100%;
background: #ffffff;
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(99, 99, 99, 0.06);
}
.icon-jiahao {
font-size: 12px;
margin-right: 3px;
font-weight: bold;
}
}
.create-btn {
font-size: 13px;
padding: 5px 13px;
}
.list-content{
border-radius: 8px;
height: 100%;
}
.list-container {
display: flex;
flex-wrap: wrap;
}
.content-list {
border-radius: 8px;
// box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
width: calc(20%);
cursor: pointer;
transition: all 0.3s ease;
padding: 5px
}
.content-list:hover {
transform: translateY(-4px);
// box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.15);
}
.item-content {
display: flex;
align-items: center;
}
.item-icon {
font-size: 24px;
color: #409eff;
margin-right: 16px;
}
.item-text {
flex: 1;
}
.item-title {
font-size: 16px;
font-weight: 500;
color: #303133;
margin-bottom: 4px;
font-weight: bold;
}
.title-header {
display: flex;
justify-content: space-between;
align-items: center;
}
.item-bottom {
text-align: right;
}
/* 过渡动画 */
.fade-enter-active, .fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
.score-circle {
background-color: #fff;
cursor: pointer;
margin-right: 5px;
width: auto;
text-align: center;
padding: 0 10px;
}
.score-circle.active {
background-color: rgb(218, 236, 255);
color: white;
}
</style>