Explorar el Código

Merge branch 'develop5.0-tmd' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

chenmy hace 3 años
padre
commit
c35ccd96b2
Se han modificado 32 ficheros con 363 adiciones y 830 borrados
  1. 25 10
      TEAMModelOS.SDK/Models/Cosmos/Teacher/Share.cs
  2. BIN
      TEAMModelOS/ClientApp/src/assets/mark/0.png
  3. 0 54
      TEAMModelOS/ClientApp/src/assets/mark/0.svg
  4. BIN
      TEAMModelOS/ClientApp/src/assets/mark/1.png
  5. 0 47
      TEAMModelOS/ClientApp/src/assets/mark/1.svg
  6. BIN
      TEAMModelOS/ClientApp/src/assets/mark/2.png
  7. 0 57
      TEAMModelOS/ClientApp/src/assets/mark/2.svg
  8. BIN
      TEAMModelOS/ClientApp/src/assets/mark/3.png
  9. 0 51
      TEAMModelOS/ClientApp/src/assets/mark/3.svg
  10. BIN
      TEAMModelOS/ClientApp/src/assets/mark/4.png
  11. 0 63
      TEAMModelOS/ClientApp/src/assets/mark/4.svg
  12. BIN
      TEAMModelOS/ClientApp/src/assets/mark/5.png
  13. 0 94
      TEAMModelOS/ClientApp/src/assets/mark/5.svg
  14. BIN
      TEAMModelOS/ClientApp/src/assets/mark/6.png
  15. 0 77
      TEAMModelOS/ClientApp/src/assets/mark/6.svg
  16. BIN
      TEAMModelOS/ClientApp/src/assets/mark/7.png
  17. 0 62
      TEAMModelOS/ClientApp/src/assets/mark/7.svg
  18. BIN
      TEAMModelOS/ClientApp/src/assets/mark/8.png
  19. 0 54
      TEAMModelOS/ClientApp/src/assets/mark/8.svg
  20. 3 2
      TEAMModelOS/ClientApp/src/components/mark/MarkTools.vue
  21. 6 3
      TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.vue
  22. 10 3
      TEAMModelOS/ClientApp/src/store/module/answerSheet.js
  23. 6 11
      TEAMModelOS/ClientApp/src/utils/public.js
  24. 22 23
      TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.less
  25. 16 37
      TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.vue
  26. 1 1
      TEAMModelOS/ClientApp/src/view/jyzx/classMemoir.vue
  27. 9 0
      TEAMModelOS/ClientApp/src/view/login/jinniu/Index.vue
  28. 48 4
      TEAMModelOS/ClientApp/src/view/login/jinniu/Teacher.vue
  29. 4 4
      TEAMModelOS/ClientApp/src/view/newsheet/BaseEditor.vue
  30. 1 1
      TEAMModelOS/ClientApp/src/view/newsheet/SheetSubjective.vue
  31. 6 5
      TEAMModelOS/ClientApp/src/view/sso/Index.vue
  32. 206 167
      TEAMModelOS/Controllers/Syllabus/ShareController.cs

+ 25 - 10
TEAMModelOS.SDK/Models/Cosmos/Teacher/Share.cs

@@ -58,7 +58,7 @@ namespace TEAMModelOS.SDK.Models
         /// 册别名称
         /// </summary>
         public string volumeName { get; set; }
-       
+
         /// <summary>
         /// 分享  type=coedit共编,share分享
         /// </summary>
@@ -67,6 +67,10 @@ namespace TEAMModelOS.SDK.Models
         /// 是否同意
         /// </summary>
         public int agree { get; set; } = 0;
+        /// <summary>
+        /// 是否标记整册分享
+        /// </summary>
+        public int volumeAll { get; set; } = 0;
     }
     /// <summary>
     /// 主动分享给谁,当接收者接收并完成相关资源复制后则删除本条数据。
@@ -91,17 +95,11 @@ namespace TEAMModelOS.SDK.Models
 
         [Required(ErrorMessage = "tmdid 必须设置")]
         public List<ShareTmd> tmdInfo { get; set; } = new List<ShareTmd>();
-      
-        /// <summary>
-        /// 课纲章节的id
-        /// </summary>
-        [Required(ErrorMessage = "syllabusId 必须设置")]
-        public string syllabusId { get; set; }
+
         /// <summary>
-        /// 课纲章节的name
+        /// 是否标记整册分享
         /// </summary>
-        [Required(ErrorMessage = "syllabusName 必须设置")]
-        public string syllabusName { get; set; }
+        public int volumeAll { get; set; } = 0;
         /// <summary>
         /// 册别名称
         /// </summary>
@@ -110,6 +108,8 @@ namespace TEAMModelOS.SDK.Models
         /// 册别id
         /// </summary>
         public string volumeId { get; set; }
+
+        public List<ShareSyllabus> syllabus { get; set; } = new List<ShareSyllabus>();
         /// <summary>
         /// 共编 分享权限颁发者
         /// </summary>
@@ -129,6 +129,7 @@ namespace TEAMModelOS.SDK.Models
         /// 是否同意
         /// </summary>
         public int agree { get; set; } = 0;
+
     }
     public class ShareTmd
     {
@@ -136,4 +137,18 @@ namespace TEAMModelOS.SDK.Models
         public string tmdname { get; set; }
         public string picture { get; set; }
     }
+    public class ShareSyllabus
+    {
+
+        /// <summary>
+        /// 课纲章节的id
+        /// </summary>
+        [Required(ErrorMessage = "syllabusId 必须设置")]
+        public string syllabusId { get; set; }
+        /// <summary>
+        /// 课纲章节的name
+        /// </summary>
+        [Required(ErrorMessage = "syllabusName 必须设置")]
+        public string syllabusName { get; set; }
+    }
 }

BIN
TEAMModelOS/ClientApp/src/assets/mark/0.png


+ 0 - 54
TEAMModelOS/ClientApp/src/assets/mark/0.svg

@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<polygon class="st0" points="833.28,590.14 635.35,787.28 620.58,801.99 501.47,683.35 714.17,471.5 		"/>
-		<path class="st3" d="M370.34,693.63L88.72,413.14L412.74,90.42l342.03,340.66L491.16,693.63
-			C457.79,726.85,403.7,726.85,370.34,693.63z"/>
-		<path class="st0" d="M921.61,243.59c0,13.16-5.04,26.32-15.12,36.35L695.46,490.15l-60.11-59.87l-65.82-65.55l65.82-65.55
-			l92.32-91.94c49.39-49.19,129.45-49.19,178.83,0C916.57,217.27,921.61,230.44,921.61,243.59z"/>
-		<path class="st3" d="M921.61,243.59c0,13.16-5.04,26.32-15.12,36.35L695.46,490.15l-60.11-59.87v-131.1l92.32-91.94
-			c49.39-49.19,129.45-49.19,178.83,0C916.57,217.27,921.61,230.44,921.61,243.59z"/>
-		<path class="st2" d="M728.53,457.2L491.15,693.63c-33.36,33.23-87.45,33.23-120.81,0c-82.23-81.9-82.23-214.69,0-296.59
-			c41.12-40.96,95-61.43,148.9-61.43c40.5,0,81.03,11.57,116.11,34.72c11.59,7.64,22.58,16.54,32.78,26.71L728.53,457.2z"/>
-		<path class="st5" d="M385.03,275.88l-76.82-76.51c-29.53-29.42-29.53-77.11,0-106.53l0,0c29.53-29.42,77.42-29.42,106.95,0
-			l76.82,76.51c29.53,29.42,29.53,77.11,0,106.53l0,0C462.45,305.29,414.57,305.29,385.03,275.88z"/>
-		<path class="st5" d="M276.5,383.97l-76.82-76.51c-29.53-29.42-29.53-77.11,0-106.53l0,0c29.53-29.42,77.42-29.42,106.95,0
-			l76.82,76.51c29.53,29.42,29.53,77.11,0,106.53l0,0C353.92,413.39,306.04,413.39,276.5,383.97z"/>
-		<path class="st5" d="M167.97,492.07l-76.82-76.51c-29.53-29.42-29.53-77.11,0-106.53l0,0c29.53-29.42,77.42-29.42,106.95,0
-			l76.82,76.51c29.53,29.42,29.53,77.11,0,106.53l0,0C245.39,521.48,197.51,521.48,167.97,492.07z"/>
-		<polygon class="st3" points="833.28,590.14 635.35,787.28 635.35,550.01 714.17,471.5 		"/>
-		<polygon class="st1" points="955,630.5 635.35,948.87 630.98,953.23 482.44,805.27 635.35,652.98 806.45,482.56 		"/>
-		<polygon class="st4" points="955,630.5 635.35,948.87 635.35,652.98 806.45,482.56 		"/>
-		<path class="st5" d="M728.53,457.2l-93.19,92.81V370.33c11.59,7.64,22.58,16.54,32.78,26.71L728.53,457.2z"/>
-		<ellipse class="st3" cx="834.99" cy="617.4" rx="49.43" ry="49.23"/>
-		<ellipse class="st3" cx="741.47" cy="710.54" rx="49.43" ry="49.23"/>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/1.png


+ 0 - 47
TEAMModelOS/ClientApp/src/assets/mark/1.svg

@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<path class="st0" d="M850.73,854.26V955H173.27V854.26c0-65.03,53.02-117.72,118.41-117.72h440.63
-			C797.71,736.54,850.73,789.24,850.73,854.26z"/>
-		<rect x="389.74" y="363.91" class="st1" width="244.52" height="372.63"/>
-		<path class="st6" d="M389.74,628.94h-0.28c-51.87,0-93.93-42.05-93.93-93.93v-77.17c0-51.87,42.05-93.93,93.93-93.93h0.28V628.94z
-			"/>
-		<path class="st7" d="M634.54,628.94h-0.27V363.91h0.27c51.87,0,93.93,42.05,93.93,93.93v77.17
-			C728.46,586.89,686.41,628.94,634.54,628.94z"/>
-		<ellipse class="st0" cx="512" cy="199.6" rx="131.36" ry="130.6"/>
-		<polygon class="st1" points="566.14,777.34 566.14,914.2 459.25,914.2 459.25,860.04 429.8,860.04 429.8,823.44 476.91,777.34 		
-			"/>
-		<path class="st3" d="M850.73,854.26V955H512V736.54h220.32C797.71,736.54,850.73,789.24,850.73,854.26z"/>
-		<rect x="512" y="777.34" class="st4" width="54.14" height="136.86"/>
-		<rect x="512" y="363.91" class="st4" width="122.26" height="372.63"/>
-		<path class="st3" d="M643.36,199.6c0,72.13-58.81,130.6-131.36,130.6V69C584.55,69,643.36,127.47,643.36,199.6z"/>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/2.png


+ 0 - 57
TEAMModelOS/ClientApp/src/assets/mark/2.svg

