score.vue 41 KB

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