Personalized.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <template>
  2. <div class="personalized">
  3. <!-- 标题 -->
  4. <div class="title-container" @click="goBack">
  5. <el-icon>
  6. <ArrowLeftBold />
  7. </el-icon>
  8. 评估报告
  9. </div>
  10. <!-- 评估报告内容 -->
  11. <div class="report-container">
  12. <!-- 课程开课率 -->
  13. <div class="left-box">
  14. <div class="left-top-box">
  15. <div class="text-content">
  16. <p>课程开课率</p>
  17. <p>50%</p>
  18. </div>
  19. </div>
  20. <!-- 进度条 -->
  21. <div class="left-bottom-box">
  22. <div class="demo-progress" v-for="item in progressData" :key="item.id">
  23. <p class="progress-desc">{{ item.desc }}</p>
  24. <el-progress :percentage="item.percentage" />
  25. </div>
  26. </div>
  27. </div>
  28. <!-- 互动完成率 -->
  29. <div class="middle-box">
  30. <div class="middle-top-box">
  31. <div class="middle-content">
  32. <p>互动完成率</p>
  33. <p>68%</p>
  34. </div>
  35. </div>
  36. <div class="middle-bottom-box">
  37. <div class="demo-progress" v-for="item in interactionData" :key="item.id">
  38. <p class="progress-desc">{{ item.desc }}</p>
  39. <el-progress :percentage="item.percentage" />
  40. </div>
  41. </div>
  42. </div>
  43. <div class="right-box">
  44. <!-- 问答次数 -->
  45. <div class="right-top-box">
  46. <div class="right-content">
  47. <p>AI问答次数</p>
  48. <p>172</p>
  49. </div>
  50. </div>
  51. <!-- 评语 -->
  52. <div class="right-bottom-box">
  53. <div class="comment-title">
  54. <p>评语</p>
  55. </div>
  56. <div class="comment-content">
  57. <p>
  58. 教师在AI通识课程的教学中展现出高度的专业素养与教学创新能力,能够有效结合理论知识与实际应用,激发学生对人工智能的兴趣与探索欲望。教学成果呈现出良好的结构性与针对性,课程内容紧贴时代发展,注重培养学生的跨学科思维与技术素养。在引导学生进行项目实践和思辨讨论方面,展现了出色的教学引导与组织能力,达成了“知AI、懂AI、用AI”的教学目标,成果显著,广受学生好评。
  59. 教师在AI通识课程的教学中展现出高度的专业素养与教学创新能力,能够有效结合理论知识与实际应用,激发学生对人工智能的兴趣与探索欲望。教学成果呈现出良好的结构性与针对性,课程内容紧贴时代发展,注重培养学生的跨学科思维与技术素养。在引导学生进行项目实践和思辨讨论方面,展现了出色的教学引导与组织能力,达成了“知AI、懂AI、用AI”的教学目标,成果显著,广受学生好评。
  60. 教师在AI通识课程的教学中展现出高度的专业素养与教学创新能力,能够有效结合理论知识与实际应用,激发学生对人工智能的兴趣与探索欲望。教学成果呈现出良好的结构性与针对性,课程内容紧贴时代发展,注重培养学生的跨学科思维与技术素养。在引导学生进行项目实践和思辨讨论方面,展现了出色的教学引导与组织能力,达成了“知AI、懂AI、用AI”的教学目标,成果显著,广受学生好评。
  61. </p>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. </template>
  68. <script setup>
  69. import { ref,onMounted } from "vue";
  70. import { ArrowLeftBold } from "@element-plus/icons-vue";
  71. import { saveRecord } from '@/api/personalized/index.js'
  72. import { useRouter } from "vue-router";
  73. const router = useRouter();
  74. // 返回首页
  75. const goBack = () => {
  76. router.back();
  77. };
  78. // 课程开课率进度条数据
  79. const progressData = ref([
  80. { id: 1, desc: "01 AI初体验", percentage: 50 },
  81. { id: 2, desc: "02 AI发展历史", percentage: 65 },
  82. { id: 3, desc: "03 AI与机器人", percentage: 40 },
  83. { id: 4, desc: "04 AI的超级大脑", percentage: 75 },
  84. { id: 5, desc: "05 AI的智能应用", percentage: 60 },
  85. { id: 6, desc: "06 AI的数据表征与感知智能", percentage: 80 },
  86. { id: 7, desc: "07 AI如何学习", percentage: 45 },
  87. { id: 8, desc: "08 AI伦理安全", percentage: 0 },
  88. ]);
  89. // 保存记录
  90. onMounted(()=>{
  91. let as = {
  92. "brpNjId": 1,
  93. "brpCtId": 1,
  94. "brpCourseId": 1,
  95. "brpType": "course",
  96. "brpProgress": 24
  97. }
  98. console.log(as);
  99. saveRecord(as).then(res=>{
  100. console.log(res);
  101. })
  102. })
  103. // 互动完成率进度条数据
  104. const interactionData = ref([
  105. { id: 1, desc: "01 AI初体验", percentage: 50 },
  106. { id: 2, desc: "02 AI发展历史", percentage: 65 },
  107. { id: 3, desc: "03 AI与机器人", percentage: 40 },
  108. { id: 4, desc: "04 AI的超级大脑", percentage: 75 },
  109. { id: 5, desc: "05 AI的智能应用", percentage: 60 },
  110. { id: 6, desc: "06 AI的数据表征与感知智能", percentage: 80 },
  111. { id: 7, desc: "07 AI如何学习", percentage: 45 },
  112. { id: 8, desc: "08 AI伦理安全", percentage: 0 },
  113. ]);
  114. </script>
  115. <style scoped lang="scss">
  116. @use "sass:math";
  117. // 定义rpx转换函数
  118. @function rpx($px) {
  119. @return math.div($px, 750) * 100vw;
  120. }
  121. .personalized {
  122. position: fixed;
  123. top: 0;
  124. left: 0;
  125. right: 0;
  126. bottom: 0;
  127. display: flex;
  128. flex-direction: column;
  129. background-color: #e2ddfc;
  130. gap: rpx(0);
  131. }
  132. .title-container {
  133. width: 100%;
  134. height: rpx(30);
  135. font-size: rpx(10);
  136. cursor: pointer;
  137. color: black;
  138. display: flex;
  139. /* 设置flex布局 */
  140. align-items: center;
  141. /* 垂直居中 */
  142. padding-left: rpx(15);
  143. /* 添加左侧内边距 */
  144. gap: rpx(5);
  145. /* 设置图标和文字间距 */
  146. }
  147. .report-container {
  148. // width: 100%;
  149. height: 100%;
  150. display: flex;
  151. gap: rpx(10);
  152. padding: rpx(20);
  153. }
  154. .left-box,
  155. .middle-box {
  156. flex: 1;
  157. height: 100%;
  158. background: rgb(255, 255, 255, 0.5);
  159. border: 1px solid white;
  160. border-radius: rpx(10);
  161. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  162. display: flex;
  163. flex-direction: column;
  164. }
  165. .left-top-box {
  166. background-color: #ffcf1199;
  167. display: flex;
  168. align-items: center;
  169. /* 垂直居中 */
  170. justify-content: center;
  171. /* 水平居中 */
  172. border-radius: rpx(8);
  173. }
  174. .text-content {
  175. text-align: center;
  176. color: #ff4d00;
  177. }
  178. .middle-content {
  179. text-align: center;
  180. color: #009b03;
  181. }
  182. .right-content {
  183. text-align: center;
  184. color: #4316ff;
  185. }
  186. .text-content p,
  187. .middle-content p,
  188. .right-content p {
  189. margin: 0;
  190. padding: 0;
  191. }
  192. .text-content p:first-child,
  193. .middle-content p:first-child,
  194. .right-content p:first-child {
  195. font-size: rpx(10);
  196. }
  197. .text-content p:nth-child(2),
  198. .middle-content p:nth-child(2),
  199. .right-content p:nth-child(2) {
  200. font-size: rpx(30);
  201. font-weight: 600;
  202. }
  203. .middle-top-box {
  204. background-color: #5aeb6b99;
  205. display: flex;
  206. align-items: center;
  207. /* 垂直居中 */
  208. justify-content: center;
  209. /* 水平居中 */
  210. border-radius: rpx(8);
  211. }
  212. .left-top-box,
  213. .middle-top-box {
  214. height: 30%; // 上盒子占据30%高度
  215. border-radius: rpx(8);
  216. }
  217. .left-bottom-box,
  218. .middle-bottom-box {
  219. flex: 1; // 下盒子占据剩余高度
  220. }
  221. .right-box {
  222. flex: 0.8;
  223. height: 100%;
  224. display: flex;
  225. flex-direction: column;
  226. gap: rpx(10);
  227. }
  228. .right-top-box {
  229. height: 30%; // 上盒子占据30%高度
  230. background: #a089ff80;
  231. border-radius: rpx(8);
  232. border: 1px solid white;
  233. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  234. display: flex;
  235. align-items: center;
  236. /* 垂直居中 */
  237. justify-content: center;
  238. /* 水平居中 */
  239. }
  240. .right-bottom-box {
  241. flex: 1; // 下盒子占据剩余高度
  242. background: rgb(255, 255, 255, 0.5);
  243. border-radius: rpx(8);
  244. border: 1px solid white;
  245. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  246. }
  247. // 课程开课率进度条
  248. .demo-progress {
  249. padding-left: rpx(10);
  250. padding-right: rpx(10);
  251. padding-bottom: rpx(3);
  252. }
  253. .demo-progress .el-progress--line,
  254. .middle-bottom-box .el-progress--line {
  255. margin-left: auto;
  256. }
  257. ::v-deep(.el-progress-bar__outer) {
  258. background-color: #fff;
  259. }
  260. ::v-deep(.el-progress-bar__inner) {
  261. background-color: #ffcf1199;
  262. }
  263. ::v-deep(.el-progress__text) {
  264. color: black;
  265. position: absolute;
  266. top: -10px;
  267. right: 0;
  268. transform: translateY(-100%);
  269. }
  270. .progress-desc {
  271. font-size: rpx(8);
  272. color: black;
  273. margin-bottom: rpx(0);
  274. text-align: left;
  275. }
  276. // 互动完成率
  277. .middle-bottom-box ::v-deep(.el-progress-bar__inner) {
  278. background-color: #5aeb6b99;
  279. }
  280. // 评语样式
  281. .comment-title {
  282. width: 100%;
  283. text-align: left;
  284. margin-bottom: rpx(10);
  285. color: #8F74FF;
  286. font-size: rpx(8);
  287. padding-left: rpx(10);
  288. }
  289. .comment-content {
  290. border-radius: rpx(8);
  291. padding: rpx(10);
  292. height: rpx(150);
  293. overflow-y: auto;
  294. text-align: justify;
  295. }
  296. .comment-content p {
  297. margin: 0;
  298. font-size: rpx(8);
  299. line-height: 1.5;
  300. color: #333;
  301. }
  302. // 修改滚动条样式
  303. .comment-content::-webkit-scrollbar {
  304. width: rpx(2); // 滚动条宽度
  305. }
  306. .comment-content::-webkit-scrollbar-track {
  307. background: #f1f1f1; // 滚动条轨道背景色
  308. border-radius: rpx(3);
  309. }
  310. .comment-content::-webkit-scrollbar-thumb {
  311. background: #8F74FF; // 滚动条滑块颜色
  312. border-radius: rpx(3); // 滚动条滑块圆角
  313. }
  314. .comment-content::-webkit-scrollbar-thumb:hover {
  315. background: #7a5dff; // 滚动条滑块悬停颜色
  316. }
  317. </style>