@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<polygon class="st0" points="578.56,845.59 445.44,845.59 474.93,574.8 549.07,574.8 		"/>
-		<polygon class="st3" points="578.56,845.59 510.59,845.59 510.59,574.8 549.07,574.8 		"/>
-		<path class="st3" d="M318.64,482.85h-86.28c-73.58,0-133.45-59.56-133.45-132.77c0-54.14,44.27-98.18,98.68-98.18h121.05
-			c22.05,0,39.92,17.78,39.92,39.72v151.52C358.55,465.07,340.68,482.85,318.64,482.85z M197.58,331.33
-			c-10.39,0-18.84,8.41-18.84,18.74c0,29.41,24.05,53.34,53.61,53.34h46.36v-72.08H197.58z"/>
-		<path class="st3" d="M665.45,443.13V291.62c0-21.94,17.87-39.72,39.92-39.72h121.05c54.41,0,98.68,44.04,98.68,98.18
-			c0,73.21-59.86,132.77-133.45,132.77h-86.28C683.32,482.85,665.45,465.07,665.45,443.13z M745.28,331.33v72.08h46.36
-			c29.56,0,53.61-23.93,53.61-53.34c0-10.33-8.45-18.74-18.84-18.74H745.28z"/>
-		<path class="st2" d="M749.8,224.68v161c0,130.67-106.47,236.6-237.8,236.6h-1.41c-130.68-0.77-236.39-106.4-236.39-236.6v-161
-			H749.8z"/>
-		<path class="st0" d="M827.13,146.85c0,21.49-8.76,40.95-22.91,55.03c-14.16,14.08-33.71,22.8-55.31,22.8H275.1
-			c-43.21,0-78.23-34.84-78.23-77.83c0-21.49,8.76-40.95,22.91-55.05C233.94,77.71,253.5,69,275.1,69h473.8
-			C792.11,69,827.13,103.86,827.13,146.85z"/>
-		<polygon class="st1" points="561.86,393.46 573.64,461.74 512,429.51 510.59,430.24 450.36,461.74 462.14,393.46 412.27,345.1 
-			481.18,335.14 510.59,275.86 512,273.01 542.82,335.14 611.73,345.1 		"/>
-		<polygon class="st4" points="561.86,393.46 573.64,461.74 512,429.51 512,273.01 542.82,335.14 611.73,345.1 		"/>
-		<path class="st3" d="M827.13,146.85c0,21.49-8.76,40.95-22.91,55.03c-14.16,14.08-33.71,22.8-55.31,22.8H510.59V69H748.9
-			C792.11,69,827.13,103.86,827.13,146.85z"/>
-		<path class="st5" d="M749.8,224.68v161c0,130.67-106.47,236.6-237.8,236.6h-1.41v-397.6H749.8z"/>
-		<path class="st2" d="M694.81,955H329.19c0-30.21,12.3-57.57,32.2-77.36c19.91-19.81,47.39-32.05,77.76-32.05h145.71
-			C645.58,845.59,694.81,894.57,694.81,955z"/>
-		<path class="st5" d="M694.81,955H510.59V845.59h74.27C645.58,845.59,694.81,894.57,694.81,955z"/>
-		<polygon class="st4" points="561.86,393.46 573.64,461.74 512,429.51 510.59,430.24 510.59,275.86 512,273.01 542.82,335.14 
-			611.73,345.1 		"/>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/3.png


+ 0 - 51
TEAMModelOS/ClientApp/src/assets/mark/3.svg

@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<path class="st0" d="M863.84,430.19v490.27c0,19.08-15.5,34.54-34.62,34.54H194.79c-19.12,0-34.62-15.46-34.62-34.54V430.19
-			H863.84z"/>
-		<path class="st1" d="M357.23,69c-56.53,0-102.34,45.71-102.34,102.1c0,28.2,11.45,53.71,29.97,72.19s44.11,29.91,72.37,29.91
-			h102.34V171.1C459.57,114.71,413.75,69,357.23,69z M388.52,202.32h-31.3c-17.26,0-31.29-14.01-31.29-31.22
-			c0-17.21,14.03-31.22,31.29-31.22c17.25,0,31.3,14.01,31.3,31.22V202.32z"/>
-		<path class="st4" d="M564.43,171.1v102.1h102.34c28.26,0,53.85-11.43,72.37-29.91s29.97-43.99,29.97-72.19
-			c0-56.38-45.81-102.1-102.34-102.1C610.26,69,564.43,114.71,564.43,171.1z M635.48,171.1c0-17.21,14.04-31.22,31.3-31.22
-			c17.26,0,31.29,14.01,31.29,31.22c0,17.21-14.03,31.22-31.29,31.22h-31.3V171.1z"/>
-		<path class="st3" d="M863.84,430.19v490.27c0,19.08-15.5,34.54-34.62,34.54H512V430.19H863.84z"/>
-		<path class="st2" d="M892.6,309.09v121.1H131.4v-121.1c0-19.82,16.12-35.9,35.98-35.9h689.23
-			C876.48,273.19,892.6,289.27,892.6,309.09z"/>
-		<path class="st5" d="M892.6,309.09v121.1H512v-157h344.61C876.48,273.19,892.6,289.27,892.6,309.09z"/>
-		<rect x="459.57" y="273.19" class="st6" width="104.86" height="157"/>
-		<rect x="459.57" y="430.19" class="st1" width="104.86" height="524.81"/>
-		<rect x="160.16" y="581.23" class="st6" width="703.67" height="104.61"/>
-		<rect x="512" y="430.19" class="st4" width="52.43" height="524.81"/>
-		<rect x="512" y="273.19" class="st7" width="52.43" height="157"/>
-		<rect x="512" y="581.23" class="st7" width="351.84" height="104.61"/>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/4.png


+ 0 - 63
TEAMModelOS/ClientApp/src/assets/mark/4.svg

@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<polygon class="st0" points="559.21,330.91 955,723.6 732.07,944.65 336.28,551.95 		"/>
-		<polygon class="st3" points="492.81,396.75 888.59,789.45 798.47,878.8 402.69,486.11 		"/>
-		<polygon class="st6" points="464.22,330.84 69,722.97 292.25,944.33 687.47,552.2 		"/>
-		<polygon class="st7" points="530.72,396.78 135.5,788.91 225.75,878.39 620.97,486.26 		"/>
-		<g>
-			<g>
-				<path class="st2" d="M515.71,419.53c0,0,7.63,154.93-37.63,199.8s-118.63,44.87-163.89,0s-45.26-117.62,0-162.49
-					S515.71,419.53,515.71,419.53z"/>
-				<path class="st5" d="M515.71,419.53c0,0,156.26-7.56,201.52,37.31s45.26,117.62,0,162.49s-118.63,44.87-163.89,0
-					S515.71,419.53,515.71,419.53z"/>
-				<path class="st5" d="M515.71,419.53c0,0-7.63-154.93,37.63-199.8s118.63-44.87,163.89,0s45.26,117.62,0,162.49
-					S515.71,419.53,515.71,419.53z"/>
-				<path class="st2" d="M515.71,419.53c0,0-156.26,7.56-201.52-37.31s-45.26-117.62,0-162.49s118.63-44.87,163.89,0
-					S515.71,419.53,515.71,419.53z"/>
-			</g>
-			<path class="st0" d="M515.71,419.53c0,0-126.54,138.33-203.59,138.33s-139.52-61.93-139.52-138.33S235.06,281.2,312.12,281.2
-				S515.71,419.53,515.71,419.53z"/>
-			<path class="st0" d="M655.22,621.39c0,76.4-62.45,138.33-139.51,138.33h-0.5c-76.85-0.27-139.02-62.11-139.02-138.33
-				c0-73.73,129.97-193.18,139.02-201.4c0.33-0.31,0.5-0.46,0.5-0.46S655.22,544.99,655.22,621.39z"/>
-			<path class="st3" d="M515.71,419.53c0,0,126.54-138.33,203.59-138.33s139.52,61.93,139.52,138.33S796.36,557.86,719.3,557.86
-				S515.71,419.53,515.71,419.53z"/>
-			<path class="st0" d="M655.22,217.69c0,76.4-139.51,201.84-139.51,201.84s-0.17-0.15-0.5-0.46
-				c-9.05-8.22-139.02-127.65-139.02-201.38c0-76.24,62.18-138.06,139.02-138.33h0.5C592.77,79.35,655.22,141.27,655.22,217.69z"/>
-			<path class="st3" d="M655.22,621.39c0,76.4-62.45,138.33-139.51,138.33h-0.5V419.99c0.33-0.31,0.5-0.46,0.5-0.46
-				S655.22,544.99,655.22,621.39z"/>
-			<path class="st3" d="M655.22,217.69c0,76.4-139.51,201.84-139.51,201.84s-0.17-0.15-0.5-0.46V79.35h0.5
-				C592.77,79.35,655.22,141.27,655.22,217.69z"/>
-			<ellipse class="st5" cx="515.22" cy="419.07" rx="107.05" ry="106.13"/>
-			<ellipse class="st1" cx="515.22" cy="419.07" rx="58.15" ry="57.65"/>
-		</g>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/5.png


+ 0 - 94
TEAMModelOS/ClientApp/src/assets/mark/5.svg

