score.vue 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756
  1. <template>
  2. <div class="pb_content" style="width: 100%">
  3. <div
  4. class="pb_head"
  5. style="
  6. display: flex;
  7. flex-direction: row;
  8. flex-wrap: nowrap;
  9. justify-content: space-between;
  10. align-items: center;
  11. "
  12. >
  13. <div>
  14. <span>评分管理</span>
  15. </div>
  16. <div @click="goTo('/eventCenter?steps=' + '1')" class="clear">返回</div>
  17. </div>
  18. <div class="touTop" v-if="CourseType.length > 0">
  19. <div class="touLeft">
  20. <div class="sTop">
  21. <div>
  22. <div
  23. class="all_choose"
  24. v-for="(item, index) in CourseType[0]"
  25. :key="index"
  26. >
  27. <span>{{ item.name }}</span>
  28. <el-select
  29. v-model="courseTypeId[item.id]"
  30. placeholder="请选择"
  31. @change="search"
  32. >
  33. <el-option label="全部" value="1">全部</el-option>
  34. <el-option
  35. v-for="item1 in CourseTypeJson[item.id]"
  36. :key="item1.id"
  37. :label="item1.name"
  38. :value="item1.id"
  39. >
  40. </el-option>
  41. </el-select>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="aName">
  46. <div class="search" @click="search">
  47. <img src="../../../assets/icon/search.png" alt="" />
  48. </div>
  49. <el-input
  50. v-model="anliName"
  51. auto-complete="off"
  52. placeholder="请输入案例名称"
  53. ></el-input>
  54. <div @click="clear" class="clear">重置</div>
  55. <!-- @input="search" -->
  56. </div>
  57. </div>
  58. <!-- 导出所有评分数据 -->
  59. <!-- <el-button
  60. v-show="false"
  61. type="primary"
  62. size="small"
  63. @click="exportAllScore"
  64. style="margin-right: 10px"
  65. >导出Excel</el-button
  66. > -->
  67. <!-- 导出个人评分数据 -->
  68. <!-- <el-button
  69. v-show="false"
  70. type="primary"
  71. size="small"
  72. @click="exportScoreByUid"
  73. style="margin-right: 10px"
  74. >导出Excel</el-button
  75. > -->
  76. </div>
  77. <div v-if="isNoTableData" class="isNoMessage">
  78. <img src="../../../assets/icon/isNoMessage.png" alt />
  79. </div>
  80. <div
  81. class="pb_content_body"
  82. style="margin: 0 auto"
  83. v-if="tableData.length > 0"
  84. >
  85. <div class="student_table">
  86. <el-table
  87. ref="table"
  88. :data="tableData"
  89. border
  90. :fit="true"
  91. v-loading="isLoading"
  92. style="width: 100%;"
  93. @sort-change="ownScoreSort"
  94. :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
  95. :row-class-name="tableRowClassName"
  96. :default-sort = "{prop: 'ownScore', order: 'descending'}"
  97. >
  98. <el-table-column label="序号" min-width="5" align="center">
  99. <template slot-scope="scope">
  100. <div>
  101. {{ (page - 1) * 10 + scope.$index + 1 }}
  102. </div>
  103. </template>
  104. </el-table-column>
  105. <el-table-column
  106. label="创建人"
  107. min-width="5"
  108. align="center"
  109. v-if="false"
  110. >
  111. <template slot-scope="scope">
  112. <div class="userImg">
  113. <div>
  114. {{ scope.row.uname }}
  115. </div>
  116. </div>
  117. </template>
  118. </el-table-column>
  119. <el-table-column label="项目案例" min-width="20" align="center">
  120. <template slot-scope="scope">
  121. <div>
  122. {{ scope.row.info.title ? scope.row.info.title : "暂无名称" }}
  123. </div>
  124. </template>
  125. </el-table-column>
  126. <el-table-column
  127. label="案例分类"
  128. min-width="20"
  129. align="center"
  130. v-if="['0','2'].includes(tType)"
  131. >
  132. <template slot-scope="scope">
  133. <div>{{ scope.row.typename ? scope.row.typename : "-" }}</div>
  134. </template>
  135. </el-table-column>
  136. <el-table-column
  137. label="我的评分"
  138. min-width="10"
  139. align="center"
  140. prop="ownScore"
  141. sortable="custom"
  142. v-if="tType == 2"
  143. >
  144. <!-- <template slot="header">
  145. <div style="display: flex;float: left;align-items: center;position: relative;">
  146. <el-tooltip effect="light" :content="`一等90分以上 占比${ratingData.one[1]}%,二等75-89 占比${ratingData.two[1]}%,三等60-74 占比${ratingData.three[1]}%`" placement="top">
  147. <div style="position:relative;left:15px;top:5px;">我的评分</div>
  148. </el-tooltip>
  149. </div>
  150. </template> -->
  151. <template slot-scope="scope">
  152. <div>{{ scope.row.ownScore ? scope.row.ownScore : "-" }}</div>
  153. </template>
  154. </el-table-column>
  155. <el-table-column
  156. label="所属单位"
  157. min-width="10"
  158. align="center"
  159. v-if="tType == 0"
  160. >
  161. <template slot-scope="scope">
  162. <div>
  163. {{ scope.row.school ? scope.row.school : "暂无单位" }}
  164. </div>
  165. </template>
  166. </el-table-column>
  167. <el-table-column
  168. label="评委姓名/分数"
  169. min-width="10"
  170. align="center"
  171. v-if="tType == 0"
  172. >
  173. <template slot-scope="scope">
  174. <div
  175. v-for="(item, index) in scope.row.scoreList"
  176. :key="index"
  177. v-if="scope.row.scoreList.length > 0"
  178. >
  179. {{ item.name + "/" + item.score }}
  180. </div>
  181. <div v-else>"-"</div>
  182. </template>
  183. </el-table-column>
  184. <!-- <el-table-column
  185. label="评委姓名/分数"
  186. min-width="10"
  187. align="center"
  188. v-if="tType == 0"
  189. >
  190. <template slot-scope="scope">
  191. <div>
  192. {{
  193. scope.row.secondPw
  194. ? scope.row.secondPw.name + "/" + scope.row.secondPw.score
  195. : "-"
  196. }}
  197. </div>
  198. </template>
  199. </el-table-column> -->
  200. <el-table-column
  201. label="平均得分"
  202. min-width="10"
  203. align="center"
  204. sortable="custom"
  205. v-if="tType == 0"
  206. >
  207. <!-- <template slot="header">
  208. <div style="display: flex;float: left;align-items: center;position: relative;">
  209. <el-tooltip effect="light" :content="`一等90分以上 占比${ratingDataAdmin.one[1]}%,二等75-89 占比${ratingDataAdmin.two[1]}%,三等60-74 占比${ratingDataAdmin.three[1]}%`" placement="top">
  210. <div style="position:relative;left:40px;top:5px;">平均得分</div>
  211. </el-tooltip>
  212. </div>
  213. </template> -->
  214. <template slot-scope="scope">
  215. <div>{{ scope.row.scoreList.length>0?scope.row.scoreList.length>=2?scope.row.sum ? scope.row.sum : "-":"-":""}}</div>
  216. <!-- <div>{{ scope.row.sum ? scope.row.sum : "-" }}</div> -->
  217. </template>
  218. </el-table-column>
  219. <!-- <el-table-column
  220. label="所获奖项"
  221. min-width="10"
  222. align="center"
  223. v-if="tType == 2"
  224. >
  225. <template slot-scope="scope">
  226. <div>
  227. {{
  228. scope.row.award == 1
  229. ? "特等奖"
  230. : scope.row.award == 2
  231. ? "一等奖"
  232. : scope.row.award == 3
  233. ? "二等奖"
  234. : scope.row.award == 4
  235. ? "三等奖"
  236. : scope.row.award == 5
  237. ? "四等奖"
  238. : "-"
  239. }}
  240. </div>
  241. </template>
  242. </el-table-column> -->
  243. <el-table-column
  244. label="评分时间"
  245. min-width="10"
  246. align="center"
  247. v-if="tType == 2"
  248. >
  249. <template slot-scope="scope">
  250. <div>{{ scope.row.scoreTime ? scope.row.scoreTime : "-" }}</div>
  251. </template>
  252. </el-table-column>
  253. <el-table-column label="操作" min-width="20" width="100">
  254. <template slot-scope="scope">
  255. <div class="tableButton">
  256. <div
  257. v-if="tType == 0"
  258. @click="
  259. goTo(
  260. '/anliDetail?aid=' +
  261. scope.row.id +
  262. '&userid=' +
  263. userid +
  264. '&oid=' +
  265. oid +
  266. '&org=' +
  267. org +
  268. '&tType=' +
  269. tType
  270. )
  271. "
  272. >
  273. 查看
  274. </div>
  275. <!-- <div @click="openScore(scope.row, 1)">立即评分</div> -->
  276. <div
  277. v-if="tType == 2"
  278. @click="
  279. goTo(
  280. '/anliDetail?aid=' +
  281. scope.row.id +
  282. '&userid=' +
  283. userid +
  284. '&oid=' +
  285. oid +
  286. '&org=' +
  287. org +
  288. '&tType=' +
  289. tType
  290. )
  291. "
  292. >
  293. 立即评分
  294. </div>
  295. <!-- <div @click="openScore(scope.row, 2)">推荐</div> -->
  296. </div>
  297. </template>
  298. </el-table-column>
  299. </el-table>
  300. </div>
  301. <div class="student_page">
  302. <el-pagination
  303. background
  304. layout="prev, pager, next"
  305. :page-size="10"
  306. :total="total"
  307. v-if="page && tableData.length"
  308. style="padding-bottom: 20px"
  309. @current-change="handleCurrentChange"
  310. >
  311. </el-pagination>
  312. <el-tooltip v-if="tType=='2'" effect="light" :content="`评分比例为一等90分以上占比30%,二等 75-89分占比40%,三等60-74分占比30%`" placement="top-start">
  313. <div class="rating_information">
  314. <div class="ri-card" :style="`background-color: ${Math.abs(30-ratingData.one[1])<=5?'#E2F0D9':'#FCE4D6'}`">90分以上:{{ratingData.one[0]}}个 {{ratingData.one[1]}}%</div>
  315. <div class="ri-card" :style="`background-color: ${Math.abs(40-ratingData.two[1])<=5?'#E2F0D9':'#FCE4D6'}`">89-75分:{{ratingData.two[0]}}个 {{ratingData.two[1]}}%</div>
  316. <div class="ri-card" :style="`background-color: ${Math.abs(30-ratingData.three[1])<=5?'#E2F0D9':'#FCE4D6'}`">74-60分以上:{{ratingData.three[0]}}个 {{ratingData.three[1]}}%</div>
  317. <div class="ri-card" :style="`background-color: #FCE4D6`" v-if="ratingData.four[0]!=0">60分以下:{{ratingData.four[0]}}个 {{ratingData.four[1]}}%</div>
  318. <div class="ri-card" style="background-color: #E7E6E6;">未评分:{{ratingData.five[0]}}个 {{ratingData.five[1]}}%</div>
  319. </div>
  320. </el-tooltip>
  321. <el-tooltip v-if="tType=='0'" effect="light" :content="`评分比例为一等90分以上占比30%,二等 75-89分占比40%,三等60-74分占比30%`" placement="top-start">
  322. <div class="rating_information">
  323. <div class="ri-card" :style="`background-color: ${Math.abs(30-ratingDataAdmin.one[1])<=5?'#E2F0D9':'#FCE4D6'}`">90分以上:{{ratingDataAdmin.one[0]}}个 {{ratingDataAdmin.one[1]}}%</div>
  324. <div class="ri-card" :style="`background-color: ${Math.abs(40-ratingDataAdmin.two[1])<=5?'#E2F0D9':'#FCE4D6'}`">89-75分:{{ratingDataAdmin.two[0]}}个 {{ratingDataAdmin.two[1]}}%</div>
  325. <div class="ri-card" :style="`background-color: ${Math.abs(30-ratingDataAdmin.three[1])<=5?'#E2F0D9':'#FCE4D6'}`">74-60分以上:{{ratingDataAdmin.three[0]}}个 {{ratingDataAdmin.three[1]}}%</div>
  326. <div class="ri-card" :style="`background-color: #FCE4D6`" v-if="ratingDataAdmin.four[0]!=0">60分以下:{{ratingDataAdmin.four[0]}}个 {{ratingDataAdmin.four[1]}}%</div>
  327. <div class="ri-card" style="background-color: #E7E6E6;">未评分:{{ratingDataAdmin.five[0]}}个 {{ratingDataAdmin.five[1]}}%</div>
  328. </div>
  329. </el-tooltip>
  330. </div>
  331. </div>
  332. <el-dialog
  333. title="评分"
  334. :visible.sync="dialogVisibleScore"
  335. :append-to-body="true"
  336. width="25%"
  337. height="80%"
  338. :before-close="handleClose"
  339. class="dialog_diy customWidth1"
  340. >
  341. <div class="scoreBox" v-for="(s, sIndex) in scoreDetail" :key="sIndex">
  342. <div class="scoreCss">
  343. <div class="scoreTitle">
  344. <div><img src="../../../assets/avatar.png" alt="" /></div>
  345. <div>{{ s.uname }}</div>
  346. </div>
  347. <div class="anliTitle">
  348. <div>案例名称</div>
  349. <div>{{ s.title }}</div>
  350. </div>
  351. <div class="anliBrief">
  352. <div>案例简介</div>
  353. <div style="width: 650px; height: 150px; overflow: auto">
  354. {{ s.detail }}
  355. </div>
  356. </div>
  357. <div class="anliScore">
  358. <div>请选择评分</div>
  359. <div>
  360. <div class="scoreDiv">
  361. <div>项目式学习</div>
  362. <div>
  363. <el-input
  364. placeholder="输入分数"
  365. v-model="s.scoreAll.first"
  366. @change="isNumber($event, 1)"
  367. ></el-input>
  368. </div>
  369. </div>
  370. <div class="scoreDiv">
  371. <div>项目成果</div>
  372. <div>
  373. <el-input
  374. placeholder="输入分数"
  375. v-model="s.scoreAll.second"
  376. @change="isNumber($event, 2)"
  377. ></el-input>
  378. </div>
  379. </div>
  380. <div class="scoreDiv">
  381. <div>项目评价</div>
  382. <div>
  383. <el-input
  384. placeholder="输入分数"
  385. v-model="s.scoreAll.third"
  386. @change="isNumber($event, 3)"
  387. ></el-input>
  388. </div>
  389. </div>
  390. <!-- <div class="scoreDiv">
  391. <div>评审维度4</div>
  392. <div>
  393. <el-input
  394. placeholder="输入分数"
  395. v-model="s.scoreAll.fourth"
  396. @change="isNumber($event, 4)"
  397. ></el-input>
  398. </div>
  399. </div>
  400. <div class="scoreDiv">
  401. <div>评审维度5</div>
  402. <div>
  403. <el-input
  404. placeholder="输入分数"
  405. v-model="s.scoreAll.fivth"
  406. @change="isNumber($event, 5)"
  407. ></el-input>
  408. </div>
  409. </div> -->
  410. </div>
  411. </div>
  412. <div class="anliContent">
  413. <textarea
  414. :rows="5"
  415. class="tAreaCss"
  416. placeholder="请输入评语。"
  417. v-model="s.scoreAll.content"
  418. ></textarea>
  419. </div>
  420. <div class="addScore" @click="addScore">进行评分</div>
  421. </div>
  422. </div>
  423. </el-dialog>
  424. <el-dialog
  425. title="推荐省级评奖"
  426. :visible.sync="dialogVisibleRecommend"
  427. :append-to-body="true"
  428. width="25%"
  429. height="80%"
  430. :before-close="handleClose"
  431. class="dialog_diy customWidth1"
  432. >
  433. <div v-for="(r, rIndex) in scoreDetail" :key="rIndex">
  434. <div class="reTitle">
  435. <div>案例名称</div>
  436. <div>{{ r.title }}</div>
  437. </div>
  438. <div class="reDetail">
  439. <div>案例简介</div>
  440. <div>{{ r.detail }}</div>
  441. </div>
  442. <div class="reScore">
  443. <div>当前得分</div>
  444. <div>
  445. <span>{{ r.sumScore }}</span
  446. >分
  447. </div>
  448. </div>
  449. <div class="reBottom">
  450. <div>提示:点击确定提交,即可推送到市级进行评奖</div>
  451. <div @click="dialogVisibleRecommend = false">取消</div>
  452. <div @click="addRecommend">确定提交</div>
  453. </div>
  454. </div>
  455. </el-dialog>
  456. </div>
  457. </template>
  458. <script>
  459. export default {
  460. data() {
  461. return {
  462. userid: this.$route.query.userid
  463. ? this.$route.query.userid
  464. : this.$cookies.get("teacherInfo").userid,
  465. oid: this.$route.query.oid
  466. ? this.$route.query.oid
  467. : this.$cookies.get("teacherInfo").oid,
  468. org: this.$route.query.org
  469. ? this.$route.query.org
  470. : this.$cookies.get("teacherInfo").org,
  471. tType: this.$route.query.type
  472. ? this.$route.query.type
  473. : this.$cookies.get("teacherInfo").type,
  474. page: 1,
  475. total: 0,
  476. // anliType: "",
  477. tableHeight: "",
  478. isLoading: false,
  479. CourseType: [],
  480. CourseTypeJson: {},
  481. courseTypeId: {},
  482. courseTypeSon: [],
  483. anliName: "",
  484. anliBox: "",
  485. tableData: [],
  486. scoreListData:[],
  487. allScoreList:[],
  488. scoreFn:2,// 0 默认 1 升序 2 降序
  489. reviewer: "",
  490. reviewerBox: [],
  491. checkboxList: [],
  492. checkboxIdList: [],
  493. isNoTableData: false,
  494. isIndeterminate: false,
  495. checkAll: false,
  496. dialogVisibleScore: false,
  497. dialogVisibleRecommend: false,
  498. scoreDetail: [
  499. {
  500. id: "",
  501. uname: "",
  502. title: "",
  503. detail: "",
  504. scoreAll: {
  505. first: "",
  506. second: "",
  507. third: "",
  508. // fourth: "",
  509. // fivth: "",
  510. content: "",
  511. },
  512. sumScore: 0,
  513. },
  514. ],
  515. reCid: "",
  516. };
  517. },
  518. computed: {
  519. ratingData(){
  520. const myScore = this.allScoreList.filter(i=>i.scorer===this.userid)
  521. let one = [0,0];
  522. let two = [0,0];
  523. let three = [0,0];
  524. let four = [0,0];
  525. let five = [0,0]
  526. myScore.forEach(i=>{
  527. let score = JSON.parse(i.score);
  528. let total = (parseFloat(score.first)+parseFloat(score.second)+parseFloat(score.third))/3
  529. if(total>=90){
  530. one[0]++;
  531. }else if(total>=75 && total<=89){
  532. two[0]++;
  533. }else if(total>=60 && total<=74){
  534. three[0]++;
  535. }else{
  536. four[0]++;
  537. }
  538. })
  539. five[0] = this.total-myScore.length;
  540. one[1] = (one[0]/this.total*100).toFixed(0)
  541. two[1] = (two[0]/this.total*100).toFixed(0)
  542. three[1] = (three[0]/this.total*100).toFixed(0)
  543. four[1] = (four[0]/this.total*100).toFixed(0)
  544. five[1] = (five[0]/this.total*100).toFixed(0)
  545. return {one:one,two:two,three:three,four:four,five:five}
  546. },
  547. ratingDataAdmin(){
  548. const score = this.scoreListData;
  549. let one = [0,0];
  550. let two = [0,0];
  551. let three = [0,0];
  552. let four = [0,0];
  553. let five = [0,0]
  554. score.forEach(i=>{
  555. let sum = i.sum;
  556. if(!sum){
  557. return five[0]++
  558. }
  559. if(parseFloat(sum)>=90){
  560. return one[0]++
  561. }else if(parseFloat(sum)>=75 && parseFloat(sum)<=89){
  562. return two[0]++;
  563. }else if(parseFloat(sum)>=60 && parseFloat(sum)<=74){
  564. return three[0]++;
  565. }else{
  566. return four[0]++;
  567. }
  568. })
  569. one[1] = (one[0]/this.total*100).toFixed(0)
  570. two[1] = (two[0]/this.total*100).toFixed(0)
  571. three[1] = (three[0]/this.total*100).toFixed(0)
  572. four[1] = (four[0]/this.total*100).toFixed(0)
  573. five[1] = (five[0]/this.total*100).toFixed(0)
  574. return {one:one,two:two,three:three,four:four,five:five}
  575. }
  576. },
  577. mounted() {
  578. this.$nextTick(function () {
  579. this.tableHeight =
  580. window.innerHeight - this.$refs.table.$el.offsetTop - 200;
  581. if (this.tableHeight <= 530) {
  582. this.tableHeight = 530;
  583. }
  584. // 监听窗口大小变化
  585. let self = this;
  586. window.onresize = function () {
  587. self.tableHeight =
  588. window.innerHeight - self.$refs.table.$el.offsetTop - 200;
  589. if (self.tableHeight <= 530) {
  590. self.tableHeight = 530;
  591. }
  592. };
  593. });
  594. },
  595. methods: {
  596. tableRowClassName({ row, rowIndex }) {
  597. if ((rowIndex + 1) % 2 === 0) {
  598. return "even_row";
  599. } else {
  600. return "";
  601. }
  602. },
  603. handleCurrentChange(val) {
  604. this.page = val;
  605. this.getAnliList(this.reCid);
  606. },
  607. search() {
  608. this.page = 1;
  609. this.getAnliList(this.reCid);
  610. },
  611. goTo(path) {
  612. this.$router.push(path);
  613. },
  614. isNumber(e, t) {
  615. if (e.includes(".")) {
  616. this.$message.error("暂时不支持小数点评分");
  617. }
  618. let value = /^\d+$/.test(e);
  619. // let value = e.replace(/[^d]/g, ""); // 只能输入数字
  620. if (value == true) {
  621. if (e < 0) {
  622. this.$message.error("请输入大于0的数值");
  623. if (t == 1) {
  624. this.scoreDetail[0].scoreAll.first = "";
  625. } else if (t == 2) {
  626. this.scoreDetail[0].scoreAll.second = "";
  627. } else {
  628. this.scoreDetail[0].scoreAll.third = "";
  629. }
  630. // else if (t == 4) {
  631. // this.scoreDetail[0].scoreAll.fourth = "";
  632. // } else {
  633. // this.scoreDetail[0].scoreAll.fivth = "";
  634. // }
  635. return;
  636. } else if (e > 100) {
  637. this.$message.error("数值不能大于100");
  638. if (t == 1) {
  639. this.scoreDetail[0].scoreAll.first = "";
  640. } else if (t == 2) {
  641. this.scoreDetail[0].scoreAll.second = "";
  642. } else {
  643. this.scoreDetail[0].scoreAll.third = "";
  644. }
  645. // else if (t == 4) {
  646. // this.scoreDetail[0].scoreAll.fourth = "";
  647. // } else {
  648. // this.scoreDetail[0].scoreAll.fivth = "";
  649. // }
  650. return;
  651. }
  652. } else {
  653. if (t == 1) {
  654. this.scoreDetail[0].scoreAll.first = "";
  655. } else if (t == 2) {
  656. this.scoreDetail[0].scoreAll.second = "";
  657. } else {
  658. this.scoreDetail[0].scoreAll.third = "";
  659. }
  660. // else if (t == 4) {
  661. // this.scoreDetail[0].scoreAll.fourth = "";
  662. // } else {
  663. // this.scoreDetail[0].scoreAll.fivth = "";
  664. // }
  665. this.$message.error("请输入数字");
  666. return;
  667. }
  668. // value = value.replace(/^0+(d)/, "$1"); // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  669. // value = value.replace(/(d{15})d*/, "$1"); // 最多保留15位整数
  670. // this.height = value;
  671. },
  672. handleClose(done) {
  673. done();
  674. },
  675. clear() {
  676. for (var i = 0; i < this.CourseType[0].length; i++) {
  677. this.courseTypeId[this.CourseType[0][i].id] = "";
  678. }
  679. this.anliName = "";
  680. this.anliBox = "";
  681. this.getAnliList(this.reCid);
  682. },
  683. getAnliList(rc) {
  684. this.isLoading = true;
  685. var typeE = [];
  686. var typea, typeb, typec, typed;
  687. for (var i = 0; i < this.CourseType[0].length; i++) {
  688. if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
  689. // typeE.push(this.CourseType[0][i].id);
  690. typeE = [];
  691. } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
  692. typeE.push(this.CourseType[0][i].id);
  693. if (this.CourseType[0][i].name == "类型") {
  694. typea = this.courseTypeId[this.CourseType[0][i].id];
  695. } else if (this.CourseType[0][i].name == "学科") {
  696. typeb = this.courseTypeId[this.CourseType[0][i].id];
  697. }
  698. this.courseTypeSon.push(this.courseTypeId[this.CourseType[0][i].id]);
  699. }
  700. }
  701. let params = {
  702. typea: typea != undefined ? typea : "",
  703. typeb: typeb != undefined ? typeb : "",
  704. typec: typec != undefined ? typec : "",
  705. typed: typed != undefined ? typed : "",
  706. typeE: typeE.join(","),
  707. cn: this.anliBox == "" ? 0 : this.anliBox,
  708. cid: rc ? rc : "",
  709. title: this.anliName,
  710. };
  711. this.ajax
  712. .get(this.$store.state.api + "selectPointAll", params)
  713. .then((res) => {
  714. this.total = res.data[0].length > 0 ? res.data[0].length : 0;
  715. var scoreList = res.data[0];
  716. this.scoreListData = scoreList;
  717. for (var i = 0; i < scoreList.length; i++) {
  718. scoreList[i].info = JSON.parse(scoreList[i].info);
  719. if (scoreList[i].score != null) {
  720. var point = JSON.parse(scoreList[i].score);
  721. var a = parseInt(point.first);
  722. var b = parseInt(point.second);
  723. var c = parseInt(point.third);
  724. var sumScore = Math.round((a + b + c) / 3);
  725. scoreList[i].sum = sumScore;
  726. }
  727. }
  728. // 降序
  729. // scoreList.sort((item1, item2) => item2.sum - item1.sum);
  730. // 升序
  731. // scoreList.sort((item1, item2) => item1.sum - item2.sum);
  732. // const start = (this.page - 1) * 10;
  733. // const end = start + 10;
  734. // let pageData = scoreList.slice(start, end);
  735. this.selectPwScore(scoreList);
  736. this.isLoading = false;
  737. })
  738. .catch((err) => {
  739. console.error(err);
  740. });
  741. },
  742. selectPwScore(p) {
  743. this.ajax
  744. .get(this.$store.state.api + "selectAllScore")
  745. .then((res) => {
  746. var scoreList = res.data[0];
  747. this.allScoreList = scoreList;
  748. for (var j = 0; j < p.length; j++) {
  749. let sum = 0;
  750. let isScore = 0;
  751. p[j].scoreList = [];
  752. for (var i = 0; i < scoreList.length; i++) {
  753. if (p[j].id == scoreList[i].rid) {
  754. var point = JSON.parse(scoreList[i].score);
  755. var a = parseInt(point.first);
  756. var b = parseInt(point.second);
  757. var c = parseInt(point.third);
  758. var sumScore = Math.round((a + b + c) / 3);
  759. sum += sumScore;
  760. isScore++;
  761. if (scoreList[i].scorer == this.userid) {
  762. if (!p[j].ownScore) {
  763. p[j].ownScore = sumScore;
  764. }
  765. }
  766. p[j].scoreList.push({
  767. name: scoreList[i].scoreName,
  768. score: sumScore,
  769. });
  770. // else {
  771. // if (!p[j].secondPw) {
  772. // p[j].secondPw = {
  773. // score: sumScore,
  774. // name: scoreList[i].scoreName,
  775. // };
  776. // }
  777. // }
  778. }
  779. }
  780. p[j].sum = isScore == 0 ? 0 : (sum / isScore).toFixed(2);
  781. }
  782. if(this.scoreFn===1){//升序
  783. // 升序
  784. p.sort((a, b) => {
  785. let aScore = a.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?a.ownScore:a.sum===0?Number.MAX_VALUE: parseFloat(a.sum) : Number.MAX_VALUE;
  786. let bScore = b.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?b.ownScore:b.sum===0?Number.MAX_VALUE: parseFloat(b.sum) : Number.MAX_VALUE;
  787. return aScore - bScore;
  788. })
  789. }else if(this.scoreFn===2){//降序
  790. //降序
  791. p.sort((a, b) => {
  792. let aScore = a.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?a.ownScore:a.sum===0?-1: parseFloat(a.sum) : -1;
  793. let bScore = b.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?b.ownScore:b.sum===0?-1: parseFloat(b.sum) : -1;
  794. return bScore - aScore;
  795. });
  796. }
  797. sessionStorage.setItem("allScoreList",JSON.stringify(p.map(i=>i.id)))
  798. const start = (this.page - 1) * 10;
  799. const end = start + 10;
  800. let result = p.slice(start, end);
  801. console.log("==============================")
  802. console.log(result)
  803. console.log("++++++++++++++++++++++++++++++")
  804. result.forEach(i=>{
  805. let typeName = i.typename;
  806. if(typeName=="活动类" || typeName =="学科类")return;
  807. let replaceValue = "";
  808. // console.log(typeName.indexOf("活动类"))
  809. // console.log(typeName.indexOf("理科类"))
  810. if(typeName.indexOf("活动类")!=-1){
  811. replaceValue = typeName.replace("活动类","")
  812. console.log(replaceValue.split('/'))
  813. typeName = `活动类:${replaceValue.split('/').filter(f=>f!=='').join('/')}`
  814. }else if(typeName.indexOf("学科类")!=-1){
  815. replaceValue = typeName.replace("学科类","")
  816. console.log(replaceValue.split('/'))
  817. typeName = `学科类:${replaceValue.split('/').filter(f=>f!=='').join('/')}`
  818. }
  819. i.typename = typeName;
  820. })
  821. this.tableData = result;
  822. this.$forceUpdate();
  823. })
  824. .catch((err) => {
  825. console.error(err);
  826. });
  827. },
  828. selectType(rc) {
  829. this.ajax
  830. .get(this.$store.state.api + "selectMatTypeYT")
  831. .then((res) => {
  832. this.CourseType = res.data;
  833. for (var i = 0; i < res.data[0].length; i++) {
  834. for (var j = 0; j < res.data[1].length; j++) {
  835. if (res.data[0][i].id == res.data[1][j].pid) {
  836. if (!this.CourseTypeJson[res.data[0][i].id]) {
  837. this.CourseTypeJson[res.data[0][i].id] = [];
  838. }
  839. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  840. }
  841. }
  842. }
  843. if (rc) {
  844. this.getAnliList(rc);
  845. } else {
  846. this.getAnliList();
  847. }
  848. })
  849. .catch((err) => {
  850. console.error(err);
  851. });
  852. },
  853. getAdmin() {
  854. let params = {
  855. uid: this.userid,
  856. cn: "",
  857. page: this.page,
  858. };
  859. this.ajax
  860. .get(this.$store.state.api + "selectReviewer", params)
  861. .then((res) => {
  862. this.reviewerBox = res.data[0];
  863. })
  864. .catch((err) => {
  865. console.error(err);
  866. });
  867. },
  868. getReviewerOrAdmin() {
  869. if (this.tType == 2) {
  870. this.getUser();
  871. } else {
  872. this.selectType();
  873. }
  874. },
  875. getUser() {
  876. let params = {
  877. uid: this.userid,
  878. };
  879. this.ajax
  880. .get(this.$store.state.api + "selectCaseUser", params)
  881. .then((res) => {
  882. if (res.data[0].length > 0) {
  883. var reCid = res.data[0][0].aBox;
  884. this.reCid = reCid;
  885. this.selectType(reCid);
  886. } else {
  887. this.isNoTableData = true;
  888. }
  889. })
  890. .catch((err) => {
  891. console.error(err);
  892. });
  893. },
  894. openScore(a, t) {
  895. this.scoreDetail[0].id = a.id;
  896. this.scoreDetail[0].title = a.info.title;
  897. this.scoreDetail[0].detail = a.info.courseText;
  898. this.scoreDetail[0].uname = a.uname;
  899. this.getScore(a.id, t);
  900. },
  901. getScore(id, t) {
  902. let params = {
  903. rid: id,
  904. suser: this.userid,
  905. };
  906. this.ajax
  907. .get(this.$store.state.api + "selectScore", params)
  908. .then((res) => {
  909. if (res.data[0].length > 0) {
  910. this.scoreDetail[0].scoreAll = JSON.parse(res.data[0][0].score);
  911. var a = parseInt(this.scoreDetail[0].scoreAll.first);
  912. var b = parseInt(this.scoreDetail[0].scoreAll.second);
  913. var c = parseInt(this.scoreDetail[0].scoreAll.third);
  914. // var d = parseInt(this.scoreDetail[0].scoreAll.fourth);
  915. // var e = parseInt(this.scoreDetail[0].scoreAll.fivth);
  916. // this.scoreDetail[0].sumScore = Math.round((a + b + c + d + e) / 5);
  917. this.scoreDetail[0].sumScore = Math.round((a + b + c) / 3);
  918. } else {
  919. this.scoreDetail[0].scoreAll = {
  920. first: "",
  921. second: "",
  922. third: "",
  923. // fourth: "",
  924. // fivth: "",
  925. content: "",
  926. };
  927. this.scoreDetail[0].sumScore = 0;
  928. }
  929. if (t == 1) {
  930. this.dialogVisibleScore = true;
  931. } else {
  932. this.dialogVisibleRecommend = true;
  933. }
  934. })
  935. .catch((err) => {
  936. console.error(err);
  937. });
  938. },
  939. addScore() {
  940. if (this.scoreDetail[0].scoreAll.first == "") {
  941. this.$message.error("请将信息填写完整");
  942. return;
  943. } else if (this.scoreDetail[0].scoreAll.second == "") {
  944. this.$message.error("请将信息填写完整");
  945. return;
  946. } else if (this.scoreDetail[0].scoreAll.third == "") {
  947. this.$message.error("请将信息填写完整");
  948. return;
  949. }
  950. // else if (this.scoreDetail[0].scoreAll.fourth == "") {
  951. // this.$message.error("请将信息填写完整");
  952. // return;
  953. // } else if (this.scoreDetail[0].scoreAll.fivth == "") {
  954. // this.$message.error("请将信息填写完整");
  955. // return;
  956. // }
  957. let params = [
  958. {
  959. rid: this.scoreDetail[0].id,
  960. suser: this.userid,
  961. s: JSON.stringify(this.scoreDetail[0].scoreAll),
  962. },
  963. ];
  964. this.ajax
  965. .post(this.$store.state.api + "addScore", params)
  966. .then((res) => {
  967. this.$message({
  968. message: "评分成功",
  969. type: "success",
  970. });
  971. this.scoreDetail = [
  972. {
  973. id: "",
  974. uname: "",
  975. title: "",
  976. detail: "",
  977. scoreAll: {
  978. first: "",
  979. second: "",
  980. third: "",
  981. // fourth: "",
  982. // fivth: "",
  983. content: "",
  984. },
  985. sumScore: 0,
  986. },
  987. ];
  988. this.dialogVisibleScore = false;
  989. this.getReviewerOrAdmin();
  990. })
  991. .catch((err) => {
  992. console.error(err);
  993. });
  994. },
  995. addRecommend() {
  996. if (this.scoreDetail[0].sumScore == 0) {
  997. this.$message.error("还未评审,不可推荐");
  998. return;
  999. }
  1000. let params = {
  1001. id: this.scoreDetail[0].id,
  1002. rec: 2,
  1003. };
  1004. this.ajax
  1005. .get(this.$store.state.api + "updateRaceRec", params)
  1006. .then((res) => {
  1007. this.$message({
  1008. message: "推荐成功",
  1009. type: "success",
  1010. });
  1011. this.dialogVisibleRecommend = false;
  1012. })
  1013. .catch((err) => {
  1014. console.error(err);
  1015. });
  1016. },
  1017. // lookDetail(aid) {
  1018. // window.open(
  1019. // window.origin +
  1020. // "/#/anliDetail?aid=" +
  1021. // aid +
  1022. // "&userid=" +
  1023. // this.$store.state.userInfo.userid +
  1024. // "&oid=" +
  1025. // this.$store.state.userInfo.oid +
  1026. // "&tType=" +
  1027. // this.$store.state.userInfo.type
  1028. // );
  1029. // },
  1030. exportAllScore() {
  1031. this.ajax
  1032. .get(this.$store.state.api + "selectAllScore")
  1033. .then((res) => {
  1034. var scoreList = res.data[0];
  1035. // 将score值转换为对象
  1036. for (var i = 0; i < scoreList.length; i++) {
  1037. scoreList[i].score = JSON.parse(scoreList[i].score);
  1038. }
  1039. // 根据rid进行分组
  1040. var grouped = scoreList.reduce(function (acc, cur) {
  1041. if (!acc[cur.rid]) {
  1042. acc[cur.rid] = [];
  1043. }
  1044. acc[cur.rid].push(cur.score);
  1045. return acc;
  1046. }, {});
  1047. // 计算每组的first、second和third的平均值,并将结果存储在新的数组b中
  1048. var b = Object.keys(grouped).map(function (key) {
  1049. var scores = grouped[key];
  1050. var firstPw = Math.round(
  1051. (parseInt(scores[0].first) +
  1052. parseInt(scores[0].second) +
  1053. parseInt(scores[0].third)) /
  1054. 3
  1055. );
  1056. var secondPw = Math.round(
  1057. (parseInt(scores[1].first) +
  1058. parseInt(scores[1].second) +
  1059. parseInt(scores[1].third)) /
  1060. 3
  1061. );
  1062. var sum = ((firstPw + secondPw) / 2).toFixed(2);
  1063. return { rid: key, firstPw: firstPw, secondPw: secondPw, sum: sum };
  1064. });
  1065. for (var i = 0; i < b.length; i++) {
  1066. for (var j = 0; j < scoreList.length; j++) {
  1067. if (scoreList[j].rid == b[i].rid) {
  1068. if (!b[i].title) {
  1069. b[i].title = JSON.parse(scoreList[j].info).title;
  1070. }
  1071. }
  1072. }
  1073. }
  1074. this.exportExcel(b);
  1075. })
  1076. .catch((err) => {
  1077. this.isLoading = false;
  1078. console.error(err);
  1079. });
  1080. },
  1081. exportScoreByUid() {
  1082. this.ajax
  1083. .get(this.$store.state.api + "selectAllScore")
  1084. .then((res) => {
  1085. var scoreList = res.data[0];
  1086. let params = {
  1087. uid: this.userid,
  1088. };
  1089. this.ajax
  1090. .get(this.$store.state.api + "selectScoreByUid", params)
  1091. .then((res) => {
  1092. var scoreListByuid = res.data[0];
  1093. for (var i = 0; i < scoreList.length; i++) {
  1094. for (var j = 0; j < scoreListByuid.length; j++) {
  1095. if (scoreList[i].rid == scoreListByuid[j].rid) {
  1096. if (scoreList[i].scorer == scoreListByuid[j].scorer) {
  1097. var point = JSON.parse(scoreListByuid[j].score);
  1098. var a = parseInt(point.first);
  1099. var b = parseInt(point.second);
  1100. var c = parseInt(point.third);
  1101. var sumScore = Math.round((a + b + c) / 3);
  1102. scoreListByuid[j].firstPw = sumScore;
  1103. } else {
  1104. var point = JSON.parse(scoreList[i].score);
  1105. var a = parseInt(point.first);
  1106. var b = parseInt(point.second);
  1107. var c = parseInt(point.third);
  1108. var sumScore = Math.round((a + b + c) / 3);
  1109. scoreListByuid[j].secondPw = sumScore;
  1110. }
  1111. }
  1112. if (scoreListByuid[j].firstPw && scoreListByuid[j].secondPw) {
  1113. scoreListByuid[j].sum = (
  1114. (scoreListByuid[j].firstPw + scoreListByuid[j].secondPw) /
  1115. 2
  1116. ).toFixed(2);
  1117. scoreListByuid[j].title = JSON.parse(
  1118. scoreListByuid[j].info
  1119. ).title;
  1120. }
  1121. }
  1122. }
  1123. this.exportExcel(scoreListByuid);
  1124. })
  1125. .catch((err) => {
  1126. console.error(err);
  1127. });
  1128. })
  1129. .catch((err) => {
  1130. this.isLoading = false;
  1131. console.error(err);
  1132. });
  1133. },
  1134. exportExcel(t) {
  1135. var res = t;
  1136. //如果value的json字段的key值和想要的headers值不一致时,可做如下更改
  1137. //将和下面的Object.fromEntries结合,将json字段的key值改变为要求的excel的header值
  1138. var array = [];
  1139. for (var i = 0; i < res.length; i++) {
  1140. var _json = {};
  1141. _json["案例名称"] = res[i].title;
  1142. _json["评审1"] = res[i].firstPw;
  1143. _json["评审2"] = res[i].secondPw;
  1144. _json["平均分"] = res[i].sum;
  1145. array.push(_json);
  1146. }
  1147. var XLSX = require("xlsx");
  1148. const workbook = XLSX.utils.book_new(); //创建一个新的工作簿对象
  1149. let ws = XLSX.utils.json_to_sheet(array); //将json对象数组转化成工作表
  1150. // ws["!cols"] = [
  1151. // //设置每一列的宽度
  1152. // { wch: 50 },
  1153. // { wch: 50 },
  1154. // { wch: 50 },
  1155. // ];
  1156. XLSX.utils.book_append_sheet(workbook, ws, "sheet1"); //把sheet添加到workbook里,第三个参数是sheet名
  1157. XLSX.writeFile(workbook, "项目数据导出.xlsx");
  1158. // const wopts = { bookType: "xlsx", bookSST: false, type: "array" };//写入的样式bookType:输出的文件类型,type:输出的数据类型,bookSST: 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
  1159. // const wbout = XLSX.write(workbook, wopts);// 浏览器端和node共有的API,实际上node可以直接使用xlsx.writeFile来写入文件,但是浏览器没有该API
  1160. // FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }), `${title} demo.xlsx`);//保存文件
  1161. this.$message({
  1162. message: "导出成功",
  1163. type: "success",
  1164. });
  1165. },
  1166. // 我的评分排序
  1167. ownScoreSort(row,column){
  1168. if(row.order==="descending"){
  1169. this.scoreFn=2
  1170. }else if(row.order==="ascending"){
  1171. this.scoreFn=1
  1172. }else{
  1173. this.scoreFn=2
  1174. }
  1175. this.search()
  1176. }
  1177. },
  1178. created() {
  1179. // this.getAnliList();
  1180. this.getAdmin();
  1181. // this.selectType();
  1182. this.getReviewerOrAdmin();
  1183. },
  1184. };
  1185. </script>
  1186. <style scoped>
  1187. .el-popover {
  1188. min-width: 80px;
  1189. text-align: center;
  1190. }
  1191. </style>
  1192. <style scoped>
  1193. .dialog_diy1 >>> .el-dialog__header,
  1194. .dialog_diy >>> .el-dialog__header {
  1195. background: #3d67bd !important;
  1196. padding: 15px 20px;
  1197. }
  1198. .dialog_diy1 >>> .el-dialog__header {
  1199. text-align: center;
  1200. }
  1201. .dialog_diy1 >>> .el-dialog__title,
  1202. .dialog_diy >>> .el-dialog__title {
  1203. color: #fff;
  1204. }
  1205. .dialog_diy1 >>> .el-dialog__headerbtn,
  1206. .dialog_diy >>> .el-dialog__headerbtn {
  1207. top: 19px;
  1208. }
  1209. .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close,
  1210. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  1211. color: #fff;
  1212. }
  1213. .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close:hover,
  1214. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  1215. color: #fff;
  1216. }
  1217. .dialog_diy1 >>> .el-dialog__body,
  1218. .dialog_diy1 >>> .el-dialog__footer,
  1219. .dialog_diy >>> .el-dialog__body,
  1220. .dialog_diy >>> .el-dialog__footer {
  1221. background: #fafafa;
  1222. }
  1223. .disUoloadSty >>> .el-upload--picture-card {
  1224. display: none;
  1225. /* 上传按钮隐藏 */
  1226. }
  1227. .tou {
  1228. border-bottom: 1px solid #c9c9c9;
  1229. height: 50px;
  1230. font-size: 30px;
  1231. }
  1232. .touTop {
  1233. margin: 15px auto;
  1234. display: flex;
  1235. flex-direction: row;
  1236. flex-wrap: nowrap;
  1237. align-items: center;
  1238. justify-content: space-between;
  1239. width: 94%;
  1240. }
  1241. .touLeft {
  1242. display: flex;
  1243. flex-direction: row;
  1244. flex-wrap: nowrap;
  1245. align-items: baseline;
  1246. justify-content: space-between;
  1247. width: 100%;
  1248. }
  1249. .sTop > div:nth-child(1) {
  1250. display: flex;
  1251. flex-direction: row;
  1252. flex-wrap: wrap;
  1253. align-items: center;
  1254. }
  1255. .sTop > div > div {
  1256. margin: 0 10px 0 0;
  1257. display: flex;
  1258. flex-direction: row;
  1259. align-items: center;
  1260. }
  1261. .sTop > div > div {
  1262. margin-right: 10px;
  1263. }
  1264. .touRight > div:nth-child(2) > .el-button {
  1265. background: #2268bd;
  1266. color: #fff;
  1267. }
  1268. .student_page {
  1269. width: 100%;
  1270. margin: 20px auto 0;
  1271. display: flex;
  1272. align-items: center;
  1273. justify-content: space-between;
  1274. }
  1275. .rating_information{
  1276. flex: 1;
  1277. height: 100%;
  1278. margin-left: 20px;
  1279. display: flex;
  1280. margin-bottom: 20px;
  1281. }
  1282. .ri-card{
  1283. width: auto;
  1284. font-size: 14px;
  1285. display: flex;
  1286. align-items: center;
  1287. justify-content: center;
  1288. padding: 5px 10px;
  1289. white-space: nowrap;
  1290. margin-right: 20px;
  1291. border-radius: 5px;
  1292. }
  1293. .anliBox {
  1294. display: flex;
  1295. flex-direction: row;
  1296. flex-wrap: wrap;
  1297. align-items: flex-start;
  1298. margin: 25px auto 0;
  1299. width: 95%;
  1300. height: 570px;
  1301. }
  1302. .anLi {
  1303. width: 280px;
  1304. margin: 0 20px 10px 0;
  1305. box-shadow: 3px 1px 15px 3px #f0f0f2;
  1306. }
  1307. .anliImg {
  1308. width: 100%;
  1309. height: 170px;
  1310. }
  1311. .anliImg > img {
  1312. width: 100%;
  1313. height: 100%;
  1314. }
  1315. .anliBot {
  1316. background: #fff;
  1317. border: 1px solid #f5f5f5;
  1318. padding: 5px 0 10px 0;
  1319. box-sizing: border-box;
  1320. }
  1321. .detailBox {
  1322. padding: 0 0 0 10px;
  1323. box-sizing: border-box;
  1324. }
  1325. .detailBox > div:nth-child(1) {
  1326. font-size: 20px;
  1327. width: 250px;
  1328. white-space: nowrap;
  1329. overflow: hidden;
  1330. text-overflow: ellipsis;
  1331. word-break: break-word;
  1332. }
  1333. .detailBox > div:nth-child(2) {
  1334. color: #999;
  1335. margin-top: 5px;
  1336. font-size: 14px;
  1337. }
  1338. .anliButton {
  1339. display: flex;
  1340. flex-direction: row;
  1341. flex-wrap: nowrap;
  1342. align-items: center;
  1343. justify-content: center;
  1344. padding: 10px 0 0 0;
  1345. }
  1346. .anliButton > div {
  1347. margin-right: 5px;
  1348. }
  1349. .anliButton > div > .el-button {
  1350. background: #409efe;
  1351. color: #fff;
  1352. width: 80px;
  1353. border-radius: 5px;
  1354. }
  1355. .customWidth >>> .el-dialog {
  1356. min-width: 500px !important;
  1357. }
  1358. .customWidth1 >>> .el-dialog {
  1359. min-width: 800px !important;
  1360. }
  1361. .people {
  1362. border: 1px solid rgb(229 229 229);
  1363. height: 495px;
  1364. border-radius: 5px;
  1365. width: 100%;
  1366. overflow: auto;
  1367. background: #fff;
  1368. box-shadow: 0px 0px 10px 8px #ededed;
  1369. }
  1370. .people::-webkit-scrollbar {
  1371. /*滚动条整体样式*/
  1372. width: 6px;
  1373. /*高宽分别对应横竖滚动条的尺寸*/
  1374. height: 6px;
  1375. }
  1376. /*定义滚动条轨道 内阴影+圆角*/
  1377. .people::-webkit-scrollbar-track {
  1378. border-radius: 10px;
  1379. background-color: #eee;
  1380. }
  1381. /*定义滑块 内阴影+圆角*/
  1382. .people::-webkit-scrollbar-thumb {
  1383. border-radius: 10px;
  1384. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  1385. background-color: rgba(0, 0, 0, 0.1);
  1386. }
  1387. .people_top {
  1388. display: flex;
  1389. width: 100%;
  1390. flex-direction: column;
  1391. padding: 10px 25px 10px;
  1392. box-sizing: border-box;
  1393. border-bottom: 1px solid #f4f4f7;
  1394. }
  1395. .people_top_right {
  1396. height: 40px;
  1397. margin-bottom: 10px;
  1398. }
  1399. .people_search {
  1400. display: flex;
  1401. flex-direction: row;
  1402. flex-wrap: nowrap;
  1403. align-items: center;
  1404. }
  1405. .people_search > div:nth-child(1) {
  1406. font-size: 20px;
  1407. margin-right: 10px;
  1408. }
  1409. .t_j_box {
  1410. display: flex;
  1411. }
  1412. .t_j_box span:nth-child(1) {
  1413. width: 15%;
  1414. overflow: hidden;
  1415. margin-right: 10px;
  1416. text-overflow: ellipsis;
  1417. white-space: nowrap;
  1418. }
  1419. .t_j_box span:nth-child(2) {
  1420. width: 300px;
  1421. overflow: hidden;
  1422. text-overflow: ellipsis;
  1423. margin-right: 10px;
  1424. }
  1425. .t_j_box span:nth-child(3) {
  1426. width: calc(55% - 20px);
  1427. overflow: hidden;
  1428. text-overflow: ellipsis;
  1429. }
  1430. .people_name {
  1431. display: flex;
  1432. flex-direction: column;
  1433. flex-wrap: wrap;
  1434. align-items: flex-start;
  1435. padding: 15px 0 0 15px;
  1436. }
  1437. .people_name >>> .el-checkbox {
  1438. margin-bottom: 10px;
  1439. }
  1440. .all_choose > span {
  1441. margin-right: 10px;
  1442. }
  1443. .clear {
  1444. width: 70px;
  1445. height: 35px;
  1446. background: #2268bc;
  1447. color: #fff;
  1448. text-align: center;
  1449. border-radius: 5px;
  1450. line-height: 35px;
  1451. cursor: pointer;
  1452. font-size: 16px;
  1453. }
  1454. .anliCss {
  1455. display: flex;
  1456. flex-direction: row;
  1457. flex-wrap: nowrap;
  1458. align-items: center;
  1459. }
  1460. .anliCss > div:nth-child(1) {
  1461. margin-right: 10px;
  1462. }
  1463. .scoreBox {
  1464. background: #fff;
  1465. }
  1466. .scoreCss {
  1467. padding: 10px;
  1468. }
  1469. .scoreTitle {
  1470. display: flex;
  1471. flex-direction: row;
  1472. flex-wrap: nowrap;
  1473. align-items: center;
  1474. }
  1475. .scoreTitle > div:nth-child(1) {
  1476. width: 50px;
  1477. }
  1478. .scoreTitle > div:nth-child(1) > img {
  1479. width: 100%;
  1480. height: 100%;
  1481. }
  1482. .scoreTitle > div:nth-child(2) {
  1483. margin-left: 15px;
  1484. }
  1485. .anliTitle,
  1486. .anliBrief,
  1487. .anliScore {
  1488. display: flex;
  1489. flex-direction: row;
  1490. flex-wrap: nowrap;
  1491. align-items: flex-start;
  1492. padding: 10px 0 10px 0;
  1493. font-size: 18px;
  1494. }
  1495. .anliTitle > div:nth-child(1),
  1496. .anliBrief > div:nth-child(1) {
  1497. min-width: 75px;
  1498. width: 75px;
  1499. }
  1500. .anliTitle > div:nth-child(2),
  1501. .anliBrief > div:nth-child(2) {
  1502. font-size: 17px;
  1503. margin-left: 35px;
  1504. color: #b0b0b0;
  1505. }
  1506. .anliScore > div:nth-child(2) {
  1507. margin: -13px 0 0 20px;
  1508. }
  1509. .scoreDiv {
  1510. display: flex;
  1511. flex-direction: row;
  1512. flex-wrap: nowrap;
  1513. align-items: center;
  1514. padding: 10px 0;
  1515. }
  1516. .scoreDiv > div:nth-child(1) {
  1517. min-width: 90px;
  1518. width: 90px;
  1519. }
  1520. .scoreDiv > div:nth-child(2) {
  1521. margin-left: 10px;
  1522. }
  1523. .scoreDiv > div:nth-child(2) >>> .el-input__inner {
  1524. border-radius: 15px;
  1525. background: #fafafa;
  1526. height: 30px;
  1527. font-size: 16px;
  1528. }
  1529. .anliContent {
  1530. width: 80%;
  1531. margin: 0 auto;
  1532. border-top: 2px solid #ededed;
  1533. padding: 10px 0 0 0;
  1534. }
  1535. .tAreaCss {
  1536. resize: none;
  1537. width: 100%;
  1538. text-indent: 10px;
  1539. border: 1px solid #e6e6e8;
  1540. background: #fafafa;
  1541. }
  1542. .tAreaCss:focus-visible {
  1543. outline: none !important;
  1544. }
  1545. .addScore {
  1546. width: 75%;
  1547. margin: 10px auto;
  1548. background: #409efe;
  1549. color: #fff;
  1550. height: 35px;
  1551. text-align: center;
  1552. line-height: 35px;
  1553. border-radius: 5px;
  1554. cursor: pointer;
  1555. }
  1556. .reTitle {
  1557. font-size: 18px;
  1558. }
  1559. .reTitle > div:nth-child(2) {
  1560. width: 99%;
  1561. border: 1px solid #dbdbdb;
  1562. font-size: 16px;
  1563. height: 35px;
  1564. line-height: 35px;
  1565. text-indent: 10px;
  1566. border-radius: 5px;
  1567. margin: 10px 0;
  1568. white-space: nowrap;
  1569. overflow: hidden;
  1570. text-overflow: ellipsis;
  1571. word-break: break-word;
  1572. }
  1573. .reDetail,
  1574. .reScore {
  1575. display: flex;
  1576. flex-direction: row;
  1577. flex-wrap: nowrap;
  1578. align-items: flex-start;
  1579. padding: 10px 0 10px 0;
  1580. font-size: 18px;
  1581. }
  1582. .reDetail > div:nth-child(2) {
  1583. font-size: 17px;
  1584. margin-left: 10px;
  1585. color: #b0b0b0;
  1586. width: 650px;
  1587. height: 150px;
  1588. overflow: auto;
  1589. }
  1590. .reScore > div:nth-child(2) {
  1591. font-size: 35px;
  1592. margin-left: 20px;
  1593. }
  1594. .reScore > div:nth-child(2) > span {
  1595. color: #6188d5;
  1596. }
  1597. .reBottom {
  1598. display: flex;
  1599. flex-direction: row;
  1600. flex-wrap: nowrap;
  1601. align-items: center;
  1602. justify-content: flex-end;
  1603. }
  1604. .reBottom > div:nth-child(2) {
  1605. border: 1px solid #d7d7d9;
  1606. width: 70px;
  1607. height: 35px;
  1608. text-align: center;
  1609. line-height: 35px;
  1610. border-radius: 5px;
  1611. margin: 0 10px 0 20px;
  1612. cursor: pointer;
  1613. }
  1614. .reBottom > div:nth-child(3) {
  1615. background: #409efe;
  1616. color: #fff;
  1617. height: 35px;
  1618. line-height: 35px;
  1619. width: 85px;
  1620. text-align: center;
  1621. border-radius: 5px;
  1622. cursor: pointer;
  1623. }
  1624. .tableButton {
  1625. display: flex;
  1626. flex-direction: row;
  1627. flex-wrap: nowrap;
  1628. align-items: center;
  1629. color: #43a0f5;
  1630. }
  1631. .tableButton > div {
  1632. margin-right: 10px;
  1633. cursor: pointer;
  1634. }
  1635. .isNoMessage {
  1636. width: 20%;
  1637. margin: 10% auto 0;
  1638. }
  1639. .isNoMessage > img {
  1640. width: 100%;
  1641. height: 100%;
  1642. }
  1643. .aName >>> .el-input__inner {
  1644. width: 300px;
  1645. }
  1646. .sTop {
  1647. display: flex;
  1648. flex-direction: row;
  1649. flex-wrap: nowrap;
  1650. justify-content: center;
  1651. align-items: center;
  1652. }
  1653. .aName {
  1654. position: relative;
  1655. display: flex;
  1656. align-items: center;
  1657. }
  1658. .search {
  1659. width: 25px;
  1660. position: absolute;
  1661. top: 7px;
  1662. right: 80px;
  1663. z-index: 9;
  1664. cursor: pointer;
  1665. }
  1666. .search > img {
  1667. width: 100%;
  1668. height: 100%;
  1669. }
  1670. </style>