score.vue 47 KB

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