@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<g>
-			<path class="st1" d="M644.91,389.7c-4.15,4.02-6.04,9.83-5.04,15.52l22.44,127.87c2.51,14.27-12.48,25.17-25.25,18.38
-				L522.6,490.57c-2.54-1.35-5.34-2.03-8.14-2.03c-2.79,0-5.6,0.67-8.15,2.03l-114.47,60.89c-12.77,6.8-27.75-4.11-25.25-18.38
-				l22.44-127.87c1-5.69-0.88-11.5-5.03-15.52l-93.19-90.23c-10.4-10.07-4.67-27.71,9.64-29.74L428.8,251.6
-				c5.71-0.8,10.65-4.4,13.18-9.59l56.87-116.66c3.18-6.51,9.39-9.76,15.61-9.76c6.22,0,12.42,3.26,15.6,9.76l56.87,116.66
-				c2.53,5.19,7.47,8.78,13.18,9.59l128.33,18.13c14.32,2.02,20.04,19.67,9.64,29.74L644.91,389.7z"/>
-			<polygon class="st6" points="603.62,382.43 625.06,507.71 514.46,449.39 512.86,448.56 400.66,507.71 422.1,382.43 
-				331.33,293.68 456.76,275.4 512.86,161.41 514.46,164.65 568.96,275.4 694.39,293.68 			"/>
-			<path class="st4" d="M644.91,389.7c-4.15,4.02-6.04,9.83-5.04,15.52l22.44,127.87c2.51,14.27-12.48,25.17-25.25,18.38
-				L522.6,490.57c-2.54-1.35-5.34-2.03-8.14-2.03V115.58c6.22,0,12.42,3.26,15.6,9.76l56.87,116.66c2.53,5.19,7.47,8.78,13.18,9.59
-				l128.33,18.13c14.32,2.02,20.04,19.67,9.64,29.74L644.91,389.7z"/>
-			<polygon class="st7" points="603.62,382.43 625.06,507.71 514.46,449.39 514.46,164.65 568.96,275.4 694.39,293.68 			"/>
-			<polygon class="st0" points="546.12,355.64 553.84,399.62 514.46,378.68 475.08,399.62 482.8,355.64 450.74,324.59 
-				494.89,318.36 514.46,278.22 534.02,318.36 578.17,324.59 			"/>
-			<polygon class="st3" points="546.12,355.64 553.84,399.62 514.46,378.68 514.46,278.22 534.02,318.36 578.17,324.59 			"/>
-		</g>
-		<g>
-			<path class="st8" d="M512,774.68c-188.27,0-340.9-152.88-340.9-341.48c0-89.41,34.31-170.8,90.45-231.67"/>
-			<path class="st0" d="M256.31,383.43c-20.56,18.43-47.99,24.29-72.91,18.1c-3.41-25.48,5.43-52.16,26-70.6
-				c20.57-18.44,48.01-24.3,72.92-18.09C285.72,338.34,276.87,365,256.31,383.43z"/>
-			<path class="st0" d="M157.51,323.47c14.55,23.49,15.55,51.56,5.13,75.07c-25.64-1.06-50.33-14.42-64.89-37.91
-				c-14.56-23.49-15.55-51.58-5.12-75.07C118.29,286.63,142.96,299.98,157.51,323.47z"/>
-			<path class="st0" d="M252.87,482.35c-15.39,22.94-40.53,35.39-66.21,35.54c-9.58-23.85-7.57-51.89,7.83-74.84
-				c15.4-22.95,40.55-35.4,66.22-35.53C270.27,431.39,268.26,459.41,252.87,482.35z"/>
-			<path class="st0" d="M142.36,448.62c19.88,19.17,27.76,46.13,23.44,71.49c-25.11,5.3-52.33-1.55-72.22-20.72
-				c-19.89-19.18-27.76-46.15-23.43-71.49C95.28,422.61,122.48,429.46,142.36,448.62z"/>
-			<path class="st0" d="M288.47,569.42c-6.59,26.84-25.93,47.18-50,56.16c-17.17-19.11-24.9-46.13-18.31-72.98
-				c6.59-26.85,25.95-47.2,50.01-56.15C287.34,515.57,295.06,542.57,288.47,569.42z"/>
-			<path class="st0" d="M173.12,575.76c25.25,11.16,41.88,33.77,46.53,59.07c-21.77,13.62-49.67,16.55-74.93,5.39
-				c-25.26-11.17-41.9-33.79-46.52-59.08C119.98,567.53,147.88,564.6,173.12,575.76z"/>
-			<path class="st0" d="M360.2,642.76c1.49,27.6-11.1,52.7-31.52,68.3c-21.98-13.27-37.22-36.87-38.71-64.49
-				c-1.49-27.61,11.11-52.72,31.53-68.3C343.48,591.57,358.71,615.16,360.2,642.76z"/>
-			<path class="st0" d="M251.69,682.45c27.4,3.32,49.88,20.1,61.67,42.95c-16.87,19.38-42.72,30.31-70.12,26.99
-				c-27.41-3.32-49.91-20.12-61.67-42.96C198.46,690.06,224.29,679.13,251.69,682.45z"/>
-			<path class="st0" d="M256.11,271.1c-14.36,23.6-38.93,37.16-64.57,38.44c-10.62-23.4-9.86-51.5,4.51-75.11
-				c14.37-23.61,38.95-37.17,64.58-38.44C271.24,219.42,270.47,247.5,256.11,271.1z"/>
-			<path class="st8" d="M512,774.68c188.27,0,340.9-152.88,340.9-341.48c0-89.41-34.31-170.8-90.45-231.67"/>
-			<path class="st3" d="M767.69,383.43c20.56,18.43,47.99,24.29,72.91,18.1c3.41-25.48-5.43-52.16-26-70.6
-				c-20.57-18.44-48.01-24.3-72.92-18.09C738.28,338.34,747.13,365,767.69,383.43z"/>
-			<path class="st3" d="M866.49,323.47c-14.55,23.49-15.55,51.56-5.13,75.07c25.64-1.06,50.33-14.42,64.89-37.91
-				c14.56-23.49,15.55-51.58,5.12-75.07C905.71,286.63,881.04,299.98,866.49,323.47z"/>
-			<path class="st3" d="M771.13,482.35c15.39,22.94,40.53,35.39,66.21,35.54c9.58-23.85,7.57-51.89-7.83-74.84
-				c-15.4-22.95-40.55-35.4-66.22-35.53C753.73,431.39,755.74,459.41,771.13,482.35z"/>
-			<path class="st3" d="M881.64,448.62c-19.88,19.17-27.76,46.13-23.44,71.49c25.11,5.3,52.33-1.55,72.22-20.72
-				c19.89-19.18,27.76-46.15,23.43-71.49C928.72,422.61,901.52,429.46,881.64,448.62z"/>
-			<path class="st3" d="M735.53,569.42c6.59,26.84,25.93,47.18,50,56.16c17.17-19.11,24.9-46.13,18.31-72.98
-				c-6.59-26.85-25.95-47.2-50.01-56.15C736.66,515.57,728.94,542.57,735.53,569.42z"/>
-			<path class="st3" d="M850.88,575.76c-25.25,11.16-41.88,33.77-46.53,59.07c21.77,13.62,49.67,16.55,74.93,5.39
-				c25.26-11.17,41.9-33.79,46.52-59.08C904.02,567.53,876.12,564.6,850.88,575.76z"/>
-			<path class="st3" d="M663.8,642.76c-1.49,27.6,11.1,52.7,31.52,68.3c21.98-13.27,37.22-36.87,38.71-64.49
-				c1.49-27.61-11.11-52.72-31.53-68.3C680.52,591.57,665.29,615.16,663.8,642.76z"/>
-			<path class="st3" d="M772.31,682.45c-27.4,3.32-49.88,20.1-61.67,42.95c16.87,19.38,42.72,30.31,70.12,26.99
-				c27.41-3.32,49.91-20.12,61.67-42.96C825.54,690.06,799.71,679.13,772.31,682.45z"/>
-			<path class="st3" d="M767.89,271.1c14.36,23.6,38.93,37.16,64.57,38.44c10.62-23.4,9.86-51.5-4.51-75.11
-				C813.58,210.82,789,197.26,763.37,196C752.76,219.42,753.53,247.5,767.89,271.1z"/>
-			<ellipse class="st2" cx="510.25" cy="774.67" rx="133.53" ry="133.75"/>
-			<path class="st5" d="M643.78,774.67c0,73.87-59.78,133.75-133.53,133.75V640.91C583.99,640.91,643.78,700.8,643.78,774.67z"/>
-			<path class="st0" d="M570.55,774.67c0,33.36-26.99,60.4-60.3,60.4s-60.31-27.04-60.31-60.4c0-33.36,27-60.4,60.31-60.4
-				S570.55,741.31,570.55,774.67z"/>
-			<path class="st3" d="M570.55,774.67c0,33.36-26.99,60.4-60.3,60.4v-120.8C543.55,714.27,570.55,741.31,570.55,774.67z"/>
-		</g>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/6.png


+ 0 - 77
TEAMModelOS/ClientApp/src/assets/mark/6.svg

@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<path class="st2" d="M690.41,548.08l-46.02,16.25c-14.57,5.15-21.46,21.79-14.79,35.73l20.97,43.81
-			c10.56,22.06-12.42,45.16-34.53,34.72l-44.79-21.14c-13.88-6.54-30.38,0.29-35.56,14.75l-16.61,46.41
-			c-4.35,12.15-15.5,17.86-26.25,17.15c-9.57-0.63-18.82-6.34-22.69-17.15l-16.61-46.41c-5.18-14.46-21.68-21.29-35.56-14.75
-			l-44.79,21.14c-22.11,10.44-45.09-12.66-34.53-34.72l20.97-43.81c6.67-13.94-0.22-30.58-14.79-35.73l-46.02-16.25
-			c-23.11-8.16-23.11-40.84,0-49l46.02-16.25c14.57-5.15,21.46-21.78,14.79-35.72l-20.97-43.82
-			c-10.56-22.05,12.42-45.16,34.53-34.72l44.79,21.14c13.88,6.55,30.38-0.29,35.56-14.74l16.61-46.41
-			c3.87-10.81,13.12-16.53,22.69-17.16c10.75-0.71,21.9,5.02,26.25,17.16l16.61,46.41c5.18,14.45,21.68,21.29,35.56,14.74
-			l44.79-21.14c22.11-10.44,45.09,12.67,34.53,34.72l-20.97,43.82c-6.67,13.94,0.22,30.57,14.79,35.72l46.02,16.25
-			C713.52,507.24,713.52,539.92,690.41,548.08z"/>
-		<path class="st0" d="M587.35,533.07l-0.78,0.75c-9.97,9.6-14.55,23.51-12.24,37.15l0.23,1.36c5.8,34.15-30.04,60.15-60.7,44.04
-			l-1.97-1.04c-5.96-3.13-12.51-4.74-19.05-4.8c-6.74-0.07-13.51,1.49-19.67,4.69l-1.97,1.03c-30.75,15.95-66.46-10.26-60.46-44.38
-			l0.23-1.35c2.4-13.63-2.11-27.56-12.02-37.22l-0.77-0.75c-24.92-24.25-11.1-66.54,23.32-71.4l1.59-0.23
-			c13.61-1.92,25.4-10.41,31.55-22.7l0.93-1.86c7.69-15.37,22.48-23.06,37.28-23.11c14.97-0.05,29.96,7.72,37.66,23.32l0.92,1.86
-			c6.08,12.33,17.83,20.88,31.43,22.88l1.58,0.23C598.81,466.6,612.39,508.96,587.35,533.07z"/>
-		<ellipse class="st4" cx="373.01" cy="899.53" rx="55.86" ry="55.47"/>
-		<ellipse class="st1" cx="347.63" cy="152.97" rx="55.86" ry="55.47"/>
-		<ellipse class="st1" cx="741.21" cy="102.97" rx="34.2" ry="33.97"/>
-		<ellipse class="st6" cx="182.17" cy="670.65" rx="34.2" ry="33.97"/>
-		<ellipse class="st3" cx="841.83" cy="645.65" rx="34.2" ry="33.97"/>
-		<ellipse class="st3" cx="592.27" cy="161.36" rx="34.2" ry="33.97"/>
-		<g>
-			<line class="st8" x1="715.55" y1="304.19" x2="807.62" y2="212.75"/>
-			<line class="st8" x1="181.61" y1="834.42" x2="273.69" y2="742.98"/>
-			<line class="st8" x1="715.55" y1="742.98" x2="807.62" y2="834.42"/>
-			<line class="st8" x1="181.61" y1="212.75" x2="273.69" y2="304.19"/>
-		</g>
-		<path class="st5" d="M690.41,548.08l-46.02,16.25c-14.57,5.15-21.46,21.79-14.79,35.73l20.97,43.81
-			c10.56,22.06-12.42,45.16-34.53,34.72l-44.79-21.14c-13.88-6.54-30.38,0.29-35.56,14.75l-16.61,46.41
-			c-4.35,12.15-15.5,17.86-26.25,17.15V311.4c10.75-0.71,21.9,5.02,26.25,17.16l16.61,46.41c5.18,14.45,21.68,21.29,35.56,14.74
-			l44.79-21.14c22.11-10.44,45.09,12.67,34.53,34.72l-20.97,43.82c-6.67,13.94,0.22,30.57,14.79,35.72l46.02,16.25
-			C713.52,507.24,713.52,539.92,690.41,548.08z"/>
-		<path class="st3" d="M587.35,533.07l-0.78,0.75c-9.97,9.6-14.55,23.51-12.24,37.15l0.23,1.36c5.8,34.15-30.04,60.15-60.7,44.04
-			l-1.97-1.04c-5.96-3.13-12.51-4.74-19.05-4.8V413.25c14.97-0.05,29.96,7.72,37.66,23.32l0.92,1.86
-			c6.08,12.33,17.83,20.88,31.43,22.88l1.58,0.23C598.81,466.6,612.39,508.96,587.35,533.07z"/>
-		<path class="st3" d="M630.72,772.48l7.47,17.13c1.54,3.54,5.21,5.65,9.04,5.22l18.57-2.1c7.63-0.86,12.61,7.78,8.06,13.95
-			l-11.1,15.03c-2.29,3.1-2.29,7.34,0,10.44l11.1,15.03c4.56,6.17-0.43,14.81-8.06,13.95l-18.57-2.1c-3.83-0.43-7.5,1.68-9.04,5.22
-			l-7.47,17.13c-3.07,7.03-13.04,7.03-16.11,0l-7.47-17.13c-1.54-3.54-5.21-5.65-9.04-5.22l-18.57,2.1
-			c-7.63,0.86-12.61-7.78-8.06-13.95l11.1-15.03c2.29-3.1,2.29-7.34,0-10.44l-11.1-15.03c-4.56-6.17,0.43-14.81,8.06-13.95
-			l18.57,2.1c3.83,0.43,7.5-1.68,9.04-5.22l7.47-17.13C617.68,765.45,627.66,765.45,630.72,772.48z"/>
-		<path class="st0" d="M224.43,338.16l7.47,17.13c1.54,3.54,5.21,5.65,9.04,5.22l18.57-2.1c7.63-0.86,12.61,7.78,8.06,13.95
-			l-11.1,15.03c-2.29,3.1-2.29,7.34,0,10.44l11.1,15.03c4.56,6.17-0.43,14.81-8.06,13.95l-18.57-2.1c-3.83-0.43-7.5,1.68-9.04,5.22
-			l-7.47,17.13c-3.07,7.03-13.04,7.03-16.11,0l-7.47-17.13c-1.54-3.54-5.21-5.65-9.04-5.22l-18.57,2.1
-			c-7.63,0.86-12.61-7.78-8.06-13.95l11.1-15.03c2.29-3.1,2.29-7.34,0-10.44l-11.1-15.03c-4.56-6.17,0.43-14.81,8.06-13.95
-			l18.57,2.1c3.83,0.43,7.5-1.68,9.04-5.22l7.47-17.13C211.39,331.13,221.37,331.13,224.43,338.16z"/>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/7.png


