11wqe1 1 mēnesi atpakaļ
vecāks
revīzija
82b3fb963b
38 mainītis faili ar 6814 papildinājumiem un 194 dzēšanām
  1. 30 0
      src/assets/icon/liyuan/Group.svg
  2. 5 0
      src/assets/icon/liyuan/aiTest.svg
  3. 3 0
      src/assets/icon/liyuan/backPage.svg
  4. 30 0
      src/assets/icon/liyuan/classlook.svg
  5. 26 0
      src/assets/icon/liyuan/hymj.svg
  6. 9 0
      src/assets/icon/liyuan/mbL.svg
  7. 8 0
      src/assets/icon/liyuan/mbll.svg
  8. 30 0
      src/assets/icon/liyuan/scolr.svg
  9. 20 0
      src/assets/icon/liyuan/seva.svg
  10. 26 0
      src/assets/icon/liyuan/stumange.svg
  11. 30 0
      src/assets/icon/liyuan/teamange.svg
  12. 5 0
      src/assets/icon/liyuan/teapic.svg
  13. 20 0
      src/assets/icon/liyuan/userrecord.svg
  14. 8 0
      src/assets/icon/liyuan/workTest.svg
  15. 24 0
      src/assets/icon/liyuan/yearass.svg
  16. 30 0
      src/assets/icon/liyuan/zlsj.svg
  17. 4 1
      src/components/pages/classroomObservation/index.vue
  18. 7 0
      src/components/pages/course/index.vue
  19. 4 0
      src/components/pages/evaluation.vue
  20. 37 6
      src/components/pages/liyuan/CourseCon.vue
  21. 46 6
      src/components/pages/liyuan/aiOffice.vue
  22. 35 0
      src/components/pages/liyuan/components/backPage.vue
  23. 944 0
      src/components/pages/liyuan/page/examine/index.vue
  24. 72 0
      src/components/pages/liyuan/page/portrait/chordDiagramView.vue
  25. 48 0
      src/components/pages/liyuan/page/portrait/eChartView.vue
  26. 1049 0
      src/components/pages/liyuan/page/portrait/index.vue
  27. 1202 0
      src/components/pages/liyuan/page/safeTest.vue
  28. 1538 0
      src/components/pages/liyuan/page/student.vue
  29. 1202 0
      src/components/pages/liyuan/page/teadTest.vue
  30. 148 128
      src/components/pages/liyuan/page/userInfoL.vue
  31. 33 6
      src/components/pages/liyuan/schoolSafe.vue
  32. 34 6
      src/components/pages/liyuan/studentEva.vue
  33. 5 5
      src/components/pages/liyuan/teacherDevelop.vue
  34. 4 1
      src/components/pages/synergyCourse/course.vue
  35. 2 1
      src/components/pages/sz/teacher.vue
  36. 3 0
      src/components/pages/test/index.vue
  37. 35 27
      src/components/pages/works.vue
  38. 58 7
      src/router/index.js

+ 30 - 0
src/assets/icon/liyuan/Group.svg

@@ -0,0 +1,30 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_27_4)">
+<path d="M49 21H29C26.7909 21 25 22.7909 25 25V45C25 47.2091 26.7909 49 29 49H49C51.2091 49 53 47.2091 53 45V25C53 22.7909 51.2091 21 49 21Z" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.667" height="54.667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_27_4_clip_path);height:100%;width:100%"></div></foreignObject><path data-figma-bg-blur-radius="4" d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" fill="white" fill-opacity="0.7" stroke="white"/>
+<mask id="mask0_27_4" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="39" y="34" width="36" height="36">
+<path d="M74.6087 34H39V69.6087H74.6087V34Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_27_4)">
+<mask id="mask1_27_4" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="37" y="32" width="40" height="40">
+<path d="M76.6615 32.636L37.7705 32.4956L37.6302 71.3866L76.5211 71.5269L76.6615 32.636Z" fill="white"/>
+</mask>
+<g mask="url(#mask1_27_4)">
+<path d="M56.9224 47.8758C55.6586 47.849 54.4358 48.3253 53.5232 49.2C52.6106 50.0747 52.0828 51.2761 52.056 52.54C52.0292 53.8038 52.5055 55.0265 53.3802 55.9391C54.2549 56.8518 55.4563 57.3795 56.7202 57.4063C57.984 57.4332 59.2067 56.9568 60.1194 56.0821C61.032 55.2074 61.5597 54.006 61.5866 52.7422C61.6134 51.4783 61.137 50.2556 60.2623 49.343C59.3876 48.4304 58.1862 47.9026 56.9224 47.8758ZM56.6528 60.5832C54.5464 60.5385 52.544 59.6589 51.0862 58.1378C49.6284 56.6168 48.8345 54.5789 48.8791 52.4725C48.9238 50.3662 49.8035 48.3638 51.3245 46.906C52.8455 45.4481 54.8834 44.6542 56.9898 44.6989C59.0962 44.7436 61.0985 45.6232 62.5564 47.1443C64.0142 48.6653 64.8081 50.7032 64.7634 52.8096C64.7187 54.916 63.8391 56.9183 62.3181 58.3762C60.797 59.834 58.7592 60.6279 56.6528 60.5832ZM57.074 40.7279C49.1319 40.5593 42.2445 45.3554 39.3486 52.2703C41.9486 59.3018 48.6264 64.3858 56.5685 64.5543C64.5107 64.7228 71.3981 59.9267 74.294 53.0118C71.694 45.9803 65.0162 40.8964 57.074 40.7279Z" fill="black"/>
+</g>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_27_4" x="0.6" y="0.6" width="104.467" height="103.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_27_4"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_27_4" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_27_4_clip_path" transform="translate(-30 -25)"><path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z"/>
+</clipPath></defs>
+</svg>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
src/assets/icon/liyuan/aiTest.svg


+ 3 - 0
src/assets/icon/liyuan/backPage.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.78578 10L13.6783 15.8925L12.4999 17.0709L6.01828 10.5892C5.86205 10.4329 5.77429 10.221 5.77429 10C5.77429 9.77906 5.86205 9.56714 6.01828 9.41087L12.4999 2.9292L13.6783 4.10753L7.78578 10Z" fill="black"/>
+</svg>

+ 30 - 0
src/assets/icon/liyuan/classlook.svg

@@ -0,0 +1,30 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_532)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_532_clip_path);height:100%;width:100%"></div></foreignObject><path data-figma-bg-blur-radius="4" d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" fill="white" fill-opacity="0.7" stroke="white"/>
+<g clip-path="url(#clip1_5_532)">
+<g clip-path="url(#clip2_5_532)">
+<path d="M56.9219 47.8758C55.658 47.849 54.4353 48.3253 53.5227 49.2C52.6101 50.0748 52.0823 51.2762 52.0555 52.54C52.0287 53.8038 52.505 55.0266 53.3797 55.9392C54.2544 56.8518 55.4558 57.3796 56.7197 57.4064C57.9835 57.4332 59.2062 56.9569 60.1188 56.0822C61.0315 55.2075 61.5592 54.006 61.586 52.7422C61.6129 51.4784 61.1365 50.2557 60.2618 49.343C59.3871 48.4304 58.1857 47.9026 56.9219 47.8758ZM56.6523 60.5832C54.5459 60.5385 52.5435 59.6589 51.0857 58.1379C49.6278 56.6168 48.8339 54.579 48.8786 52.4726C48.9233 50.3662 49.8029 48.3638 51.324 46.906C52.845 45.4482 54.8829 44.6543 56.9893 44.699C59.0957 44.7437 61.098 45.6233 62.5559 47.1443C64.0137 48.6654 64.8076 50.7032 64.7629 52.8096C64.7182 54.916 63.8386 56.9184 62.3175 58.3762C60.7965 59.834 58.7586 60.6279 56.6523 60.5832ZM57.0735 40.7279C49.1314 40.5594 42.244 45.3555 39.3481 52.2704C41.9481 59.3019 48.6259 64.3858 56.568 64.5543C64.5101 64.7228 71.3975 59.9267 74.2935 53.0118C71.6934 45.9803 65.0157 40.8964 57.0735 40.7279Z" fill="black"/>
+</g>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_5_532" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_532"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_532" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_532_clip_path" transform="translate(-30 -25)"><path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z"/>
+</clipPath><clipPath id="clip1_5_532">
+<rect width="35.6087" height="35.6087" fill="white" transform="translate(39 34)"/>
+</clipPath>
+<clipPath id="clip2_5_532">
+<rect width="38.8912" height="38.8912" fill="white" transform="translate(37.77 32.4956) rotate(0.206764)"/>
+</clipPath>
+</defs>
+</svg>

+ 26 - 0
src/assets/icon/liyuan/hymj.svg

@@ -0,0 +1,26 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_3028)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_3028_clip_path);height:100%;width:100%"></div></foreignObject><g data-figma-bg-blur-radius="4">
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z" fill="white" fill-opacity="0.7"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z" fill="white"/>
+<path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" stroke="white"/>
+</g>
+<path d="M62.25 42.25C62.25 39.3505 59.8995 37 57 37C54.1005 37 51.75 39.3505 51.75 42.25V52C51.75 54.8995 54.1005 57.25 57 57.25C59.8995 57.25 62.25 54.8995 62.25 52V42.25Z" fill="black" stroke="black" stroke-width="2" stroke-linejoin="round"/>
+<path d="M45.75 51.25C45.75 57.463 50.787 62.5 57 62.5M57 62.5C63.213 62.5 68.25 57.463 68.25 51.25M57 62.5V67" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+<defs>
+<filter id="filter0_d_5_3028" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_3028"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_3028" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_3028_clip_path" transform="translate(-30 -25)"><path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z"/>
+</clipPath></defs>
+</svg>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 9 - 0
src/assets/icon/liyuan/mbL.svg


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 8 - 0
src/assets/icon/liyuan/mbll.svg


+ 30 - 0
src/assets/icon/liyuan/scolr.svg

@@ -0,0 +1,30 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_2945)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_2945_clip_path);height:100%;width:100%"></div></foreignObject><path data-figma-bg-blur-radius="4" d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" fill="white" fill-opacity="0.7" stroke="white"/>
+<g clip-path="url(#clip1_5_2945)">
+<g clip-path="url(#clip2_5_2945)">
+<path d="M50.9999 39.6227L43.6666 43.9013L43.6666 64.6667L50.9999 61.644L50.9999 39.6227ZM53.6666 61.2133L54.9999 62L54.9999 60.7267L60.3332 55.3933L60.3332 42.7867L53.6666 38.8493L53.6666 61.2133ZM70.3332 39.3333L70.3332 51.2933L67.3826 48.344L62.9999 52.7267L62.9999 42.356L70.3332 39.3333ZM72.8852 57.6187L67.3826 52.1147L57.6666 61.8307L57.6679 67.3333L63.1706 67.3333L72.8852 57.6187ZM64.2679 59L65.9999 60.7333L62.0666 64.6667L60.3332 64.6667L60.3332 62.9333L64.2679 59Z" fill="black"/>
+</g>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_5_2945" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_2945"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_2945" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_2945_clip_path" transform="translate(-30 -25)"><path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z"/>
+</clipPath><clipPath id="clip1_5_2945">
+<rect width="35.6087" height="35.6087" fill="white" transform="translate(39 33.7295)"/>
+</clipPath>
+<clipPath id="clip2_5_2945">
+<rect width="32" height="32" fill="white" transform="translate(40.9999 36)"/>
+</clipPath>
+</defs>
+</svg>

+ 20 - 0
src/assets/icon/liyuan/seva.svg

@@ -0,0 +1,20 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_2937)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_2937_clip_path);height:100%;width:100%"></div></foreignObject><path data-figma-bg-blur-radius="4" d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" fill="white" fill-opacity="0.7" stroke="white"/>
+<path d="M52.5 68C52.1022 68 51.7206 67.842 51.4393 67.5607C51.158 67.2794 51 66.8978 51 66.5V62H45C44.2044 62 43.4413 61.6839 42.8787 61.1213C42.3161 60.5587 42 59.7956 42 59V41C42 40.2044 42.3161 39.4413 42.8787 38.8787C43.4413 38.3161 44.2044 38 45 38H69C69.7956 38 70.5587 38.3161 71.1213 38.8787C71.6839 39.4413 72 40.2044 72 41V59C72 59.7956 71.6839 60.5587 71.1213 61.1213C70.5587 61.6839 69.7956 62 69 62H59.85L54.3 67.565C54 67.85 53.625 68 53.25 68H52.5ZM63 56V54.5C63 52.505 58.995 51.5 57 51.5C55.005 51.5 51 52.505 51 54.5V56H63ZM57 44C56.2044 44 55.4413 44.3161 54.8787 44.8787C54.3161 45.4413 54 46.2044 54 47C54 47.7956 54.3161 48.5587 54.8787 49.1213C55.4413 49.6839 56.2044 50 57 50C57.7956 50 58.5587 49.6839 59.1213 49.1213C59.6839 48.5587 60 47.7956 60 47C60 46.2044 59.6839 45.4413 59.1213 44.8787C58.5587 44.3161 57.7956 44 57 44Z" fill="black"/>
+</g>
+<defs>
+<filter id="filter0_d_5_2937" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_2937"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_2937" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_2937_clip_path" transform="translate(-30 -25)"><path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z"/>
+</clipPath></defs>
+</svg>

+ 26 - 0
src/assets/icon/liyuan/stumange.svg

@@ -0,0 +1,26 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_3045)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_3045_clip_path);height:100%;width:100%"></div></foreignObject><g data-figma-bg-blur-radius="4">
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z" fill="white" fill-opacity="0.7"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z" fill="white"/>
+<path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" stroke="white"/>
+</g>
+<path d="M42.75 43L51 40L59.25 43L55.5 45.25V47.5C55.5 47.5 54.4995 46.75 51 46.75C47.5005 46.75 46.5 47.5 46.5 47.5V45.25L42.75 43ZM42.75 43V49" stroke="black" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M55.5 46.75V48.0835C55.5 50.6605 53.4855 52.75 51 52.75C48.5145 52.75 46.5 50.6605 46.5 48.0835V46.75M61.977 50.545C61.977 50.545 62.7045 50.0155 65.25 50.0155C67.7955 50.0155 68.523 50.5435 68.523 50.5435M61.977 50.545V49L59.25 47.5L65.25 45.25L71.25 47.5L68.523 49V50.5435M61.977 50.545V50.977C61.977 51.8451 62.3218 52.6776 62.9356 53.2914C63.5494 53.9052 64.3819 54.25 65.25 54.25C66.1181 54.25 66.9506 53.9052 67.5644 53.2914C68.1782 52.6776 68.523 51.8451 68.523 50.977V50.5435M63 64H68.5575C69.717 64 70.638 63.436 71.466 62.647C73.161 61.033 70.3785 59.743 69.318 59.1115C68.3749 58.5548 67.3276 58.1975 66.2409 58.0615C65.1542 57.9255 64.0512 58.0139 63 58.321M45.5775 57.889C44.163 58.6795 40.4535 60.292 42.7125 62.3095C43.8165 63.295 45.045 64 46.5915 64H55.4085C56.9535 64 58.1835 63.295 59.2875 62.3095C61.5465 60.292 57.837 58.6795 56.4225 57.889C53.1045 56.0365 48.8955 56.0365 45.5775 57.889Z" stroke="black" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+<defs>
+<filter id="filter0_d_5_3045" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_3045"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_3045" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_3045_clip_path" transform="translate(-30 -25)"><path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z"/>
+</clipPath></defs>
+</svg>

+ 30 - 0
src/assets/icon/liyuan/teamange.svg

@@ -0,0 +1,30 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_1_11)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_1_11_clip_path);height:100%;width:100%"></div></foreignObject><g data-figma-bg-blur-radius="4">
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7398L54.5863 50.7337C54.1452 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z" fill="white" fill-opacity="0.7"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7398L54.5863 50.7337C54.1452 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z" fill="white"/>
+<path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" stroke="white"/>
+</g>
+<g clip-path="url(#clip1_1_11)">
+<path d="M50.5625 56.875C50.4412 56.875 50.3198 56.8928 50.204 56.9304C49.5459 57.1441 48.8537 57.2812 48.125 57.2812C47.3963 57.2812 46.7042 57.1441 46.0455 56.9304C45.9298 56.8928 45.8089 56.875 45.6875 56.875C42.5361 56.875 39.9833 59.4384 40 62.594C40.0071 63.9275 41.1035 65 42.4375 65H53.8125C55.1466 65 56.2429 63.9275 56.25 62.594C56.2668 59.4384 53.714 56.875 50.5625 56.875ZM48.125 55.25C50.8175 55.25 53 53.0674 53 50.375C53 47.6826 50.8175 45.5 48.125 45.5C45.4326 45.5 43.25 47.6826 43.25 50.375C43.25 53.0674 45.4326 55.25 48.125 55.25ZM70.0625 39H50.5625C49.2184 39 48.125 40.1299 48.125 41.5182V43.875C49.3143 43.875 50.4153 44.2193 51.375 44.7789V42.25H69.25V56.875H66V53.625H59.5V56.875H55.6285C56.5984 57.7225 57.3103 58.8418 57.644 60.125H70.0625C71.4067 60.125 72.5 58.9951 72.5 57.6068V41.5182C72.5 40.1299 71.4067 39 70.0625 39Z" fill="black"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_1_11" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1_11"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1_11" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_1_11_clip_path" transform="translate(-30 -25)"><path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7398L54.5863 50.7337C54.1452 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7398L54.5863 50.7337C54.1452 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z"/>
+</clipPath><clipPath id="clip1_1_11">
+<rect width="32.5" height="26" fill="white" transform="translate(40 39)"/>
+</clipPath>
+</defs>
+</svg>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
src/assets/icon/liyuan/teapic.svg


+ 20 - 0
src/assets/icon/liyuan/userrecord.svg

@@ -0,0 +1,20 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_516)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6667" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_516_clip_path);height:100%;width:100%"></div></foreignObject><path data-figma-bg-blur-radius="4" d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" fill="white" fill-opacity="0.7" stroke="white"/>
+<path d="M61.6304 37.189C62.426 37.189 63.1891 37.505 63.7517 38.0676L69.4128 43.7288C69.9754 44.2914 70.2915 45.0544 70.2915 45.8501V65.391C70.2911 65.7815 70.1357 66.1559 69.8594 66.4319C69.5832 66.7079 69.2087 66.8629 68.8182 66.8629H45.0583C44.6686 66.8602 44.2957 66.7043 44.02 66.4289C43.7443 66.1535 43.5881 65.7807 43.585 65.391V38.6608C43.585 37.8477 44.2452 37.189 45.0583 37.189H61.6304ZM56.9382 51.2841C57.922 51.2841 58.8654 50.8933 59.561 50.1977C60.2567 49.502 60.6475 48.5586 60.6475 47.5748C60.6475 46.5911 60.2567 45.6476 59.561 44.952C58.8654 44.2564 57.922 43.8656 56.9382 43.8656C55.9545 43.8656 55.011 44.2564 54.3154 44.952C53.6198 45.6476 53.229 46.5911 53.229 47.5748C53.229 48.5586 53.6198 49.502 54.3154 50.1977C55.011 50.8933 55.9545 51.2841 56.9382 51.2841ZM51.4699 56.3439C50.4448 57.8073 51.8631 59.4444 53.6499 59.4444H60.2266C62.0133 59.4444 63.4317 57.8073 62.4065 56.3439C62.1157 55.9288 61.7766 55.5452 61.3936 55.2021C60.169 54.1048 58.5825 53.4981 56.9382 53.4981C55.2939 53.4981 53.7074 54.1048 52.4828 55.2021C52.0998 55.5452 51.7607 55.9288 51.4699 56.3439Z" fill="black"/>
+</g>
+<defs>
+<filter id="filter0_d_5_516" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_516"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_516" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_516_clip_path" transform="translate(-30 -25)"><path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z"/>
+</clipPath></defs>
+</svg>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 8 - 0
src/assets/icon/liyuan/workTest.svg


+ 24 - 0
src/assets/icon/liyuan/yearass.svg

@@ -0,0 +1,24 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_511)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6665" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_511_clip_path);height:100%;width:100%"></div></foreignObject><g data-figma-bg-blur-radius="4">
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z" fill="white" fill-opacity="0.7"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z" fill="black"/>
+<path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" stroke="white"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_5_511" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_511"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_511" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_511_clip_path" transform="translate(-30 -25)"><path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z"/>
+</clipPath></defs>
+</svg>

+ 30 - 0
src/assets/icon/liyuan/zlsj.svg

@@ -0,0 +1,30 @@
+<svg width="106" height="105" viewBox="0 0 106 105" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_5_3020)">
+<rect x="25" y="21" width="28" height="28" rx="4" fill="#0663FE"/>
+<foreignObject x="30" y="25" width="54.6665" height="54.6667"><div xmlns="http://www.w3.org/1999/xhtml" style="backdrop-filter:blur(2px);clip-path:url(#bgblur_0_5_3020_clip_path);height:100%;width:100%"></div></foreignObject><g data-figma-bg-blur-radius="4">
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z" fill="white" fill-opacity="0.7"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z" fill="white"/>
+<path d="M75.1582 29.5C76.567 29.5 77.7696 29.9785 78.7305 30.9395C79.6914 31.9005 80.169 33.1029 80.167 34.5117V70.1582C80.167 71.5667 79.6894 72.7695 78.7305 73.7305C77.771 74.6918 76.5672 75.1679 75.1553 75.166L39.5117 75.167C38.1017 75.167 36.8988 74.6897 35.9395 73.7305C34.9801 72.7711 34.5021 71.5677 34.5 70.1562V34.5117C34.5 33.1012 34.978 31.8978 35.9395 30.9385C36.9002 29.9798 38.1025 29.502 39.5107 29.5H75.1582Z" stroke="white"/>
+</g>
+<g clip-path="url(#clip1_5_3020)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M63.2499 50.7501C63.2499 51.735 63.0559 52.7102 62.679 53.6202C62.3021 54.5301 61.7496 55.3569 61.0532 56.0534C60.3567 56.7498 59.5299 57.3022 58.62 57.6792C57.7101 58.0561 56.7348 58.2501 55.7499 58.2501C54.765 58.2501 53.7897 58.0561 52.8797 57.6792C51.9698 57.3022 51.143 56.7498 50.4466 56.0534C49.7501 55.3569 49.1977 54.5301 48.8208 53.6202C48.4439 52.7102 48.2499 51.735 48.2499 50.7501C48.2499 48.7609 49.04 46.8533 50.4466 45.4468C51.8531 44.0402 53.7607 43.2501 55.7499 43.2501C57.739 43.2501 59.6466 44.0402 61.0532 45.4468C62.4597 46.8533 63.2499 48.7609 63.2499 50.7501ZM62.2674 59.9201C59.9683 61.5546 57.139 62.2659 54.3403 61.9127C51.5416 61.5596 48.9776 60.1679 47.1566 58.0135C45.3356 55.8591 44.3904 53.0992 44.5084 50.2807C44.6264 47.4623 45.7989 44.791 47.7936 42.7963C49.7883 40.8016 52.4596 39.6291 55.278 39.5111C58.0965 39.3931 60.8564 40.3383 63.0108 42.1593C65.1653 43.9803 66.5569 46.5442 66.9101 49.343C67.2632 52.1417 66.552 54.971 64.9174 57.2701L71.4499 63.8001C71.6341 63.9717 71.7818 64.1787 71.8843 64.4087C71.9868 64.6387 72.0419 64.887 72.0464 65.1388C72.0508 65.3905 72.0045 65.6406 71.9102 65.8741C71.8159 66.1075 71.6755 66.3196 71.4975 66.4977C71.3194 66.6757 71.1073 66.8161 70.8739 66.9104C70.6404 67.0047 70.3903 67.051 70.1386 67.0465C69.8868 67.0421 69.6385 66.987 69.4085 66.8845C69.1785 66.782 68.9715 66.6343 68.7999 66.4501L62.2674 59.9201Z" fill="black"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_5_3020" x="-5.4" y="-12.4" width="115.8" height="116.467" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="12.2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.168627 0 0 0 0 0.290196 0 0 0 0 0.741176 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5_3020"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5_3020" result="shape"/>
+</filter>
+<clipPath id="bgblur_0_5_3020_clip_path" transform="translate(-30 -25)"><path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703ZM39.5113 74.6667C38.2253 74.6667 37.1524 74.2367 36.2925 73.3769C35.4327 72.5171 35.0019 71.4432 35 70.1553V34.5113C35 33.2253 35.4308 32.1524 36.2925 31.2925C37.1542 30.4327 38.2272 30.0019 39.5113 30H75.1581C76.4423 30 77.5152 30.4308 78.3769 31.2925C79.2386 32.1542 79.6685 33.2272 79.6667 34.5113V70.1581C79.6667 71.4423 79.2367 72.5152 78.3769 73.3769C77.5171 74.2386 76.4432 74.6685 75.1553 74.6667H39.5113Z"/>
+<path d="M53.0062 53.0703L57.0123 57.0736C57.4162 57.5147 57.9335 57.7352 58.5645 57.7352C59.1935 57.7352 59.7277 57.5147 60.1669 57.0736L69.8958 47.4005V52.4031C69.8958 52.7642 70.0289 53.0759 70.295 53.3383C70.5612 53.5989 70.8934 53.7292 71.2917 53.7292C71.6527 53.7292 71.9756 53.5961 72.2604 53.33C72.5451 53.0638 72.6875 52.7316 72.6875 52.3333V44.8182C72.6875 44.204 72.4642 43.6754 72.0175 43.2325C71.5727 42.7858 71.0441 42.5625 70.4318 42.5625H62.8469C62.4858 42.5625 62.175 42.7049 61.9145 42.9896C61.6539 43.2744 61.5227 43.5973 61.5208 43.9583C61.5208 44.3566 61.6539 44.6888 61.92 44.955C62.1862 45.2211 62.5184 45.3542 62.9167 45.3542H67.8495L58.5896 54.7397L54.5863 50.7337C54.1453 50.2833 53.6102 50.0581 52.9811 50.0581C52.3502 50.0581 51.8328 50.2833 51.429 50.7337L43.5034 58.6062C43.2317 58.9021 43.0958 59.2399 43.0958 59.6196C43.0958 59.9992 43.2317 60.3194 43.5034 60.5799C43.8012 60.887 44.1399 61.0405 44.5196 61.0405C44.8992 61.0405 45.2194 60.887 45.4799 60.5799L53.0062 53.0703Z"/>
+</clipPath><clipPath id="clip1_5_3020">
+<rect width="30" height="30" fill="white" transform="translate(42 37)"/>
+</clipPath>
+</defs>
+</svg>

+ 4 - 1
src/components/pages/classroomObservation/index.vue

@@ -157,7 +157,10 @@
             />
           </el-tooltip>
         </div>
-
+        <div :class="['co-h2-r-btn2']"  v-if="$route.query.gotype == 1" @click.stop="$router.go(-1)">
+          <!-- <span class="co-h2-r-b-icon3"></span> -->
+          返回
+        </div>
         <!-- <div :class="['co-h2-r-btn2']" @click.stop="home">
 					<el-tooltip
 						class="item"