+ 0 - 62
TEAMModelOS/ClientApp/src/assets/mark/7.svg

@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<polygon class="st0" points="619.2,737.25 404.8,737.25 467.66,430.27 556.34,430.27 		"/>
-		<path class="st1" d="M695.79,797.31v74.05H328.21v-74.05c0-33.17,26.95-60.06,60.22-60.06h247.14
-			C668.84,737.25,695.79,764.14,695.79,797.31z"/>
-		<path class="st0" d="M723.74,895.87V955H300.26v-59.13c0-13.54,11-24.51,24.57-24.51h374.32
-			C712.73,871.36,723.74,882.33,723.74,895.87z"/>
-		<path class="st3" d="M723.74,895.87V955H511.28v-83.64h187.88C712.73,871.36,723.74,882.33,723.74,895.87z"/>
-		<path class="st4" d="M695.79,797.31v74.05H511.28V737.25h124.29C668.84,737.25,695.79,764.14,695.79,797.31z"/>
-		<polygon class="st3" points="619.2,737.25 511.28,737.25 511.28,430.27 556.34,430.27 		"/>
-		<g>
-			<path class="st1" d="M660.62,380.46c-4.73,4.57-6.88,11.17-5.74,17.63l25.56,145.29c2.86,16.21-14.21,28.6-28.76,20.88
-				l-130.4-69.19c-2.9-1.54-6.08-2.31-9.27-2.31c-3.18,0-6.38,0.76-9.28,2.31l-130.41,69.19c-14.55,7.72-31.62-4.67-28.76-20.88
-				l25.56-145.29c1.14-6.46-1.01-13.07-5.73-17.63L257.23,277.94c-11.84-11.44-5.33-31.49,10.99-33.79l146.21-20.6
-				c6.5-0.91,12.13-5,15.01-10.89l64.79-132.56C497.84,72.7,504.92,69,512,69c7.09,0,14.15,3.7,17.78,11.09l64.79,132.56
-				c2.88,5.89,8.51,9.98,15.02,10.89l146.2,20.6c16.31,2.3,22.83,22.35,10.99,33.79L660.62,380.46z"/>
-			<polygon class="st6" points="613.58,372.2 638.01,514.56 512,448.29 510.18,447.35 382.36,514.56 406.78,372.2 303.38,271.36 
-				446.27,250.59 510.18,121.07 512,124.76 574.09,250.59 716.98,271.36 			"/>
-			<path class="st4" d="M660.62,380.46c-4.73,4.57-6.88,11.17-5.74,17.63l25.56,145.29c2.86,16.21-14.21,28.6-28.76,20.88
-				l-130.4-69.19c-2.9-1.54-6.08-2.31-9.27-2.31V69c7.09,0,14.15,3.7,17.78,11.09l64.79,132.56c2.88,5.89,8.51,9.98,15.02,10.89
-				l146.2,20.6c16.31,2.3,22.83,22.35,10.99,33.79L660.62,380.46z"/>
-			<polygon class="st7" points="613.58,372.2 638.01,514.56 512,448.29 512,124.76 574.09,250.59 716.98,271.36 			"/>
-			<polygon class="st0" points="548.07,341.77 556.86,391.74 512,367.94 467.14,391.74 475.93,341.77 439.42,306.49 489.71,299.41 
-				512,253.8 534.29,299.41 584.58,306.49 			"/>
-			<polygon class="st3" points="548.07,341.77 556.86,391.74 512,367.94 512,253.8 534.29,299.41 584.58,306.49 			"/>
-		</g>
-		<path class="st0" d="M601.49,806.45c0,6.32-2.57,12.04-6.73,16.19c-4.16,4.15-9.9,6.72-16.25,6.72H445.49
-			c-12.69,0-22.98-10.26-22.98-22.91c0-6.33,2.57-12.06,6.73-16.2c4.16-4.15,9.9-6.72,16.25-6.72h133.02
-			C591.2,783.53,601.49,793.79,601.49,806.45z"/>
-		<path class="st3" d="M601.49,806.45c0,6.32-2.57,12.04-6.73,16.19c-4.16,4.15-9.9,6.72-16.25,6.72h-68.33v-45.82h68.33
-			C591.2,783.53,601.49,793.79,601.49,806.45z"/>
-	</g>
-</g>
-</svg>

BIN
TEAMModelOS/ClientApp/src/assets/mark/8.png


+ 0 - 54
TEAMModelOS/ClientApp/src/assets/mark/8.svg

@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFB300;}
-	.st1{fill:#4A6DFB;}
-	.st2{fill:#FBEC6D;}
-	.st3{fill:#FA7D15;}
-	.st4{fill:#2746E0;}
-	.st5{fill:#FFDD2E;}
-	.st6{fill:#B1C1FF;}
-	.st7{fill:#7999FF;}
-	.st8{fill:none;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st9{fill:#FFFFFF;}
-	.st10{fill:none;}
-	.st11{fill:#FFB300;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st12{fill:#4A6DFB;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st13{fill:#FBEC6D;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st14{fill:#FA7D15;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st15{fill:#2746E0;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st16{fill:#FFDD2E;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st17{fill:#B1C1FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st18{fill:#7999FF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-	.st19{fill:#FFFFFF;stroke:#3E3A39;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
-</style>
-<g id="图层_1">
-</g>
-<g id="图层_2">
-	<g>
-		<rect x="222.43" y="180.69" class="st12" width="580.76" height="215.05"/>
-		<rect x="222.43" y="244.75" class="st13" width="580.76" height="86.94"/>
-		<polygon class="st12" points="479.66,743.94 69,332.75 220.87,180.69 631.54,591.87 		"/>
-		<polygon class="st13" points="524.9,698.64 114.24,287.46 175.63,225.98 586.3,637.17 		"/>
-		<rect x="512.81" y="180.69" class="st15" width="290.38" height="215.05"/>
-		<rect x="512.81" y="244.75" class="st16" width="290.38" height="86.94"/>
-		<polygon class="st12" points="544.34,743.94 955,332.75 803.13,180.69 392.46,591.87 		"/>
-		<polygon class="st11" points="499.1,698.64 909.76,287.46 848.37,225.98 437.7,637.17 		"/>
-		<path class="st13" d="M722.02,633.03c0,115.87-93.59,209.84-209.21,210.28c-0.27,0.01-0.54,0.01-0.81,0.01
-			c-115.99,0-210.02-94.14-210.02-210.29c0-116.14,94.03-210.28,210.02-210.28c0.27,0,0.54,0,0.81,0.01
-			C628.43,423.19,722.02,517.16,722.02,633.03z"/>
-		<path class="st11" d="M653.76,633.03c0,78.12-63.02,141.5-140.94,141.95H512c-78.29,0-141.76-63.55-141.76-141.95
-			c0-78.38,63.46-141.94,141.76-141.94h0.81C590.74,491.53,653.76,554.91,653.76,633.03z"/>
-		<polygon class="st12" points="604.43,665.75 540.57,675.04 512.81,731.34 512,732.99 483.43,675.04 419.57,665.75 465.78,620.64 
-			454.87,556.96 512,587.02 512.81,586.6 569.13,556.96 558.22,620.64 		"/>
-		<polygon class="st17" points="558.22,657.36 569.13,721.05 512.81,691.4 512,690.98 454.87,721.05 465.78,657.36 419.57,612.25 
-			483.43,602.96 512,545.01 512.81,546.66 540.57,602.96 604.43,612.25 		"/>
-		<path class="st16" d="M722.02,633.03c0,115.87-93.59,209.84-209.21,210.28V422.76C628.43,423.19,722.02,517.16,722.02,633.03z"/>
-		<path class="st14" d="M653.76,633.03c0,78.12-63.02,141.5-140.94,141.95V491.09C590.74,491.53,653.76,554.91,653.76,633.03z"/>
-		<polygon class="st15" points="604.43,665.75 540.57,675.04 512.81,731.34 512.81,586.6 569.13,556.96 558.22,620.64 		"/>
-		<polygon class="st18" points="558.22,657.36 569.13,721.05 512.81,691.4 512.81,546.66 540.57,602.96 604.43,612.25 		"/>
-	</g>
-</g>
-</svg>

+ 3 - 2
TEAMModelOS/ClientApp/src/components/mark/MarkTools.vue

@@ -32,18 +32,19 @@ export default {
         },
         drawImg(imgIndex) {
             let curImg = new Image()
-            curImg.src = this.imgs[imgIndex]
             curImg.onload = () => {
                 // this.mouseStatus = ''
                 this.mouseStatus = 'img'
                 this.drawImgData = curImg
                 this.$emit('onDrawImg', curImg)
             }
+            curImg.src = this.imgs[imgIndex]
         }
     },
     created() {
         for (let i = 0; i < 9; i++) {
-            this.imgs.push(require('@/assets/mark/' + i + '.svg'))
+            // this.imgs.push(require('@/assets/mark/' + i + '.svg'))
+            this.imgs.push(require('@/assets/mark/' + i + '.png'))
         }
     },
     watch: {

+ 6 - 3
TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.vue

@@ -151,6 +151,7 @@ export default {
     },
     created() {
         let queryData = this.$route.query
+        console.log(this.$route)
         // 統一處理預設登入學校
         this.setLoginSchoolCode()
         this.$api.login.getSystemInfo({}).then(
@@ -172,15 +173,17 @@ export default {
             this.isShowTMD = cur.isShowTMD
             this.$router.push({
                 name: cur.router,
-                query:queryData
+                query: queryData
             })
             let $favicon = document.querySelector('link[rel="icon"]');
             $favicon.href = cur.icon
         } else {
+            console.log('这里')
             this.isShowTMD = true
             this.$router.push({
-                name: 'login',
-                query:queryData
+                // name: 'login',
+                name: this.$route.name,
+                query: queryData
             })
         }
     },

+ 10 - 3
TEAMModelOS/ClientApp/src/store/module/answerSheet.js

@@ -171,7 +171,6 @@ export default {
 			}
 		},
 		setSubjectiveConfig(state,val){
-			// console.error('setSubjectiveConfig',val.startOrder,val.type,state.config.newContents[state.config.newContents.length - 1].type)
 			let index = state.config.contents.filter(i => i.pageNum === val.pageNum).length + 1
 			val.x = Number(val.x.toFixed())
 			val.y = Number(val.y.toFixed())
@@ -191,7 +190,7 @@ export default {
 				if(infoItem){
 					infoItem.height= val.height
 					infoItem.y= val.y
-					infoItem.pageNum = val.pageNum
+					// infoItem.pageNum = val.pageNum
 				}else{
 					val.index = val.startOrder
 					// delete val.startOrder
@@ -205,7 +204,9 @@ export default {
 			/* 加入新的contents里面 */
 			let curTypeContentArr = state.config.newContents.filter(i => i.type ===  val.type)
 			let newContent = curTypeContentArr[curTypeContentArr.length - 1]
+			// console.error(val.displayName,val.type,newContent)
 			/* row代表的是按照ans数据结构排列(小题也算单独的一个) 但是同一题跨页 两个框的row一致 */
+			newContent.pageNum = state.pages
 			newContent.points.push({
 				ans:val.id + '',
 				row: state.ansOrder === -1 ? val.startOrder : (val.id > 0 ? val.startOrder : state.ansOrder + 1),
@@ -225,14 +226,20 @@ export default {
 			state.paperItem.item.splice(index, 1)
 		},
 		addPage(state,val) {
+			let newContents = state.config.newContents
 			state.pages++
-			state.config.newContents.push({
+			newContents.push({
 				"type": val,
 				"pageNum": state.pages,
 				"count": 0,
 				"pos": [],
 				"points": []
 			})
+			/* 如果已经有简答题的 并且插入的是填空题的数据 则要把填空题在newContents里面 排到 简答题前面 */
+			let hasType3 = newContents.find(i => i.type === 3)
+			if(val === 4 && hasType3){
+				newContents[newContents.length - 1] = newContents.splice(newContents.indexOf(hasType3),1,newContents[newContents.length - 1])[0]
+			}
 		},
 		clearPage(state) {
 			state.ansOrder = -1

+ 6 - 11
TEAMModelOS/ClientApp/src/utils/public.js

@@ -644,17 +644,12 @@ export default {
 	},
 	/* 弹窗下载文件操作 */
 	doDownloadByUrl(url, fileName) {
-		const downloadRes = async () => {
-			// let response = await fetch(url); // 内容转变成blob地址
-			// let blob = await response.blob(); // 创建隐藏的可下载链接
-			// let objectUrl = window.URL.createObjectURL(blob);
-			let a = document.createElement('a');
-			a.href = url;
-			a.download = fileName;
-			a.click()
-			a.remove();
-		}
-		downloadRes();
+		let a = document.createElement('a');
+		a.href = url;
+		a.download = fileName;
+		a.target = '_blank'
+		a.click()
+		a.remove();
 	},
 	/* 获取视频第一帧 */
 	getVideoBase64(url) {

+ 22 - 23
TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.less

@@ -244,29 +244,28 @@
 }
 
 .page-item {
-    margin-bottom: 50px;
     display: flex;
     position: relative;
+    border-bottom: 15px solid #f0f0f0;
+    background: white;
+    padding: 10px 20px 10px 20px;
 
     .record-data-wrap {
         width: 100%;
     }
-
-    .record-data-item {
-        /*display:flex;*/
-    }
-
-    .record-split{
-    }
+}
+.page-info-wrap{
+    margin-right: 10px;
 }
 
 .page-tag {
-    background-color: white;
+    border: 1px solid #1cc0f3;
+    // background: #1CC0F3;
+    color: #1CC0F3;
     white-space: initial;
     display: block;
     font-size: 14px;
     width: 110px;
-    color: #454545;
     padding: 3px 10px;
     border-radius: 4px;
     cursor: pointer;
@@ -274,16 +273,19 @@
     transition: background 0.3s;
     margin-right: 10px;
     user-select: none;
-    &:hover {
-        background: #1CC0F3;
+    &:hover{
         color: white;
+        background: #1cc0f3;
     }
 }
 .page-mini-img{
     width:110px;
     margin-top:10px;
-    border-radius:4px;
     cursor:pointer;
+    border: 1px solid transparent;
+    &:hover{
+        border-color:#cccccc;
+    }
 }
 
 .question-record-item {
@@ -303,17 +305,11 @@
 
     .question-data-wrap {
         margin-left: 15px;
-        /*width: 600px;*/
         background: rgba(255, 255, 255, 0.1);
         position: relative;
         border-radius: 4px;
         padding: 10px 15px;
         margin-top: 5px;
-
-        .question-info {
-            // color: white;
-        }
-
         &::before {
             position: absolute;
             content: '';
@@ -406,7 +402,6 @@
     position: absolute;
     right: 0px;
     bottom: -24px;
-    // color: white;
 }
 
 .message-info {
@@ -418,10 +413,7 @@
 }
 
 .text-label {
-    // color: white;
     margin-bottom: 10px;
-    /*display:inline-block;
-    vertical-align:top;*/
 }
 
 .student-img-box {
@@ -519,3 +511,10 @@
     margin: auto;
     display: block;
 }
+.event-tag{
+    display: inline-block;
+    background: white;
+    padding: 2px 8px;
+    margin-bottom: 5px;
+    border: 1px solid #aaaaaa;
+}

+ 16 - 37
TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.vue

@@ -5,26 +5,26 @@
                 <!--头部信息-->
                 <div class="class-record-header">
                     <span class="course-name">
-                        {{activityInfo.activityName}}
+                        {{recordInfo.name}}
                     </span>
                     <div style="display:inline-block;margin-left:30px">
-                        <span class="label-text">
+                        <!-- <span class="label-text">
                             教师:
                         </span>
                         <span class="label-value">
-                            {{activityInfo.activityExecHostID}}
+                            {{recordInfo.activityExecHostID}}
                         </span>
                         <span class="label-text">
                             班级:
                         </span>
                         <span class="label-value" v-for="item in activityInfo.classList" :key="item.cid">
                             {{item.className}}
-                        </span>
+                        </span> -->
                         <span class="label-text">
                             上课时间:
                         </span>
                         <span class="label-value">
-                            {{activityInfo.startDateTime}}
+                            {{$jsFn.timeFormat(recordInfo.startTime)}}
                         </span>
 
                     </div>
@@ -68,12 +68,15 @@
                     </div>
                     <vuescroll ref="datawrap">
                         <div class="page-item" :key="index" v-for="(item,index) in pageList" :id="'page'+(item.page)">
-                            <!-- <Icon v-if="item.showFilter" type="ios-funnel" class="page-filter-icon" :style="{color: filterStatus ? '#1cc0f3':'#FFFFFF'}" @click="filterPage()" /> -->
                             <div class="page-info-wrap">
                                 <span class="page-tag" @click="toVideo(index+1,$event)" :ref="'page'+(index+1)">课件第{{item.page}}页</span>
                                 <img class="page-mini-img" @click="openViewer(item.img)" :src="item.img" />
                             </div>
                             <div class="record-data-wrap">
+                                <div v-for="(rtItem, rtIndex) in item.pageData" :key="rtIndex +''+index" class="record-data-item">
+                                    <span class="event-tag">{{rtItem.Event}}</span>
+                                </div>
+                                <EmptyData v-if="!item.pageData.length" textContent="此页没有互动数据"></EmptyData>
                                 <div v-for="(rtItem, rtIndex) in item.pageRecorde" :key="rtIndex +''+index" class="record-data-item">
                                     <!--即问即答-->
                                     <div v-if="rtItem.type == 'irs' && (typeIndex == 'all' || typeIndex == 'irs')" class="record-split">
@@ -174,7 +177,6 @@
                                 </div>
                             </div>
                         </div>
-                        <EmptyData v-if="recordDataShow.length == 0"></EmptyData>
                     </vuescroll>
                 </div>
 
@@ -184,16 +186,8 @@
             <Icon type="md-close" class="close-icon" @click="closeViewer()" />
             <img :src="viewUrl" class="animated fadeIn" @click.stop />
         </div>
-        <!-- <div v-if="openHtexViewer" class="image-viewer htex-viewer">
-            <Icon type="md-close" class="close-icon" @click="openHtexViewer = false" />
-            <div class="viewer-page-wrap animated fadeIn" :style="{width:(800 / mapJson.height * mapJson.width)+'px'}">
-                <Page :total="120" size="small" :current.sync="curPage" show-elevator show-total @on-change="getCurHTEX">
-                    <span>{{curPage}}/12</span>
-                </Page>
-            </div>
-        </div> -->
         <!-- 查看苏格拉底报告 -->
-        <Modal v-model="viewRepStatus" fullscreen :title="recordInfo ? recordInfo.name : ''" footer-hide @on-visible-change="closeView">
+        <Modal v-model="viewRepStatus" fullscreen :title="recordInfo ? recordInfo.name : ''" footer-hide>
             <img class="sokrate-report" v-if="recordInfo" :src="recordInfo.sokrateImg" alt="" />
         </Modal>
     </div>
@@ -213,7 +207,6 @@ export default {
             pageList: [],
             videoUrl: '',
             videoPoster: '',
-            activityInfo: {},
             recordInfo: {},
 
             //测试数据
@@ -525,7 +518,7 @@ export default {
                 inactivityTimeout: 1,
                 nativeVideoTracks: false,
                 playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
-                autoplay: false, //如果true,浏览器准备好时开始回放。
+                autoplay: true, //如果true,浏览器准备好时开始回放。
                 controls: true, //控制条
                 preload: 'auto', //视频预加载
                 muted: false, //默认情况下将会消除任何音频。
@@ -557,7 +550,7 @@ export default {
                         page.img = `${userProfile.blob_uri}/records/${this.recordInfo.id}/Memo/${item}.jpg?${userProfile.blob_sas}`
                         page.page = index + 1
                         //当前页面对应的sokrates
-                        page.sokrates = this.sokratesRecords.filter(record => record.Pgid === item)
+                        page.pageData = this.sokratesRecords.filter(record => record.Pgid === item && record.Event != 'PgJump' && record.Event != 'PgAdd' && record.Event != 'DiscussStart')
                         this.pageList.push(page)
                     })
                     console.log(this.pageList)
@@ -576,7 +569,7 @@ export default {
             )
         },
         //查看苏格拉底报告
-        viewReport(){
+        viewReport() {
             this.viewRepStatus = true
         },
         //查看电子笔记
@@ -708,20 +701,9 @@ export default {
         } else {
             console.log(this.recordInfo)
             //对接Blob数据
-            // 获取ActivityInfo.json
             let userProfile = this.$store.state.user.userProfile
-            let url = `${userProfile.blob_uri}/records/${this.recordInfo.id}/ActivityInfo.json?${userProfile.blob_sas}`
             this.videoUrl = `${userProfile.blob_uri}/records/${this.recordInfo.id}/Record/Record_Core_2021-12-08_103133.mp4?${userProfile.blob_sas}` //视频文件名单暂时写死
             this.videoPoster = `${userProfile.blob_uri}/records/${this.recordInfo.id}/Record/CoverImage.jpg?${userProfile.blob_sas}`
-            this.$tools.getFile(url).then(
-                res => {
-                    this.activityInfo = JSON.parse(res)
-                    console.log(this.activityInfo)
-                },
-                err => {
-                    this.$Message.error('获取数据失败')
-                }
-            )
             this.playerOptions.poster = this.videoPoster
             this.playerOptions.sources.push({
                 src: this.videoUrl
@@ -729,10 +711,7 @@ export default {
             this.getPageList()
         }
 
-        this.recordDataShow = JSON.parse(JSON.stringify(this.recordData))
-
-
-
+        // this.recordDataShow = JSON.parse(JSON.stringify(this.recordData))
     }
 }
 </script>
@@ -747,9 +726,9 @@ export default {
     opacity: 1 !important;
 }
 
-.interaction-record-wrap .__view {
+/* .interaction-record-wrap .__view {
     padding: 40px 100px 20px 50px;
-}
+} */
 
 .class-content .video-js .vjs-big-play-button {
     top: 50%;

+ 1 - 1
TEAMModelOS/ClientApp/src/view/jyzx/classMemoir.vue

@@ -252,7 +252,7 @@ export default {
                 "ids": [],
             }
             if (action === 'uploadafter') {
-                var datainfo = { "url": this.uploadData.url, "name": this.uploadData.name, "size": this.uploadData.size, "score": '', "hash": this.uploadData.md5}
+                var datainfo = { "url": this.uploadData.url, "name": this.uploadData.name, "size": this.uploadData.size, "score": '', "hash": this.uploadData.hash}
                 if (this.calssListinfo.length) {
                     this.calssListinfo[0].score === 0 || this.calssListinfo[0].score === -1 || this.calssListinfo[0].score !== -2 ? datainfo.score = -2 : delete datainfo.score
                 } else {

+ 9 - 0
TEAMModelOS/ClientApp/src/view/login/jinniu/Index.vue

@@ -367,6 +367,15 @@ export default {
         }
     },
     created() {
+        //先判断是否为研修中心单点登录
+        if (this.$route.query.loginType === 'trainsso') {
+            this.$router.push({
+                path: '/login/jinniuteacher',
+                query: this.$route.query
+            })
+            return
+        }
+
         // 取得學校設定簡碼
         this.setDefSchool()
 

+ 48 - 4
TEAMModelOS/ClientApp/src/view/login/jinniu/Teacher.vue

@@ -194,14 +194,14 @@
                     <Icon size="14" custom="iconfont icon-qr-code" style="vertical-align: text-bottom;" />
                     {{ $t('login.link.QRLogin') }}
                 </span>
-                <router-link to="/regist" class="form-bottom-link">
+                <router-link :to="{path:'/regist',query:routerData}" class="form-bottom-link">
                     {{$t('login.link.regist')}}
                 </router-link>
                 <router-link to="/forgotpw" href="" class="form-bottom-link">
                     {{$t('login.link.forgetPsw')}}
                 </router-link>
             </p>
-            <div class="other-login-box">
+            <div class="other-login-box" v-show="loginType != 'trainsso'">
                 <div class="other-login-item" @click="oauthLogin('google')" v-if="srvAdr == 'Global'">
                     <Icon custom="iconfont icon-google" class="other-login-icon" />
                     <p class="other-login-text">
@@ -214,7 +214,7 @@
                     <p class="other-login-text">
                         {{$t('login.communy.wechat')}}
                     </p>
-                </div> -->
+                </div>
             </div>
         </div>
         <div class="right-box" v-show="qrloginFlag">
@@ -296,6 +296,8 @@ export default {
             }
         };
         return {
+            routerData: {},
+            loginType: '',
             qrloginFlag: false,
             loginForm: {
                 id: '',
@@ -344,6 +346,11 @@ export default {
 
         // 取得學校設定簡碼
         this.setDefSchool()
+
+        //处理研修中心省平台跳转登录
+        this.loginType = this.$route.query.loginType
+        this.routerData = this.$route.query
+        console.log(this.loginType)
     },
     methods: {
         chgLoginType: function () { // 變更登入類型
@@ -369,11 +376,48 @@ export default {
                         this.loginErrText = this.$t('login.apiError.text1')
                         this.loading = false
                     } else {
-                        this.loginProcess(result, this.defaultSchool.code)
+                        if (this.loginType === 'trainsso') {
+                            this.$Modal.confirm({
+                                title: '账号绑定',
+                                content: `登录成功,是否应用此账号绑定省平台账号?`,
+                                okText: '是',
+                                cancelText: '否',
+                                onOk: () => {
+                                    console.log(result)
+                                    this.bandingID(result.id_token, result)
+
+                                },
+                                onCancel: () => {
+                                    //不绑定处理逻辑
+                                }
+                            })
+                        } else {
+                            this.loginProcess(result, this.defaultSchool.code)
+                        }
                     }
                 }
             })
         },
+        bandingID(idToken, result) {
+            this.$api.train.thirdSSO(this.routerData.bindurl, {
+                type: this.routerData.type,
+                param: this.routerData.param,
+                id_token: idToken
+            }).then(
+                res => {
+                    //绑定成功
+                    if (res && res.status == 200) {
+                        this.$Message.success("绑定成功")
+                        this.loginProcess(result, this.defaultSchool.code)
+                    } else {
+                        this.$Message.error("绑定失败")
+                    }
+                },
+                err => {
+
+                }
+            )
+        },
         oauthLogin: function (provider) { // 第三方登入
             let redirect_uri = window.location.origin + '/login';
             this.$api.BuildOauthUrl(provider, redirect_uri).then(res => {

+ 4 - 4
TEAMModelOS/ClientApp/src/view/newsheet/BaseEditor.vue

@@ -313,17 +313,17 @@
 								// 跨页处理不需要补充作答区域
 								this.$store.commit("addPage",4);
 								if(this.$parent.completeItems.map(i => i.id).indexOf(this.curItemId) === 0){
-									this.setSubjectiveConfig(100,curEditorH,false,startOrder,items.length,4,displayName)
+									this.setSubjectiveConfig(60,curEditorH,false,startOrder,items.length,4,displayName)
 									this.$EventBus.$emit('titleMovePage',{
 										type:'complete',
 										height:leftHeight
 									})
 								}else{
-									this.setSubjectiveConfig(100,curEditorH,false,startOrder,items.length,4,displayName)
+									this.setSubjectiveConfig(60,curEditorH,false,startOrder,items.length,4,displayName)
 									// document.getElementById(this.ids).style.marginTop = (PAPER_H - curEditorY + lastBottomGap + SVG_BORDER_PROP.y) + "px";
 									// document.getElementById(this.ids + 'btn').style.top = (PAPER_H - curEditorY + lastBottomGap + SVG_BORDER_PROP.y + 20) + "px";
-									document.getElementById(this.ids).style.marginTop = 147.5 + leftHeight + 'px';
-									document.getElementById(this.ids + 'btn').style.top = 167.5 + leftHeight + 'px';
+									document.getElementById(this.ids).style.marginTop = 149.5 + leftHeight + 'px';
+									document.getElementById(this.ids + 'btn').style.top = 169.5 + leftHeight + 'px';
 								}
 								
 							}

+ 1 - 1
TEAMModelOS/ClientApp/src/view/newsheet/SheetSubjective.vue

@@ -99,7 +99,7 @@ export default {
       },)
     });
 	
-	/* 初始化填空题的配置参数 */
+	/* 初始化简答题题的配置参数 */
 	let initSubjectiveConfig = {
 		"type": 3,
 		"pageNum": 1,

+ 6 - 5
TEAMModelOS/ClientApp/src/view/sso/Index.vue

@@ -11,7 +11,7 @@ import { User } from '@/service/User'
 export default {
     data() {
         return {
-            cancelToBand:false,
+            cancelToBand: false,
             routerData: {},
             iesLoginRes: {}
         }
@@ -45,11 +45,12 @@ export default {
             // window.location.href = loginUrl
             let queryData = this._.cloneDeep(this.$route.query)
             queryData.loginType = 'trainsso'
+            //根据站点判断跳转路由
+            let path = window.location.host == 'jinniu.teammodel.cn' ? '/login/jinniuteacher' : '/login/teacher'
             this.$router.push({
-                path:'/login/teacher',
-                query:queryData
+                path: path,
+                query: queryData
             })
-            console.log(this.$route.query)
         },
         bandingID(idToken) {
             this.$api.train.thirdSSO(this.routerData.bindurl, {
@@ -185,7 +186,7 @@ export default {
                                 })
                             }
                         },
-                        onCancel:()=>{
+                        onCancel: () => {
                             this.cancelToBand = true
                         }
                     })

+ 206 - 167
TEAMModelOS/Controllers/Syllabus/ShareController.cs

@@ -69,159 +69,185 @@ namespace TEAMModelOS.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("to")]
         [AuthToken(Roles = "teacher,admin")]
-        public async Task<IActionResult> To(ShareData request) {
+        public async Task<IActionResult> To(ShareData request)
+        {
             // var (id, _, _, _) = HttpContext.GetAuthTokenInfo();
 
-            try {
+            try
+            {
                 var client = _azureCosmos.GetCosmosClient();
-                Syllabus syllabusD = null;
+
                 //需要判断id== req.issuer  才能进行授权操作
                 if (request.scope.Equals("school"))
                 {
-                    try {
-                          syllabusD = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<Syllabus>(request.syllabusId, new PartitionKey($"Syllabus-{request.school}"));
-                    } catch (CosmosException ex) {
-                        if (ex.Status == 404) {
-                            await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/to\n{ex.Message}{ex.StackTrace}{request.ToJsonString()}", GroupNames.成都开发測試群組);
-                            return Ok(new { code = 404 });
-                        }
-                    }
-                    if (request.opt .Equals("del"))
+                    if (request.syllabus.IsNotEmpty())
                     {
-                        if (syllabusD.auth.IsNotEmpty())
+                        foreach (var quest in request.syllabus)
                         {
-                            List<SyllabusAuth> syllabusAuths = new List<SyllabusAuth>();
-                            syllabusD.auth.ForEach(x => {
-                                if (request.tmdInfo.Select(tmd => tmd.tmdid).Contains(x.tmdid)) {
-                                    syllabusAuths.Add(x);
+                            Syllabus syllabusD = null;
+                            try
+                            {
+                                syllabusD = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<Syllabus>(quest.syllabusId, new PartitionKey($"Syllabus-{request.school}"));
+                            }
+                            catch (CosmosException ex)
+                            {
+                                if (ex.Status == 404)
+                                {
+                                    await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/to\n{ex.Message}{ex.StackTrace}{request.ToJsonString()}", GroupNames.成都开发測試群組);
+                                    return Ok(new { code = 404 });
                                 }
-                            });
-                            syllabusAuths.ForEach(x => {
-                                syllabusD.auth.Remove(x);
-                            });
-                            await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Syllabus>(syllabusD, request.syllabusId, new PartitionKey($"Syllabus-{request.school}"));
-                            request.tmdInfo.ForEach(async x => {
-                                await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<Share>(request.syllabusId, new PartitionKey($"Share-{request.type}-{x.tmdid}"));
-                            });
-
-                        }
-                    }
-                    else if (request.opt.Equals("add") || request.opt.Equals("edit"))
-                    {
-                        var schresponse = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(request.school.ToString(), new PartitionKey("Base"));
-                        string schname = string.Empty;
-                        if (schresponse.Status == 200)
-                        {
-                            using var schjson = await JsonDocument.ParseAsync(schresponse.ContentStream);
-                            schjson.RootElement.TryGetProperty("name", out JsonElement jsonschname);
-                            schname = jsonschname.ToString();
-                        }
-                        else
-                        {
-                            return BadRequest();
-                        }
-                        (Syllabus syllabus, List<Share> shares) = DoAuth(request, syllabusD);
-                        foreach (var x in shares)
-                        {
-                            await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<Share>(x, new PartitionKey($"{x.code}"));
-                            //发送共编或分享通知
-                            string to = x.code.Replace("Share-", "").Replace($"{x.type}-", "");
-                            //如果被邀请人与邀请人相同 则不发通知。
-                            if (to.Equals(x.issuer))
+                            }
+                            if (request.opt.Equals("del"))
                             {
-                                continue;
+                                if (syllabusD.auth.IsNotEmpty())
+                                {
+                                    List<SyllabusAuth> syllabusAuths = new List<SyllabusAuth>();
+                                    syllabusD.auth.ForEach(x => {
+                                        if (request.tmdInfo.Select(tmd => tmd.tmdid).Contains(x.tmdid))
+                                        {
+                                            syllabusAuths.Add(x);
+                                        }
+                                    });
+                                    syllabusAuths.ForEach(x => {
+                                        syllabusD.auth.Remove(x);
+                                    });
+                                    await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Syllabus>(syllabusD, quest.syllabusId, new PartitionKey($"Syllabus-{request.school}"));
+                                    request.tmdInfo.ForEach(async x => {
+                                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<Share>(quest.syllabusId, new PartitionKey($"Share-{request.type}-{x.tmdid}"));
+                                    });
+
+                                }
                             }
-                            Notification notification = new Notification
+                            else if (request.opt.Equals("add") || request.opt.Equals("edit"))
                             {
-                                hubName = "hita",
-                                type = "msg",
-                                from = $"ies5:{_option.Location}:{request.school}",
-                                to = new List<string>() { x.code.Replace("Share-", "").Replace($"{x.type}-", "") },
-                                label = $"{x.type}_syllabus",
-                                body = new { location = _option.Location, biz = x.type, tmdid = x.issuer, tmdname=x.issuerName, schoolcode = $"{request.school}", schoolname = $"{schname}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
-                                expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
-                            };
-                            var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
-                            var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
-                            var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
-                            var location = _option.Location;
-                            var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
+                                var schresponse = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(request.school.ToString(), new PartitionKey("Base"));
+                                string schname = string.Empty;
+                                if (schresponse.Status == 200)
+                                {
+                                    using var schjson = await JsonDocument.ParseAsync(schresponse.ContentStream);
+                                    schjson.RootElement.TryGetProperty("name", out JsonElement jsonschname);
+                                    schname = jsonschname.ToString();
+                                }
+                                else
+                                {
+                                    return BadRequest();
+                                }
+                                (Syllabus syllabus, List<Share> shares) = DoAuth(request, syllabusD);
+                                foreach (var x in shares)
+                                {
+                                    await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<Share>(x, new PartitionKey($"{x.code}"));
+                                    //发送共编或分享通知
+                                    string to = x.code.Replace("Share-", "").Replace($"{x.type}-", "");
+                                    //如果被邀请人与邀请人相同 则不发通知。
+                                    if (to.Equals(x.issuer))
+                                    {
+                                        continue;
+                                    }
+                                    Notification notification = new Notification
+                                    {
+                                        hubName = "hita",
+                                        type = "msg",
+                                        from = $"ies5:{_option.Location}:{request.school}",
+                                        to = new List<string>() { x.code.Replace("Share-", "").Replace($"{x.type}-", "") },
+                                        label = $"{x.type}_syllabus",
+                                        body = new { location = _option.Location, biz = x.type, tmdid = x.issuer, tmdname = x.issuerName, schoolcode = $"{request.school}", schoolname = $"{schname}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
+                                        expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
+                                    };
+                                    var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
+                                    var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
+                                    var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
+                                    var location = _option.Location;
+                                    var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
+                                }
+                                await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<Syllabus>(syllabus, new PartitionKey($"Syllabus-{request.school}"));
+                            }
                         }
-                        await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<Syllabus>(syllabus, new PartitionKey($"Syllabus-{request.school}"));
                     }
                 }
                 else if (request.scope.Equals("private"))
                 {
-                    try { 
-                      syllabusD = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Syllabus>(request.syllabusId, new PartitionKey($"Syllabus-{request.issuer}"));
-                    }
-                    catch (CosmosException ex)
+                    if (request.syllabus.IsNotEmpty())
                     {
-                        if (ex.Status == 404)
+                        foreach (var quest in request.syllabus)
                         {
-                            await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/to\n{ex.Message}{ex.StackTrace}{request.ToJsonString()}", GroupNames.成都开发測試群組);
-                            return Ok(new { code = 404 });
-                        }
-                    }
-                    if (request.opt .Equals("del"))
-                    {
-                        if (syllabusD.auth.IsNotEmpty())
-                        {
-                            List<SyllabusAuth> syllabusAuths = new List<SyllabusAuth>();
-                            syllabusD.auth.ForEach(x => {
-                                if (request.tmdInfo.Select(tmd => x.tmdid).Contains(x.tmdid))
+                            Syllabus syllabusD = null;
+                            try
+                            {
+                                syllabusD = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Syllabus>(quest.syllabusId, new PartitionKey($"Syllabus-{request.issuer}"));
+                            }
+                            catch (CosmosException ex)
+                            {
+                                if (ex.Status == 404)
                                 {
-                                    syllabusAuths.Add(x);
+                                    await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/to\n{ex.Message}{ex.StackTrace}{request.ToJsonString()}", GroupNames.成都开发測試群組);
+                                    return Ok(new { code = 404 });
                                 }
-                            });
-                            syllabusAuths.ForEach(x => {
-                                syllabusD.auth.Remove(x);
-                            });
-                            await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Syllabus>(syllabusD, request.syllabusId, new PartitionKey($"Syllabus-{request.issuer}"));
-                            request.tmdInfo.ForEach(async x => {
-                                try {
-                                    await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<Share>(request.syllabusId, new PartitionKey($"Share-{request.type}-{x.tmdid}"));
-                                } catch 
+                            }
+                            if (request.opt.Equals("del"))
+                            {
+                                if (syllabusD.auth.IsNotEmpty())
                                 {
-                                    //仅处理找不到数据的情况
+                                    List<SyllabusAuth> syllabusAuths = new List<SyllabusAuth>();
+                                    syllabusD.auth.ForEach(x => {
+                                        if (request.tmdInfo.Select(tmd => x.tmdid).Contains(x.tmdid))
+                                        {
+                                            syllabusAuths.Add(x);
+                                        }
+                                    });
+                                    syllabusAuths.ForEach(x => {
+                                        syllabusD.auth.Remove(x);
+                                    });
+                                    await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Syllabus>(syllabusD, quest.syllabusId, new PartitionKey($"Syllabus-{request.issuer}"));
+                                    request.tmdInfo.ForEach(async x => {
+                                        try
+                                        {
+                                            await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<Share>(quest.syllabusId, new PartitionKey($"Share-{request.type}-{x.tmdid}"));
+                                        }
+                                        catch
+                                        {
+                                            //仅处理找不到数据的情况
+                                        }
+                                    });
                                 }
-                            });
-                        }
-                    }
-                    else if (request.opt.Equals("add") || request.opt.Equals("edit"))
-                    {
-                        (Syllabus vlm, List<Share> shares) = DoAuth(request, syllabusD);
-                        foreach (var x in shares) {
-                            await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<Share>(x, new PartitionKey($"{x.code}"));
-                            //发送共编或分享通知
-                            string to = x.code.Replace("Share-", "").Replace($"{x.type}-", "");
-                            //如果被邀请人与邀请人相同 则不发通知。
-                            if (to.Equals(x.issuer)) 
-                            { 
-                                continue;
                             }
-                            Notification notification = new Notification
+                            else if (request.opt.Equals("add") || request.opt.Equals("edit"))
                             {
-                                hubName = "hita",
-                                type = "msg",
-                                from = $"ies5:{_option.Location}:private",
-                                to = new List<string>() { x.code.Replace("Share-", "") .Replace($"{x.type}-", "") },
-                                label = $"{x.type}_syllabus",
-                                body = new { location = _option.Location, biz = x.type, tmdid = x.issuer, tmdname = x.issuerName, status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
-                                expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
-                            };
-                            var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
-                            var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
-                            var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
-                            var location = _option.Location;
-                            var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
+                                (Syllabus vlm, List<Share> shares) = DoAuth(request, syllabusD);
+                                foreach (var x in shares)
+                                {
+                                    await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<Share>(x, new PartitionKey($"{x.code}"));
+                                    //发送共编或分享通知
+                                    string to = x.code.Replace("Share-", "").Replace($"{x.type}-", "");
+                                    //如果被邀请人与邀请人相同 则不发通知。
+                                    if (to.Equals(x.issuer))
+                                    {
+                                        continue;
+                                    }
+                                    Notification notification = new Notification
+                                    {
+                                        hubName = "hita",
+                                        type = "msg",
+                                        from = $"ies5:{_option.Location}:private",
+                                        to = new List<string>() { x.code.Replace("Share-", "").Replace($"{x.type}-", "") },
+                                        label = $"{x.type}_syllabus",
+                                        body = new { location = _option.Location, biz = x.type, tmdid = x.issuer, tmdname = x.issuerName, status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
+                                        expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
+                                    };
+                                    var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
+                                    var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
+                                    var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
+                                    var location = _option.Location;
+                                    var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
+                                }
+                                await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<Syllabus>(syllabusD, new PartitionKey($"Syllabus-{request.issuer}"));
+                            }
                         }
-                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<Syllabus>(syllabusD, new PartitionKey($"Syllabus-{request.issuer}"));
                     }
                 }
                 return Ok(new { code = 200 });
             }
-            catch (Exception ex) {
+            catch (Exception ex)
+            {
                 await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/to\n{ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
             }
             return Ok(new { code = 500 });
@@ -232,24 +258,27 @@ namespace TEAMModelOS.Controllers
             long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
             List<Share> shares = new List<Share>();
             request.tmdInfo.ForEach(xmd => {
-                var share = new Share
-                {
-                    id = request.syllabusId,
-                    volumeId = request.volumeId,
-                    volumeName = request.volumeName,
-                    syllabusName = request.syllabusName,
-                    code = $"Share-{request.type}-{xmd.tmdid}",
-                    pk = "Share",
-                    ttl = -1,
-                    issuer = request.issuer,
-                    issuerName=request.issuerName,
-                    createTime = now,
-                    school = request.school,
-                    scope = request.scope,
-                    type = request.type,
-                    agree = request.agree
-                };
-                shares.Add(share);
+                request.syllabus.ForEach(sbs => {
+                    var share = new Share
+                    {
+                        id = sbs.syllabusId,
+                        volumeId = request.volumeId,
+                        volumeName = request.volumeName,
+                        syllabusName = sbs.syllabusName,
+                        code = $"Share-{request.type}-{xmd.tmdid}",
+                        pk = "Share",
+                        ttl = -1,
+                        issuer = request.issuer,
+                        issuerName = request.issuerName,
+                        createTime = now,
+                        school = request.school,
+                        scope = request.scope,
+                        type = request.type,
+                        agree = request.agree,
+                        volumeAll = request.volumeAll,
+                    };
+                    shares.Add(share);
+                });
             });
 
             if (syllabus.auth.IsNotEmpty())
@@ -316,16 +345,20 @@ namespace TEAMModelOS.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("agree-share")]
         // [AuthToken(Roles = "Teacher")]
-        public async Task<IActionResult> AgreeShare(JsonElement request) {
-            try {
+        public async Task<IActionResult> AgreeShare(JsonElement request)
+        {
+            try
+            {
                 if (!request.TryGetProperty("type", out JsonElement type)) { return BadRequest(); }
                 if (!request.TryGetProperty("code", out JsonElement code)) { return BadRequest(); }
                 if (!request.TryGetProperty("ids", out JsonElement ids)) { return BadRequest(); }
                 if (!request.TryGetProperty("opt", out JsonElement opt)) { return BadRequest(); }
                 var client = _azureCosmos.GetCosmosClient();
-                if (ids.ValueKind.Equals(JsonValueKind.Array)) {
+                if (ids.ValueKind.Equals(JsonValueKind.Array))
+                {
                     List<string> idss = ids.ToObject<List<string>>();
-                    foreach (var id in idss) {
+                    foreach (var id in idss)
+                    {
                         Share share = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Share>($"{id}", new PartitionKey($"Share-{type}-{code}"));
                         if ($"{opt}".Equals("agree"))
                         {
@@ -338,7 +371,7 @@ namespace TEAMModelOS.Controllers
                         }
 
                         Syllabus syllabus = null;
-                        if (share.scope .Equals("school"))
+                        if (share.scope.Equals("school"))
                         {
                             try
                             {
@@ -349,7 +382,7 @@ namespace TEAMModelOS.Controllers
                                 //仅处理差不到数据的情况
                             }
                         }
-                        else if (share.scope .Equals("private"))
+                        else if (share.scope.Equals("private"))
                         {
                             try
                             {
@@ -379,11 +412,11 @@ namespace TEAMModelOS.Controllers
                                     }
                                 });
                             }
-                            if (share.scope .Equals("school"))
+                            if (share.scope.Equals("school"))
                             {
                                 syllabus = await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Syllabus>(syllabus, $"{id}", new PartitionKey($"Syllabus-{share.school}"));
                             }
-                            else if (share.scope .Equals("private"))
+                            else if (share.scope.Equals("private"))
                             {
                                 syllabus = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Syllabus>(syllabus, $"{id}", new PartitionKey($"Syllabus-{share.issuer}"));
                             }
@@ -391,7 +424,9 @@ namespace TEAMModelOS.Controllers
                     }
                 }
                 return Ok(new { status = 200 });
-            } catch (Exception ex) {
+            }
+            catch (Exception ex)
+            {
                 await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/agree-share()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
                 return Ok(new { status = 500 });
             }
@@ -404,7 +439,8 @@ namespace TEAMModelOS.Controllers
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("del-share")]
-        public async Task<IActionResult> DelShare(JsonElement request) {
+        public async Task<IActionResult> DelShare(JsonElement request)
+        {
             try
             {
                 var client = _azureCosmos.GetCosmosClient();
@@ -413,7 +449,8 @@ namespace TEAMModelOS.Controllers
                 if (!request.TryGetProperty("id", out JsonElement id)) { return BadRequest(); }
                 await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<Share>($"{id}", new PartitionKey($"Share-{type}-{code}"));
                 return Ok(new { status = 200 });
-            } catch (Exception ex)
+            }
+            catch (Exception ex)
             {
                 await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/del-share()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
                 return Ok(new { status = 500 });
@@ -427,7 +464,7 @@ namespace TEAMModelOS.Controllers
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("find")]
-       // [AuthToken(Roles = "Teacher")]
+        // [AuthToken(Roles = "Teacher")]
         public async Task<IActionResult> Find(JsonElement request)
         {
             try
@@ -439,7 +476,8 @@ namespace TEAMModelOS.Controllers
                 var client = _azureCosmos.GetCosmosClient();
                 StringBuilder queryText = new StringBuilder("select value(c) from c");
                 queryText.Append($" where c.type='{type}' ");
-                if (id.ValueKind.Equals(JsonValueKind.String) && !string.IsNullOrEmpty(id.GetString())) {
+                if (id.ValueKind.Equals(JsonValueKind.String) && !string.IsNullOrEmpty(id.GetString()))
+                {
                     queryText.Append($" and c.id='{id}'");
                 }
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Share>(queryText: queryText.ToString(),
@@ -447,13 +485,13 @@ namespace TEAMModelOS.Controllers
                 {
                     shares.Add(item);
                 }
-                var sharesGp  =  shares.GroupBy(x => new {id= x.volumeId ,code=x.scope=="school"?x.school:x.issuer, issuerName=x.issuerName }).Select(y=>new { id=y.Key.id,code=y.Key.code, issuerName=y.Key.issuerName, list=y.ToList()});
-                return Ok(new { shares = sharesGp ,status=200});
+                var sharesGp = shares.GroupBy(x => new { id = x.volumeId, code = x.scope == "school" ? x.school : x.issuer, issuerName = x.issuerName }).Select(y => new { id = y.Key.id, code = y.Key.code, issuerName = y.Key.issuerName, list = y.ToList() });
+                return Ok(new { shares = sharesGp, status = 200 });
             }
             catch (Exception ex)
             {
                 await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/find()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
-                return Ok(new {  status = 404 });
+                return Ok(new { status = 404 });
             }
 
         }
@@ -461,7 +499,7 @@ namespace TEAMModelOS.Controllers
         public record ShareView
         {
             public string scope { get; set; }
-           // public string code { get; set; }
+            // public string code { get; set; }
             public string school { get; set; }
             public string issuer { get; set; }
             public string volumeId { get; set; }
@@ -484,7 +522,7 @@ namespace TEAMModelOS.Controllers
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("view-share")]
-       [AuthToken(Roles = "teacher")]
+        [AuthToken(Roles = "teacher")]
         public async Task<IActionResult> View(ShareView request)
         {
             try
@@ -495,8 +533,8 @@ namespace TEAMModelOS.Controllers
                 string code = null;
                 List<string> sid = new List<string>();
                 request.syllabusId.ForEach(x => { sid.Add($"'{x}'"); });
-                var sidSql= string.Join(",", sid);
-                if (request.scope .Equals("school"))
+                var sidSql = string.Join(",", sid);
+                if (request.scope.Equals("school"))
                 {
                     code = request.school;
                     var queryslt = $"SELECT  value(c) FROM c where c.id in ({sidSql})";
@@ -508,9 +546,9 @@ namespace TEAMModelOS.Controllers
 
                     }
                     volume = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<Volume>(request.volumeId, new PartitionKey($"Volume-{code}"));
-                    
+
                 }
-                else if (request.scope .Equals("private"))
+                else if (request.scope.Equals("private"))
                 {
                     code = request.issuer;
                     var queryslt = $"SELECT  value(c) FROM c where c.id in ({sidSql})";
@@ -526,10 +564,11 @@ namespace TEAMModelOS.Controllers
                 {
                     return BadRequest();
                 }
-                
-                return Ok(new { volume,tree= treeNodes });
+
+                return Ok(new { volume, tree = treeNodes });
             }
-            catch (Exception ex) {
+            catch (Exception ex)
+            {
                 await _dingDing.SendBotMsg($"OS,{_option.Location},teacher/share/view()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
                 return BadRequest();
             }
@@ -548,5 +587,5 @@ namespace TEAMModelOS.Controllers
             return Ok();
         }
     }
-   
+
 }