+ 7 - 0
src/components/pages/course/index.vue

@@ -1,5 +1,7 @@
 <template>
   <div class="pb_content">
+      <backPage  v-if="$route.query.gotype == 1" tit="课程管理"></backPage>
+
     <div class="pb_content_body" style="width: 100%;margin: 0;">
       <!-- <div class="student_head">
         <el-carousel trigger="click" style="width: 100%; height: 100%">
@@ -215,7 +217,12 @@
 </template>
 
 <script>
+import backPage from "../liyuan/components/backPage.vue";
+
 export default {
+  components: {
+    backPage
+  },
   data() {
     return {
       zoneList: [],

+ 4 - 0
src/components/pages/evaluation.vue

@@ -10,6 +10,7 @@
     "
   >
     <div>
+      <backPage v-if="$route.query.gotype == 1" tit="目标管理"></backPage>
       <div
         class="pb_content_body"
         style="
@@ -552,11 +553,14 @@
 import Mind from "../tools/jsmind";
 import Sunburst from "../tools/sunburst";
 import SeeBoard from "../tools/seeBoard";
+import backPage from "./liyuan/components/backPage.vue";
+
 export default {
   components: {
     Mind,
     Sunburst,
     SeeBoard,
+    backPage
   },
   data() {
     return {

+ 37 - 6
src/components/pages/liyuan/CourseCon.vue

@@ -1,17 +1,48 @@
 <template>
-  <div>
-    <div>课程建设</div>
-    <div>Course Construction</div>
-
+  <div class="teacherDevelop">
+    <topBar title="课程建设" detail="智能课程管理 · 数字化教学资源 · 协同教研平台"></topBar>
+    <div class="cardBox">
+      <card v-for="item in cardArray" :key="item.title" :title="item.title" :icon="item.icon" :to="item.to" :type="item.type"></card>
+    </div>
   </div>
 </template>
 
 <script>
+import topBar from './components/topBar'
+import card from './components/card.vue';
 export default {
-
+  components: {
+    topBar,
+    card
+  },
+  data() {
+    return {
+      cardArray: [
+        { title: '课程管理', icon: require('../../../assets/icon/liyuan/niandukaohe.svg'), type: 1, to: "/course" },
+        { title: '课程中心', icon: require('../../../assets/icon/liyuan/gerendangan.svg'), type: 2, to: `http://localhost:8082/#/index?userid=${this.$route.query.userid}&oid=${this.$route.query.oid}&org=${this.$route.query.org}&tType=${this.$route.query.tType}&cid=&screenType=3&gotype=1` },
+        { title: 'AI应用', icon: require('../../../assets/icon/liyuan/jiaoshihuaxiang.svg'), type: 2, to: `//app.cocorobo.cn/#/?userid=${this.$route.query.userid}&oid=${this.$route.query.oid}&org=${this.$route.query.org}&role=${this.$route.query.role}` },
+        { title: '工作空间', icon: require('../../../assets/icon/liyuan/ketangguancha.svg'), type: 1, to:`//app.cocorobo.cn/#/?userid=${this.$route.query.userid}&oid=${this.$route.query.oid}&org=${this.$route.query.org}&role=${this.$route.query.role}` },
+        { title: '知识库', icon: require('../../../assets/icon/liyuan/zhinengbiaodan.svg'), type: 1, to: `//app.cocorobo.cn/#/?userid=${this.$route.query.userid}&oid=${this.$route.query.oid}&org=${this.$route.query.org}&role=${this.$route.query.role}`  },
+        { title: '协同建构', icon: require('../../../assets/icon/liyuan/zhinengbiaodan.svg'), type: 1, to: "/synergyCourse" },
+      ]
+    }
+  },
 }
 </script>
 
-<style>
+<style scoped>
+.teacherDevelop{
+  width: 100%;
+  height: 100%;
+  padding: 40px;
+  box-sizing: border-box;
+}
 
+.cardBox{
+  display: grid;
+  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
+  gap: 20px;
+  width: 100%;
+  margin-top: 20px;
+}
 </style>

+ 46 - 6
src/components/pages/liyuan/aiOffice.vue

@@ -1,17 +1,57 @@
 <template>
-  <div>
-    <div>智慧办公</div>
-    <div>Intelligent Office</div>
-
+  <div class="teacherDevelop">
+    <topBar title="智能教务" detail="资料搜集 · 智能表单 · 教师管理 · 会议妙记"></topBar>
+    <div class="cardBox">
+      <card v-for="item in cardData(cardArray)" :key="item.title" :title="item.title" :icon="item.icon" :to="item.to" :type="item.type"></card>
+    </div>
   </div>
 </template>
 
 <script>
+import topBar from './components/topBar'
+import card from './components/card.vue';
 export default {
-
+  components: {
+    topBar,
+    card
+  },
+  data() {
+    return {
+      role: this.$route.query.role,
+      cardArray: [
+        { title: '资料收集', icon: require('../../../assets/icon/liyuan/zlsj.svg'), type: 1, to: "/teadTest",role:0 },
+        { title: '会议妙记', icon: require('../../../assets/icon/liyuan/hymj.svg'), type: 2, to: `https://beta.cloud.cocorobo.cn/aigpt/?userid=${this.$route.query.userid}&oid=${this.$route.query.oid}&org=${this.$route.query.org}&role=${this.$route.query.role}`,role:0 },
+        { title: '教师管理', icon: require('../../../assets/icon/liyuan/teamange.svg'), type: 1, to: "/teacher",role:1 },
+        { title: '学生管理', icon: require('../../../assets/icon/liyuan/stumange.svg'), type: 1, to: "/Listudent",role:0 },
+        { title: '智能表单', icon: require('../../../assets/icon/liyuan/workTest.svg'), type: 1, to: "/test",role:1 },
+      ]
+    }
+  },
+  computed:{
+    // 进行权限判断一些只有管理员能看
+    cardData(){
+      return (val)=>{
+          let com = val.filter(e=> e.role==0 || (this.role == 1 && role == 1) )
+          return com
+      }
+    }
+  }
 }
 </script>
 
-<style>
+<style scoped>
+.teacherDevelop{
+  width: 100%;
+  height: 100%;
+  padding: 40px;
+  box-sizing: border-box;
+}
 
+.cardBox{
+  display: grid;
+  grid-template-columns: repeat(5, 1fr);
+  gap: 20px;
+  width: 100%;
+  margin-top: 20px;
+}
 </style>

+ 35 - 0
src/components/pages/liyuan/components/backPage.vue

@@ -0,0 +1,35 @@
+<template>
+    <div class="pgb" @click="backO">
+        <img src="../../../../assets/icon/liyuan/backPage.svg" alt="">
+        <div>{{ tit }}</div>
+    </div>
+</template>
+
+<script>
+    export default {
+        props:['tit'],
+        data(){
+            return{
+
+            }
+        },
+        methods:{
+            backO(){
+                this.$router.go(-1)
+            }
+        }
+    }
+</script>
+
+<style scoped>
+.pgb{
+    font-family: PingFang SC;
+    font-weight: 600;
+    font-size: 20px;
+    letter-spacing: 10%;
+    display: flex;align-items: center;gap: 10px;
+    cursor: pointer;
+    padding-bottom: 25px;
+    box-sizing: border-box;
+}
+</style>

+ 944 - 0
src/components/pages/liyuan/page/examine/index.vue

@@ -0,0 +1,944 @@
+<template>
+  <div class="testPersonExamine">
+    <backPage v-if="$route.query.gotype == 1" tit="年度考核"></backPage>
+    <div class="testTit">
+      <div class="teaLis">
+        <div
+          class="teal"
+          @click="cutPage(2)"
+          v-if="bArray.length"
+          :class="[pType == 2 ? 'Tbor' : '']"
+        >
+          专任教师
+        </div>
+        <div
+          class="teal"
+          @click="cutPage(1)"
+          v-if="aArray.length"
+          :class="[pType == 1 ? 'Tbor' : '']"
+        >
+          班主任考核
+        </div>
+      </div>
+      <div style="margin-right: 30px;display: flex;">
+        <!-- <el-button
+          type="primary"
+          size="mini"
+          style="margin-right: 15px;"
+          @click="saveTab"
+          v-if="allData.type == 1"
+          >保存</el-button
+        > -->
+
+        <div style="margin: 0 20px;" v-if="timeListA.length>0 && pType == 1">
+          <el-select v-model="timeA" placeholder="请选择">
+            <el-option
+              v-for="item in timeListA"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </div>
+
+        <div style="margin: 0 20px;" v-if="timeListB.length>0 && pType == 2">
+          <el-select v-model="timeB" placeholder="请选择">
+            <el-option
+              v-for="item in timeListB"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </div>
+
+        <el-button
+          v-if="allData.type != 2"
+          type="primary"
+          size="mini"
+          @click="Submit"
+          >提交</el-button
+        >
+      </div>
+    </div>
+    <div style="flex: 1;overflow: hidden;" class="notes">
+      注:评价积分周期为2023年6月30日至2024年6月30日
+    </div>
+    <div style="height:100%;overflow: auto;" v-loading="tabLoad">
+      <div class="sBox_table">
+        <div class="table_title">
+          <div style="width: 110px;">一级指标</div>
+          <div style="width: 140px;min-width: 140px;">二级指标</div>
+          <div style="width: 700px;min-width: 700px;">评价方法</div>
+          <div style="width: 100px;">分值</div>
+          <div style="width: 100px;">自评</div>
+          <div style="flex: 1;min-width: 150px;">自评概述</div>
+          <div style="flex: 0.5;min-width: 100px;">数据来源</div>
+          <!-- <div style="width: 100px;">认定</div>
+          <div style="flex: 1;">认定概述</div> -->
+        </div>
+        <div style="height: 100%;">
+          <div
+            class="table_Content"
+            v-for="item in PageBaseData"
+            :key="item.id"
+          >
+            <div class="twoCol">
+              <div class="ColTit">{{ item.name }}</div>
+              <div class="ColCon">
+                <div class="twoCon" v-for="k in item.children" :key="k.id">
+                  <div>{{ k.name }}</div>
+                  <div style="padding: 10px;box-sizing: border-box;">
+                    {{ k.evaMethod }}
+                  </div>
+                  <div>{{ k.score }}</div>
+                  <div>
+                    <div v-if="k.type == 1" class="ScoreStep">
+                      <el-input
+                        class="num_input"
+                        v-if="allData.type * 1 != 2"
+                        @blur="
+                          saveTab(
+                            parseFloat(k.sco1) > k.score
+                              ? (k.sco1 = k.score)
+                              : '' || k.sco1 < 0
+                              ? (k.sco1 = '')
+                              : ''
+                          )
+                        "
+                        v-model="k.sco1"
+                        v-stopMousewheel
+                        type="number"
+                      ></el-input>
+                      <div v-else>{{ k.sco1 }}</div>
+                    </div>
+                    <div v-else class="ScoreStep">/</div>
+                  </div>
+                  <div class="tArea">
+                    <div
+                      v-if="k.type == 1"
+                      style="height: 100%;height: 100%;width: 100%;text-align: left;"
+                    >
+                      <!-- <textarea
+                      v-if="allData.type * 1 != 2"
+                      @blur="saveTab"
+                      :placeholder="
+                        k.cueWordType == 1 ? '【自评后请简述测算过程】' : ''
+                      "
+                      v-model.trim="k.selfSummary"
+                    /> -->
+                      <el-input
+                        v-if="allData.type * 1 != 2"
+                        type="textarea"
+                        @blur="saveTab"
+                        :placeholder="
+                          k.cueWordType == 1 ? '【自评后请简述测算过程】' : ''
+                        "
+                        v-model="k.selfSummary"
+                      >
+                      </el-input>
+                      <div
+                        v-else
+                        style="width: 100%;padding: 5px;height: 100%;box-sizing: border-box;"
+                      >
+                        {{ k.selfSummary }}
+                      </div>
+                    </div>
+                    <div v-else class="ScoreStep">/</div>
+                  </div>
+                  <div>
+                    <div v-if="!k.testid.test.length">/</div>
+                    <div v-else style="padding-top: 10px;">
+                      <!-- {{ k.testid.test }} -->
+                      <div
+                        v-for="(item2) in k.testid.test"
+                        :key="item2.courseId"
+                        class="orgData"
+                      >
+                        <div @click="lookPrize(item2.courseId)">
+                          {{ item2.title }}:{{ item2.num }}份
+                        </div>
+                        <div
+                          style="color: black;"
+                          @click="goFillIn(item2.courseId)"
+                        >
+                          去填写
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <!-- <div style="display: flex;justify-content: center;">
+                    {{ k.sco2 }}
+                  </div>
+                  <div style="display: flex;justify-content: center;">
+                    {{ k.cogSum }}
+                  </div> -->
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- 点击数据来源 -->
+    <el-dialog
+      title=""
+      :visible.sync="diaIframe"
+      :append-to-body="true"
+      width="95%"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div style="height: 100%;">
+        <iframe
+          ref="viframe"
+          style="width: 100%; height: 99%; border: none"
+          :src="ifmUrl"
+        ></iframe>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="diaIframe = false">关 闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import backPage from "../../components/backPage.vue";
+export default {
+  components:{
+    backPage
+  },
+  directives: {
+    stopMousewheel: {
+      inserted: function(el) {
+        const ele = el.tagName === "INPUT" ? el : el.querySelector("input");
+        ele.addEventListener("mousewheel", () => {
+          ele.blur();
+        });
+      }
+    }
+  },
+  data() {
+    return {
+      pType: 2,
+      allData: {
+        type: 1,
+        rjson: ""
+      },
+      // 页面填写数据
+      tableJsonCon: [],
+      // 页面基础ui
+      PageBaseData: [],
+      tabLoad: false, //表格加载状态
+      userid: this.$route.query.userid, //用户id
+      oid: this.$route.query.oid, //学校id
+      org: this.$route.query.org, //组织id
+      role: this.$route.query.role,
+      ifmUrl: "", //数据来源地址
+      diaIframe: false, //数据来源弹框
+      aArray: [],
+      bArray: [],
+      timeListB:[],
+      timeListA:[],
+      timeA:"",
+      timeB:"",
+      testExamineBaseList:[],
+    };
+  },
+  watch: {
+    pType(newVal, oldVal) {
+      this.getPageBase();
+    },
+    timeA(){
+      this.getPageBase();
+    },
+    timeB(){
+      this.getPageBase();
+    }
+  },
+  computed: {},
+  activated() {
+    // 当组件被激活时调用
+    this.getPageBase();
+    this.getPageBase2(1)
+    this.getPageBase2(2)
+  },
+  mounted() {
+    this.getPageBase();
+    this.getPageBase2(1)
+    this.getPageBase2(2)
+    // console.log(JSON.stringify(this.TeaTabJson));
+  },
+  methods: {
+    // 禁用滚轮事件
+    handleWheel(event) {
+      event.preventDefault();
+    },
+    goFillIn(val) {
+      this.$router.push(
+        `/doTest?cid=${val}&org=${this.org}&type=3&role=${this.role}&isN=&oid=${this.oid}&userid=${this.userid}`
+      );
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}`;
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/test?userid=${this.userid}&oid=45facc0a-1211-11ec-80ad-005056b86db5&org=&role=0`;
+      // this.diaIframe = true;
+    },
+    // 提交
+    Submit() {
+      // if (this.allData.type == 2) {
+      //   this.$message({
+      //     type: "info",
+      //     message: "您已提交过,请勿重复提交"
+      //   });
+      //   return;
+      // }
+      let judgeNum = 0;
+
+      // i.type == 1 这个用来判断 科组评价的因为最后两个教师不能打分所以type设为2,下面的循环将他们两个排除出去
+      this.PageBaseData.forEach(e => {
+        e.children.forEach(i => {
+          if (i.type == 1) {
+            if (!i.sco1) {
+              judgeNum = 1;
+            }
+            if (i.sco1 * 1 < 0) {
+              judgeNum = 2;
+            }
+          }
+        });
+      });
+
+      if (judgeNum == 1) {
+        this.$message({
+          message: "请将【自评】分数列填写完整后再提交。",
+          type: "warning"
+        });
+        return;
+      }
+      if (judgeNum == 2) {
+        this.$message({
+          message: "自评分数不可低于0,请检查后重新输入。",
+          type: "warning"
+        });
+        return;
+      }
+
+      for (const e of this.PageBaseData) {
+        for (const k of e.children) {
+          if (k.testid.test.length > 0) {
+            k.testid.test = k.testid.test.map(item => item.courseId);
+          }
+        }
+      }
+
+      this.$confirm("提交后无法修改,是否确定提交?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "info"
+      })
+        .then(() => {
+          let params = [
+            {
+              uid: this.userid,
+              oid: this.oid,
+              org: this.org,
+              type: this.pType,
+              json: JSON.stringify(this.PageBaseData),
+              ttype: 2,
+              tid:this.testExamineBaseList[0].id
+            }
+          ];
+          this.ajax
+            .post(this.$store.state.api + "addTestExamineWorks2", params)
+            .then(res => {
+              this.getData();
+            })
+            .catch(error => {
+              console.log(error);
+            });
+        })
+        .catch(() => {
+          this.handleData();
+
+          this.$message({
+            type: "info",
+            message: "已取消提交"
+          });
+        });
+    },
+    // 保存
+    saveTab() {
+      this.$forceUpdate();
+      let PageBaseDataCopy = JSON.parse(JSON.stringify(this.PageBaseData));
+
+      for (const e of PageBaseDataCopy) {
+        for (const k of e.children) {
+          if (k.testid.test.length > 0) {
+            k.testid.test = k.testid.test.map(item => item.courseId);
+          }
+        }
+      }
+
+      let params = [
+        {
+          uid: this.userid,
+          oid: this.oid,
+          org: this.org,
+          type: this.pType,
+          json: JSON.stringify(PageBaseDataCopy),
+          ttype: 1,
+          tid:this.testExamineBaseList[0].id
+        }
+      ];
+      // return console.log(params);
+      this.ajax
+        .post(this.$store.state.api + "addTestExamineWorks2", params)
+        .then(res => {
+          console.log("addTestExamineWorks2", res);
+          // this.getData();
+          // this.handleData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 切换专任,班主任
+    cutPage(e) {
+      this.pType = e;
+    },
+    // 获取页面数据
+    getData() {
+      this.tabLoad = true;
+      let params = {
+        uid: this.userid,
+        type: this.pType,
+        tid:this.testExamineBaseList[0].id
+      };
+      this.ajax
+        .get(this.$store.state.api + "getTestExamineByUserId2", params)
+        .then(res => {
+          console.log("getTestExamineByUserId", res);
+
+          if (res.data[0].length > 0) {
+            this.allData = res.data[0][0];
+            let val = JSON.parse(res.data[0][0].json);
+
+            this.PageBaseData.forEach(e => {
+              val.forEach(i => {
+                if (e.id == i.id) {
+                  e.children.forEach(a => {
+                    i.children.forEach(b => {
+                      if (a.id == b.id) {
+                        a.sco1 = b.sco1;
+                        a.sco2 = b.sco2;
+                        a.cogSum = b.cogSum;
+                        a.selfSummary = b.selfSummary;
+                      }
+                    });
+                  });
+                }
+              });
+            });
+
+            this.handleData();
+            return (this.tabLoad = false);
+          } else {
+            this.allData.type = 1;
+            this.allData.rjson = "";
+            this.handleData();
+            this.tabLoad = false;
+          }
+          // this.$forceUpdate();
+          //  else {
+          //   this.allData.type = 1;
+          //   this.getPageBase();
+          //   this.tabLoad = false;
+          // }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 获取页面基础ui信息
+    getPageBase() {
+      let params = {
+        typ: this.pType,
+        org: this.org,
+        oid: this.oid,
+        time:this.pType==1?this.timeA:this.timeB
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase2", params)
+        .then(res => {
+          // console.log("resresresres", res.data[0]);
+          // this.allData = res.data[0][0];
+          let testExamineBaseList = res.data[0];
+          this.testExamineBaseList = testExamineBaseList;
+          console.log("selectTestExamineBase", res.data[0][0]);
+          this.PageBaseData = JSON.parse(res.data[0][0].json);
+          // 先获取基础模板,然后再获取用户又没有填写过,填写过就开始循环赋值给基础模板,最后提交基础模板
+          this.getData();
+
+          // this.handleData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 获取页面基础ui信息
+    getPageBase2(type) {
+      let params = {
+        typ: type,
+        org: this.org,
+        oid: this.oid,
+        time:type==1?this.timeA:this.timeB
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase2", params)
+        .then(res => {
+          if(type == 1){
+            this.aArray = res.data[0];
+            this.timeListA = this.aArray.map(i=>{return {value:i.time,label:i.timeLabel}})
+            if(this.timeListA.length>0)this.timeA = this.timeListA[0].value;
+          }else {
+            this.bArray = res.data[0];
+            this.timeListB = this.bArray.map(i=>{return {value:i.time,label:i.timeLabel}})
+            if(this.timeListB.length>0)this.timeB = this.timeListB[0].value;
+            if(!this.bArray.length){
+              this.pType = 1
+            }
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    async handleData() {
+      for (const e of this.PageBaseData) {
+        for (const k of e.children) {
+          if (k.testid.test.length > 0) {
+            k.testid.test = await this.computedTest(k.testid.test);
+          }
+        }
+      }
+    },
+    computedTest(val) {
+      let params = [
+        {
+          uid: this.userid,
+          testId: val.join(",")
+        }
+      ];
+      return new Promise(resolve => {
+        this.ajax
+          .post(this.$store.state.api + "selectExamineTestName", params)
+          .then(res => {
+            resolve(res.data[0]);
+          })
+          .catch(error => {
+            console.log(error);
+          });
+      });
+    },
+    // 查看数据来源
+    lookPrize(val) {
+      // return;
+      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}`;
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/test?userid=${this.userid}&oid=45facc0a-1211-11ec-80ad-005056b86db5&org=&role=0`;
+      this.diaIframe = true;
+    },
+    // 关闭弹框
+    handleClose(done) {
+      this.getPageBase();
+      done();
+    }
+  }
+};
+</script>
+
+<style scoped>
+.testPersonExamine {
+  width: 100%;
+  min-width: calc(100px * 10);
+  height: 100%;
+  /* overflow-x: scroll; */
+  /* overflow: auto; */
+  display: flex;
+  flex-direction: column;
+  padding: 10px;
+  box-sizing: border-box;
+  background-color: #fff;
+	/* margin: 10px 0; */
+	border-radius: 5px;
+}
+/* .tArea { */
+  /* box-sizing: border-box; */
+  /* padding: 5px; */
+/* } */
+.tArea > div > textarea {
+  border: none;
+  width: 100%;
+  height: 100%;
+  resize: none;
+  box-sizing: border-box;
+  padding: 5px;
+  outline-style: none;
+}
+.tArea > div >>> .el-textarea {
+  height: 100%;
+}
+.tArea > div >>> .el-textarea__inner {
+  border: none !important;
+  height: 100%;
+  resize: none;
+}
+
+.testPersonExamine > .testTit {
+  height: 100px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.notes {
+  color: #fb5a3f;
+  font-weight: 600;
+  font-size: 20px;
+}
+.ScoreStep {
+  height: 100%;
+  display: flex;
+  width: 100%;
+  text-align: center;
+  align-items: center;
+  justify-content: center;
+}
+.ScoreStep > input {
+  height: 100% !important;
+  outline-style: none;
+  width: 100%;
+  padding: 5px;
+  text-align: center;
+  box-sizing: border-box;
+  border-radius: 4px;
+  border: none !important;
+
+  /* border: 1px solid #dcdfe6 !important; */
+}
+.teaLis {
+  display: flex;
+}
+.teal {
+  padding: 10px 20px;
+  cursor: pointer;
+}
+.Tbor {
+  border-bottom: 2px rgba(54, 129, 252, 1) solid;
+  font-weight: 600;
+}
+.testCon {
+  box-sizing: border-box;
+  padding: 20px;
+}
+
+.orgData {
+  cursor: pointer;
+  color: #528df6;
+  margin-bottom: 10px;
+}
+
+.diaScoreTop {
+  display: flex;
+  justify-content: space-between;
+  height: 60px;
+}
+
+.diaScoreLeft {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.diaScoreLeft > div {
+  margin-right: 30px;
+}
+
+.diaScoreRight {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.TabBtn {
+  cursor: pointer;
+  color: #528df6;
+}
+
+.sBox_table {
+  width: 100%;
+  min-width: 1300px;
+  margin: 0 auto;
+  height: 100%;
+  box-sizing: border-box;
+  padding-bottom: 60px;
+  font-size: 14px;
+}
+
+.table_title {
+  width: calc(100% - 6px);
+  min-width: calc(110px * 9);
+  height: 50px;
+  background: #e0eafb;
+  border: 1px solid #d5d8df;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+}
+
+/* 容器不显示滚动条,但仍然可以滚动 */
+.container {
+  overflow: auto;
+  scrollbar-width: none; /* 对于Firefox */
+}
+
+/* 针对WebKit浏览器,比如Chrome和Safari,使滚动条不占据空间 */
+.container::-webkit-scrollbar {
+  display: none; /* 隐藏滚动条 */
+}
+
+/* 针对IE和Edge,使滚动条不占据空间 */
+.container {
+  -ms-overflow-style: none; /* IE 10+ */
+  scrollbar-width: none; /* Firefox */
+}
+.table_title > div {
+  /* width: calc(100% / 9); */
+  min-width: 110px;
+  box-sizing: border-box;
+  text-align: center;
+  height: 100%;
+  line-height: 50px;
+  border-right: 1px solid #d5d8df;
+  border-left: 1px solid #d5d8df;
+  background: #e0eafb;
+}
+
+/* .table_title2 {
+  width: 100%;
+  min-width: calc(110px * 8);
+  height: 50px;
+  background: #e0eafb;
+  border: 1px solid #d5d8df;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+}
+.table_title2 > div {
+  width: calc(100% / 8);
+  min-width: 110px;
+  text-align: center;
+  height: 100%;
+  line-height: 50px;
+  border-right: 1px solid #d5d8df;
+} */
+
+.table_title > div:last-child {
+  border: none;
+}
+
+.table_Content {
+  width: 100%;
+  min-width: calc(110px * 9);
+  /* border: 1px solid #d5d8df; */
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  text-align: center;
+  align-items: center;
+}
+/* .table_Content2 {
+  width: 100%;
+  min-width: calc(110px * 8);
+  border: 1px solid #d5d8df;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  text-align: center;
+  align-items: center;
+} */
+
+.twoCol {
+  width: 100%;
+  display: flex;
+}
+
+.ColTit {
+  width: 110px !important;
+  min-width: 110px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-bottom: 1px #ccc solid;
+  border-left: 1px solid #d5d8df;
+}
+
+/* 取消[type='number']的input的上下箭头 */
+input::-webkit-inner-spin-button {
+  -webkit-appearance: none !important;
+}
+
+input::-webkit-outer-spin-button {
+  -webkit-appearance: none !important;
+}
+
+input[type="number"] {
+  -moz-appearance: textfield;
+}
+.twoCon {
+  display: flex;
+  width: 100%;
+}
+.twoCon > div {
+  /* width: 10%; */
+  min-width: 110px;
+  min-height: 50px;
+  /* line-height: 50px; */
+  display: flex;
+  box-sizing: border-box;
+  justify-content: center;
+  align-items: center;
+  border-left: 1px #ccc solid;
+  border-bottom: 1px #ccc solid;
+}
+
+.twoCon > div:nth-child(1) {
+  width: 140px !important;
+}
+.twoCon > div:nth-child(2) {
+  width: 700px !important;
+  white-space: pre-line;
+  word-break: break-all;
+  text-align: left;
+  justify-content:flex-start;
+  /* background-color:red; */
+}
+.twoCon > div:nth-child(3) {
+  width: 100px !important;
+}
+.twoCon > div:nth-child(4) {
+  width: 100px !important;
+}
+.twoCon > div:nth-child(5) {
+  flex: 1;
+  min-width: 150px;
+}
+.twoCon > div:nth-child(6) {
+  flex: 0.5;
+  min-width: 100px;
+}
+.twoCon > div:nth-child(7) {
+  width: 100px !important;
+}
+.twoCon > div:nth-child(8) {
+  flex: 1;
+}
+
+/* .twoCon > div >>> .el-input-number {
+  height: 100% !important;
+} */
+/* .twoCon > div >>> .el-input {
+  height: 100% !important;
+} */
+.ScoreStep >>> .el-input-number {
+  height: 100% !important;
+}
+.ScoreStep >>> .el-input {
+  height: 100% !important;
+}
+.ScoreStep >>> .el-input__inner {
+  height: 100%;
+  padding-left: 15px;
+  border: none;
+  padding-right: 15px;
+}
+.twoCon > div > input {
+  border: none;
+  width: 100%;
+  height: 100%;
+  outline-style: none;
+  text-align: center;
+}
+/* .twoCon > div >>> .el-input__inner {
+  height: 100%;
+  border: none;
+  padding-left: 15px;
+  padding-right: 15px;
+} */
+.ColCon {
+  flex: 1;
+}
+.ColCon:nth-child(-1) > div {
+  border-bottom: none;
+}
+.twoCon > div > textarea {
+  border: none;
+  width: 100%;
+  height: 100%;
+  resize: none;
+  outline-style: none;
+}
+.dialog_diy >>> .el-dialog {
+  height: 95%;
+  margin: 0 auto !important;
+  margin-top: 20px !important;
+  overflow: hidden;
+}
+
+.dialog_diy >>> .el-dialog__header {
+  background: #454545 !important;
+  padding: 25px 20px;
+}
+
+.dialog_diy >>> .el-dialog__body {
+  height: calc(100% - 50px);
+  box-sizing: border-box;
+  padding: 0px;
+}
+
+.dialog_diy >>> .el-dialog__title {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 19px;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__body,
+.dialog_diy >>> .el-dialog__footer {
+  background: #fafafa;
+}
+
+.num_input>>>input{
+  padding-right: 0px;
+  -moz-appearance: textfield;
+  -webkit-appearance: textfield;
+  line-height: 1px !important;
+}
+
+.num_input>>>input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button {
+  -webkit-appearance: none;
+  margin: 0;
+}
+</style>

+ 72 - 0
src/components/pages/liyuan/page/portrait/chordDiagramView.vue

@@ -0,0 +1,72 @@
+<template>
+  <div class="data_body">
+    <div style="width: 100%; height: 100%;align-items: center;justify-content: center;">
+      <!-- <div id="cateRank" class="echart" style="width: 100%; height: 100%"></div> -->
+      <highcharts :options="data" style="width: 100%; height: 95%;"></highcharts>
+    </div>
+  </div>
+</template>
+
+<script>
+import {Chart} from 'highcharts-vue'
+import HighCharts from 'highcharts'
+//和弦图的引入依赖
+import HC_sankey from 'highcharts/modules/sankey';
+import dependencywheel from 'highcharts/modules/dependency-wheel';
+import { data } from 'jquery';
+HC_sankey(HighCharts);
+dependencywheel(HighCharts);
+
+export default {
+  components: {
+    highcharts: Chart,
+  },
+  props: {
+    data:{
+			type:Object,
+			default:()=>{}
+		}
+  },
+  data() {
+    return {
+      chartObj: null,
+    };
+  },
+  methods: {
+    setChart() {
+      // 雷达图显示的标签
+      let newPromise = new Promise((resolve) => {
+        resolve();
+      });
+      //然后异步执行echarts的初始化函数
+      newPromise.then(() => {
+        this.chartObj = Highcharts.chart('cateRank',this.data);
+      });
+			window.addEventListener("resize", () => {
+					this.chartObj.resize();
+      });
+    },
+  },
+  mounted() {
+    this.$nextTick(()=>{
+      this.setChart();
+    })
+
+  },
+};
+</script>
+
+<style scoped>
+.data_body {
+  height: 100%;
+  /* display: flex; */
+  position: relative;
+  border-radius: 5px;
+  /* border: 1px solid #eee; */
+  margin: 0 auto;
+  box-sizing: border-box;
+  padding: 0;
+  width: 95%;
+  /* background: #fff; */
+}
+</style>

+ 48 - 0
src/components/pages/liyuan/page/portrait/eChartView.vue

@@ -0,0 +1,48 @@
+<template>
+	<div class="chart" id="charts_canvas" ref="chartRef"></div>
+</template>
+
+<script>
+import * as echarts from 'echarts';
+export default {
+	props: {
+		data: {
+			type: Object,
+			default: () => {},
+		},
+	},
+	data() {
+		return {
+			chartObj: null,
+			chartData: null,
+		};
+	},
+	watch: {
+		data() {
+			this.getChartData();
+		},
+	},
+	methods: {
+		getChartData() {
+			this.chartObj = echarts.init(this.$refs.chartRef);
+			this.chartObj.setOption(this.data);
+			window.addEventListener("resize", () => {
+					this.chartObj.resize();
+      });
+		},
+	},
+	mounted() {
+		// this.$nextTick(()=>{
+			this.getChartData();
+		// })
+	},
+};
+</script>
+
+<style scoped>
+.chart {
+	max-width: 100%;
+	width: 100%;
+	height: 100%;
+}
+</style>

+ 1049 - 0
src/components/pages/liyuan/page/portrait/index.vue

@@ -0,0 +1,1049 @@
+<template>
+  <div class="portrait">
+    <backPage v-if="$route.query.gotype == 1" tit="教师画像"></backPage>
+
+    <div class="p_top" v-if="timeSort.length >1">
+      <el-select v-model="selectTime" placeholder="请选择" @change="changeTimeSort">
+    <el-option
+      v-for="item in timeSort"
+      :key="item.id"
+      :label="item.label"
+      :value="item.id">
+    </el-option>
+  </el-select>
+    </div>
+    <div class="p_bottom">
+      <div class="p_left">
+      <div class="p_l_top">
+        <div class="teachingActivity" v-loading="cardNumLoading">
+					<img :src="require('../../../../../assets/icon/testPerson/bg1.png')" alt="">
+          <div>
+            <span>教学活动</span>
+            <el-tooltip
+              class="item"
+              effect="light"
+              content="教学活动"
+              placement="top"
+            >
+              <svg
+                width="16"
+                height="16"
+                viewBox="0 0 16 16"
+                fill="none"
+                xmlns="http://www.w3.org/2000/svg"
+              >
+                <path
+                  d="M7.50562 11.9998V6.5H8.50562V11.9998H7.50562Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+                <path
+                  d="M8.59985 4H7.3999V5.19995H8.59985V4Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+                <path
+                  d="M1 8C1 11.866 4.13403 15 8 15C11.866 15 15 11.866 15 8C15 4.13403 11.866 1 8 1C4.13403 1 1 4.13403 1 8ZM2 8C2 4.68628 4.68628 2 8 2C11.3137 2 14 4.68628 14 8C14 11.3137 11.3137 14 8 14C4.68628 14 2 11.3137 2 8Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+              </svg>
+            </el-tooltip>
+          </div>
+          <span style="color: #3681FC;">{{ teachingActivityNum }}</span>
+        </div>
+        <div class="teachingAndResearchActivities" v-loading="cardNumLoading">
+					<img :src="require('../../../../../assets/icon/testPerson/bg2.png')" alt="">
+          <div>
+            <span>教研活动</span>
+            <el-tooltip
+              class="item"
+              effect="light"
+              content="教研活动"
+              placement="top"
+            >
+              <svg
+                width="16"
+                height="16"
+                viewBox="0 0 16 16"
+                fill="none"
+                xmlns="http://www.w3.org/2000/svg"
+              >
+                <path
+                  d="M7.50562 11.9998V6.5H8.50562V11.9998H7.50562Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+                <path
+                  d="M8.59985 4H7.3999V5.19995H8.59985V4Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+                <path
+                  d="M1 8C1 11.866 4.13403 15 8 15C11.866 15 15 11.866 15 8C15 4.13403 11.866 1 8 1C4.13403 1 1 4.13403 1 8ZM2 8C2 4.68628 4.68628 2 8 2C11.3137 2 14 4.68628 14 8C14 11.3137 11.3137 14 8 14C4.68628 14 2 11.3137 2 8Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+              </svg>
+            </el-tooltip>
+          </div>
+          <span style="color: #F2873B;">{{
+            teachingAndResearchActivitiesNum
+          }}</span>
+        </div>
+        <div
+          class="trainingActivity"
+					v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'"
+          v-loading="cardNumLoading"
+        >
+				<img :src="require('../../../../../assets/icon/testPerson/bg3.png')" alt="">
+          <div>
+            <span>培训活动</span>
+            <el-tooltip
+              class="item"
+              effect="light"
+              content="培训活动"
+              placement="top"
+            >
+              <svg
+                width="16"
+                height="16"
+                viewBox="0 0 16 16"
+                fill="none"
+                xmlns="http://www.w3.org/2000/svg"
+              >
+                <path
+                  d="M7.50562 11.9998V6.5H8.50562V11.9998H7.50562Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+                <path
+                  d="M8.59985 4H7.3999V5.19995H8.59985V4Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+                <path
+                  d="M1 8C1 11.866 4.13403 15 8 15C11.866 15 15 11.866 15 8C15 4.13403 11.866 1 8 1C4.13403 1 1 4.13403 1 8ZM2 8C2 4.68628 4.68628 2 8 2C11.3137 2 14 4.68628 14 8C14 11.3137 11.3137 14 8 14C4.68628 14 2 11.3137 2 8Z"
+                  fill="black"
+                  fill-opacity="0.4"
+                />
+              </svg>
+            </el-tooltip>
+          </div>
+          <span style="color: #31B476;">{{ teachingActivityNum }}</span>
+        </div>
+      </div>
+      <div class="p_l_bottom">
+        <div class="p_title">
+          <span>教研活动</span>
+        </div>
+        <div class="p_eCharts" v-loading="eChartsLoading">
+          <eChartView
+            :data="teachingAndResearchActivitiesECharts"
+            v-if="!eChartsLoading"
+          />
+        </div>
+      </div>
+    </div>
+    <div
+      class="p_center"
+      v-if="ExamineBase.length > 0 && annualAssessmentECharts.radar.indicator.length > 0"
+      v-loading="annualAssessmentLoading"
+    >
+      <div class="p_title">
+        <span>年度考核</span>
+        <div>
+          <el-button-group>
+            <el-button
+              v-if="bArray.length"
+              @click="changeAnnualAssessmentStatus(2)"
+              :type="annualAssessmentStatus === 2 ? 'primary' : ''"
+              >专任教师</el-button
+            >
+            <el-button
+              v-if="aArray.length"
+              @click="changeAnnualAssessmentStatus(1)"
+              :type="annualAssessmentStatus === 1 ? 'primary' : ''"
+              >班主任</el-button
+            >
+          </el-button-group>
+        </div>
+      </div>
+      <div class="p_eCharts" v-if="!annualAssessmentLoading">
+        <eChartView
+          ref="annualAssessmentEChartsRef"
+          :data="annualAssessmentECharts"
+        />
+      </div>
+    </div>
+		<div class="p_center" v-else>
+			<img :src="require('../../../../../assets/icon/testPerson/bg4.png')" alt="">
+		</div>
+    <div class="p_right">
+      <div class="p_r_top">
+        <div class="p_title">
+          <span>教学活动</span>
+        </div>
+        <div class="p_eCharts" v-loading="eChartsLoading">
+          <eChartView :data="teachingActivityECharts" v-if="!eChartsLoading" />
+        </div>
+      </div>
+      <div class="p_r_bottom">
+        <div class="p_title">
+          <span>跨学科情况</span>
+        </div>
+        <div class="p_eCharts" v-loading="eChartsLoading">
+          <chordDiagramView
+            :data="interdisciplinarySituationECharts"
+            v-if="!eChartsLoading"
+          />
+        </div>
+      </div>
+    </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import eChartView from "./eChartView.vue";
+import chordDiagramView from "./chordDiagramView.vue";
+import backPage from "../../components/backPage.vue";
+
+var OpenCC = require("opencc-js");
+let converter = OpenCC.Converter({
+  from: "hk",
+  to: "cn"
+});
+export default {
+  components: {
+    eChartView,
+    chordDiagramView,
+    backPage
+  },
+  props: {
+    ExamineBase: {
+      type: Array,
+      default: () => []
+    }
+  },
+  data() {
+    return {
+      teachingActivityNum: 0,
+      teachingAndResearchActivitiesNum: 0,
+      trainingActivityNum: 0,
+      cardNumLoading: true,
+      eChartsLoading: true,
+      annualAssessmentStatus: 2, //2专任教师 1班主任
+      teachingAndResearchActivitiesEChartsLoading: true,
+      teachingAndResearchActivitiesECharts: {
+        tooltip: {
+          trigger: "axis",
+          axisPointer: { type: "shadow" }
+        },
+        legend: {
+          data: ["我发布的", "我收到的"],
+          bottom: 0,
+          orient: "horizontal",
+          left: "center"
+        },
+        grid: {
+          left: "3%",
+          right: "4%",
+          bottom: "10%",
+          containLabel: true
+        },
+        xAxis: [
+          {
+            type: "category",
+            data: ["评论次数", "评课次数", "字数", "语音数"]
+          }
+        ],
+        yAxis: [
+          {
+            type: "value"
+          }
+        ],
+        series: []
+      },
+      annualAssessmentLoading: true,
+      annualAssessmentECharts: {
+        legend: {
+          data: ["自评得分率", "认定得分率", "全体教师平均得分率"],
+          bottom: 0,
+          textStyle: {
+            color: "black"
+          }
+        },
+        radar: {
+          // shape: 'circle',
+          indicator: [],
+          name: {
+            textStyle: {
+              color: "black"
+            }
+          }
+        },
+        series: [
+          {
+            name: "",
+            type: "radar",
+            data: [],
+            label: {
+              color: "black"
+            }
+          }
+        ]
+      },
+      teachingActivityECharts: {
+        tooltip: {
+          trigger: "item"
+        },
+        // legend: {
+        //   orient: "vertical",
+        //   right: "5%",
+        //   top: "center",
+        //   itemGap: 20
+        // },
+        series: [
+          {
+            name: "",
+            type: "pie",
+            radius: ["40%", "70%"],
+            avoidLabelOverlap: false,
+            label: {
+              show: true,
+              position: "outside",
+              formatter: "{b}: {c}"
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: "20",
+                fontWeight: "bold"
+              }
+            },
+            labelLine: {
+              show: true,
+              length: 15,
+              length2: 10
+            },
+            data: []
+          }
+        ]
+      },
+      interdisciplinarySituationECharts: {
+        title: {
+          text: null
+        },
+        chart: {
+          backgroundColor: "rgba(0,0,0,0)"
+        },
+        credits: {
+          enabled: false //不显示LOGO
+        },
+        tooltip: {
+          formatter: function() {
+            // 自定义弹窗内容的回调函数
+            var point = this.point;
+            if (point.from) {
+              var tooltipText =
+                "<b>" +
+                point.from +
+                "</b> - <b>" +
+                point.to +
+                "</b>: " +
+                point.weight;
+              return tooltipText;
+            } else {
+              var tooltipText = "<b>" + point.name + "</b>: " + point.sum;
+              return tooltipText;
+            }
+          }
+        },
+        series: [
+          {
+            keys: ["from", "to", "weight"],
+            data: [],
+            type: "dependencywheel",
+            name: "",
+            dataLabels: {
+              color: "#333",
+              textPath: {
+                enabled: true,
+                attributes: {
+                  dy: 5
+                }
+              },
+              distance: 10
+            },
+            size: "95%"
+          }
+        ]
+      },
+      userid: this.$route.query.userid,
+      oid: this.$route.query.oid,
+      org: this.$route.query.org,
+      teacherName: "",
+      aArray: [],
+      bArray: [],
+      timeSort:[],
+      selectTime:"",
+    };
+  },
+  methods: {
+    // 获取页面基础ui信息
+    getPageBase2(type) {
+      let params = {
+        typ: type,
+        org: this.org,
+        oid: this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase", params)
+        .then(res => {
+          if(type == 1){
+            this.aArray = res.data[0];
+          }else {
+            this.bArray = res.data[0];
+            if(!this.bArray.length){
+              this.changeAnnualAssessmentStatus(1)
+            }
+          }
+          this.timeSort = res.data[0].map(item => {return {label:item.timeName,id:item.time,time:item.timeName.split('~')[0]}});
+          if(this.timeSort.length>0){
+            this.selectTime = this.timeSort[0].id;
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    changeAnnualAssessmentStatus(status) {
+      if (this.annualAssessmentLoading) return;
+      this.annualAssessmentStatus = status;
+      this.getAnnualAssessmentEChartsData();
+    },
+    getAnnualAssessmentEChartsData() {
+      this.annualAssessmentLoading = true;
+      let params = [
+        {
+          oid: this.oid,
+          org: this.org,
+          type: this.annualAssessmentStatus,
+          tname: this.teacherName
+        }
+      ];
+      // console.log(params);
+      this.ajax
+        .post(this.$store.state.api + "selectTestExaminePersonData2", params)
+        .then(res => {
+          let data = res.data[0];
+
+          if(this.selectTime && this.timeSort.length > 1 ){
+            data = data.filter(item => item.time == this.selectTime);
+          }
+
+          console.log("👉xxx",data)
+
+          data.forEach(e => {
+            e.json = JSON.parse(e.json);
+          });
+
+          data.forEach(e => {
+            e.evaSca = 0;
+            e.cogSco = 0;
+            e.step = 0;
+            e.allStep = 0;
+
+            e.json.forEach(i => {
+              i.evaScore = 0; // 自评
+              i.cogScore = 0; //考核
+              i.score = 0; //考核
+              i.children.forEach(k => {
+                e.evaSca = e.evaSca + k.sco1 * 1;
+                e.cogSco = e.cogSco + k.sco2 * 1;
+                i.evaScore = i.evaScore + k.sco1 * 1;
+                i.cogScore = i.cogScore + k.sco2 * 1;
+                i.score = i.score + k.score * 1;
+                e.allStep++;
+                if (!!k.sco2 * 1) {
+                  e.step++;
+                }
+              });
+            });
+          });
+
+          data.forEach(e => {
+            if (e.step == e.allStep) {
+              e.state = "已完成";
+            } else {
+              e.state = "未完成";
+            }
+            if (!e.tea) {
+              e.tea = "";
+            }
+            e.evaSca = e.evaSca.toFixed(0);
+            e.cogSco = e.cogSco.toFixed(0);
+          });
+          let _data = [];
+          let zongJson = {};
+          // zongJson.count = data.length
+          data.forEach((e, index) => {
+            _data[index] = {};
+            _data[index].username = e.username;
+            _data[index].evaSca = e.evaSca;
+            _data[index].cogSco = e.cogSco;
+            _data[index].json = [];
+
+            e.json.forEach((i, iindex) => {
+              if (
+                converter(i.name) == converter("科组评价") ||
+                converter(i.name) == converter("行政巡查")
+              ) {
+                return;
+              }
+              _data[index].json[iindex] = {};
+              _data[index].json[iindex].name = i.name;
+							console.log(i)
+              let _evaScore = parseInt(
+                (i.evaScore * (100 / i.score)).toFixed(0)
+              );
+              let _cogScore = parseInt(
+                (i.cogScore * (100 / i.score)).toFixed(0)
+              );
+
+							// let _ideScore = parseInt(
+							// 	(i.score * (100 / i.score)).toFixed(0)
+							// );
+              _data[index].json[iindex].evaScore = _evaScore; // 自评
+              _data[index].json[iindex].cogScore = _cogScore; // 考核
+              zongJson[i.name] ? "" : (zongJson[i.name] = {});
+              zongJson[i.name].evaScore // 全体教师自评平均得分
+                ? (zongJson[i.name].evaScore += _evaScore)
+                : (zongJson[i.name].evaScore = _evaScore);
+              zongJson[i.name].cogScore // 全体教师考核平均得分
+                ? (zongJson[i.name].cogScore += _cogScore)
+                : (zongJson[i.name].cogScore = _cogScore);
+							if(e.userid == this.userid){
+								zongJson[i.name].selfEvaScore = _evaScore;
+								zongJson[i.name].selfCogScore = _cogScore;
+							}
+            });
+          });
+          let zongArray = Object.keys(zongJson);
+          for (var i = 0; i < zongArray.length; i++) {
+            zongJson[zongArray[i]].evaScore = (
+              zongJson[zongArray[i]].evaScore / data.length
+            ).toFixed(0);
+            zongJson[zongArray[i]].cogScore = (
+              zongJson[zongArray[i]].cogScore / data.length
+            ).toFixed(0);
+          }
+
+          this.annualAssessmentECharts.radar.indicator = Object.keys(
+            zongJson
+          ).map(item => {
+            return { name: item, max: 100 };
+          });
+
+          let _eChartsData = [
+            {
+              value: [],
+              name: "自评得分率",
+              label: {
+                show: true,
+                formatter: `{c}`,
+                fontSize: 12,
+                color: "#000000" // 设置字体颜色为黑色
+              }
+            },
+            {
+              value: [],
+              name: "认定得分率",
+              label: {
+                show: true,
+                formatter: `{c}`,
+                fontSize: 12,
+                color: "#000000" // 设置字体颜色为黑色
+              }
+            },
+            {
+              value: [],
+              name: "全体教师平均得分率",
+              label: {
+                show: true,
+                formatter: `{c}`,
+                fontSize: 12,
+                color: "#000000" // 设置字体颜色为黑色
+              }
+            }
+          ];
+
+          zongArray.forEach(i => {
+						if(zongJson[i].selfEvaScore || zongJson[i].selfEvaScore === 0){
+							_eChartsData[0].value.push(zongJson[i].selfEvaScore);
+						}else{
+							_eChartsData[0].value.push(0);
+						}
+						if(zongJson[i].selfCogScore || zongJson[i].selfCogScore === 0){
+							_eChartsData[2].value.push(zongJson[i].selfCogScore);
+						}else{
+							_eChartsData[2].value.push(0);
+						}
+						if(zongJson[i].cogScore || zongJson[i].cogScore === 0){
+							_eChartsData[1].value.push(zongJson[i].cogScore)
+						}else{
+							_eChartsData[1].value.push(0);
+						}
+            // _eChartsData[0].value.push(zongJson[i].selfScore);
+            // _eChartsData[1].value.push(zongJson[i].evaScore);
+            // _eChartsData[2].value.push(zongJson[i].cogScore);
+          });
+					console.log(data)
+					console.log(zongJson)
+						console.log(_eChartsData)
+          this.annualAssessmentECharts.series[0].data = _eChartsData;
+          // this.$refs.annualAssessmentEChartsRef.setChart();
+          this.annualAssessmentLoading = false;
+        })
+        .catch(error => {
+          this.annualAssessmentLoading = false;
+          console.log(error);
+        });
+    },
+    getCardData() {
+      this.cardNumLoading = true;
+      let params = {
+        uid: this.userid,
+        oid: this.oid,
+        org: this.org
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestUserY", params)
+        .then(res => {
+          let _data1 =  res.data[4];
+          let _data2 = res.data[5];
+          let _data3 = res.data[3];
+
+          if(this.selectTime && this.timeSort.length>1){
+            _data1 = _data1.filter(i=>{
+              let _time = this.timeSort.find(j=>j.id == this.selectTime).time;
+              let _iTime = new Date(i.update_at).getFullYear();
+              return _iTime == _time;
+            })
+
+            _data2 = _data2.filter(i=>{
+              let _time = this.timeSort.find(j=>j.id == this.selectTime).time;
+              let _iTime = new Date(i.create_at).getFullYear();
+              return _iTime == _time;
+            })
+
+            _data3 = _data3.filter(i=>{
+              let _time = this.timeSort.find(j=>j.id == this.selectTime).time;
+              let _iTime = new Date(i.update_at).getFullYear();
+              return _iTime == _time;
+            })
+
+          }
+
+          this.teachingActivityNum = _data1.length;
+          this.teachingAndResearchActivitiesNum = _data2.length;
+          this.trainingActivityNum =_data3.length;
+          this.cardNumLoading = false;
+        })
+        .catch(err => {
+          this.cardNumLoading = false;
+          console.error(err);
+        });
+    },
+    getData() {
+      this.eChartsLoading = true;
+      let params = {
+        uid: this.userid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectPortraitData", params)
+        .then(res => {
+          let array1 = res.data[0];
+          let array2 = res.data[1];
+          let array3 = res.data[2];
+          let typeList = res.data[3];
+
+
+          if(this.selectTime && this.timeSort.length>1){
+            array1 = array1.filter(i=>{
+              let _time = this.timeSort.find(j=>j.id == this.selectTime).time;
+              let _iTime = new Date(i.create_at).getFullYear();
+              return _iTime == _time;
+            })
+
+            array2 = array2.filter(i=>{
+              let _time = this.timeSort.find(j=>j.id == this.selectTime).time;
+              let _iTime = new Date(i.create_at).getFullYear();
+              return _iTime == _time;
+            })
+
+            array3 = array3.filter(i=>{
+              let _time = this.timeSort.find(j=>j.id == this.selectTime).time;
+              let _iTime = new Date(i.update_at).getFullYear();
+              return _iTime == _time;
+            })
+          }
+
+
+          let countCourse1 = [];
+          let wordCount1 = 0;
+          let audioCount1 = 0;
+          let courseArray1 = {};
+          let countCourse2 = [];
+          let wordCount2 = 0;
+          let audioCount2 = 0;
+          let courseArray2 = {};
+          // 我发布的
+          array1.forEach(element => {
+            if (!courseArray1[element.courseId]) {
+              courseArray1[element.courseId] = {
+                bool: false,
+                title: element.title,
+                type: element.type2,
+                name: element.creator,
+                array: []
+              };
+            }
+            courseArray1[element.courseId].array.push(element);
+            if (countCourse1.indexOf(element.courseId) == -1) {
+              countCourse1.push(element.courseId);
+            }
+            if (element.type == 1) {
+              wordCount1 += element.content.replace(/<[^>]+>/g, "").length;
+            }
+            if (element.type == 2) {
+              audioCount1++;
+            }
+          });
+
+          //我收到的
+          array2.forEach(element => {
+            if (!courseArray2[element.courseId]) {
+              courseArray2[element.courseId] = {
+                bool: false,
+                title: element.title,
+                type: element.type2,
+                name: element.creator,
+                array: []
+              };
+            }
+            courseArray2[element.courseId].array.push(element);
+            if (countCourse2.indexOf(element.courseId) == -1) {
+              countCourse2.push(element.courseId);
+            }
+            if (element.type == 1) {
+              wordCount2 += element.content.replace(/<[^>]+>/g, "").length;
+            }
+            if (element.type == 2) {
+              audioCount2++;
+            }
+          });
+
+          //2 1 3 4
+          let _eChartsData = [
+            {
+              name: "我发布的",
+              type: "bar",
+              data: [
+                array1.length,
+                countCourse1.length,
+                wordCount1,
+                audioCount1
+              ],
+              itemStyle: {
+                color: "#5470c6"
+              }
+            },
+            {
+              name: "我收到的",
+              type: "bar",
+              data: [
+                array2.length,
+                countCourse2.length,
+                wordCount2,
+                audioCount2
+              ],
+              itemStyle: {
+                color: "#91cc75"
+              }
+            }
+          ];
+
+          let _eChartsData2 = [];
+					let _eChartsData3 = [];
+          typeList.forEach(item => {
+            _eChartsData2.push({ value: 0, name: item.name, id: item.id });
+          });
+          array3.forEach(item => {
+            let type = item.type.split(",");
+						type.sort((a,b)=>a-b);
+            type.forEach(i => {
+              let _findIndex = _eChartsData2.findIndex(j => j.id == i);
+              if (_findIndex != -1) {
+                _eChartsData2[_findIndex].value += 1;
+              }
+            });
+          });
+
+          let resultSubject = [];
+          for (let i = 0; i < typeList.length - 1; i++) {
+            for (let j = i + 1; j < typeList.length; j++) {
+              resultSubject.push({
+                id: [typeList[i].id, typeList[j].id],
+                name: [typeList[i].name, typeList[j].name],
+                count: 0,
+              });
+            }
+          }
+
+          for (var i = 0; i < array3.length; i++) {
+            let array = array3[i].type.split(",");
+            for (var j = 0; j < resultSubject.length; j++) {
+              if (this.checkArrayInclusion(resultSubject[j].id, array)) {
+                resultSubject[j].count++;
+              }
+            }
+          }
+
+          let resultSubject2 = [];
+
+          for (var i = 0; i < resultSubject.length; i++) {
+            let el = resultSubject[i];
+            if (el.count > 0) {
+              resultSubject2.push([el.name[0], el.name[1], el.count]);
+            }
+          }
+					_eChartsData3 = resultSubject.filter(i=>i.count!==0).map(i=>([i.name[0],i.name[1],i.count]));
+					console.log(_eChartsData3)
+          _eChartsData2 = _eChartsData2.filter(i => i.value != 0);
+          this.teachingActivityECharts.series[0].data = _eChartsData2;
+          this.teachingAndResearchActivitiesECharts.series = _eChartsData;
+					this.interdisciplinarySituationECharts.series[0].data = _eChartsData3;
+          this.eChartsLoading = false;
+        })
+        .catch(err => {
+          this.eChartsLoading = false;
+          console.error(err);
+        });
+    },
+		checkArrayInclusion(arr1, arr2) {
+      return arr1.every((item) => arr2.includes(item));
+    },
+    changeTimeSort(){
+      console.log(this.selectTime)
+      this.getAnnualAssessmentEChartsData();
+      this.getCardData();
+      this.getData();
+    },
+  },
+  mounted() {
+    this.getPageBase2(1)
+    this.getPageBase2(2)
+    this.getAnnualAssessmentEChartsData();
+    this.getData();
+    this.getCardData();
+  }
+};
+</script>
+
+<style scoped>
+.portrait {
+  width: 100%;
+  height: calc(100% - 20px);
+  margin: 10px 0;
+  display: flex;
+  flex-direction: column;
+  overflow: auto;
+}
+
+.p_top {
+ width: 100%;
+ height: 60px;
+}
+
+.p_bottom{
+  width: 100%;
+  flex: 1;
+  display: flex;
+}
+
+.p_bottom > div {
+  margin: 0 10px;
+  /* background-color: #fff; */
+  border-radius: 5px;
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: column;
+}
+.p_left {
+  width: 28.5%;
+  display: flex;
+  flex-direction: column;
+  background-color: none;
+
+}
+
+.p_l_top {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+	position: relative;
+}
+
+
+
+.p_l_top > div {
+  flex: 1;
+  border-radius: 5px;
+  /* margin: 10px 0; */
+  background-color: #fff;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  box-sizing: border-box;
+  padding: 0 30px;
+  position: relative;
+	overflow: hidden;
+}
+
+.p_l_top >div> img{
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	z-index: 1;
+	object-fit: fill;
+}
+
+.p_l_top > div > div {
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+	z-index: 2;
+}
+
+.p_l_top > div > div > span {
+  font-size: 22px;
+  /* font-weight: bold; */
+}
+
+.p_l_top > div > div > svg {
+  width: 20px;
+  height: 20px;
+  margin-left: 10px;
+  cursor: pointer;
+}
+
+.p_l_top > div > span {
+  font-size: 2.6em;
+  font-weight: bold;
+	z-index: 2;
+}
+
+.p_l_top > div:not(:first-child):not(:last-child) {
+  margin: 20px 0;
+}
+
+.teachingActivity {
+  background: linear-gradient(
+    290deg,
+    rgba(231, 238, 254, 0.1) 0%,
+    #e7eefe 100%
+  );
+}
+
+.teachingAndResearchActivities {
+  background: linear-gradient(
+    290deg,
+    rgba(243, 254, 231, 0.1) 0%,
+    #fef2e7 100%
+  );
+}
+
+.trainingActivity {
+  background: linear-gradient(
+    290deg,
+    rgba(231, 254, 251, 0.1) 0%,
+    #e7feef 100%
+  );
+}
+
+.p_l_bottom {
+  flex: 1;
+  margin-top: 20px;
+  border-radius: 5px;
+  background-color: #fff;
+  border: 1px solid rgba(255, 255, 255, 0.55);
+  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
+  padding: 20px;
+  display: flex;
+  flex-direction: column;
+}
+
+.p_center {
+  width: calc(100% - 57%);
+  background-color: #fff;
+  border: 1px solid rgba(255, 255, 255, 0.55);
+  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
+  padding: 20px;
+}
+
+.p_center>img{
+	width: 100%;
+	height: auto;
+	margin: auto;
+	transform: scaleX(-1);
+}
+
+.p_right {
+  width: 28.5%;
+  display: flex;
+  flex-direction: column;
+}
+
+.p_r_top {
+  flex: 1;
+  background-color: #fff;
+  border: 1px solid rgba(255, 255, 255, 0.55);
+  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
+  padding: 20px;
+  border-radius: 5px;
+  display: flex;
+  flex-direction: column;
+}
+
+.p_r_bottom {
+  flex: 1;
+  background-color: #fff;
+  border: 1px solid rgba(255, 255, 255, 0.55);
+  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
+  padding: 20px;
+  margin-top: 20px;
+  border-radius: 5px;
+  display: flex;
+  flex-direction: column;
+}
+
+.p_title {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.p_title > span {
+  font-size: 28px;
+}
+
+.p_eCharts {
+  width: 100%;
+  flex: 1;
+  margin-top: 10px;
+}
+</style>

+ 1202 - 0
src/components/pages/liyuan/page/safeTest.vue

@@ -0,0 +1,1202 @@
+<template>
+    <div class="i_body_box">
+        <backPage tit="安全巡查"></backPage>
+        <div class="check_nav">
+            <!-- <div class="nav all" v-show="this.ExamineBase.length > 0" :class="{ active: type == '1' }" @click="checkType('1')">
+                年度考核
+            </div> -->
+            <div class="nav all" :class="{ active: checkTypeValue == typeListStr }" 
+            @click="changeShowType(typeListStr)">
+                全部
+            </div>
+            <div class="nav" v-for="item in typeList" :key="item.id" :class="{ active: checkTypeValue == item.id,all:['8bfa67ce-e82a-11ef-b508-005056924926','9d3289d2-e82a-11ef-b508-005056924926','a824c728-e82a-11ef-b508-005056924926','8085418b-e82a-11ef-b508-005056924926'].includes(item.id)}" 
+            @click="changeShowType(item.id,item)">{{ item.name }}</div>
+           
+        </div>
+        <div class="check_box" v-loading="loading">
+            <!-- <examine v-if="type==1"></examine> -->
+            <div class="noneData"  v-if="!worksArray.length && type!=1" style="text-align: center; margin-top: 20px;">
+                暂无数据
+            </div>
+            <template  v-if="type!=1">
+                <div class="test_panel" v-for="(item, index) in worksArray" :key="index">
+                    <div class="test_panel_title">
+                        <div class="title" :style="{paddingLeft: (item.array.length > 0 || item.carray.length > 0) ? '0' : '30px'}" @click="openWork(index)">
+                            <span class="open" :class="{active: item.open}" v-if="item.array.length > 0 || item.carray.length > 0"></span>
+                            <el-tooltip :content="item.title" placement="top" effect="dark">
+                                <span class="titleN">{{ item.title }}</span>
+                            </el-tooltip>
+                        </div>
+                        <div class="state">
+                            <span :class="{ is: item.array.length > 0, no: !item.array.length }">{{ item.array.length > 0 ? "已完成" : "未完成" }}</span>
+                        </div>
+                        <div class="time">
+                            <span v-if="item.overtime" :class="{isDead: isDeadlinePassed(item.overtime)}">截止时间:{{ item.overtime }}</span>
+                            <span v-else></span>
+                        </div>
+                        <div class="creator" :style="{paddingRight:(!item.carray.length > 0) ? '0' : '0px'}">
+                            <el-tooltip :content="item.username" placement="top" effect="dark">
+                                <span>创建者:{{ item.username }}</span>
+                            </el-tooltip>
+                        </div>
+                        <div class="editBtn2" :style="`${item.open?'display:flex':''}`" v-if="!item.carray.length > 0">
+                            <span v-if="item.array.length === 0">去填写</span>
+                            <span v-else>再填一份</span>
+                        </div>
+                        <div @click="doTest2(item.courseid)" class="editBtn" :style="`${item.open?'display:flex':''}`" v-if="!item.carray.length > 0">
+                            <span v-if="item.array.length === 0">去填写</span>
+                            <span v-else>再填一份</span>
+                        </div>
+                    </div>
+                    <div class="test_panel_box" v-if="item.open">
+                        <div class="test_add_box"
+                            v-if="item.array">
+                            <div class="test" v-for="(test, index) in item.array" :key="test.id">
+                                <div class="time">
+                                    <span>提交记录{{item.array.length - index}}</span>
+                                </div>
+                                <!-- <img @click="deleteTest(test.id)" class="delete"
+                                    src="../../../../assets/icon/test/delete.png" alt="" /> -->
+                                <div class="utime">
+                                    <span>{{ test.utime }}</span>
+                                </div>
+                                <div class="mask">
+                                    <div @click="doTest(test.courseid, test.id)">
+                                        <span>编辑</span>
+                                    </div>
+                                    <div @click="deleteTest(test.id)" class="delete">
+                                        <span>删除</span>
+                                    </div>
+                                    <!-- <div @click="checkTest(test.courseid, test.id)">
+                                        <span></span><span>查看</span>
+                                    </div>
+                                    <div @click="copyTest(test.id)">
+                                        <span></span><span>复制</span>
+                                    </div> -->
+                                </div>
+                            </div>
+                        </div>
+                        <div class="test_add_box"
+                            v-else-if="item.carray" v-loading="!item.carray.length">
+                            <!-- <div class="courseLength" v-for="(course, index) in item.carray" :key="index" @click="doTest3(item, course)">
+                                <span class="finish" :class="{is: course.array.length}"></span>
+                                <span>{{ index+1 }}、</span>
+                                <span>{{ course.title }}</span>
+                                <span>{{ course.username }}</span>
+                            </div> -->
+                            <div class="test courseLength" v-for="(course, index) in item.carray" :key="index">
+                                <div class="time">
+                                    <el-tooltip :content="course.title+'-'+course.username" placement="top" effect="dark">
+                                        <span>{{ course.title }}-{{ course.username }}</span>
+                                    </el-tooltip>
+                                </div>
+                                <div class="finishBox" :class="{is: course.array.length}">
+                                    <span class="finish"></span>
+                                    <span v-if="course.array.length">已评分</span>
+                                    <span v-else>未评分</span>
+                                </div>
+                                <div class="utime" style="margin-left: 30px;">
+                                    <span v-if="course.array.length">{{ course.array[0].utime }}</span>
+                                    <span v-else></span>
+                                </div>
+                                <div class="mask">
+                                    <div @click="doTest3(item, course)">
+                                        <span>评分</span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </template>
+            
+        </div>
+    </div>
+</template>
+
+<script>
+import backPage from '../components/backPage.vue'
+export default {
+    
+    components:{
+        backPage
+    },
+    data() {
+        return {
+            userid: this.$route.query.userid,
+            oid: this.$route.query.oid,
+            type: "",
+            typeId:'fb2a14c5-e828-11ef-b508-005056924926',
+            typeList:[],
+            ExamineBase: [],
+            typeArray: [],
+            typeArrayCheck: [],
+            worksArray: [],
+            org: this.$route.query.org,
+            role: this.$route.query.role,
+            loading: false,
+            checkTypeValue:""
+        };
+    },
+    computed: {
+        getNum() {
+            return function (array) {
+                let _array = JSON.parse(array);
+                let num = 0;
+                _array.forEach(el => {
+                    if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                        el.array.forEach(item => {
+                            if (item.ttype == 2 && item.array.length > 0) {
+                                item.array.forEach(item2 => {
+                                    if (item2.ttype == 1 && item2.json) {
+                                        num++;
+                                    }
+                                });
+                            } else if (item.ttype == 1 && item.json) {
+                                num++;
+                            }
+                        });
+                    } else if (el.ttype == 1 && el.json) {
+                        num++;
+                    }
+                });
+                return num;
+            };
+        },
+        getScore() {
+            return function (array) {
+                // let _array = JSON.parse(array)
+                let _score = 0;
+                let scoreArray = [];
+                for (var i = 0; i < array.length; i++) {
+                    let _array = JSON.parse(array[i].courseJson);
+                    let score = 0;
+                    for (var j = 0; j < _array.length; j++) {
+                        let el = _array[j];
+                        if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                            for (var k = 0; k < el.array.length; k++) {
+                                let item = el.array[k];
+                                if (item.ttype == 2 && item.array.length > 0) {
+                                    for (var z = 0; z < item.array.length; z++) {
+                                        let item2 = item.array[z];
+                                        if (item2.ttype == 1 && item2.json && item2.json.score2) {
+                                            score += parseInt(item2.json.score2);
+                                        }
+                                    }
+                                } else if (item.ttype == 1 && item.json && item.json.score2) {
+                                    score += parseInt(item.json.score2);
+                                }
+                            }
+                        } else if (el.ttype == 1 && el.json && el.json.score2) {
+                            score += parseInt(el.json.score2);
+                        }
+                    }
+                    scoreArray.push(score);
+                }
+                scoreArray.forEach(el => {
+                    _score += el;
+                });
+                console.log(scoreArray);
+                return _score ? _score / scoreArray.length : 0;
+            };
+        },
+        getImg() {
+            return function (array) {
+                let _array = JSON.parse(array);
+                let _img = "";
+                s: for (var j = 0; j < _array.length; j++) {
+                    let el = _array[j];
+                    if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                        for (var k2 = 0; k2 < el.array.length; k2++) {
+                            let item = el.array[k2];
+                            console.log(k2);
+                            if (item.ttype == 2 && item.array.length > 0) {
+                                for (var z = 0; z < item.array.length; z++) {
+                                    let item2 = item.array[z];
+                                    if (
+                                        item2.ttype == 1 &&
+                                        item2.type == 5 &&
+                                        item2.json &&
+                                        item2.json.file &&
+                                        item2.json.file.length > 0
+                                    ) {
+                                        for (var k4 = 0; k4 < item2.json.file.length; k4++) {
+                                            let ik = item2.json.file[k4];
+                                            if (ik.type == 3) {
+                                                _img = ik.url;
+                                                break s;
+                                            }
+                                        }
+                                    }
+                                }
+                            } else if (
+                                item.ttype == 1 &&
+                                item.type == 5 &&
+                                item.json &&
+                                item.json.file &&
+                                item.json.file.length > 0
+                            ) {
+                                for (var k3 = 0; k3 < item.json.file.length; k3++) {
+                                    let ik = item.json.file[k3];
+                                    if (ik.type == 3) {
+                                        _img = ik.url;
+                                        break s;
+                                    }
+                                }
+                            }
+                        }
+                    } else if (
+                        el.ttype == 1 &&
+                        el.type == 5 &&
+                        el.json &&
+                        el.json.file &&
+                        el.json.file.length > 0
+                    ) {
+                        for (var k = 0; k < el.json.file.length; k++) {
+                            let ik = el.json.file[k];
+                            if (ik.type == 3) {
+                                _img = ik.url;
+                                break s;
+                            }
+                        }
+                    }
+                }
+                return _img;
+            };
+        },
+        typeListStr(){
+          let _result = "";
+
+          if(this.typeList.length){
+            _result = this.typeList.map(i=>i.id)
+            _result.push(this.typeId);
+            _result = _result.join(',')
+          }
+
+          return _result;
+        }
+    },
+    watch:{
+      typeId(newValue){
+        this.changeShowType(newValue)
+      }
+    },
+    methods: {
+        getNavType() {
+            let params = {
+                oid: "",//this.oid
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestType", params)
+                .then(res => {
+                    let _data = res.data[0];
+                    console.log('_data',_data);
+                    // _data.fliter(e=>{
+
+                    // })
+                    this.typeList = _data.filter(function(item, index) {
+                        return item.pid == 'fb2a14c5-e828-11ef-b508-005056924926';
+                    });
+                    this.changeShowType(this.typeListStr)
+
+                    //  = _data.fliter(e =>{ return e.pid == 'e18d88b3-e828-11ef-b508-005056924926'})
+                    console.log('this.typeList',this.typeList);
+
+                    
+                })
+                .catch(err => {
+                    console.log(err);
+                });
+        },
+        getPageBase(type = 1) {
+            let params = {
+                typ: type,
+                org: this.org,
+                oid: this.oid
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestExamineBase", params)
+                .then(res => {
+                this.ExamineBase = res.data[0];
+                if(type == 1 && !res.data[0].length){
+                    this.getPageBase(2)
+                }
+                // console.log("selectTestExamineBase", res.data);
+                })
+                .catch(error => {
+                console.log(error);
+            });
+        },
+        isDeadlinePassed(deadline) {
+            let _line = new Date(deadline)
+            const currentDate = new Date();
+            return currentDate > _line;
+        },
+        checkType(type) {
+            this.type = type;
+            this.getWorks();
+        },
+        selectTestType(type) {
+            let params = {
+                oid: this.oid
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestType", params)
+                .then(res => {
+                    this.typeArray = res.data[0];
+                    if(type == 1){
+                        this.type = ''
+                        // if (this.typeArray.length) {
+                        //     this.type = this.typeArray[0].id;
+                        // } else {
+                        //     this.type = '0';
+                        // }
+                    }
+                    this.getWorks()
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
+        getWorks() {
+            this.loading = true;
+            let params = {
+                uid: this.userid,
+                typeid: this.checkTypeValue
+            };
+            this.ajax
+                .get(this.$store.state.api + "getTestWorksPerson_2type", params)
+                .then(res => {
+                    let array = res.data[0];
+                    let array2 = res.data[1];
+                    // 用于存储归类后的数据的对象
+                    let worksArray = {};
+
+                    // 遍历原始数据,根据 parentId 进行分组
+                    array2.forEach(item => {
+                        // console.log(item.chapters);
+                        worksArray[item.courseId] = {
+                            id: item.id,
+                            courseid: item.courseId,
+                            title: item.title,
+                            time: item.time,
+                            utime: item.utime,
+                            overtime: item.overtime,
+                            username: item.username,
+                            chapters: item.chapters,
+                            brief: item.brief,
+                            typeid: item.typeid,
+                            array: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf123' ? 0 : [],
+                            carray: [],
+                            open: false
+                        };
+                    });
+                    worksArray = Object.values(worksArray);
+                    worksArray.forEach(async el => {
+                        if (el.typeid == 'dda9728e-5f11-469e-89ee-aca518daf123') {
+                            let courseJson = this.returnCourseJSON(el.chapters)
+                            if(courseJson && courseJson.courses.length){
+                                let courses = courseJson.courses.join(',')
+                                let _res = await this.getAllCourse(courses)
+                                console.log(_res);
+                                let _carray = []
+                                for(var i=0;i<_res.length;i++){
+                                    _carray.push({
+                                        courseid: _res[i].courseId,
+                                        title: _res[i].title,
+                                        username: _res[i].username,
+                                        array: []
+                                    })
+                                }
+                                el.carray = _carray
+                            }
+                        }
+
+                        array.forEach(el2 => {
+                            if (el.courseid == el2.courseid && el.typeid != 'dda9728e-5f11-469e-89ee-aca518daf123') {
+                                el.array.push(el2);
+                            }
+
+                            if(el.courseid == el2.courseid && el.typeid == 'dda9728e-5f11-469e-89ee-aca518daf123'){
+                                let courseid = this.returnCourseId(el2.courseJson)
+                                for(var c = 0; c<el.carray.length;c++){
+                                    if(el.carray[c].courseid == courseid){
+                                        el.carray[c].array.push(el2);
+                                        break
+                                    }
+                                }
+                            }
+                        });
+                    });
+                    // worksArray[item.courseid].array.push(item);
+
+                    this.worksArray = worksArray;
+                    this.loading = false;
+
+                    this.$forceUpdate();
+                })
+                .catch(err => {
+                    this.loading = false;
+                    console.error(err);
+                });
+        },
+        openWork(index){
+            if(this.worksArray[index].array.length === 0 && this.worksArray[index].carray.length === 0){
+                return
+            }
+            this.worksArray[index].open = !this.worksArray[index].open
+            this.$forceUpdate()
+        },
+        returnA() {
+            this.$router.push(
+                "/testStudent?userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&role=" +
+                this.role
+            );
+        },
+        checkTest(cid, tid) {
+            this.$router.push(
+                "/checkTest?cid=" +
+                cid +
+                "&tid=" +
+                tid +
+                "&userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&type=3" +
+                "&role=" +
+                this.role
+            );
+        },
+        doTest(cid, tid) {
+            this.$router.push(
+                "/doTest?cid=" +
+                cid +
+                "&tid=" +
+                tid +
+                "&userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&type=3" +
+                "&role=" +
+                this.role
+            );
+        },
+        doTest2(cid) {
+            this.$router.push(
+                "/doTest?cid=" +
+                cid +
+                "&userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&type=3" +
+                "&role=" +
+                this.role
+            );
+        },
+        doTest3(item, course){
+            if(course.array.length){
+                this.$router.push(
+                    "/doTest?cid=" +
+                    item.courseid +
+                    "&tid=" +
+                    course.array[0].id +
+                    "&userid=" +
+                    this.userid +
+                    "&oid=" +
+                    this.oid +
+                    "&org=" +
+                    this.org +
+                    "&type=3" +
+                    "&role=" +
+                    this.role
+                );
+            }else{
+                this.$router.push(
+                    "/doTest?cid=" +
+                    item.courseid +
+                    "&userid=" +
+                    this.userid +
+                    "&oid=" +
+                    this.oid +
+                    "&org=" +
+                    this.org +
+                    "&type=3" +
+                    "&courseid=" +
+                    course.courseid +
+                    "&role=" +
+                    this.role
+                );
+            }
+        },
+        copyTest(tid) {
+            let params = [
+                {
+                    tid: tid,
+                    uid: this.userid
+                }
+            ];
+            this.ajax
+                .post(this.$store.state.api + "copyTestWorks", params)
+                .then(res => {
+                    this.$message.success("复制成功");
+                    this.getWorks();
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
+        deleteTest(tid) {
+            let _this = this;
+            _this
+                .$confirm("确定删除此填写的表单么?", "提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning"
+                })
+                .then(() => {
+                    let params = [
+                        {
+                            tid: tid
+                        }
+                    ];
+                    _this.ajax
+                        .post(_this.$store.state.api + "deleteTestCourseWorks", params)
+                        .then(res => {
+                            _this.$message.success("删除成功");
+                            _this.getWorks();
+                        })
+                        .catch(err => {
+                            console.error(err);
+                        });
+                })
+                .catch(() => {
+                    return;
+                });
+        },
+        returnCourseJSON(array) {
+            let _array = JSON.parse(array);
+            let courseJson = '';
+            s: for (var j = 0; j < _array.length; j++) {
+                let el = _array[j];
+                if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                    for (var k2 = 0; k2 < el.array.length; k2++) {
+                        let item = el.array[k2];
+                        console.log(k2);
+                        if (item.ttype == 2 && item.array.length > 0) {
+                            for (var z = 0; z < item.array.length; z++) {
+                                let item2 = item.array[z];
+                                if (
+                                    item2.ttype == 1 &&
+                                    item2.type == 6 &&
+                                    item2.json
+                                ) {
+                                    courseJson = item2.json
+                                    break s;
+                                }
+                            }
+                        } else if (
+                            item.ttype == 1 &&
+                            item.type == 6 &&
+                            item.json
+                        ) {
+                            courseJson = item.json
+                                    break s;
+                        }
+                    }
+                } else if (
+                    el.ttype == 1 &&
+                    el.type == 6 &&
+                    el.json
+                ) {
+                    courseJson = el.json
+                                    break s;
+                }
+            }
+            return courseJson;
+        },
+        returnCourseId(array) {
+            let _array = JSON.parse(array);
+            let courseJson = '';
+            s: for (var j = 0; j < _array.length; j++) {
+                let el = _array[j];
+                if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                    for (var k2 = 0; k2 < el.array.length; k2++) {
+                        let item = el.array[k2];
+                        console.log(k2);
+                        if (item.ttype == 2 && item.array.length > 0) {
+                            for (var z = 0; z < item.array.length; z++) {
+                                let item2 = item.array[z];
+                                if (
+                                    item2.ttype == 1 &&
+                                    item2.type == 6 &&
+                                    item2.json && item2.json.answer2
+                                ) {
+                                    courseJson = item2.json.answer2
+                                    break s;
+                                }
+                            }
+                        } else if (
+                            item.ttype == 1 &&
+                            item.type == 6 &&
+                            item.json && item.json.answer2
+                        ) {
+                            courseJson = item.json.answer2
+                                    break s;
+                        }
+                    }
+                } else if (
+                    el.ttype == 1 &&
+                    el.type == 6 &&
+                    el.json  && el.json.answer2
+                ) {
+                    courseJson = el.json.answer2
+                                    break s;
+                }
+            }
+            return courseJson;
+        },
+        async getAllCourse(id) {
+            let params = {
+                cid: id,
+            };
+            let res = await this.ajax.get(this.$store.state.api + "getCourseInfoTestAll", params)
+            return res.data[0]
+        },
+        changeShowType(value){
+            console.log('value',value);
+            
+          this.checkTypeValue = value;
+          this.getWorks();
+        }
+    },
+    mounted() {
+        // this.selectTestType(1);
+        // this.getPageBase()
+        this.getNavType()
+        
+        console.log('this.typeListStr',this.typeListStr);
+        
+        // if(this.typeListStr){
+        //   this.changeShowType(this.typeListStr)
+          // this.checkTypeValue = this.typeId
+        // }
+    },
+    // activated(){
+    //     // this.selectTestType(2);
+    //     if(this.typeListStr){
+    //       this.changeShowType(this.typeListStr)
+    //       // this.checkTypeValue = this.typeId
+    //     }
+    // },
+};
+</script>
+
+<style scoped>
+.i_body_box {
+    height: calc(100% - 10px);
+    padding: 10px 0 0;
+    box-sizing: border-box;
+}
+
+.check_nav {
+    display: flex;
+    height: 50px;
+    align-items: center;
+    padding: 0;
+    box-sizing: border-box;
+    width: 100%;
+    overflow: auto;
+}
+
+.check_nav>.nav {
+    width: 120px;
+    height: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: rgb(167, 167, 167);
+    /* background: #000000; */
+    cursor: pointer;
+    min-width: fit-content;
+    margin-right: 10px;
+}
+
+.check_nav>.active {
+    color: #3681fc;
+    background: rgb(248, 250, 254);
+    border-radius: 10px 10px 0 0;
+}
+
+.check_nav>.all::before,
+.check_nav>.gr::before,
+.check_nav>.md::before,
+.check_nav>.jy::before,
+.check_nav>.bj::before,
+.check_nav>.yy::before {
+    content: "";
+    display: block;
+    width: 18px;
+    height: 18px;
+    background-size: 100% 100%;
+    margin-right: 5px;
+}
+
+.check_nav>.all::before {
+
+    background-image: url('../../../../assets/icon/test/all_icon.png');
+}
+
+.check_nav>.active.all::before {
+    background-image: url('../../../../assets/icon/test/all_icon_active.png');
+}
+
+.check_nav>.gr::before {
+    background-image: url('../../../../assets/icon/test/gr_icon.png');
+}
+
+.check_nav>.active.gr::before {
+    background-image: url('../../../../assets/icon/test/gr_icon_active.png');
+}
+
+.check_nav>.md::before {
+    background-image: url('../../../../assets/icon/test/md_icon.png');
+}
+
+.check_nav>.active.md::before {
+    background-image: url('../../../../assets/icon/test/md_icon_active.png');
+}
+
+.check_nav>.jy::before {
+    background-image: url('../../../../assets/icon/test/jy_icon.png');
+}
+
+.check_nav>.active.jy::before {
+    background-image: url('../../../../assets/icon/test/jy_icon_active.png');
+}
+
+.check_nav>.yy::before {
+    background-image: url('../../../../assets/icon/test/yy_icon.png');
+}
+
+.check_nav>.active.yy::before {
+    background-image: url('../../../../assets/icon/test/yy_icon_active.png');
+}
+
+.check_nav>.bj::before {
+    background-image: url('../../../../assets/icon/test/bj_icon.png');
+}
+
+.check_nav>.active.bj::before {
+    background-image: url('../../../../assets/icon/test/bj_icon_active.png');
+}
+
+
+.check_box {
+    height: calc(100% - 50px);
+    overflow: auto;
+    padding: 0 0 20px;
+    box-sizing: border-box;
+    background: rgb(248, 250, 254);
+}
+
+.test_panel {
+    width: calc(100% - 40px);
+    margin: 20px auto 0;
+    background: #fff;
+    border-radius: 10px;
+    /* height: 300px; */
+    overflow: hidden;
+    box-shadow: 0 2px 5px 1px #0001;
+}
+
+.test_panel:hover{
+	box-shadow: 0 0 2px 1px #3681FC;
+}
+
+.test_panel:hover>.test_panel_title>.title{
+	color:#5996FD
+}
+
+.test_panel_title:hover>.editBtn{
+	display: flex;
+}
+.test_panel_title:hover>.editBtn2{
+	display: flex;
+}
+
+
+.test_panel+.test_panel {
+    margin-top: 15px;
+}
+
+.test_panel_title {
+    height: 50px;
+    display: flex;
+    align-items: center;
+    width: 100%;
+    position: relative;
+    /* justify-content: space-between; */
+    /* padding: 0 20px; */
+    box-sizing: border-box;
+    /* border-bottom: 2px solid #f0f0f0; */
+}
+
+.test_panel_title>.title {
+    display: flex;
+    align-items: center;
+    width: 300px;
+    margin-left: 20px;
+    cursor: pointer;
+}
+
+.test_panel_title>.title>.open{
+    width: 20px;
+    height:20px;
+    margin-right: 10px;
+    background-image: url('../../../../assets/icon/test/chevron-right.png');
+    background-size: 100% 100%;
+    cursor:pointer;
+    transition:all .3s;
+    opacity: .5;
+}
+
+.test_panel_title>.title>.open.active{
+    transform: rotate(90deg);
+    opacity: 1;
+}
+
+.test_panel_title>.state{
+    margin-left: auto;
+    min-width: fit-content;
+}
+
+.test_panel_title>.state > span {
+    font-size: 14px;
+    padding: 5px 8px;
+    border-radius: 5px;
+    margin-right: 0;
+}
+
+.test_panel_title>.state>.is:nth-child(1) {
+    color: #17C469;
+    background: #EFFCF5;
+    border: 1px solid #EFFCF5;
+}
+
+.test_panel_title>.state>.no:nth-child(1) {
+    color: #3681FC;
+    background: #E0EAFB;
+    border: 1px solid #E0EAFB;
+}
+
+.test_panel_title>.title>.titleN {
+    font-size: 18px;
+    font-weight: 600;
+    max-width: calc(100% - 20px - 10px);
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.test_panel_title>.time {
+    font-size: 16px;
+    color: #a1a1a1;
+    min-width: 160px;
+    margin: 0 30px;
+}
+
+.test_panel_title>.creator {
+    font-size: 16px;
+    color: #a1a1a1;
+    max-width: 160px;
+    min-width: 160px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.test_panel_title>.editBtn {
+    font-size: 16px;
+    color: #fff;
+    background: #3681fc;
+    height: 100%;
+    display: none;
+    align-items: center;
+    padding: 0 15px;
+    cursor: pointer;
+    position: absolute;
+    right: 0;
+}
+.test_panel_title>.editBtn2 {
+    font-size: 16px;
+    color: #fff;
+    background: #3681fc;
+    height: 100%;
+    display: none;
+    align-items: center;
+    padding: 0 15px;
+    cursor: pointer;
+}
+
+.test_panel_title>.time>span+span {
+    margin-left: 10px;
+}
+
+.test_panel_box {
+    border-top: 2px solid #f0f0f0;
+    width: 100%;
+    display: flex;
+    align-items: center;
+    padding: 5px 20px;
+    box-sizing: border-box;
+}
+
+.test_panel_box>.detail {
+    width: calc(100% - 350px - 20px);
+    margin-right: 20px;
+    color: #a1a1a1;
+    font-size: 14px;
+    line-height: 24px;
+    word-break: break-all;
+    display: -webkit-box;
+    -webkit-line-clamp: 4;
+    -webkit-box-orient: vertical;
+    overflow: hidden;
+}
+
+.test_panel_box>.panel {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    width: 350px;
+    min-width: 350px;
+}
+
+.test_panel_box>.panel>.score {
+    height: 110px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-direction: column;
+    border: 1px solid #dbdbdb;
+    background: rgb(252, 252, 252);
+    width: 120px;
+    border-radius: 5px;
+}
+
+.test_panel_box>.panel>.score:nth-child(1) {
+    display: flex;
+}
+
+.test_panel_box>.panel>.score>div:nth-child(1)>span:nth-child(1) {
+    font-size: 30px;
+    font-weight: 700;
+}
+
+.test_panel_box>.panel>.score>div:nth-child(1)>span:nth-child(2) {
+    margin-left: 5px;
+}
+
+.test_panel_box>.panel>.score>div:nth-child(2) {
+    font-size: 14px;
+    margin-top: 10px;
+    color: #a1a1a1;
+}
+
+.test_panel_box>.panel>.btn {
+    height: 100px;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+}
+
+.test_panel_box>.panel>.btn>div {
+    display: flex;
+    color: rgb(69, 141, 255);
+    align-items: center;
+    cursor: pointer;
+    font-size: 14px;
+}
+
+/* .test_panel_box > .panel >.btn > div + div{
+      margin: 15px 0 0 0;
+    } */
+.test_panel_box>.panel>.btn>div>span:nth-child(1) {
+    display: block;
+    width: 13px;
+    height: 13px;
+    background-size: 100% 100%;
+    margin-right: 7px;
+}
+
+.test_panel_box>.panel>.btn>div:nth-child(1)>span:nth-child(1) {
+    background-image: url('../../../../assets/icon/test/edit_icon.png');
+}
+
+.test_panel_box>.panel>.btn>div:nth-child(2)>span:nth-child(1) {
+    background-image: url('../../../../assets/icon/test/check_icon.png');
+}
+
+.test_panel_box>.panel>.btn>div:nth-child(3)>span:nth-child(1) {
+    background-image: url('../../../../assets/icon/test/paste_icon.png');
+}
+
+.test_add_box {
+    width: 100%;
+    box-sizing: border-box;
+}
+
+
+.test_add_box>.test {
+    width: 100%;
+    height: 40px;
+    border-radius: 5px;
+    display: flex;
+    align-items: center;
+}
+
+
+.test_add_box>.test>img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    border-radius: 5px;
+}
+
+.test_add_box>.test+.test {
+    /* margin-left: 10px; */
+}
+
+.test_add_box>.test>.time {
+    display: flex;
+    /* justify-content: center; */
+    align-items: center;
+    font-size: 14px;
+    width: 300px;
+    padding-left: 30px;
+    box-sizing: border-box;
+}
+
+.test_add_box>.test>.time>span {
+    /* margin-top: 5px; */
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+.test_add_box>.test>.utime {
+    font-size: 14px;
+    width: 160px;
+    min-width: 160px;
+    margin: 0 30px 0 auto;
+}
+.test_add_box>.test>.mask {
+    display: flex;
+    align-items: center;
+    padding-right: 58px;
+    max-width: 160px;
+    min-width: 160px;
+}
+
+.test_add_box>.test>.delete {
+    position: absolute;
+    width: 20px;
+    height: 20px;
+    right: -5px;
+    top: -5px;
+    cursor: pointer;
+    z-index: 2;
+    display: none;
+}
+
+.test_add_box>.test>.mask>div {
+    display: flex;
+    align-items: center;
+    cursor: pointer;
+    font-size: 14px;
+    color: #3681FC;
+}
+
+.test_add_box>.test>.mask>.delete {
+    color: #EE3E3E;
+}
+
+.test_add_box>.test>.mask>div+div {
+    /* margin: 10px 0 0 0; */
+    margin-left: 15px;
+}
+
+/*
+.test_add_box>.test>.mask>div>span:nth-child(1) {
+  display: block;
+  width: 13px;
+  height: 13px;
+  background-size: 100% 100%;
+  margin-right: 7px;
+}
+
+.test_add_box>.test>.mask>div:nth-child(1)>span:nth-child(1) {
+  background-image: url('../../../../assets/icon/test/edit_icon.png');
+}
+
+.test_add_box>.test>.mask>div:nth-child(2)>span:nth-child(1) {
+  background-image: url('../../../../assets/icon/test/check_icon.png');
+}
+
+.test_add_box>.test>.mask>div:nth-child(3)>span:nth-child(1) {
+  background-image: url('../../../../assets/icon/test/paste_icon.png');
+} */
+
+.bgColor {
+    background: #466b99;
+}
+
+/* .courseLength{
+    width: 100%;
+    cursor: pointer;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+}
+.courseLength > span + span{
+    margin-left: 10px;
+} */
+.courseLength > .finishBox {
+    display: flex;
+    color: #a1a1a1;
+    font-size: 14px;
+    margin-left: auto;
+    align-items: center;
+}
+.courseLength > .finishBox > .finish{
+    width: 15px;
+    height: 15px;
+    background-image: url('../../../../assets/icon/test/icon_course.png');
+    background-size: 100% 100%;
+    margin-right: 5px;
+}
+.courseLength > .finishBox.is > .finish{
+    background-image: url('../../../../assets/icon/test/icon_course_check.png');
+}
+.courseLength > .finishBox.is{
+    color: #000
+}
+
+.isDead{
+    color:#EE3E3E;
+}
+</style>

+ 1538 - 0
src/components/pages/liyuan/page/student.vue

@@ -0,0 +1,1538 @@
+<template>
+  <div class="pb_content" style="background: unset">
+    <div class="sm_box">
+
+      <div class="sm_right">
+        <div class="pb_content_body" style="
+        background: #fff;
+        padding: 0px 25px;
+        box-sizing: border-box;
+        border-radius: 5px;
+      ">
+          <div class="pb_head">
+            <div style="
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+        ">
+              <span>学生管理</span>
+              <div style="font-size: 16px;font-weight: normal;cursor: pointer;" @click.stop="$router.go(-1)">返回</div>
+
+
+            </div>
+          </div>
+          <div class="student_head">
+            <div class="head_left">
+              <el-input v-model="sPhoneUser" class="student_input" placeholder="请输入用户名"></el-input>
+              <el-select v-model="cid" placeholder="请选择班级" class="student_input" @change="searchStudent">
+                <el-option label="所有人" value=""></el-option>
+                <el-option v-for="(item, index) in classJuri" :key="index" :label="item.name"
+                  :value="item.id"></el-option>
+              </el-select>
+              <el-button class="student_button" @click="searchStudent" type="primary">查询</el-button>
+            </div>
+            <div class="head_right">
+              <el-button @click="addStudent" type="primary" class="student_button">添加学生</el-button>
+              <el-upload class="upload-demo newCss" :http-request="handleChange" :on-remove="handleRemove" action="#"
+                :file-list="fileListUpload" accept=".xlsx">
+                <el-button size="primary" type="primary">批量添加</el-button>
+                <div slot="tip" class="el-upload__tip" style="margin-left: 10px">
+                  只能上传xlsx文件,且不超过500kb
+                </div>
+              </el-upload>
+              <!-- <el-button @click="exportExcel">导出学生</el-button> -->
+              <div @click="getExcel">xls 上传样例</div>
+            </div>
+          </div>
+        </div>
+        <div class="pb_content_body">
+          <div class="student_table">
+            <el-table ref="table" :data="tableData" border :height="tableHeight" :fit="true" v-loading="isLoading"
+              style="width: 100%" :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
+              :row-class-name="tableRowClassName">
+              <el-table-column label="姓名" min-width="10" align="center">
+                <template slot-scope="scope">
+                  <div class="userImg">
+                    <div class="tx">
+                      <img :src="scope.row.headportrait != null
+                        ? scope.row.headportrait
+                        : tx
+                        " alt />
+                    </div>
+                    <div style="
+                      width: 150px;
+                      text-align: left;
+                      white-space: nowrap;
+                      overflow: hidden;
+                      text-overflow: ellipsis;
+                    ">
+                      {{ scope.row.name }}
+                    </div>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column label="学生账号" min-width="15" align="center">
+                <template slot-scope="scope">
+                  <div>{{ scope.row.un ? scope.row.un : "" }}</div>
+                </template>
+              </el-table-column>
+              <!-- <el-table-column label="电话" min-width="15" align="center">
+              <template slot-scope="scope">
+                <div>{{scope.row.phonenumber ? scope.row.phonenumber : "" }}</div>
+              </template>
+            </el-table-column> -->
+              <!-- <el-table-column prop="studentid" label="学号" min-width="10" align="center"></el-table-column> -->
+              <!-- <el-table-column
+              prop="school"
+              label="学校"
+              min-width="30"
+              align="center"
+            >
+            </el-table-column>-->
+              <el-table-column prop="classname2" label="班级" min-width="15" align="center">
+              </el-table-column>
+              <el-table-column label="操作" width="250px">
+                <template slot-scope="scope">
+                  <div class="btnBox">
+                    <el-button class="de_button" type="primary" size="small" style="
+                      width: auto;
+                      padding: 5px !important;
+                      line-height: 15px;
+                    " @click="iniPassword(scope.row.userid)">初始化密码</el-button>
+                    <el-button class="de_button" type="primary" size="small"
+                      @click="updateStudentA(scope.row)">修改</el-button>
+                    <div class="delete">
+                      <img src="../../../../assets/remove.png" alt
+                        @click="deleteStudent(scope.row.userid, scope.row.state)" />
+                    </div>
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div class="student_page">
+            <el-pagination background layout="prev, pager, next" :page-size="10" :total="total" v-if="page"
+              @current-change="handleCurrentChange"></el-pagination>
+          </div>
+        </div>
+      </div>
+    </div>
+    <el-dialog :visible.sync="dialogVisible" :append-to-body="true" width="700px" :before-close="handleClose"
+      class="add_student">
+      <div slot="title" class="header-title">
+        <div class="logoImg">
+          <img src="../../../../assets/logo.png" alt />
+        </div>
+        <div class="title_add_student">添加学生</div>
+      </div>
+      <el-form>
+        <el-form-item label="学生姓名" :label-width="formLabelWidth">
+          <span>
+            <el-input placeholder="请输入学生姓名" clearable v-model="sName" class="add_input"></el-input>
+          </span>
+        </el-form-item>
+        <!-- <el-form-item label="学生学号" :label-width="formLabelWidth">
+          <span>
+            <el-input
+              placeholder="请输入学生学号"
+              clearable
+              v-model="sId"
+              class="add_input"
+            ></el-input>
+          </span>
+        </el-form-item>
+        <el-form-item label="学生手机号" :label-width="formLabelWidth">
+          <span>
+            <el-input
+              placeholder="请输入学生手机号"
+              clearable
+              v-model="sPhone"
+              class="add_input"
+            ></el-input>
+          </span>
+        </el-form-item> -->
+        <el-form-item label="学生账号" :label-width="formLabelWidth">
+          <span>
+            <el-input placeholder="请输入学生账号" clearable v-model="sMail" class="add_input"></el-input>
+          </span>
+        </el-form-item>
+        <el-form-item label="所属学校" :label-width="formLabelWidth">
+          <el-input disabled style="width: 300px" v-model="schoolName"></el-input>
+        </el-form-item>
+        <el-form-item label="班级" :label-width="formLabelWidth">
+          <el-select multiple collapse-tags v-model="sByClass" placeholder="请选择班级" filterable>
+            <el-option v-for="(item, index) in classJuri" :key="index" :label="item.name" :value="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <div style="text-align: center; color: #adb3b7">
+          注:添加学生的账号密码为Coco1234
+        </div>
+      </el-form>
+      <span slot="footer" class="dialog-footer flex">
+        <el-button class="right" @click="insertStudent">确认</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="dialogVisibleUpdate" :append-to-body="true" width="700px" :before-close="handleClose"
+      class="add_student">
+      <div slot="title" class="header-title">
+        <div class="logoImg">
+          <img src="../../../../assets/logo.png" alt />
+        </div>
+        <div class="title_add_student">修改学生</div>
+      </div>
+      <el-form>
+        <el-form-item label="学生名称" :label-width="formLabelWidth">
+          <span>
+            <el-input placeholder="请输入学生姓名" clearable v-model="userinfo.name" class="add_input"></el-input>
+          </span>
+        </el-form-item>
+        <!-- <el-form-item label="学生学号" :label-width="formLabelWidth">
+          <span>
+            <el-input placeholder="请输入学生学号" clearable v-model="userinfo.studentid" class="add_input"></el-input>
+          </span>
+        </el-form-item>
+        <el-form-item label="学生手机号" :label-width="formLabelWidth">
+          <span>
+            <el-input placeholder="请输入学生手机号" clearable v-model="userinfo.phonenumber" class="add_input"></el-input>
+          </span>
+        </el-form-item> -->
+        <el-form-item label="学生账号" :label-width="formLabelWidth">
+          <span>
+            <el-input placeholder="请输入学生账号" clearable v-model="userinfo.un" class="add_input"></el-input>
+          </span>
+        </el-form-item>
+        <el-form-item label="所属学校" :label-width="formLabelWidth">
+          <el-input disabled style="width: 300px" v-model="schoolName"></el-input>
+        </el-form-item>
+        <el-form-item label="班级" :label-width="formLabelWidth">
+          <el-select multiple collapse-tags v-model="userinfo.classid" placeholder="请选择班级">
+            <el-option v-for="(item, index) in classJuri" :key="index" :label="item.name" :value="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <div style="text-align: center; color: #adb3b7">
+          注:添加学生的账号密码为Coco1234
+        </div>
+      </el-form>
+      <span slot="footer" class="dialog-footer flex">
+        <el-button class="right" @click="updateStudent">修改</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import $ from "jquery";
+import pinyin from "../../../../../node_modules/js-pinyin/index";
+import { myMixin } from "@/mixins/mixin.js"
+
+export default {
+  mixins: [ myMixin ],
+
+  data() {
+    return {
+      tableHeight: "500px",
+      isLoading: false,
+      formLabelWidth: "100px",
+      tableData: [],
+      dialogVisible: false,
+      dialogVisibleUpdate: false,
+      userinfo: {},
+      userinfoA: {},
+      sName: "",
+      sPhone: "",
+      sId: "",
+      schoolName: "",
+      // sBySchool: [],
+      // sBySchoolName:"",
+      sByClass: "",
+      sMail: "",
+      schoolJuri: [],
+      classJuri: [],
+      fileListUpload: [],
+      page: 1,
+      total: 0,
+      sPhoneUser: "",
+      userid: this.$route.query.userid,
+      oid: this.$route.query.oid,
+      org: this.$route.query.org,
+      role: this.$route.query.role,
+      cid: "",
+      tx: require("../../../../assets/avatar.png"),
+      userSuffix: "",
+      schoolChar: "",
+    };
+  },
+  mounted() {
+    this.$nextTick(function () {
+      this.getUser()
+      this.tableHeight =
+        window.innerHeight - this.$refs.table.$el.offsetTop - 200;
+      if (this.tableHeight <= 530) {
+        this.tableHeight = 530;
+      }
+      // 监听窗口大小变化
+      let self = this;
+      window.onresize = function () {
+        self.tableHeight =
+          window.innerHeight - self.$refs.table.$el.offsetTop - 200;
+        if (self.tableHeight <= 530) {
+          self.tableHeight = 530;
+        }
+      };
+    });
+  },
+  methods: {
+    goTo(path) {
+      this.$router.push(path);
+    },
+    getUser() {
+      let params = {
+        userid: this.userid
+      }
+      this.ajax
+        .get(this.$store.state.api + "selectUser", params)
+        .then((res) => {
+          this.userSuffix = res.data[0][0].accountNumber.split("@")[1]
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 === 0) {
+        return "even_row";
+      } else {
+        return "";
+      }
+    },
+    searchStudent() {
+      this.page = 1;
+      this.getStudent();
+    },
+    addStudent() {
+      this.dialogVisible = true;
+      (this.sName = ""), (this.sPhone = ""), (this.sByClass = ""), this.sMail;
+      this.getClass();
+      // this.getSchool();
+    },
+    handleClose(done) {
+      done();
+    },
+    getExcel(res) {
+      require.ensure([], () => {
+        const { export_json_to_excel } = require("../../../../common/Export2Excel");
+        const tHeader = ["学生姓名", "学生账号", "班级"];//"学号", "学生手机号", 
+        const data = [];
+        export_json_to_excel(tHeader, data, "上传学生样例");
+      });
+    },
+    handleCurrentChange(val) {
+      this.page = val;
+      this.getStudent();
+    },
+    time() {
+      if (!this.now) {
+        this.now = new Date().getTime();
+        return true;
+      } else {
+        let time = new Date().getTime();
+        if (time - this.now > 3000) {
+          this.now = time;
+          return true;
+        } else {
+          return false;
+        }
+      }
+    },
+    //新增学生
+    insertStudent() {
+      this.dialogVisible = true;
+      if (this.sName === "") {
+        this.$message.error("学生姓名不能为空");
+        return;
+      } else if (this.sByClass === "") {
+        this.$message.error("请为学生选择班级");
+        return;
+      } else if (
+        this.sPhone != "" &&
+        !/^[1][3,4,5,7,8][0-9]{9}$/.test(this.sPhone)
+      ) {
+        this.$message.error("手机号格式不正确");
+        return;
+      } else if (
+        // !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(this.sMail)
+        this.sMail === ""
+      ) {
+        // this.$message.error("邮箱格式不正确");
+        this.$message.error("学生账号不能为空");
+        return;
+      }
+
+      // else if (this.sId === "") {
+      //   this.$message.error("学生学号不能为空");
+      //   return;
+      // } else if (this.sPhone === "") {
+      //   this.$message.error("学生手机号不能为空");
+      //   return;
+      // }
+      let mail = '';
+      if(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(this.sMail)){
+        mail = this.sMail;
+      }else{
+        if(this.org != "" && this.org != "null"  && this.org != undefined && this.org && this.schoolChar){
+          mail = this.sMail + "@" + this.schoolChar + '.' + this.userSuffix
+        }else {
+          mail = this.sMail + "@" + this.userSuffix
+        }
+        // mail = this.sMail + "@" + this.userSuffix
+      }
+      if (this.time()) {
+        // let params = { un: this.sPhone };
+        // this.ajax
+        //   .get(this.$store.state.api + "findPhone", params)
+        //   .then((res) => {
+        //     if (res.data[0].length > 0) {
+        //       this.$message.error("此学生手机号码已被注册");
+        //     } else {
+        let params = { un: mail };
+        this.ajax
+          .get(this.$store.state.api + "findMail", params)
+          .then((res) => {
+            if (res.data[0].length > 0) {
+              this.$message.error("此学生账号已被注册");
+            } else {
+              // let params = { un: this.sId };
+              // this.ajax
+              //   .get(this.$store.state.api + "findSid", params)
+              //   .then((res) => {
+              // if (res.data[0].length > 0) {
+              //   this.$message.error("此学生学号已被注册");
+              // } else {
+              this.add_Student();
+              // }
+              // })
+              // .catch((err) => {
+              //   console.error(err);
+              // });
+            }
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+        // }
+        // })
+        // .catch((err) => {
+        //   console.error(err);
+        // });
+      }
+    },
+    add_Student() {
+      let mail = '';
+      if(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(this.sMail)){
+        mail = this.sMail;
+      }else{
+        if(this.org != "" && this.org != "null"  && this.org != undefined && this.org && this.schoolChar){
+          mail = this.sMail + "@" + this.schoolChar + '.' + this.userSuffix
+        }else {
+          mail = this.sMail + "@" + this.userSuffix
+        }
+      }
+      let params = [
+        {
+          username: mail,
+          userpassword: 'Coco1234',
+          alias: this.sName,
+          oid: this.oid,
+          ph: this.sPhone,
+          sid: this.sId,
+          cid: this.sByClass.join(","),
+          org: this.org,
+        },
+      ];
+      this.ajax
+        .post(this.$store.state.api + "batchRegistrationOrg", params)
+        .then((res) => {
+          // console.log(res.data.uid, res.data.ph, res.data.oid, res.data.cid);
+          // this.isLoading = false;
+
+          // let params = [
+          //   {
+          //     userid: res.data.uid,
+          //     username: this.sName,
+          //     sid: this.sId,
+          //     type: 2,
+          //     oid: res.data.oid,
+          //     phone: res.data.ph,
+          //     cid: res.data.cid,
+          //     intro: "",
+          //     sex: "0",
+          //     org: this.org,
+          //   },
+          // ];
+          // this.ajax
+          //   // .post(this.$store.state.api + "updateUser", params)
+          //   .post(this.$store.state.api + "updateUserByEduOrg", params)
+          //   .then((res) => {
+          //     console.log(res);
+          //   })
+          //   .catch((err) => {
+          //     console.error(err);
+          //   });
+          this.$message({
+            message: "新增成功",
+            type: "success",
+          });
+
+          this.dialogVisible = false;
+          this.sPhone = "";
+          this.sName = "";
+          // this.sBySchool = [];
+          this.sByClass = [];
+          this.sMail = "";
+          this.getStudent();
+          this.addOp3('1', "", { type: "student_user_add" }, "success")
+
+        })
+        .catch((err) => {
+          this.isLoading = false;
+          this.addOp3('1', "", { type: "student_user_add" }, err)
+
+          this.$message({
+            message: "新增失败",
+            type: "error",
+          });
+          console.error(err);
+        });
+    },
+    //获取班级列表
+    getClass() {
+      this.isLoading = true;
+      let params = {
+        oid: this.oid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectClassBySchool", params)
+        .then((res) => {
+          this.isLoading = false;
+          this.classJuri = res.data[0];
+        })
+        .catch((err) => {
+          this.isLoading = false;
+          console.error(err);
+        });
+    },
+    // getSchool() {
+    // 	this.isLoading = true;
+    // 	let params = {
+    // 		page: this.page,
+    // 	};
+    // 	this.ajax
+    // 		.get(this.$store.state.api + "selectOrg", params)
+    // 		.then((res) => {
+    // 			this.isLoading = false;
+    // 			this.schoolJuri = res.data[0];
+    // 		})
+    // 		.catch((err) => {
+    // 			this.isLoading = false;
+    // 			console.error(err);
+    // 		});
+    // },
+    getStudent() {
+      this.isLoading = true;
+      let params = {
+        oid: this.oid,
+        cid: this.cid,
+        cu: "",
+        cn: this.sPhoneUser,
+        page: this.page,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectStudent2", params)
+        .then((res) => {
+          this.isLoading = false;
+          this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
+          this.tableData = res.data[0];
+        })
+        .catch((err) => {
+          this.isLoading = false;
+          console.error(err);
+        });
+    },
+    handleChange(file) {
+      this.fileTemp = file.file;
+      if (this.fileTemp) {
+        if (
+          this.fileTemp.type ==
+          "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ||
+          this.fileTemp.type == "application/vnd.ms-excel"
+        ) {
+          this.importCount = 1;
+          this.importfxx(this.fileTemp);
+          this.addOp3('1', "", { type: "student_user_adds" }, "success")
+        } else {
+          this.addOp3('1', "", { type: "student_user_adds" }, "附件格式错误")
+          this.$message({
+            type: "warning",
+            message: "附件格式错误,请删除后重新上传!",
+          });
+        }
+      } else {
+        this.$message({
+          type: "warning",
+          message: "请上传附件!",
+        });
+      }
+    },
+    handleRemove(file, fileList) {
+      this.fileTemp = null;
+    },
+    exportExcel() {
+      try {
+        let params = {
+          oid: this.oid,
+        };
+        this.ajax
+          .get(this.$store.state.api + "selectUserBySchool", params)
+          .then((res) => {
+            var res = res.data[0];
+            //如果value的json字段的key值和想要的headers值不一致时,可做如下更改
+            //将和下面的Object.fromEntries结合,将json字段的key值改变为要求的excel的header值
+            var array = [];
+            for (var i = 0; i < res.length; i++) {
+              var _json = {};
+              _json["用户名"] = res[i].username;
+              _json["姓名"] = res[i].alias ? res[i].alias : "";
+              _json["班级"] = res[i].classid ? res[i].classid : "";
+              array.push(_json);
+            }
+
+            var XLSX = require("xlsx");
+            const workbook = XLSX.utils.book_new(); //创建一个新的工作簿对象
+            let ws = XLSX.utils.json_to_sheet(array); //将json对象数组转化成工作表
+            ws["!cols"] = [
+              //设置每一列的宽度
+              { wch: 50 },
+              { wch: 50 },
+              { wch: 50 },
+            ];
+            XLSX.utils.book_append_sheet(workbook, ws, "sheet1"); //把sheet添加到workbook里,第三个参数是sheet名
+            XLSX.writeFile(workbook, "学生信息.xlsx");
+            // const wopts = { bookType: "xlsx", bookSST: false, type: "array" };//写入的样式bookType:输出的文件类型,type:输出的数据类型,bookSST: 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
+            // const wbout = XLSX.write(workbook, wopts);// 浏览器端和node共有的API,实际上node可以直接使用xlsx.writeFile来写入文件,但是浏览器没有该API
+            // FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }), `${title} demo.xlsx`);//保存文件
+            this.$message({
+              message: "导出成功",
+              type: "success",
+            });
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      } catch (e) {
+        console.log(e, e.stack);
+      }
+    },
+    importfxx(obj) {
+      const loading = this.$loading.service({
+        background: "rgba(255, 255, 255, 0.7)",
+        target: document.body,
+      });
+      var _$ = $;
+      this.importCount++;
+      let _this = this;
+      // 通过DOM取文件数据
+      this.file = obj;
+      var rABS = false; //是否将文件读取为二进制字符串
+      var f = this.file;
+      var reader = new FileReader();
+      //if (!FileReader.prototype.readAsBinaryString) {
+      FileReader.prototype.readAsBinaryString = function (f) {
+        var binary = "";
+        var rABS = false; //是否将文件读取为二进制字符串
+        var pt = this;
+        var wb; //读取完成的数据
+        var outdata;
+        var reader = new FileReader();
+        reader.onload = function (e) {
+          var bytes = new Uint8Array(reader.result);
+          var length = bytes.byteLength;
+          for (var i = 0; i < length; i++) {
+            binary += String.fromCharCode(bytes[i]);
+          }
+          var XLSX = require("xlsx");
+          if (rABS) {
+            wb = XLSX.read(btoa(fixdata(binary)), {
+              //手动转化
+              type: "base64",
+            });
+          } else {
+            wb = XLSX.read(binary, {
+              type: "binary",
+            });
+          }
+          outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); //outdata就是你想要的东西
+          this.da = [...outdata];
+          let arr = [];
+          this.da.map((v) => {
+            let obj = {};
+            let a = "";
+            var num = "";
+            for (var cj = 0; cj < 3; cj++) {
+              num += Math.floor(Math.random() * 10);
+            }
+            // a =
+            //   pinyin.getFullChars(v["学生姓名"]).toLowerCase() +
+            //   num +
+            //   "@cocorobo.cc";
+             a =
+              pinyin.getFullChars(v["学生姓名"]).toLowerCase() +
+              num + _this.userSuffix;
+            obj.sId = v["学号"];
+            obj.name = v["学生姓名"];
+            // obj.mail = v["学生账号"] ? v["学生账号"] : a;
+            // console.log('v["学生账号"]',v["学生账号"]==true,v["学生账号"]);
+            if (v["学生账号"]) {
+              if(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(v["学生账号"])){
+                obj.mail = v["学生账号"];
+              }else{
+                if(_this.org != "" && _this.org != "null"  && _this.org != undefined && _this.org && _this.schoolChar){
+                  obj.mail = v["学生账号"] + "@" + _this.schoolChar + '.' + _this.userSuffix
+                }else {
+                  obj.mail = v["学生账号"] + "@" + _this.userSuffix
+                }
+                // obj.mail = v["学生账号"] + "@" + _this.userSuffix
+              }
+              
+            }else{
+              obj.mail = a;
+            }
+            obj.phone = v["学生手机号"];
+            obj.class = v["班级"];
+            arr.push(obj);
+          });
+          console.log(arr);
+          if(arr.length > 70){
+            _this.$message.error("限制上传学生数量不能超过70个");
+            _this.fileListUpload = [];
+            loading.close();
+            return;
+          }
+          let _b = 1;
+          for (var i = 0; i < arr.length; i++) {
+            let item = arr[i];
+            if (item.class === "") {
+              _b = 2;
+              _this.$message.error("学生班级不能为空,请重新上传");
+              break;
+            } else if (item.name === "") {
+              _b = 2;
+              _this.$message.error("学生姓名不能为空,请重新上传");
+              break;
+            } else if (item.sId === "") {
+              _b = 2;
+              _this.$message.error("学生学号不能为空,请重新上传");
+            }
+            // else if (item.phone === "") {
+            //   _b = 1;
+            //   _this.$message.error("学生手机号不能为空,请重新上传");
+            //   break;
+            // } else if (!/^[1][3,4,5,7,8][0-9]{9}$/.test(item.phone)) {
+            //   _b = 1;
+            //   _this.$message.error("有学生手机号格式不正确,请重新上传");
+            //   break;
+            // }
+            else if (item.mail === "") {
+              _b = 2;
+              _this.$message.error("学生账号不能为空,请重新上传");
+              break;
+            } else if (
+              !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(
+                item.mail
+              )
+            ) {
+              _b = 2;
+              _this.$message.error("有学生账号格式不正确,请重新上传");
+              break;
+            }
+            //#region 
+            //  else if (item.school === "") {
+            // 	_b = 1;
+            // 	_this.$message.error("学生学校不能为空,请重新上传");
+            // 	break;
+            // }
+            // else if (item.sex === "") {
+            // 	_b = 1;
+            // 	_this.$message.error("学生性别不能为空,请重新上传");
+            // 	break;
+            // }
+            // if (item.class != "") {
+            //   let _a;
+            //   let params = {
+            //     className: item.class,
+            //   };
+
+            //   _$.ajax({
+            //     url: _this.$store.state.api + "selectC", //url路径
+            //     type: "GET", //GET
+            //     async: false, //或false,是否异步
+            //     data: params,
+            //     timeout: 5000, //超时时间
+            //     dataType: "json", //返回的数据格式:
+            //     beforeSend: function (xhr) {},
+            //     success: function (res, textStatus, jqXHR) {
+            //       if (res[0].length == 0) {
+            //         _a = 1;
+            //         _this.$message.error(
+            //           "有学生班级不存在,请去添加后并重新上传"
+            //         );
+            //       } else {
+            //         item.classid = res[0][0].id;
+            //       }
+            //     },
+            //     error: function (xhr, textStatus) {
+            //       console.log(textStatus);
+            //     },
+            //     complete: function () {},
+            //   });
+            //   if (_a == 1) {
+            //     _b = 1;
+            //     break;
+            //   }
+            // }
+            // if (item.school != "") {
+            // 	let _a;
+            // 	let params = {
+            // 		schoolName: item.school,
+            // 	};
+
+            // 	_$.ajax({
+            // 		url: _this.$store.state.api + "selectS", //url路径
+            // 		type: "GET", //GET
+            // 		async: false, //或false,是否异步
+            // 		data: params,
+            // 		timeout: 5000, //超时时间
+            // 		dataType: "json", //返回的数据格式:
+            // 		beforeSend: function (xhr) {},
+            // 		success: function (res, textStatus, jqXHR) {
+            // 			if (res[0].length == 0) {
+            // 				_a = 1;
+            // 				_this.$message.error(
+            // 					"有学生学校不存在,请去添加后并重新上传"
+            // 				);
+            // 			} else {
+            // 				item.schoolid = res[0][0].id;
+            // 			}
+            // 		},
+            // 		error: function (xhr, textStatus) {
+            // 			console.log(textStatus);
+            // 		},
+            // 		complete: function () {},
+            // 	});
+            // 	if (_a == 1) {
+            // 		_b = 1;
+            // 		break;
+            // 	}
+            // }
+            //   for (var k = 0; k < arr.length; k++) {
+            //     if (item.phone != "") {
+            //       let params = { un: item.phone };
+            //       let _a;
+            //       _$.ajax({
+            //         url: _this.$store.state.api + "findPhone", //url路径
+            //         type: "GET", //GET
+            //         async: false, //或false,是否异步
+            //         data: params,
+            //         timeout: 5000, //超时时间
+            //         dataType: "json", //返回的数据格式:
+            //         beforeSend: function (xhr) {},
+            //         success: function (res, textStatus, jqXHR) {
+            //           if (res[0].length > 0) {
+            //             _this.$message.error("有学生手机号码已被注册");
+            //             _a = 1;
+            //           }
+            //         },
+            //         error: function (xhr, textStatus) {
+            //           console.log(textStatus);
+            //         },
+            //         complete: function () {},
+            //       });
+            //       if (_a == 1) {
+            //         _b = 1;
+            //         break;
+            //       }
+            //     }
+            //     if (item.mail != "") {
+            //       let params = { un: item.mail };
+            //       let _a;
+            //       _$.ajax({
+            //         url: _this.$store.state.api + "findMail", //url路径
+            //         type: "GET", //GET
+            //         async: false, //或false,是否异步
+            //         data: params,
+            //         timeout: 5000, //超时时间
+            //         dataType: "json", //返回的数据格式:
+            //         beforeSend: function (xhr) {},
+            //         success: function (res, textStatus, jqXHR) {
+            //           if (res[0].length > 0) {
+            //             _this.$message.error("有学生账号已被注册");
+            //             _a = 1;
+            //           }
+            //         },
+            //         error: function (xhr, textStatus) {
+            //           console.log(textStatus);
+            //         },
+            //         complete: function () {},
+            //       });
+            //       if (_a == 1) {
+            //         _b = 1;
+            //         break;
+            //       }
+            //     }
+            //     if (item.sId != "") {
+            //       let params = { un: item.sId };
+            //       let _a;
+            //       _$.ajax({
+            //         url: _this.$store.state.api + "findSid", //url路径
+            //         type: "GET", //GET
+            //         async: false, //或false,是否异步
+            //         data: params,
+            //         timeout: 5000, //超时时间
+            //         dataType: "json", //返回的数据格式:
+            //         beforeSend: function (xhr) {},
+            //         success: function (res, textStatus, jqXHR) {
+            //           if (res[0].length > 0) {
+            //             _this.$message.error("有学生学号重复");
+            //             _a = 1;
+            //           }
+            //         },
+            //         error: function (xhr, textStatus) {
+            //           console.log(textStatus);
+            //         },
+            //         complete: function () {},
+            //       });
+            //       if (_a == 1) {
+            //         _b = 1;
+            //         break;
+            //       }
+            //     }
+            //     _b = 2;
+            //   }
+            // }
+            // if (_b == 2) {
+
+            // for (var i = 0; i < arr.length; i++) {
+            //   let _i = i;
+            //   let item = arr[i];
+            //   let params = [
+            //     {
+            //       alias: item.name,
+            //       username: item.mail,
+            //       userpassword: 123456,
+            //       oid: _this.oid,
+            //       ph: item.phone,
+            //       cid: item.class,
+            //     },
+            //   ];
+
+            //   _this.ajax
+            //     .post(_this.$store.state.api + "batchRegistration", params)
+            //     .then((res) => {
+            //       let params = [
+            //         {
+            //           userid: res.data.uid,
+            //           username: item.name,
+            //           sId: item.sId,
+            //           type: 2,
+            //           oid: res.data.oid,
+            //           phone: res.data.ph ? res.data.ph : "",
+            //           cid: res.data.cid ? res.data.cid : "",
+            //           intro: "",
+            //           sex: "0",
+            //         },
+            //       ];
+            //       _this.ajax
+            //         .post(_this.$store.state.api + "updateUserByEdu", params)
+            //         .then((res) => {
+            //           console.log(res);
+            //         })
+            //         .catch((err) => {
+            //           console.error(err);
+            //         });
+            //       loading.close();
+            //       // _this.$message({
+            //       //   message: "新增成功",
+            //       //   type: "success",
+            //       // });
+            //       _this.getStudent();
+            //       // if (_i == arr.length - 1) {
+            //       //   loading.close();
+            //       //   _this.$message({
+            //       //     message: "上传成功",
+            //       //     type: "success",
+            //       //   });
+            //       //   _this.getStudent();
+            //       // }
+            //     })
+            //     .catch((err) => {
+            //       _this.$message.error("上传失败");
+            //       console.error(err);
+            //     });
+            // }
+            // } else {
+            //   loading.close();
+            //#endregion
+          }
+          if(_b == 2){
+            _this.fileListUpload = [];
+            loading.close();
+            return
+          }
+          let z = 2;
+          let newArr = JSON.stringify(arr);
+          let params = [
+            {
+              arr: newArr,
+              userpassword: 'Coco1234',
+              oid: _this.oid,
+            },
+          ];
+          _this.ajax
+            .post(_this.$store.state.api + "batchRegistrationMore", params)
+            .then((res) => {
+              if (res.data.type == 1) {
+                _this.$message.error("有学生手机号码已被注册");
+                z = 1;
+              }
+              if (res.data.type == 2) {
+                _this.$message.error("有学生账号已被注册");
+                z = 1;
+              }
+              if (res.data.type == 3) {
+                _this.$message.error("有学生学号重复");
+                z = 1;
+              }
+              if (z == 2) {
+                _this.$message({
+                  message: "新增成功",
+                  type: "success",
+                });
+                _this.getStudent();
+              }
+              loading.close();
+            })
+            .catch((err) => {
+              console.error(err);
+            });
+          _this.fileListUpload = [];
+        };
+
+        reader.readAsArrayBuffer(f);
+      };
+
+      if (rABS) {
+        reader.readAsArrayBuffer(f);
+      } else {
+        reader.readAsBinaryString(f);
+      }
+    },
+    getSchoolName() {
+      let params = {
+        oid: this.oid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectSchoolName2", params)
+        .then((res) => {
+          this.schoolName = res.data[0][0].name;
+          const cleanedSchoolName = res.data[0][0].name.replace(/[,。;:!“”‘’()()]/g, ''); // 去掉标点符号
+          console.log(pinyin);
+          console.log(pinyin.getFullChars(cleanedSchoolName));
+          console.log(pinyin.getCamelChars(cleanedSchoolName));
+          this.schoolChar = pinyin.getCamelChars(cleanedSchoolName).toLowerCase()
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    deleteStudent(id, state) {
+      state = 0;
+      let params = [{ uid: id, state: state }];
+      this.$confirm("确定" + "删除" + "此学生吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.ajax
+            .post(this.$store.state.api + "deleteStudent", params)
+            .then((res) => {
+              this.$message({
+                message: "操作成功",
+                type: "success",
+              });
+              this.getStudent();
+            })
+            .catch((err) => {
+              this.$message.error("操作失败");
+              console.error(err);
+            });
+        })
+        .catch(() => { });
+    },
+    iniPassword(id) {
+      this.$confirm("确定" + "初始化" + "此学生的密码吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          let params = [
+            {
+              uid: id,
+              pa: 'Coco1234',
+            },
+          ];
+          this.ajax
+            .post(this.$store.state.api + "iniPassword", params)
+            .then((res) => {
+              this.$message({
+                message: "初始化密码成功!",
+                type: "success",
+              });
+            })
+            .catch((err) => {
+              console.error(err);
+            });
+        })
+        .catch(() => { });
+    },
+    updateStudentA(res) {
+      this.userinfo = JSON.parse(JSON.stringify(res));
+      this.userinfoA = JSON.parse(JSON.stringify(res));
+      this.userinfo.classid = this.userinfo.classid.split(",");
+      this.dialogVisibleUpdate = true;
+    },
+    updateStudent() {
+      if (this.userinfo.name === "") {
+        this.$message.error("学生姓名不能为空");
+        return;
+      } else if (!this.userinfo.classid) {
+        this.$message.error("请为学生选择班级");
+        return;
+      } else if (
+        this.userinfo.phonenumber &&
+        !/^[1][3,4,5,7,8][0-9]{9}$/.test(this.userinfo.phonenumber)
+      ) {
+        this.$message.error("手机号格式不正确");
+        return;
+      } else if (
+        !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(
+          this.userinfo.un
+        )
+      ) {
+        this.$message.error("邮箱格式不正确");
+        return;
+      }
+
+      if (this.time()) {
+        if (this.userinfoA.un != this.userinfo.un) {
+          let params = { un: this.userinfo.un };
+          this.ajax
+            .get(this.$store.state.api + "findMail", params)
+            .then((res) => {
+              if (res.data[0].length > 0) {
+                this.$message.error("此学生账号已被注册");
+              } else {
+                this.update_Student();
+              }
+            })
+            .catch((err) => {
+              console.error(err);
+            });
+        } else {
+          this.update_Student();
+        }
+      }
+    },
+    update_Student() {
+      let params = [
+        {
+          userid: this.userinfo.userid,
+          username: this.userinfo.un,
+          alias: this.userinfo.name,
+          ph: this.userinfo.phonenumber,
+          sid: this.userinfo.studentid,
+          cid: this.userinfo.classid.join(","),
+        },
+      ];
+      this.ajax
+        .post(this.$store.state.api + "updateStudentInfo", params)
+        .then((res) => {
+          this.$message({
+            message: "修改成功",
+            type: "success",
+          });
+          this.dialogVisibleUpdate = false;
+          this.getStudent();
+        })
+        .catch((err) => {
+          this.isLoading = false;
+          this.$message({
+            message: "修改失败",
+            type: "error",
+          });
+          console.error(err);
+        });
+    },
+  },
+  created() {
+    this.page = 1;
+    this.getStudent();
+    this.getSchoolName();
+    this.getClass();
+  },
+};
+</script>
+
+<style scoped>
+.pb_head>span:nth-child(2) {
+  font-size: 20px;
+  margin-left: 5px;
+  color: #828282;
+}
+
+.pb_head {
+  margin: 0 !important;
+  width: 100% !important;
+}
+
+.student_page {
+  margin-top: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+
+.student_head {
+  margin-top: 10px;
+  padding-bottom: 10px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.head_left {
+  display: flex;
+  align-items: center;
+  line-height: 40px;
+}
+
+.head_right {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+}
+
+.student_input>>>.el-input__inner {
+  height: 30px;
+  width: 190px;
+  font-size: 13px;
+  padding: 0 10px;
+}
+
+.student_button {
+  color: #fff;
+  background: #2268bc;
+  width: 60px;
+  height: 30px;
+  padding: 0 !important;
+  font-size: 12px;
+  line-height: 30px;
+}
+
+.head_right>button:nth-child(1) {
+  color: #fff;
+  background: #2268bc;
+  width: 70px;
+  height: 30px;
+  padding: 0 !important;
+  font-size: 12px;
+  line-height: 30px;
+}
+
+.head_right>button:nth-child(2) {
+  color: #fff;
+  background: #2268bc;
+  width: 70px;
+  height: 30px;
+  padding: 0 !important;
+  font-size: 12px;
+  line-height: 30px;
+}
+
+.head_right>div {
+  font-size: 12px;
+  line-height: 40px;
+  margin-left: 10px;
+  color: #2a6dbe;
+  text-decoration: underline;
+  cursor: pointer;
+}
+
+.student_table>>>.el-table--border td {
+  border-right: 0px !important;
+}
+
+.student_table>>>.el-table,
+.student_table>>>.el-table__body-wrapper {
+  height: auto !important;
+}
+
+.el-table>>>.even_row {
+  background-color: #f1f1f1 !important;
+}
+
+.de_button {
+  color: #fff;
+  background: #5190fd;
+  width: 50px;
+  height: 25px;
+  padding: 0 !important;
+  font-size: 12px;
+  line-height: 25px;
+}
+
+.add_student>>>.el-dialog__header {
+  padding: 20px 20px 10px;
+  text-align: center;
+  background: #32455b;
+}
+
+.add_student>>>.el-dialog__title {
+  font-size: 14px !important;
+  color: #fff !important;
+}
+
+.add_student>>>.el-dialog__headerbtn {
+  font-size: 20px !important;
+}
+
+.add_student>>>.el-form-item__label {
+  margin-left: 65px;
+}
+
+.add_student>>>.el-form-item {
+  display: flex;
+}
+
+.add_student>>>.el-form-item__content {
+  margin: 0 !important;
+}
+
+.add_input {
+  width: 365px;
+}
+
+.add_student>>>.el-dialog__footer {
+  text-align: center !important;
+}
+
+.right {
+  width: 250px;
+  color: #fff;
+  background: #0e72e6;
+  margin-bottom: 20px;
+}
+
+.header-title {
+  display: flex;
+}
+
+.logoImg {
+  width: 30px;
+}
+
+.logoImg>img {
+  width: 100%;
+  height: 100%;
+}
+
+.title_add_student {
+  margin: 0 auto;
+  color: #fff;
+}
+
+.upload-demo {
+  line-height: 0px !important;
+}
+
+.upload-demo>>>.el-button {
+  color: #fff;
+  background: #2268bc;
+  width: 70px;
+  height: 30px;
+  padding: 0 !important;
+  font-size: 12px;
+  line-height: 0 !important;
+}
+
+.userImg {
+  display: flex;
+  flex-direction: row;
+  justify-content: center;
+  align-items: center;
+}
+
+.tx {
+  width: 40px;
+  margin-right: 10px;
+}
+
+.delete {
+  width: 25px;
+  height: 25px;
+  cursor: pointer;
+  margin-left: 10px;
+}
+
+.tx>img,
+.delete>img {
+  width: 100%;
+  height: 100%;
+}
+
+.newCss {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: baseline;
+}
+
+.student_input.el-input {
+  width: auto;
+}
+
+.student_input {
+  margin-right: 10px;
+}
+
+.student_input>>>.el-input__icon {
+  line-height: unset;
+}
+
+.btnBox {
+  display: flex;
+  align-items: center;
+}
+
+.sub_head {
+  position: relative;
+}
+
+.sub_head::after {
+  content: "";
+  width: 100%;
+  background: #5a9cea;
+  height: 2px;
+  position: absolute;
+  left: 0;
+  bottom: -10px;
+}
+
+.subClick {
+  /* font-size: 16px; */
+  font-size: 26px;
+  cursor: pointer;
+  /* margin-left: 17.5px; */
+  /* color: #ab582f; */
+  /* color: #409eff; */
+  color: #999;
+}
+
+.subClick:hover {
+  color: #000;
+}
+
+.sub_head+.subClick,
+.subClick+.subClick,
+.subClick+.sub_head {
+  margin-left: 17.5px;
+}
+
+.pb_content_body {
+  width: 100% !important;
+}
+
+.sm_box {
+  display: flex;
+  width: calc(100% - 20px);
+  margin: 0 auto;
+}
+
+.sm_right {
+  width: 100%;
+  /* margin-left: 210px; */
+}
+
+.sm_left {
+  width: 200px;
+  background: #fff;
+  height: calc(100vh - 20px);
+  position: fixed;
+  left: 10px;
+  top: 10px;
+  border-radius: 5px;
+  overflow: hidden;
+}
+
+
+
+.nav {
+  height: 55px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  cursor: pointer;
+  color: #777777;
+  transition: all .5s;
+}
+
+.nav:hover {
+  background: rgb(204, 204, 204);
+}
+
+.nav.active {
+  background: #3d67bc !important;
+  color: #fff;
+}
+
+.nav .icon {
+  width: 16px;
+  height: 16px;
+  margin-right: 5px;
+  background-size: 100% 100%;
+}
+
+.nav .name {}
+
+.nav .icon.gradeI {
+  background-image: url(../../../../assets/icon/studentManage/grade.png);
+}
+
+.nav .icon.classI {
+  background-image: url(../../../../assets/icon/studentManage/class.png);
+}
+
+.nav .icon.studentI {
+  background-image: url(../../../../assets/icon/studentManage/student.png);
+}
+
+.nav.active .icon.gradeI {
+  background-image: url(../../../../assets/icon/studentManage/grade-a.png);
+}
+
+.nav.active .icon.classI {
+  background-image: url(../../../../assets/icon/studentManage/class-a.png);
+}
+
+.nav.active .icon.studentI {
+  background-image: url(../../../../assets/icon/studentManage/student-a.png);
+}</style>

+ 1202 - 0
src/components/pages/liyuan/page/teadTest.vue

@@ -0,0 +1,1202 @@
+<template>
+    <div class="i_body_box">
+        <backPage tit="资料搜集"></backPage>
+        <div class="check_nav">
+            <!-- <div class="nav all" v-show="this.ExamineBase.length > 0" :class="{ active: type == '1' }" @click="checkType('1')">
+                年度考核
+            </div> -->
+            <div class="nav all" :class="{ active: checkTypeValue == typeListStr }" 
+            @click="changeShowType(typeListStr)">
+                全部
+            </div>
+            <div class="nav" v-for="item in typeList" :key="item.id" :class="{ active: checkTypeValue == item.id,all:['8bfa67ce-e82a-11ef-b508-005056924926','9d3289d2-e82a-11ef-b508-005056924926','a824c728-e82a-11ef-b508-005056924926','8085418b-e82a-11ef-b508-005056924926'].includes(item.id)}" 
+            @click="changeShowType(item.id,item)">{{ item.name }}</div>
+           
+        </div>
+        <div class="check_box" v-loading="loading">
+            <!-- <examine v-if="type==1"></examine> -->
+            <div class="noneData"  v-if="!worksArray.length && type!=1" style="text-align: center; margin-top: 20px;">
+                暂无数据
+            </div>
+            <template  v-if="type!=1">
+                <div class="test_panel" v-for="(item, index) in worksArray" :key="index">
+                    <div class="test_panel_title">
+                        <div class="title" :style="{paddingLeft: (item.array.length > 0 || item.carray.length > 0) ? '0' : '30px'}" @click="openWork(index)">
+                            <span class="open" :class="{active: item.open}" v-if="item.array.length > 0 || item.carray.length > 0"></span>
+                            <el-tooltip :content="item.title" placement="top" effect="dark">
+                                <span class="titleN">{{ item.title }}</span>
+                            </el-tooltip>
+                        </div>
+                        <div class="state">
+                            <span :class="{ is: item.array.length > 0, no: !item.array.length }">{{ item.array.length > 0 ? "已完成" : "未完成" }}</span>
+                        </div>
+                        <div class="time">
+                            <span v-if="item.overtime" :class="{isDead: isDeadlinePassed(item.overtime)}">截止时间:{{ item.overtime }}</span>
+                            <span v-else></span>
+                        </div>
+                        <div class="creator" :style="{paddingRight:(!item.carray.length > 0) ? '0' : '0px'}">
+                            <el-tooltip :content="item.username" placement="top" effect="dark">
+                                <span>创建者:{{ item.username }}</span>
+                            </el-tooltip>
+                        </div>
+                        <div class="editBtn2" :style="`${item.open?'display:flex':''}`" v-if="!item.carray.length > 0">
+                            <span v-if="item.array.length === 0">去填写</span>
+                            <span v-else>再填一份</span>
+                        </div>
+                        <div @click="doTest2(item.courseid)" class="editBtn" :style="`${item.open?'display:flex':''}`" v-if="!item.carray.length > 0">
+                            <span v-if="item.array.length === 0">去填写</span>
+                            <span v-else>再填一份</span>
+                        </div>
+                    </div>
+                    <div class="test_panel_box" v-if="item.open">
+                        <div class="test_add_box"
+                            v-if="item.array">
+                            <div class="test" v-for="(test, index) in item.array" :key="test.id">
+                                <div class="time">
+                                    <span>提交记录{{item.array.length - index}}</span>
+                                </div>
+                                <!-- <img @click="deleteTest(test.id)" class="delete"
+                                    src="../../../../assets/icon/test/delete.png" alt="" /> -->
+                                <div class="utime">
+                                    <span>{{ test.utime }}</span>
+                                </div>
+                                <div class="mask">
+                                    <div @click="doTest(test.courseid, test.id)">
+                                        <span>编辑</span>
+                                    </div>
+                                    <div @click="deleteTest(test.id)" class="delete">
+                                        <span>删除</span>
+                                    </div>
+                                    <!-- <div @click="checkTest(test.courseid, test.id)">
+                                        <span></span><span>查看</span>
+                                    </div>
+                                    <div @click="copyTest(test.id)">
+                                        <span></span><span>复制</span>
+                                    </div> -->
+                                </div>
+                            </div>
+                        </div>
+                        <div class="test_add_box"
+                            v-else-if="item.carray" v-loading="!item.carray.length">
+                            <!-- <div class="courseLength" v-for="(course, index) in item.carray" :key="index" @click="doTest3(item, course)">
+                                <span class="finish" :class="{is: course.array.length}"></span>
+                                <span>{{ index+1 }}、</span>
+                                <span>{{ course.title }}</span>
+                                <span>{{ course.username }}</span>
+                            </div> -->
+                            <div class="test courseLength" v-for="(course, index) in item.carray" :key="index">
+                                <div class="time">
+                                    <el-tooltip :content="course.title+'-'+course.username" placement="top" effect="dark">
+                                        <span>{{ course.title }}-{{ course.username }}</span>
+                                    </el-tooltip>
+                                </div>
+                                <div class="finishBox" :class="{is: course.array.length}">
+                                    <span class="finish"></span>
+                                    <span v-if="course.array.length">已评分</span>
+                                    <span v-else>未评分</span>
+                                </div>
+                                <div class="utime" style="margin-left: 30px;">
+                                    <span v-if="course.array.length">{{ course.array[0].utime }}</span>
+                                    <span v-else></span>
+                                </div>
+                                <div class="mask">
+                                    <div @click="doTest3(item, course)">
+                                        <span>评分</span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </template>
+            
+        </div>
+    </div>
+</template>
+
+<script>
+import backPage from '../components/backPage.vue'
+export default {
+    
+    components:{
+        backPage
+    },
+    data() {
+        return {
+            userid: this.$route.query.userid,
+            oid: this.$route.query.oid,
+            type: "",
+            typeId:'e18d88b3-e828-11ef-b508-005056924926',
+            typeList:[],
+            ExamineBase: [],
+            typeArray: [],
+            typeArrayCheck: [],
+            worksArray: [],
+            org: this.$route.query.org,
+            role: this.$route.query.role,
+            loading: false,
+            checkTypeValue:""
+        };
+    },
+    computed: {
+        getNum() {
+            return function (array) {
+                let _array = JSON.parse(array);
+                let num = 0;
+                _array.forEach(el => {
+                    if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                        el.array.forEach(item => {
+                            if (item.ttype == 2 && item.array.length > 0) {
+                                item.array.forEach(item2 => {
+                                    if (item2.ttype == 1 && item2.json) {
+                                        num++;
+                                    }
+                                });
+                            } else if (item.ttype == 1 && item.json) {
+                                num++;
+                            }
+                        });
+                    } else if (el.ttype == 1 && el.json) {
+                        num++;
+                    }
+                });
+                return num;
+            };
+        },
+        getScore() {
+            return function (array) {
+                // let _array = JSON.parse(array)
+                let _score = 0;
+                let scoreArray = [];
+                for (var i = 0; i < array.length; i++) {
+                    let _array = JSON.parse(array[i].courseJson);
+                    let score = 0;
+                    for (var j = 0; j < _array.length; j++) {
+                        let el = _array[j];
+                        if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                            for (var k = 0; k < el.array.length; k++) {
+                                let item = el.array[k];
+                                if (item.ttype == 2 && item.array.length > 0) {
+                                    for (var z = 0; z < item.array.length; z++) {
+                                        let item2 = item.array[z];
+                                        if (item2.ttype == 1 && item2.json && item2.json.score2) {
+                                            score += parseInt(item2.json.score2);
+                                        }
+                                    }
+                                } else if (item.ttype == 1 && item.json && item.json.score2) {
+                                    score += parseInt(item.json.score2);
+                                }
+                            }
+                        } else if (el.ttype == 1 && el.json && el.json.score2) {
+                            score += parseInt(el.json.score2);
+                        }
+                    }
+                    scoreArray.push(score);
+                }
+                scoreArray.forEach(el => {
+                    _score += el;
+                });
+                console.log(scoreArray);
+                return _score ? _score / scoreArray.length : 0;
+            };
+        },
+        getImg() {
+            return function (array) {
+                let _array = JSON.parse(array);
+                let _img = "";
+                s: for (var j = 0; j < _array.length; j++) {
+                    let el = _array[j];
+                    if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                        for (var k2 = 0; k2 < el.array.length; k2++) {
+                            let item = el.array[k2];
+                            console.log(k2);
+                            if (item.ttype == 2 && item.array.length > 0) {
+                                for (var z = 0; z < item.array.length; z++) {
+                                    let item2 = item.array[z];
+                                    if (
+                                        item2.ttype == 1 &&
+                                        item2.type == 5 &&
+                                        item2.json &&
+                                        item2.json.file &&
+                                        item2.json.file.length > 0
+                                    ) {
+                                        for (var k4 = 0; k4 < item2.json.file.length; k4++) {
+                                            let ik = item2.json.file[k4];
+                                            if (ik.type == 3) {
+                                                _img = ik.url;
+                                                break s;
+                                            }
+                                        }
+                                    }
+                                }
+                            } else if (
+                                item.ttype == 1 &&
+                                item.type == 5 &&
+                                item.json &&
+                                item.json.file &&
+                                item.json.file.length > 0
+                            ) {
+                                for (var k3 = 0; k3 < item.json.file.length; k3++) {
+                                    let ik = item.json.file[k3];
+                                    if (ik.type == 3) {
+                                        _img = ik.url;
+                                        break s;
+                                    }
+                                }
+                            }
+                        }
+                    } else if (
+                        el.ttype == 1 &&
+                        el.type == 5 &&
+                        el.json &&
+                        el.json.file &&
+                        el.json.file.length > 0
+                    ) {
+                        for (var k = 0; k < el.json.file.length; k++) {
+                            let ik = el.json.file[k];
+                            if (ik.type == 3) {
+                                _img = ik.url;
+                                break s;
+                            }
+                        }
+                    }
+                }
+                return _img;
+            };
+        },
+        typeListStr(){
+          let _result = "";
+
+          if(this.typeList.length){
+            _result = this.typeList.map(i=>i.id)
+            _result.push(this.typeId);
+            _result = _result.join(',')
+          }
+
+          return _result;
+        }
+    },
+    watch:{
+      typeId(newValue){
+        this.changeShowType(newValue)
+      }
+    },
+    methods: {
+        getNavType() {
+            let params = {
+                oid: "",//this.oid
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestType", params)
+                .then(res => {
+                    let _data = res.data[0];
+                    console.log('_data',_data);
+                    // _data.fliter(e=>{
+
+                    // })
+                    this.typeList = _data.filter(function(item, index) {
+                        return item.pid == 'e18d88b3-e828-11ef-b508-005056924926';
+                    });
+                    this.changeShowType(this.typeListStr)
+
+                    //  = _data.fliter(e =>{ return e.pid == 'e18d88b3-e828-11ef-b508-005056924926'})
+                    console.log('this.typeList',this.typeList);
+
+                    
+                })
+                .catch(err => {
+                    console.log(err);
+                });
+        },
+        getPageBase(type = 1) {
+            let params = {
+                typ: type,
+                org: this.org,
+                oid: this.oid
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestExamineBase", params)
+                .then(res => {
+                this.ExamineBase = res.data[0];
+                if(type == 1 && !res.data[0].length){
+                    this.getPageBase(2)
+                }
+                // console.log("selectTestExamineBase", res.data);
+                })
+                .catch(error => {
+                console.log(error);
+            });
+        },
+        isDeadlinePassed(deadline) {
+            let _line = new Date(deadline)
+            const currentDate = new Date();
+            return currentDate > _line;
+        },
+        checkType(type) {
+            this.type = type;
+            this.getWorks();
+        },
+        selectTestType(type) {
+            let params = {
+                oid: this.oid
+            };
+            this.ajax
+                .get(this.$store.state.api + "selectTestType", params)
+                .then(res => {
+                    this.typeArray = res.data[0];
+                    if(type == 1){
+                        this.type = ''
+                        // if (this.typeArray.length) {
+                        //     this.type = this.typeArray[0].id;
+                        // } else {
+                        //     this.type = '0';
+                        // }
+                    }
+                    this.getWorks()
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
+        getWorks() {
+            this.loading = true;
+            let params = {
+                uid: this.userid,
+                typeid: this.checkTypeValue
+            };
+            this.ajax
+                .get(this.$store.state.api + "getTestWorksPerson_2type", params)
+                .then(res => {
+                    let array = res.data[0];
+                    let array2 = res.data[1];
+                    // 用于存储归类后的数据的对象
+                    let worksArray = {};
+
+                    // 遍历原始数据,根据 parentId 进行分组
+                    array2.forEach(item => {
+                        // console.log(item.chapters);
+                        worksArray[item.courseId] = {
+                            id: item.id,
+                            courseid: item.courseId,
+                            title: item.title,
+                            time: item.time,
+                            utime: item.utime,
+                            overtime: item.overtime,
+                            username: item.username,
+                            chapters: item.chapters,
+                            brief: item.brief,
+                            typeid: item.typeid,
+                            array: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf123' ? 0 : [],
+                            carray: [],
+                            open: false
+                        };
+                    });
+                    worksArray = Object.values(worksArray);
+                    worksArray.forEach(async el => {
+                        if (el.typeid == 'dda9728e-5f11-469e-89ee-aca518daf123') {
+                            let courseJson = this.returnCourseJSON(el.chapters)
+                            if(courseJson && courseJson.courses.length){
+                                let courses = courseJson.courses.join(',')
+                                let _res = await this.getAllCourse(courses)
+                                console.log(_res);
+                                let _carray = []
+                                for(var i=0;i<_res.length;i++){
+                                    _carray.push({
+                                        courseid: _res[i].courseId,
+                                        title: _res[i].title,
+                                        username: _res[i].username,
+                                        array: []
+                                    })
+                                }
+                                el.carray = _carray
+                            }
+                        }
+
+                        array.forEach(el2 => {
+                            if (el.courseid == el2.courseid && el.typeid != 'dda9728e-5f11-469e-89ee-aca518daf123') {
+                                el.array.push(el2);
+                            }
+
+                            if(el.courseid == el2.courseid && el.typeid == 'dda9728e-5f11-469e-89ee-aca518daf123'){
+                                let courseid = this.returnCourseId(el2.courseJson)
+                                for(var c = 0; c<el.carray.length;c++){
+                                    if(el.carray[c].courseid == courseid){
+                                        el.carray[c].array.push(el2);
+                                        break
+                                    }
+                                }
+                            }
+                        });
+                    });
+                    // worksArray[item.courseid].array.push(item);
+
+                    this.worksArray = worksArray;
+                    this.loading = false;
+
+                    this.$forceUpdate();
+                })
+                .catch(err => {
+                    this.loading = false;
+                    console.error(err);
+                });
+        },
+        openWork(index){
+            if(this.worksArray[index].array.length === 0 && this.worksArray[index].carray.length === 0){
+                return
+            }
+            this.worksArray[index].open = !this.worksArray[index].open
+            this.$forceUpdate()
+        },
+        returnA() {
+            this.$router.push(
+                "/testStudent?userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&role=" +
+                this.role
+            );
+        },
+        checkTest(cid, tid) {
+            this.$router.push(
+                "/checkTest?cid=" +
+                cid +
+                "&tid=" +
+                tid +
+                "&userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&type=3" +
+                "&role=" +
+                this.role
+            );
+        },
+        doTest(cid, tid) {
+            this.$router.push(
+                "/doTest?cid=" +
+                cid +
+                "&tid=" +
+                tid +
+                "&userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&type=3" +
+                "&role=" +
+                this.role
+            );
+        },
+        doTest2(cid) {
+            this.$router.push(
+                "/doTest?cid=" +
+                cid +
+                "&userid=" +
+                this.userid +
+                "&oid=" +
+                this.oid +
+                "&org=" +
+                this.org +
+                "&type=3" +
+                "&role=" +
+                this.role
+            );
+        },
+        doTest3(item, course){
+            if(course.array.length){
+                this.$router.push(
+                    "/doTest?cid=" +
+                    item.courseid +
+                    "&tid=" +
+                    course.array[0].id +
+                    "&userid=" +
+                    this.userid +
+                    "&oid=" +
+                    this.oid +
+                    "&org=" +
+                    this.org +
+                    "&type=3" +
+                    "&role=" +
+                    this.role
+                );
+            }else{
+                this.$router.push(
+                    "/doTest?cid=" +
+                    item.courseid +
+                    "&userid=" +
+                    this.userid +
+                    "&oid=" +
+                    this.oid +
+                    "&org=" +
+                    this.org +
+                    "&type=3" +
+                    "&courseid=" +
+                    course.courseid +
+                    "&role=" +
+                    this.role
+                );
+            }
+        },
+        copyTest(tid) {
+            let params = [
+                {
+                    tid: tid,
+                    uid: this.userid
+                }
+            ];
+            this.ajax
+                .post(this.$store.state.api + "copyTestWorks", params)
+                .then(res => {
+                    this.$message.success("复制成功");
+                    this.getWorks();
+                })
+                .catch(err => {
+                    console.error(err);
+                });
+        },
+        deleteTest(tid) {
+            let _this = this;
+            _this
+                .$confirm("确定删除此填写的表单么?", "提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning"
+                })
+                .then(() => {
+                    let params = [
+                        {
+                            tid: tid
+                        }
+                    ];
+                    _this.ajax
+                        .post(_this.$store.state.api + "deleteTestCourseWorks", params)
+                        .then(res => {
+                            _this.$message.success("删除成功");
+                            _this.getWorks();
+                        })
+                        .catch(err => {
+                            console.error(err);
+                        });
+                })
+                .catch(() => {
+                    return;
+                });
+        },
+        returnCourseJSON(array) {
+            let _array = JSON.parse(array);
+            let courseJson = '';
+            s: for (var j = 0; j < _array.length; j++) {
+                let el = _array[j];
+                if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                    for (var k2 = 0; k2 < el.array.length; k2++) {
+                        let item = el.array[k2];
+                        console.log(k2);
+                        if (item.ttype == 2 && item.array.length > 0) {
+                            for (var z = 0; z < item.array.length; z++) {
+                                let item2 = item.array[z];
+                                if (
+                                    item2.ttype == 1 &&
+                                    item2.type == 6 &&
+                                    item2.json
+                                ) {
+                                    courseJson = item2.json
+                                    break s;
+                                }
+                            }
+                        } else if (
+                            item.ttype == 1 &&
+                            item.type == 6 &&
+                            item.json
+                        ) {
+                            courseJson = item.json
+                                    break s;
+                        }
+                    }
+                } else if (
+                    el.ttype == 1 &&
+                    el.type == 6 &&
+                    el.json
+                ) {
+                    courseJson = el.json
+                                    break s;
+                }
+            }
+            return courseJson;
+        },
+        returnCourseId(array) {
+            let _array = JSON.parse(array);
+            let courseJson = '';
+            s: for (var j = 0; j < _array.length; j++) {
+                let el = _array[j];
+                if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
+                    for (var k2 = 0; k2 < el.array.length; k2++) {
+                        let item = el.array[k2];
+                        console.log(k2);
+                        if (item.ttype == 2 && item.array.length > 0) {
+                            for (var z = 0; z < item.array.length; z++) {
+                                let item2 = item.array[z];
+                                if (
+                                    item2.ttype == 1 &&
+                                    item2.type == 6 &&
+                                    item2.json && item2.json.answer2
+                                ) {
+                                    courseJson = item2.json.answer2
+                                    break s;
+                                }
+                            }
+                        } else if (
+                            item.ttype == 1 &&
+                            item.type == 6 &&
+                            item.json && item.json.answer2
+                        ) {
+                            courseJson = item.json.answer2
+                                    break s;
+                        }
+                    }
+                } else if (
+                    el.ttype == 1 &&
+                    el.type == 6 &&
+                    el.json  && el.json.answer2
+                ) {
+                    courseJson = el.json.answer2
+                                    break s;
+                }
+            }
+            return courseJson;
+        },
+        async getAllCourse(id) {
+            let params = {
+                cid: id,
+            };
+            let res = await this.ajax.get(this.$store.state.api + "getCourseInfoTestAll", params)
+            return res.data[0]
+        },
+        changeShowType(value){
+            console.log('value',value);
+            
+          this.checkTypeValue = value;
+          this.getWorks();
+        }
+    },
+    mounted() {
+        // this.selectTestType(1);
+        // this.getPageBase()
+        this.getNavType()
+        
+        console.log('this.typeListStr',this.typeListStr);
+        
+        // if(this.typeListStr){
+        //   this.changeShowType(this.typeListStr)
+          // this.checkTypeValue = this.typeId
+        // }
+    },
+    // activated(){
+    //     // this.selectTestType(2);
+    //     if(this.typeListStr){
+    //       this.changeShowType(this.typeListStr)
+    //       // this.checkTypeValue = this.typeId
+    //     }
+    // },
+};
+</script>
+
+<style scoped>
+.i_body_box {
+    height: calc(100% - 10px);
+    padding: 10px 0 0;
+    box-sizing: border-box;
+}
+
+.check_nav {
+    display: flex;
+    height: 50px;
+    align-items: center;
+    padding: 0;
+    box-sizing: border-box;
+    width: 100%;
+    overflow: auto;
+}
+
+.check_nav>.nav {
+    width: 120px;
+    height: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: rgb(167, 167, 167);
+    /* background: #000000; */
+    cursor: pointer;
+    min-width: fit-content;
+    margin-right: 10px;
+}
+
+.check_nav>.active {
+    color: #3681fc;
+    background: rgb(248, 250, 254);
+    border-radius: 10px 10px 0 0;
+}
+
+.check_nav>.all::before,
+.check_nav>.gr::before,
+.check_nav>.md::before,
+.check_nav>.jy::before,
+.check_nav>.bj::before,
+.check_nav>.yy::before {
+    content: "";
+    display: block;
+    width: 18px;
+    height: 18px;
+    background-size: 100% 100%;
+    margin-right: 5px;
+}
+
+.check_nav>.all::before {
+
+    background-image: url('../../../../assets/icon/test/all_icon.png');
+}
+
+.check_nav>.active.all::before {
+    background-image: url('../../../../assets/icon/test/all_icon_active.png');
+}
+
+.check_nav>.gr::before {
+    background-image: url('../../../../assets/icon/test/gr_icon.png');
+}
+
+.check_nav>.active.gr::before {
+    background-image: url('../../../../assets/icon/test/gr_icon_active.png');
+}
+
+.check_nav>.md::before {
+    background-image: url('../../../../assets/icon/test/md_icon.png');
+}
+
+.check_nav>.active.md::before {
+    background-image: url('../../../../assets/icon/test/md_icon_active.png');
+}
+
+.check_nav>.jy::before {
+    background-image: url('../../../../assets/icon/test/jy_icon.png');
+}
+
+.check_nav>.active.jy::before {
+    background-image: url('../../../../assets/icon/test/jy_icon_active.png');
+}
+
+.check_nav>.yy::before {
+    background-image: url('../../../../assets/icon/test/yy_icon.png');
+}
+
+.check_nav>.active.yy::before {
+    background-image: url('../../../../assets/icon/test/yy_icon_active.png');
+}
+
+.check_nav>.bj::before {
+    background-image: url('../../../../assets/icon/test/bj_icon.png');
+}
+
+.check_nav>.active.bj::before {
+    background-image: url('../../../../assets/icon/test/bj_icon_active.png');
+}
+
+
+.check_box {
+    height: calc(100% - 50px);
+    overflow: auto;
+    padding: 0 0 20px;
+    box-sizing: border-box;
+    background: rgb(248, 250, 254);
+}
+
+.test_panel {
+    width: calc(100% - 40px);
+    margin: 20px auto 0;
+    background: #fff;
+    border-radius: 10px;
+    /* height: 300px; */
+    overflow: hidden;
+    box-shadow: 0 2px 5px 1px #0001;
+}
+
+.test_panel:hover{
+	box-shadow: 0 0 2px 1px #3681FC;
+}
+
+.test_panel:hover>.test_panel_title>.title{
+	color:#5996FD
+}
+
+.test_panel_title:hover>.editBtn{
+	display: flex;
+}
+.test_panel_title:hover>.editBtn2{
+	display: flex;
+}
+
+
+.test_panel+.test_panel {
+    margin-top: 15px;
+}
+
+.test_panel_title {
+    height: 50px;
+    display: flex;
+    align-items: center;
+    width: 100%;
+    position: relative;
+    /* justify-content: space-between; */
+    /* padding: 0 20px; */
+    box-sizing: border-box;
+    /* border-bottom: 2px solid #f0f0f0; */
+}
+
+.test_panel_title>.title {
+    display: flex;
+    align-items: center;
+    width: 300px;
+    margin-left: 20px;
+    cursor: pointer;
+}
+
+.test_panel_title>.title>.open{
+    width: 20px;
+    height:20px;
+    margin-right: 10px;
+    background-image: url('../../../../assets/icon/test/chevron-right.png');
+    background-size: 100% 100%;
+    cursor:pointer;
+    transition:all .3s;
+    opacity: .5;
+}
+
+.test_panel_title>.title>.open.active{
+    transform: rotate(90deg);
+    opacity: 1;
+}
+
+.test_panel_title>.state{
+    margin-left: auto;
+    min-width: fit-content;
+}
+
+.test_panel_title>.state > span {
+    font-size: 14px;
+    padding: 5px 8px;
+    border-radius: 5px;
+    margin-right: 0;
+}
+
+.test_panel_title>.state>.is:nth-child(1) {
+    color: #17C469;
+    background: #EFFCF5;
+    border: 1px solid #EFFCF5;
+}
+
+.test_panel_title>.state>.no:nth-child(1) {
+    color: #3681FC;
+    background: #E0EAFB;
+    border: 1px solid #E0EAFB;
+}
+
+.test_panel_title>.title>.titleN {
+    font-size: 18px;
+    font-weight: 600;
+    max-width: calc(100% - 20px - 10px);
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.test_panel_title>.time {
+    font-size: 16px;
+    color: #a1a1a1;
+    min-width: 160px;
+    margin: 0 30px;
+}
+
+.test_panel_title>.creator {
+    font-size: 16px;
+    color: #a1a1a1;
+    max-width: 160px;
+    min-width: 160px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.test_panel_title>.editBtn {
+    font-size: 16px;
+    color: #fff;
+    background: #3681fc;
+    height: 100%;
+    display: none;
+    align-items: center;
+    padding: 0 15px;
+    cursor: pointer;
+    position: absolute;
+    right: 0;
+}
+.test_panel_title>.editBtn2 {
+    font-size: 16px;
+    color: #fff;
+    background: #3681fc;
+    height: 100%;
+    display: none;
+    align-items: center;
+    padding: 0 15px;
+    cursor: pointer;
+}
+
+.test_panel_title>.time>span+span {
+    margin-left: 10px;
+}
+
+.test_panel_box {
+    border-top: 2px solid #f0f0f0;
+    width: 100%;
+    display: flex;
+    align-items: center;
+    padding: 5px 20px;
+    box-sizing: border-box;
+}
+
+.test_panel_box>.detail {
+    width: calc(100% - 350px - 20px);
+    margin-right: 20px;
+    color: #a1a1a1;
+    font-size: 14px;
+    line-height: 24px;
+    word-break: break-all;
+    display: -webkit-box;
+    -webkit-line-clamp: 4;
+    -webkit-box-orient: vertical;
+    overflow: hidden;
+}
+
+.test_panel_box>.panel {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    width: 350px;
+    min-width: 350px;
+}
+
+.test_panel_box>.panel>.score {
+    height: 110px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-direction: column;
+    border: 1px solid #dbdbdb;
+    background: rgb(252, 252, 252);
+    width: 120px;
+    border-radius: 5px;
+}
+
+.test_panel_box>.panel>.score:nth-child(1) {
+    display: flex;
+}
+
+.test_panel_box>.panel>.score>div:nth-child(1)>span:nth-child(1) {
+    font-size: 30px;
+    font-weight: 700;
+}
+
+.test_panel_box>.panel>.score>div:nth-child(1)>span:nth-child(2) {
+    margin-left: 5px;
+}
+
+.test_panel_box>.panel>.score>div:nth-child(2) {
+    font-size: 14px;
+    margin-top: 10px;
+    color: #a1a1a1;
+}
+
+.test_panel_box>.panel>.btn {
+    height: 100px;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+}
+
+.test_panel_box>.panel>.btn>div {
+    display: flex;
+    color: rgb(69, 141, 255);
+    align-items: center;
+    cursor: pointer;
+    font-size: 14px;
+}
+
+/* .test_panel_box > .panel >.btn > div + div{
+      margin: 15px 0 0 0;
+    } */
+.test_panel_box>.panel>.btn>div>span:nth-child(1) {
+    display: block;
+    width: 13px;
+    height: 13px;
+    background-size: 100% 100%;
+    margin-right: 7px;
+}
+
+.test_panel_box>.panel>.btn>div:nth-child(1)>span:nth-child(1) {
+    background-image: url('../../../../assets/icon/test/edit_icon.png');
+}
+
+.test_panel_box>.panel>.btn>div:nth-child(2)>span:nth-child(1) {
+    background-image: url('../../../../assets/icon/test/check_icon.png');
+}
+
+.test_panel_box>.panel>.btn>div:nth-child(3)>span:nth-child(1) {
+    background-image: url('../../../../assets/icon/test/paste_icon.png');
+}
+
+.test_add_box {
+    width: 100%;
+    box-sizing: border-box;
+}
+
+
+.test_add_box>.test {
+    width: 100%;
+    height: 40px;
+    border-radius: 5px;
+    display: flex;
+    align-items: center;
+}
+
+
+.test_add_box>.test>img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    border-radius: 5px;
+}
+
+.test_add_box>.test+.test {
+    /* margin-left: 10px; */
+}
+
+.test_add_box>.test>.time {
+    display: flex;
+    /* justify-content: center; */
+    align-items: center;
+    font-size: 14px;
+    width: 300px;
+    padding-left: 30px;
+    box-sizing: border-box;
+}
+
+.test_add_box>.test>.time>span {
+    /* margin-top: 5px; */
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+.test_add_box>.test>.utime {
+    font-size: 14px;
+    width: 160px;
+    min-width: 160px;
+    margin: 0 30px 0 auto;
+}
+.test_add_box>.test>.mask {
+    display: flex;
+    align-items: center;
+    padding-right: 58px;
+    max-width: 160px;
+    min-width: 160px;
+}
+
+.test_add_box>.test>.delete {
+    position: absolute;
+    width: 20px;
+    height: 20px;
+    right: -5px;
+    top: -5px;
+    cursor: pointer;
+    z-index: 2;
+    display: none;
+}
+
+.test_add_box>.test>.mask>div {
+    display: flex;
+    align-items: center;
+    cursor: pointer;
+    font-size: 14px;
+    color: #3681FC;
+}
+
+.test_add_box>.test>.mask>.delete {
+    color: #EE3E3E;
+}
+
+.test_add_box>.test>.mask>div+div {
+    /* margin: 10px 0 0 0; */
+    margin-left: 15px;
+}
+
+/*
+.test_add_box>.test>.mask>div>span:nth-child(1) {
+  display: block;
+  width: 13px;
+  height: 13px;
+  background-size: 100% 100%;
+  margin-right: 7px;
+}
+
+.test_add_box>.test>.mask>div:nth-child(1)>span:nth-child(1) {
+  background-image: url('../../../../assets/icon/test/edit_icon.png');
+}
+
+.test_add_box>.test>.mask>div:nth-child(2)>span:nth-child(1) {
+  background-image: url('../../../../assets/icon/test/check_icon.png');
+}
+
+.test_add_box>.test>.mask>div:nth-child(3)>span:nth-child(1) {
+  background-image: url('../../../../assets/icon/test/paste_icon.png');
+} */
+
+.bgColor {
+    background: #466b99;
+}
+
+/* .courseLength{
+    width: 100%;
+    cursor: pointer;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+}
+.courseLength > span + span{
+    margin-left: 10px;
+} */
+.courseLength > .finishBox {
+    display: flex;
+    color: #a1a1a1;
+    font-size: 14px;
+    margin-left: auto;
+    align-items: center;
+}
+.courseLength > .finishBox > .finish{
+    width: 15px;
+    height: 15px;
+    background-image: url('../../../../assets/icon/test/icon_course.png');
+    background-size: 100% 100%;
+    margin-right: 5px;
+}
+.courseLength > .finishBox.is > .finish{
+    background-image: url('../../../../assets/icon/test/icon_course_check.png');
+}
+.courseLength > .finishBox.is{
+    color: #000
+}
+
+.isDead{
+    color:#EE3E3E;
+}
+</style>

+ 148 - 128
src/components/pages/liyuan/page/userInfoL.vue

@@ -1,153 +1,162 @@
 <template>
   <div
-    class="pb_content"
+    class="pb_contentO"
   >
-  <div class="leftInfo">
-    <div class="leftInfoCon">
-      <div style="position: relative;width: 80px;height: 80px;">
-        <img style="width: 100%;height: 100%;object-fit: cover;border-radius: 50%;" :src="ruleForm.headportrait" alt="">
-        <img style="position: absolute;right: 0;bottom: 0;" src="../../../../assets/liyuan/lpot.svg" alt="">
+  <backPage tit="个人档案"></backPage>
+  <div class="pb_content">
+    <div class="leftInfo">
+      <div class="leftInfoCon">
+        <div style="position: relative;width: 80px;height: 80px;">
+          <img style="width: 100%;height: 100%;object-fit: cover;border-radius: 50%;" :src="ruleForm.headportrait" alt="">
+          <img style="position: absolute;right: 0;bottom: 0;" src="../../../../assets/icon/liyuan/lpot.svg" alt="">
+        </div>
+        <div>{{ruleForm.name}}</div>
+        <div style="display: flex;flex-direction: column;gap: 10px;">
+          <div style="font-family: Inter;
+            font-weight: 600;
+            font-size: 16px;
+            line-height: 100%;
+            text-align: center;
+            color: #969BA3;
+          ">{{ ruleForm.type }}</div>
+          <div style="font-family: Inter;
+            font-weight: 300;
+            font-size: 16px;
+            line-height: 100%;
+            text-align: center;
+            color: #969BA3;
+            display: flex;
+            align-items: center;
+            gap: 6px;
+            "
+          ><img src="../../../../assets/icon/liyuan/tele.svg" alt="">{{ ruleForm.phone ? ruleForm.phone :'暂无' }}
+        </div>
+        </div>
       </div>
-      <div>{{ruleForm.name}}</div>
-      <div style="display: flex;flex-direction: column;gap: 10px;">
-        <div style="font-family: Inter;
+    </div>
+    <div class="rightCon">
+      <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 40px;">
+          <span style="font-family: Inter;
           font-weight: 600;
-          font-size: 16px;
-          line-height: 100%;
-          text-align: center;
-          color: #969BA3;
-        ">{{ ruleForm.type }}</div>
-        <div style="font-family: Inter;
-          font-weight: 300;
-          font-size: 16px;
+          font-size: 20px;
           line-height: 100%;
           text-align: center;
-          color: #969BA3;
-          display: flex;
-          align-items: center;
-          gap: 6px;
-          "
-        ><img src="../../../../assets/liyuan/tele.svg" alt="">{{ ruleForm.phone ? ruleForm.phone :'暂无' }}
-      </div>
+          ">基础信息</span>
+          <img src="../../../../assets/icon/liyuan/edit.svg" @click="editInfo" style="cursor: pointer;" alt="">
       </div>
-    </div>
-  </div>
-  <div class="rightCon">
-    <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 40px;">
-        <span style="font-family: Inter;
-        font-weight: 600;
-        font-size: 20px;
-        line-height: 100%;
-        text-align: center;
-        ">基础信息</span>
-        <img src="../../../../assets/liyuan/edit.svg" @click="editInfo" style="cursor: pointer;" alt="">
-    </div>
 
-    <el-form
-      :model="ruleForm"
-      ref="ruleForm"
-      label-width="100px"
-      label-position="left"
-    >
-      <el-form-item label="姓名" prop="name">
-        <el-input
-          v-model="ruleForm.name"
-          style="width: 300px"
-          :disabled="type"
-          placeholder="请输入姓名"
-        ></el-input>
-        
-      </el-form-item>
+      <el-form
+        :model="ruleForm"
+        ref="ruleForm"
+        label-width="100px"
+        label-position="left"
+      >
+        <el-form-item label="姓名" prop="name">
+          <el-input
+            v-model="ruleForm.name"
+            style="width: 300px"
+            :disabled="type"
+            placeholder="请输入姓名"
+          ></el-input>
+          
+        </el-form-item>
 
-      <el-form-item label="性别" prop="sex">
-        <el-select
-          v-model="ruleForm.sex"
-          clearable
-          :disabled="type"
-        >
-          <el-option label="男" value="男"></el-option>
-          <el-option label="女" value="女"></el-option>
-        </el-select>
-      </el-form-item>
+        <el-form-item label="性别" prop="sex">
+          <el-select
+            v-model="ruleForm.sex"
+            clearable
+            :disabled="type"
+          >
+            <el-option label="男" value="男"></el-option>
+            <el-option label="女" value="女"></el-option>
+          </el-select>
+        </el-form-item>
 
-      <el-form-item label="组织" prop="org">
-        <el-select
-          v-model="ruleForm.org"
-          clearable
-          placeholder="暂无组织"
-          :disabled="type"
-        >
-          <el-option
-            v-for="item in orgJuri"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
+        <el-form-item label="组织" prop="org">
+          <el-select
+            v-model="ruleForm.org"
+            clearable
+            placeholder="暂无组织"
+            :disabled="type"
           >
-          </el-option>
-        </el-select>
-      </el-form-item>
+            <el-option
+              v-for="item in orgJuri"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
 
-      <el-form-item label="教研室" v-if="ruleForm.type == '老师'">
-        <el-select
-          v-model="ccName"
-          clearable
-          placeholder="暂无教研室"
-          :disabled="type"
-        >
-        </el-select>
-      </el-form-item>
-      
-      <el-form-item label="学校" prop="sBySchool">
-        <el-select
-          v-model="ruleForm.sBySchool"
-          clearable
-          placeholder="请选择学校"
-          :disabled="type"
-        >
-      
-          <el-option :value="ruleForm.sBySchool"> </el-option>
-        </el-select>
-      </el-form-item>
+        <el-form-item label="教研室" v-if="ruleForm.type == '老师'">
+          <el-select
+            v-model="ccName"
+            clearable
+            placeholder="暂无教研室"
+            :disabled="type"
+          >
+          </el-select>
+        </el-form-item>
+        
+        <el-form-item label="学校" prop="sBySchool">
+          <el-select
+            v-model="ruleForm.sBySchool"
+            clearable
+            placeholder="请选择学校"
+            :disabled="type"
+          >
+        
+            <el-option :value="ruleForm.sBySchool"> </el-option>
+          </el-select>
+        </el-form-item>
 
-      <el-form-item label="职务" prop="type">
-        <el-select
-          v-model="ruleForm.type"
-          clearable
-          placeholder="请选择身份"
-          :disabled="type"
-        >
-          <el-option :value="ruleForm.type"> </el-option>
-        </el-select>
-      </el-form-item>
+        <el-form-item label="职务" prop="type">
+          <el-select
+            v-model="ruleForm.type"
+            clearable
+            placeholder="请选择身份"
+            :disabled="type"
+          >
+            <el-option :value="ruleForm.type"> </el-option>
+          </el-select>
+        </el-form-item>
 
-      <el-form-item label="司龄" prop="type">
-        <el-select
-          v-model="ruleForm.type"
-          clearable
-          placeholder="请选择身份"
-          :disabled="type"
-        >
-          <el-option :value="ruleForm.type"> </el-option>
-        </el-select>
-      </el-form-item>
+        <el-form-item label="司龄" prop="type">
+          <el-select
+            v-model="ruleForm.type"
+            clearable
+            placeholder="请选择身份"
+            :disabled="type"
+          >
+            <el-option :value="ruleForm.type"> </el-option>
+          </el-select>
+        </el-form-item>
 
-      <el-form-item label="简介" prop="type">
-        <el-input
-          type="textarea"
-          resize="none"
-          rows="6"
-          placeholder="简介"
-          :disabled="type"
-        ></el-input>
-      </el-form-item>
-    </el-form>
+        <el-form-item label="简介" prop="type">
+          <el-input
+            type="textarea"
+            resize="none"
+            rows="6"
+            placeholder="简介"
+            :disabled="type"
+          ></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
   </div>
 
+
   </div>
 </template>
 
 <script>
+import backPage from "../components/backPage.vue";
+
 export default {
+  components:{
+    backPage
+  },
   data() {
     var validatePass = (rule, value, callback) => {
       if (value == "") {
@@ -387,13 +396,24 @@ export default {
 </script>
 
 <style scoped>
+.pb_contentO{
+  display: flex;
+  flex-direction: column;
+  display: flex;
+  gap: 20px;
+  height: 100%;
+  width: 100%;
+  background: #fff;
+  /* padding: 20px;
+  box-sizing: border-box; */
+}
 .pb_content{
   display: flex;
   gap: 20px;
   height: 100%;
   width: 100%;
   background: #fff;
-  padding: 20px;
+  /* padding: 20px; */
   box-sizing: border-box;
 }
 .leftInfo{

+ 33 - 6
src/components/pages/liyuan/schoolSafe.vue

@@ -1,17 +1,44 @@
 <template>
-  <div>
-    <div>平安校园</div>
-    <div>Intelligent Office</div>
-
+  <div class="teacherDevelop">
+    <topBar title="平安校园" detail="科学的目标体系 · 多维度评价分析 · 全面的成长报告"></topBar>
+    <div class="cardBox">
+      <card v-for="item in cardArray" :key="item.title" :title="item.title" :icon="item.icon" :to="item.to" :type="item.type"></card>
+    </div>
   </div>
 </template>
 
 <script>
+import topBar from './components/topBar'
+import card from './components/card.vue';
 export default {
-
+  components: {
+    topBar,
+    card
+  },
+  data() {
+    return {
+      cardArray: [
+        { title: '安全巡查', icon: require('../../../assets/icon/liyuan/mbll.svg'), type: 1, to: "/examineL" },
+        { title: '安全表单', icon: require('../../../assets/icon/liyuan/workTest.svg'), type: 1, to: "/safeTest" }
+      ]
+    }
+  },
 }
 </script>
 
-<style>
+<style scoped>
+.teacherDevelop{
+  width: 100%;
+  height: 100%;
+  padding: 40px;
+  box-sizing: border-box;
+}
 
+.cardBox{
+  display: grid;
+  grid-template-columns: repeat(5, 1fr);
+  gap: 20px;
+  width: 100%;
+  margin-top: 20px;
+}
 </style>

+ 34 - 6
src/components/pages/liyuan/studentEva.vue

@@ -1,17 +1,45 @@
 <template>
-  <div>
-    <div>学生评价</div>
-    <div>su</div>
-
+  <div class="teacherDevelop">
+    <topBar title="学生评价" detail="科学的目标体系 · 多维度评价分析 · 全面的成长报告"></topBar>
+    <div class="cardBox">
+      <card v-for="item in cardArray" :key="item.title" :title="item.title" :icon="item.icon" :to="item.to" :type="item.type"></card>
+    </div>
   </div>
 </template>
 
 <script>
+import topBar from './components/topBar'
+import card from './components/card.vue';
 export default {
-
+  components: {
+    topBar,
+    card
+  },
+  data() {
+    return {
+      cardArray: [
+        { title: '目标管理', icon: require('../../../assets/icon/liyuan/mbll.svg'), type: 1, to: "/evaluation" },
+        { title: '学生评价', icon: require('../../../assets/icon/liyuan/seva.svg'), type: 1, to: "/works" },
+        // { title: '成绩录入', icon: require('../../../assets/icon/liyuan/scolr.svg'), type: 1, to: "/portraitL" }
+      ]
+    }
+  },
 }
 </script>
 
-<style>
+<style scoped>
+.teacherDevelop{
+  width: 100%;
+  height: 100%;
+  padding: 40px;
+  box-sizing: border-box;
+}
 
+.cardBox{
+  display: grid;
+  grid-template-columns: repeat(5, 1fr);
+  gap: 20px;
+  width: 100%;
+  margin-top: 20px;
+}
 </style>

+ 5 - 5
src/components/pages/liyuan/teacherDevelop.vue

@@ -18,11 +18,11 @@ export default {
   data() {
     return {
       cardArray: [
-        { title: '年度考核', icon: require('../../../assets/icon/liyuan/niandukaohe.svg'), type: 1, to: "/course" },
-        { title: '个人档案', icon: require('../../../assets/icon/liyuan/gerendangan.svg'), type: 1, to: "/course" },
-        { title: '教师画像', icon: require('../../../assets/icon/liyuan/jiaoshihuaxiang.svg'), type: 1, to: "/course" },
-        { title: '课堂观察', icon: require('../../../assets/icon/liyuan/ketangguancha.svg'), type: 1, to: "/course" },
-        { title: '智能表单', icon: require('../../../assets/icon/liyuan/zhinengbiaodan.svg'), type: 1, to: "/course" },
+        { title: '年度考核', icon: require('../../../assets/icon/liyuan/niandukaohe.svg'), type: 1, to: "/examineL" },
+        { title: '个人档案', icon: require('../../../assets/icon/liyuan/gerendangan.svg'), type: 1, to: "/userInfoL" },
+        { title: '教师画像', icon: require('../../../assets/icon/liyuan/jiaoshihuaxiang.svg'), type: 1, to: "/portraitL" },
+        { title: '课堂观察', icon: require('../../../assets/icon/liyuan/ketangguancha.svg'), type: 1, to: "/classroomObservation" },
+        { title: '智能表单', icon: require('../../../assets/icon/liyuan/zhinengbiaodan.svg'), type: 1, to: "/test" },
       ]
     }
   },

+ 4 - 1
src/components/pages/synergyCourse/course.vue

@@ -1,5 +1,7 @@
 <template>
   <div class="pb_content" style="height: auto; width: 94%; margin: 10px auto;background: unset;">
+    <backPage v-if="$route.query.gotype == 1" tit="协同建构"></backPage>
+
     <div style="width:100%;padding:0 21px;background:#fff;border-radius: 5px;box-sizing: border-box;">
       <div class="pb_head top">
         <div style="
@@ -299,11 +301,12 @@ import "../../../common/aws-sdk-2.235.1.min";
 import EditorBar from "../../../components/tools/wangEnduit";
 // import CourseProblem from "./components/courseProblem";
 import { myMixin } from "@/mixins/mixin.js"
+import backPage from "../liyuan/components/backPage.vue";
 
 export default {
   mixins: [ myMixin ],
 
-  components: { EditorBar },
+  components: { EditorBar,backPage },
   data() {
     return {
       itemCount: 1,

+ 2 - 1
src/components/pages/sz/teacher.vue

@@ -13,8 +13,9 @@
         /* border-radius: 5px; */
       "
     >
-      <div class="pb_head">
+      <div class="pb_head" style="display:flex;justify-content: space-between;align-items: center;">
         <span>教师管理</span>
+        <div style="font-size: 16px;font-weight: normal;cursor: pointer;" @click.stop="$router.go(-1)">返回</div>
       </div>
       <div class="student_head">
         <div class="head_left">

+ 3 - 0
src/components/pages/test/index.vue

@@ -44,6 +44,9 @@
                         )
                         ">智能助手</span>
                 </div>
+                <div style="font-size: 16px;display: flex;align-items: center;cursor: pointer;" v-if="$route.query.gotype == 1" @click.stop="$router.go(-1)">
+                    返回
+                </div>
             </div>
         </div>
         <div class="bbox_nav">

+ 35 - 27
src/components/pages/works.vue

@@ -29,34 +29,42 @@
           border-radius: 5px;
         "
       >
-        <div class="pb_head">
+        <div class="pb_head" style="display: flex;justify-content: space-between;align-items: center;">
           <!-- <span>备注:教师可以根据课程、班级条件筛选学生并查看该学生信息</span> -->
-          <span
-            v-if="type == '2'"
-            @click="
-              goTo(
-                '/tcStudent?userid=' + userid + '&oid=' + oid + '&org=' + org
-              )
-            "
-            >学生管理</span
-          >
-          <span
-            v-else
-            @click="
-              goTo(
-                '/course?userid=' +
-                  userid +
-                  '&oid=' +
-                  oid +
-                  '&org=' +
-                  org +
-                  '&role=' +
-                  role
-              )
-            "
-            >课程管理</span
-          >
-          <span class="sub_head">评价管理</span>
+          <div v-if="!$route.query.gotype" style="display: flex;align-items: center;">
+
+            <span
+              v-if="type == '2'"
+              @click="
+                goTo(
+                  '/tcStudent?userid=' + userid + '&oid=' + oid + '&org=' + org
+                )
+              "
+              >学生管理</span
+            >
+            <span
+              v-else
+              @click="
+                goTo(
+                  '/course?userid=' +
+                    userid +
+                    '&oid=' +
+                    oid +
+                    '&org=' +
+                    org +
+                    '&role=' +
+                    role
+                )
+              "
+              >课程管理</span
+            >
+            <span class="sub_head">评价管理</span>
+          </div>
+          <div v-if="$route.query.gotype == 1"></div>
+          <div style="font-size: 16px;cursor: pointer;" v-if="$route.query.gotype == 1" @click.stop="$router.go(-1)">
+              <!-- <span class="co-h2-r-b-icon3"></span> -->
+              返回
+            </div>
           <!-- <span
             @click="
               goTo(

+ 58 - 7
src/router/index.js

@@ -151,6 +151,12 @@ import aiOffice from '@/components/pages/liyuan/aiOffice'
 import schoolSafe from '@/components/pages/liyuan/schoolSafe'
 import lyStudentEva from '@/components/pages/liyuan/studentEva'
 import teacherDevelop from '@/components/pages/liyuan/teacherDevelop'
+import userInfoL from '@/components/pages/liyuan/page/userInfoL'
+import examineL from '@/components/pages/liyuan/page/examine'
+import portraitL from '@/components/pages/liyuan/page/portrait'
+import teadTest from '@/components/pages/liyuan/page/teadTest'
+import Listudent from '@/components/pages/liyuan/page/student'
+import safeTest from '@/components/pages/liyuan/page/safeTest'
 
 // 全局修改默认配置,点击空白处不能关闭弹窗
 ElementUI.Dialog.props.closeOnClickModal.default = false
@@ -1306,12 +1312,57 @@ export default new Router({
       keepAlive: true,
       requireAuth: ""//不需要鉴权
     }
-  }
-
-
-
-
-
-
+  },
+  {
+    path: '/userInfoL',
+    name: 'userInfoL',
+    component: userInfoL,
+    meta: {
+        keepAlive: true,
+        requireAuth: '' // 是否需要判断是否登录,这里是需要判断
+    }
+  },
+  {
+      path: '/examineL',
+      name: 'examineL',
+      component: examineL,
+      meta: {
+          keepAlive: true,
+          requireAuth: '' // 是否需要判断是否登录,这里是需要判断
+      }
+  },
+  {
+      path: '/portraitL',
+      name: 'portraitL',
+      component: portraitL,
+      meta: {
+          keepAlive: true,
+          requireAuth: '' // 是否需要判断是否登录,这里是需要判断
+      }
+  },
+  {
+      path: '/teadTest',
+      name: 'teadTest',
+      component: teadTest,
+      meta: {
+      requireAuth: '' // 是否需要判断是否登录,这里是需要判断
+      }
+  },
+  {
+      path: '/Listudent',
+      name: 'Listudent',
+      component: Listudent,
+      meta: {
+      requireAuth: '' // 是否需要判断是否登录,这里是需要判断
+      }
+  },
+  {
+      path: '/safeTest',
+      name: 'safeTest',
+      component: safeTest,
+      meta: {
+          requireAuth: '' // 不需要鉴权
+      }
+  },
   ]
 })

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels