anliList.vue 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127
  1. <template>
  2. <div class="pb_content">
  3. <div class="pb_head">
  4. <div>
  5. <span>案例管理</span>
  6. </div>
  7. </div>
  8. <div class="touTop">
  9. <div class="touLeft">
  10. <!-- <div>
  11. <div>案例分类</div>
  12. <el-select v-model="anliType" clearable>
  13. <el-option value="0" label="所有分类"></el-option>
  14. </el-select>
  15. </div> -->
  16. <div>
  17. <div
  18. class="all_choose"
  19. v-for="(item, index) in CourseType[0]"
  20. :key="index"
  21. >
  22. <span>{{ item.name }}</span>
  23. <el-select
  24. v-model="courseTypeId[item.id]"
  25. placeholder="请选择"
  26. @change="search"
  27. >
  28. <el-option label="全部" value="1">全部</el-option>
  29. <el-option
  30. v-for="item1 in CourseTypeJson[item.id]"
  31. :key="item1.id"
  32. :label="item1.name"
  33. :value="item1.id"
  34. >
  35. </el-option>
  36. </el-select>
  37. </div>
  38. <div class="anliCss">
  39. <div>案例筛选</div>
  40. <el-select v-model="anliBox" clearable @change="search">
  41. <el-option value="" label="全部"></el-option>
  42. <el-option value="1" label="经典案例"></el-option>
  43. <el-option value="0" label="平台案例"></el-option>
  44. </el-select>
  45. </div>
  46. </div>
  47. <div @click="clear" class="clear">重置</div>
  48. </div>
  49. <div class="touRight">
  50. <div></div>
  51. <div>
  52. <el-button @click="dialogVisibleMember = true">分配案例</el-button>
  53. </div>
  54. </div>
  55. </div>
  56. <div class="anliBox" v-if="tableData.length">
  57. <div v-for="(a, aIndex) in tableData" :key="aIndex" class="anLi">
  58. <div class="anliImg">
  59. <img
  60. :src="a.info.cover.length > 0 ? a.info.cover[0].url : noBanner"
  61. alt=""
  62. />
  63. </div>
  64. <div class="anliBot">
  65. <div class="detailBox">
  66. <div>{{ a.info.title != "" ? a.info.title : "暂无" }}</div>
  67. <div>{{ a.time }}</div>
  68. </div>
  69. <div class="anliButton">
  70. <div>
  71. <el-button @click="lookDetail(a.id)">查看</el-button>
  72. </div>
  73. <div>
  74. <el-button @click="openScore(a, 1)">评分</el-button>
  75. </div>
  76. <div>
  77. <el-button @click="openScore(a, 2)">推荐</el-button>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. <div class="student_page">
  84. <el-pagination
  85. background
  86. layout="prev, pager, next"
  87. :page-size="10"
  88. :total="total"
  89. v-if="page && tableData.length"
  90. style="padding-bottom: 20px"
  91. @current-change="handleCurrentChange"
  92. >
  93. </el-pagination>
  94. </div>
  95. <el-dialog
  96. title="分配案例"
  97. :visible.sync="dialogVisibleMember"
  98. :append-to-body="true"
  99. width="25%"
  100. height="80%"
  101. :before-close="handleClose"
  102. class="dialog_diy1 customWidth"
  103. >
  104. <div class="people">
  105. <div class="people_top">
  106. <div class="people_top_right">
  107. <div class="people_search">
  108. <div>选择评委</div>
  109. <el-select v-model="reviewer" placeholder="请选择评委">
  110. <el-option
  111. v-for="item in reviewerBox"
  112. :key="item.userid"
  113. :label="item.name"
  114. :value="item.userid"
  115. ></el-option>
  116. </el-select>
  117. </div>
  118. </div>
  119. </div>
  120. <el-checkbox
  121. :indeterminate="isIndeterminate"
  122. v-model="checkAll"
  123. @change="handleCheckAllChange"
  124. style="padding: 15px 0 0 15px"
  125. >全选</el-checkbox
  126. >
  127. <el-checkbox-group
  128. v-model="checkboxList"
  129. class="people_name"
  130. v-if="anliBox1.length"
  131. @change="handleCheckedAnliChange"
  132. >
  133. <el-checkbox v-for="item in anliBox1" :key="item.id" :label="item.id">
  134. <div class="t_j_box">
  135. <div>案例名称:</div>
  136. <el-tooltip
  137. placement="top"
  138. :content="item.info.title ? item.info.title : '暂无姓名'"
  139. >
  140. <span>{{
  141. item.info.title ? item.info.title : "暂无姓名"
  142. }}</span>
  143. </el-tooltip>
  144. </div>
  145. </el-checkbox>
  146. </el-checkbox-group>
  147. <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
  148. </div>
  149. <span slot="footer" class="dialog-footer">
  150. <el-button @click="dialogVisibleMember = false">取 消</el-button>
  151. <el-button type="primary" @click="addCase">确定</el-button>
  152. </span>
  153. </el-dialog>
  154. <el-dialog
  155. title="评分"
  156. :visible.sync="dialogVisibleScore"
  157. :append-to-body="true"
  158. width="25%"
  159. height="80%"
  160. :before-close="handleClose"
  161. class="dialog_diy customWidth1"
  162. >
  163. <div class="scoreBox" v-for="(s, sIndex) in scoreDetail" :key="sIndex">
  164. <div class="scoreCss">
  165. <div class="scoreTitle">
  166. <div><img src="../../../assets/avatar.png" alt="" /></div>
  167. <div>{{ s.uname }}</div>
  168. </div>
  169. <div class="anliTitle">
  170. <div>案例名称</div>
  171. <div>{{ s.title }}</div>
  172. </div>
  173. <div class="anliBrief">
  174. <div>案例简介</div>
  175. <div style="width: 650px; max-height: 150px; overflow: auto">
  176. {{ s.detail }}
  177. </div>
  178. </div>
  179. <div class="anliScore">
  180. <div>请选择评分</div>
  181. <div>
  182. <div class="scoreDiv">
  183. <div>评审维度1</div>
  184. <div>
  185. <el-input
  186. placeholder="输入分数"
  187. v-model="s.scoreAll.first"
  188. @change="isNumber($event, 1)"
  189. ></el-input>
  190. </div>
  191. </div>
  192. <div class="scoreDiv">
  193. <div>评审维度2</div>
  194. <div>
  195. <el-input
  196. placeholder="输入分数"
  197. v-model="s.scoreAll.second"
  198. @change="isNumber($event, 2)"
  199. ></el-input>
  200. </div>
  201. </div>
  202. <div class="scoreDiv">
  203. <div>评审维度3</div>
  204. <div>
  205. <el-input
  206. placeholder="输入分数"
  207. v-model="s.scoreAll.third"
  208. @change="isNumber($event, 3)"
  209. ></el-input>
  210. </div>
  211. </div>
  212. <div class="scoreDiv">
  213. <div>评审维度4</div>
  214. <div>
  215. <el-input
  216. placeholder="输入分数"
  217. v-model="s.scoreAll.fourth"
  218. @change="isNumber($event, 4)"
  219. ></el-input>
  220. </div>
  221. </div>
  222. <div class="scoreDiv">
  223. <div>评审维度5</div>
  224. <div>
  225. <el-input
  226. placeholder="输入分数"
  227. v-model="s.scoreAll.fivth"
  228. @change="isNumber($event, 5)"
  229. ></el-input>
  230. </div>
  231. </div>
  232. </div>
  233. </div>
  234. <div class="anliContent">
  235. <textarea
  236. :rows="5"
  237. class="tAreaCss"
  238. placeholder="还有要说的吗..."
  239. v-model="s.scoreAll.content"
  240. ></textarea>
  241. </div>
  242. <div class="addScore" @click="addScore">进行评分</div>
  243. </div>
  244. </div>
  245. </el-dialog>
  246. <el-dialog
  247. title="推荐省级评奖"
  248. :visible.sync="dialogVisibleRecommend"
  249. :append-to-body="true"
  250. width="25%"
  251. height="80%"
  252. :before-close="handleClose"
  253. class="dialog_diy customWidth1"
  254. >
  255. <div v-for="(r, rIndex) in scoreDetail" :key="rIndex">
  256. <div class="reTitle">
  257. <div>案例名称</div>
  258. <div>{{ r.title }}</div>
  259. </div>
  260. <div class="reDetail">
  261. <div>案例简介</div>
  262. <div>{{ r.detail }}</div>
  263. </div>
  264. <div class="reScore">
  265. <div>当前得分</div>
  266. <div>
  267. <span>{{ r.sumScore }}</span
  268. >分
  269. </div>
  270. </div>
  271. <div class="reBottom">
  272. <div>提示:点击确定提交,即可推送到市级进行评奖</div>
  273. <div @click="dialogVisibleRecommend = false">取消</div>
  274. <div @click="addRecommend">确定提交</div>
  275. </div>
  276. </div>
  277. </el-dialog>
  278. </div>
  279. </template>
  280. <script>
  281. export default {
  282. data() {
  283. return {
  284. page: 1,
  285. total: 0,
  286. // anliType: "",
  287. CourseType: [],
  288. CourseTypeJson: {},
  289. courseTypeId: {},
  290. courseTypeSon: [],
  291. anliBox: "",
  292. tableData: [],
  293. reviewer: "",
  294. reviewerBox: [],
  295. anliBox1: [],
  296. checkboxList: [],
  297. checkboxIdList: [],
  298. isIndeterminate: false,
  299. checkAll: false,
  300. dialogVisibleMember: false,
  301. dialogVisibleScore: false,
  302. dialogVisibleRecommend: false,
  303. noBanner: require("../../../assets/noBanner.jpg"),
  304. scoreDetail: [
  305. {
  306. id: "",
  307. uname: "",
  308. title: "",
  309. detail: "",
  310. scoreAll: {
  311. first: "",
  312. second: "",
  313. third: "",
  314. fourth: "",
  315. fivth: "",
  316. content: "",
  317. },
  318. sumScore: 0,
  319. },
  320. ],
  321. };
  322. },
  323. methods: {
  324. handleCurrentChange(val) {
  325. this.page = val;
  326. this.getAnliList();
  327. },
  328. search() {
  329. this.page = 1;
  330. this.getAnliList();
  331. },
  332. goTo(path) {
  333. this.$router.push(path);
  334. },
  335. isNumber(e, t) {
  336. if (e < 0) {
  337. this.$message.error("请输入大于0的数值");
  338. if (t == 1) {
  339. this.scoreDetail[0].scoreAll.first = "";
  340. } else if (t == 2) {
  341. this.scoreDetail[0].scoreAll.second = "";
  342. } else if (t == 3) {
  343. this.scoreDetail[0].scoreAll.third = "";
  344. } else if (t == 4) {
  345. this.scoreDetail[0].scoreAll.fourth = "";
  346. } else {
  347. this.scoreDetail[0].scoreAll.fivth = "";
  348. }
  349. return;
  350. } else if (e > 100) {
  351. this.$message.error("数值不能大于100");
  352. if (t == 1) {
  353. this.scoreDetail[0].scoreAll.first = "";
  354. } else if (t == 2) {
  355. this.scoreDetail[0].scoreAll.second = "";
  356. } else if (t == 3) {
  357. this.scoreDetail[0].scoreAll.third = "";
  358. } else if (t == 4) {
  359. this.scoreDetail[0].scoreAll.fourth = "";
  360. } else {
  361. this.scoreDetail[0].scoreAll.fivth = "";
  362. }
  363. return;
  364. }
  365. let value = e.replace(/[^d]/g, ""); // 只能输入数字
  366. value = value.replace(/^0+(d)/, "$1"); // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  367. value = value.replace(/(d{15})d*/, "$1"); // 最多保留15位整数
  368. // this.height = value;
  369. },
  370. handleCheckAllChange(val) {
  371. if (this.checkboxIdList.length == 0) {
  372. for (var i = 0; i < this.anliBox1.length; i++) {
  373. this.checkboxIdList.push(this.anliBox1[i].id);
  374. }
  375. }
  376. this.checkboxList = val ? this.checkboxIdList : [];
  377. this.isIndeterminate = false;
  378. },
  379. handleCheckedAnliChange(value) {
  380. let checkedCount = this.checkboxList.length;
  381. this.checkAll = checkedCount === this.anliBox1.length;
  382. this.isIndeterminate =
  383. checkedCount > 0 && checkedCount < this.anliBox1.length;
  384. },
  385. handleClose(done) {
  386. done();
  387. },
  388. clear() {
  389. for (var i = 0; i < this.CourseType[0].length; i++) {
  390. this.courseTypeId[this.CourseType[0][i].id] = "";
  391. }
  392. this.anliBox = "";
  393. this.getAnliList();
  394. },
  395. getAnliList(rc) {
  396. var typeE = [];
  397. var typea, typeb, typec, typed;
  398. this.tableData = [];
  399. for (var i = 0; i < this.CourseType[0].length; i++) {
  400. if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
  401. typeE.push(this.CourseType[0][i].id);
  402. } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
  403. if (this.CourseType[0][i].name == "案例组别") {
  404. typea = this.courseTypeId[this.CourseType[0][i].id];
  405. } else if (this.CourseType[0][i].name == "年级") {
  406. typeb = this.courseTypeId[this.CourseType[0][i].id];
  407. } else if (this.CourseType[0][i].name == "学科") {
  408. typec = this.courseTypeId[this.CourseType[0][i].id];
  409. }
  410. this.courseTypeSon.push(this.courseTypeId[this.CourseType[0][i].id]);
  411. }
  412. }
  413. let params = {
  414. typea: typea != undefined ? typea : "",
  415. typeb: typeb != undefined ? typeb : "",
  416. typec: typec != undefined ? typec : "",
  417. typed: typed != undefined ? typed : "",
  418. typeE: typeE.join(","),
  419. cid: rc ? rc : "",
  420. cn: this.anliBox == "" ? 0 : this.anliBox,
  421. page: this.page,
  422. };
  423. this.ajax
  424. .get(this.$store.state.api + "selectAnliList2", params)
  425. .then((res) => {
  426. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  427. this.tableData = res.data[0];
  428. for (var i = 0; i < this.tableData.length; i++) {
  429. this.tableData[i].info = JSON.parse(this.tableData[i].info);
  430. this.tableData[i].overview = JSON.parse(this.tableData[i].overview);
  431. this.tableData[i].process = JSON.parse(this.tableData[i].process);
  432. this.tableData[i].proact = JSON.parse(this.tableData[i].proact);
  433. this.tableData[i].proexc = JSON.parse(this.tableData[i].proexc);
  434. this.tableData[i].results = JSON.parse(this.tableData[i].results);
  435. }
  436. })
  437. .catch((err) => {
  438. console.error(err);
  439. });
  440. },
  441. selectType(rc) {
  442. this.ajax
  443. .get(this.$store.state.api + "selectMatType")
  444. .then((res) => {
  445. this.CourseType = res.data;
  446. for (var i = 0; i < res.data[0].length; i++) {
  447. for (var j = 0; j < res.data[1].length; j++) {
  448. if (res.data[0][i].id == res.data[1][j].pid) {
  449. if (!this.CourseTypeJson[res.data[0][i].id]) {
  450. this.CourseTypeJson[res.data[0][i].id] = [];
  451. }
  452. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  453. }
  454. }
  455. }
  456. this.getAnliList(rc);
  457. })
  458. .catch((err) => {
  459. console.error(err);
  460. });
  461. },
  462. getAdmin() {
  463. let params = {
  464. uid: this.$store.state.userInfo.userid,
  465. cn: "",
  466. page: this.page,
  467. };
  468. this.ajax
  469. .get(this.$store.state.api + "selectReviewer", params)
  470. .then((res) => {
  471. this.reviewerBox = res.data[0];
  472. })
  473. .catch((err) => {
  474. console.error(err);
  475. });
  476. },
  477. getReviewerOrAdmin() {
  478. if (this.$store.state.userInfo.type == 4) {
  479. this.getUser();
  480. } else {
  481. this.selectType();
  482. }
  483. },
  484. getUser() {
  485. let params = {
  486. uid: this.$store.state.userInfo.userid,
  487. };
  488. this.ajax
  489. .get(this.$store.state.api + "selectCaseUser", params)
  490. .then((res) => {
  491. if (res.data[0].length > 0) {
  492. var reCid = res.data[0][0].aBox;
  493. this.selectType(reCid);
  494. }
  495. })
  496. .catch((err) => {
  497. console.error(err);
  498. });
  499. },
  500. getAnliBox() {
  501. this.ajax
  502. .get(this.$store.state.api + "selecAnliBox2")
  503. .then((res) => {
  504. this.anliBox1 = res.data[0];
  505. for (var i = 0; i < this.anliBox1.length; i++) {
  506. this.anliBox1[i].info = JSON.parse(this.anliBox1[i].info);
  507. this.anliBox1[i].overview = JSON.parse(this.anliBox1[i].overview);
  508. this.anliBox1[i].process = JSON.parse(this.anliBox1[i].process);
  509. this.anliBox1[i].proact = JSON.parse(this.anliBox1[i].proact);
  510. this.anliBox1[i].proexc = JSON.parse(this.anliBox1[i].proexc);
  511. this.anliBox1[i].results = JSON.parse(this.anliBox1[i].results);
  512. }
  513. })
  514. .catch((err) => {
  515. console.error(err);
  516. });
  517. },
  518. addCase() {
  519. if (this.reviewer == "") {
  520. this.$message.error("请选择评审员");
  521. return;
  522. } else if (this.checkboxList.length == 0) {
  523. this.$message.error("请选择案例");
  524. return;
  525. }
  526. let params = [
  527. {
  528. uid: this.reviewer,
  529. box: this.checkboxList.join(","),
  530. },
  531. ];
  532. this.ajax
  533. .post(this.$store.state.api + "insertCase", params)
  534. .then((res) => {
  535. this.$message({
  536. message: "分配成功",
  537. type: "success",
  538. });
  539. this.reviewer = "";
  540. this.checkboxList = [];
  541. this.isIndeterminate = false;
  542. this.checkAll = false;
  543. this.dialogVisibleMember = false;
  544. })
  545. .catch((err) => {
  546. this.$message.error("网络不佳");
  547. console.error(err);
  548. });
  549. },
  550. openScore(a, t) {
  551. this.scoreDetail[0].id = a.id;
  552. this.scoreDetail[0].title = a.info.title;
  553. this.scoreDetail[0].detail = a.info.courseText;
  554. this.scoreDetail[0].uname = a.uname;
  555. this.getScore(a.id, t);
  556. },
  557. getScore(id, t) {
  558. let params = {
  559. rid: id,
  560. };
  561. this.ajax
  562. .get(this.$store.state.api + "selectScore", params)
  563. .then((res) => {
  564. if (res.data[0].length > 0) {
  565. this.scoreDetail[0].scoreAll = JSON.parse(res.data[0][0].score);
  566. var a = parseInt(this.scoreDetail[0].scoreAll.first);
  567. var b = parseInt(this.scoreDetail[0].scoreAll.second);
  568. var c = parseInt(this.scoreDetail[0].scoreAll.third);
  569. var d = parseInt(this.scoreDetail[0].scoreAll.fourth);
  570. var e = parseInt(this.scoreDetail[0].scoreAll.fivth);
  571. this.scoreDetail[0].sumScore = Math.round((a + b + c + d + e) / 5);
  572. } else {
  573. this.scoreDetail[0].scoreAll = {
  574. first: "",
  575. second: "",
  576. third: "",
  577. fourth: "",
  578. fivth: "",
  579. content: "",
  580. };
  581. this.scoreDetail[0].sumScore = 0;
  582. }
  583. if (t == 1) {
  584. this.dialogVisibleScore = true;
  585. } else {
  586. this.dialogVisibleRecommend = true;
  587. }
  588. })
  589. .catch((err) => {
  590. console.error(err);
  591. });
  592. },
  593. addScore() {
  594. if (this.scoreDetail[0].scoreAll.first == "") {
  595. this.$message.error("请将信息填写完整");
  596. return;
  597. } else if (this.scoreDetail[0].scoreAll.second == "") {
  598. this.$message.error("请将信息填写完整");
  599. return;
  600. } else if (this.scoreDetail[0].scoreAll.third == "") {
  601. this.$message.error("请将信息填写完整");
  602. return;
  603. } else if (this.scoreDetail[0].scoreAll.fourth == "") {
  604. this.$message.error("请将信息填写完整");
  605. return;
  606. } else if (this.scoreDetail[0].scoreAll.fivth == "") {
  607. this.$message.error("请将信息填写完整");
  608. return;
  609. } else if (this.scoreDetail[0].scoreAll.content == "") {
  610. this.$message.error("请将信息填写完整");
  611. return;
  612. }
  613. let params = {
  614. rid: this.scoreDetail[0].id,
  615. suser: this.$store.state.userInfo.userid,
  616. s: JSON.stringify(this.scoreDetail[0].scoreAll),
  617. };
  618. this.ajax
  619. .get(this.$store.state.api + "addScore", params)
  620. .then((res) => {
  621. this.$message({
  622. message: "评分成功",
  623. type: "success",
  624. });
  625. this.scoreDetail = [
  626. {
  627. id: "",
  628. uname: "",
  629. title: "",
  630. detail: "",
  631. scoreAll: {
  632. first: "",
  633. second: "",
  634. third: "",
  635. fourth: "",
  636. fivth: "",
  637. content: "",
  638. },
  639. sumScore: 0,
  640. },
  641. ];
  642. this.dialogVisibleScore = false;
  643. })
  644. .catch((err) => {
  645. console.error(err);
  646. });
  647. },
  648. addRecommend() {
  649. if (this.scoreDetail[0].sumScore == 0) {
  650. this.$message.error("还未评审,不可推荐");
  651. return;
  652. }
  653. let params = {
  654. id: this.scoreDetail[0].id,
  655. rec: 1,
  656. };
  657. this.ajax
  658. .get(this.$store.state.api + "updateRaceRec", params)
  659. .then((res) => {
  660. this.$message({
  661. message: "推荐成功",
  662. type: "success",
  663. });
  664. this.dialogVisibleRecommend = false;
  665. })
  666. .catch((err) => {
  667. console.error(err);
  668. });
  669. },
  670. lookDetail(aid) {
  671. window.open(
  672. window.location.origin +
  673. window.location.pathname +
  674. "/#/anliDetail?aid=" +
  675. aid
  676. );
  677. },
  678. },
  679. created() {
  680. // this.getAnliList();
  681. this.getAdmin();
  682. // this.selectType();
  683. this.getReviewerOrAdmin();
  684. this.getAnliBox();
  685. },
  686. };
  687. </script>
  688. <style scoped>
  689. .el-popover {
  690. min-width: 80px;
  691. text-align: center;
  692. }
  693. </style>
  694. <style scoped>
  695. .dialog_diy1 >>> .el-dialog__header,
  696. .dialog_diy >>> .el-dialog__header {
  697. background: #3d67bd !important;
  698. padding: 15px 20px;
  699. }
  700. .dialog_diy1 >>> .el-dialog__header {
  701. text-align: center;
  702. }
  703. .dialog_diy1 >>> .el-dialog__title,
  704. .dialog_diy >>> .el-dialog__title {
  705. color: #fff;
  706. }
  707. .dialog_diy1 >>> .el-dialog__headerbtn,
  708. .dialog_diy >>> .el-dialog__headerbtn {
  709. top: 19px;
  710. }
  711. .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close,
  712. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  713. color: #fff;
  714. }
  715. .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close:hover,
  716. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  717. color: #fff;
  718. }
  719. .dialog_diy1 >>> .el-dialog__body,
  720. .dialog_diy1 >>> .el-dialog__footer,
  721. .dialog_diy >>> .el-dialog__body,
  722. .dialog_diy >>> .el-dialog__footer {
  723. background: #fafafa;
  724. }
  725. .disUoloadSty >>> .el-upload--picture-card {
  726. display: none;
  727. /* 上传按钮隐藏 */
  728. }
  729. .tou {
  730. border-bottom: 1px solid #c9c9c9;
  731. height: 50px;
  732. font-size: 30px;
  733. }
  734. .touTop {
  735. margin: 15px auto;
  736. display: flex;
  737. flex-direction: row;
  738. flex-wrap: nowrap;
  739. align-items: center;
  740. justify-content: space-between;
  741. width: 95%;
  742. }
  743. .touLeft {
  744. display: flex;
  745. flex-direction: row;
  746. flex-wrap: nowrap;
  747. align-items: center;
  748. }
  749. .touLeft > div:nth-child(1) {
  750. display: flex;
  751. flex-direction: row;
  752. flex-wrap: wrap;
  753. align-items: center;
  754. }
  755. .touLeft > div > div {
  756. margin: 0 10px 10px 0;
  757. display: flex;
  758. flex-direction: row;
  759. align-items: center;
  760. }
  761. .touRight > div:nth-child(2) > .el-button {
  762. background: #2268bd;
  763. color: #fff;
  764. }
  765. .student_page {
  766. width: 95%;
  767. margin: 20px auto 0;
  768. }
  769. .anliBox {
  770. display: flex;
  771. flex-direction: row;
  772. flex-wrap: wrap;
  773. align-items: flex-start;
  774. margin: 25px auto 0;
  775. width: 95%;
  776. height: 570px;
  777. }
  778. .anLi {
  779. width: 280px;
  780. margin: 0 20px 10px 0;
  781. box-shadow: 3px 1px 15px 3px #f0f0f2;
  782. }
  783. .anliImg {
  784. width: 100%;
  785. height: 170px;
  786. }
  787. .anliImg > img {
  788. width: 100%;
  789. height: 100%;
  790. object-fit: cover;
  791. }
  792. .anliBot {
  793. background: #fff;
  794. border: 1px solid #f5f5f5;
  795. padding: 5px 0 10px 0;
  796. box-sizing: border-box;
  797. }
  798. .detailBox {
  799. padding: 0 0 0 10px;
  800. box-sizing: border-box;
  801. }
  802. .detailBox > div:nth-child(1) {
  803. font-size: 20px;
  804. width: 250px;
  805. white-space: nowrap;
  806. overflow: hidden;
  807. text-overflow: ellipsis;
  808. word-break: break-word;
  809. }
  810. .detailBox > div:nth-child(2) {
  811. color: #999;
  812. margin-top: 5px;
  813. font-size: 14px;
  814. }
  815. .anliButton {
  816. display: flex;
  817. flex-direction: row;
  818. flex-wrap: nowrap;
  819. align-items: center;
  820. justify-content: center;
  821. padding: 10px 0 0 0;
  822. }
  823. .anliButton > div {
  824. margin-right: 5px;
  825. }
  826. .anliButton > div > .el-button {
  827. background: #409efe;
  828. color: #fff;
  829. width: 80px;
  830. border-radius: 5px;
  831. }
  832. .customWidth >>> .el-dialog {
  833. min-width: 500px !important;
  834. }
  835. .customWidth1 >>> .el-dialog {
  836. min-width: 800px !important;
  837. }
  838. .people {
  839. border: 1px solid rgb(229 229 229);
  840. height: 495px;
  841. border-radius: 5px;
  842. width: 100%;
  843. overflow: auto;
  844. background: #fff;
  845. box-shadow: 0px 0px 10px 8px #ededed;
  846. }
  847. .people::-webkit-scrollbar {
  848. /*滚动条整体样式*/
  849. width: 6px;
  850. /*高宽分别对应横竖滚动条的尺寸*/
  851. height: 6px;
  852. }
  853. /*定义滚动条轨道 内阴影+圆角*/
  854. .people::-webkit-scrollbar-track {
  855. border-radius: 10px;
  856. background-color: #eee;
  857. }
  858. /*定义滑块 内阴影+圆角*/
  859. .people::-webkit-scrollbar-thumb {
  860. border-radius: 10px;
  861. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  862. background-color: rgba(0, 0, 0, 0.1);
  863. }
  864. .people_top {
  865. display: flex;
  866. width: 100%;
  867. flex-direction: column;
  868. padding: 10px 25px 10px;
  869. box-sizing: border-box;
  870. border-bottom: 1px solid #f4f4f7;
  871. }
  872. .people_top_right {
  873. height: 40px;
  874. margin-bottom: 10px;
  875. }
  876. .people_search {
  877. display: flex;
  878. flex-direction: row;
  879. flex-wrap: nowrap;
  880. align-items: center;
  881. }
  882. .people_search > div:nth-child(1) {
  883. font-size: 20px;
  884. margin-right: 10px;
  885. }
  886. .t_j_box {
  887. display: flex;
  888. }
  889. .t_j_box span:nth-child(1) {
  890. width: 15%;
  891. overflow: hidden;
  892. margin-right: 10px;
  893. text-overflow: ellipsis;
  894. white-space: nowrap;
  895. }
  896. .t_j_box span:nth-child(2) {
  897. width: 300px;
  898. overflow: hidden;
  899. text-overflow: ellipsis;
  900. margin-right: 10px;
  901. }
  902. .t_j_box span:nth-child(3) {
  903. width: calc(55% - 20px);
  904. overflow: hidden;
  905. text-overflow: ellipsis;
  906. }
  907. .people_name {
  908. display: flex;
  909. flex-direction: column;
  910. flex-wrap: wrap;
  911. align-items: flex-start;
  912. padding: 15px 0 0 15px;
  913. }
  914. .people_name >>> .el-checkbox {
  915. margin-bottom: 10px;
  916. }
  917. .all_choose > span {
  918. margin-right: 10px;
  919. }
  920. .clear {
  921. width: 70px;
  922. height: 35px;
  923. background: #2268bc;
  924. color: #fff;
  925. text-align: center;
  926. border-radius: 5px;
  927. line-height: 35px;
  928. cursor: pointer;
  929. }
  930. .anliCss {
  931. display: flex;
  932. flex-direction: row;
  933. flex-wrap: nowrap;
  934. align-items: center;
  935. }
  936. .anliCss > div:nth-child(1) {
  937. margin-right: 10px;
  938. }
  939. .scoreBox {
  940. background: #fff;
  941. }
  942. .scoreCss {
  943. padding: 10px;
  944. }
  945. .scoreTitle {
  946. display: flex;
  947. flex-direction: row;
  948. flex-wrap: nowrap;
  949. align-items: center;
  950. }
  951. .scoreTitle > div:nth-child(1) {
  952. width: 50px;
  953. }
  954. .scoreTitle > div:nth-child(1) > img {
  955. width: 100%;
  956. height: 100%;
  957. }
  958. .scoreTitle > div:nth-child(2) {
  959. margin-left: 15px;
  960. }
  961. .anliTitle,
  962. .anliBrief,
  963. .anliScore {
  964. display: flex;
  965. flex-direction: row;
  966. flex-wrap: nowrap;
  967. align-items: flex-start;
  968. padding: 10px 0 10px 0;
  969. font-size: 18px;
  970. }
  971. .anliTitle > div:nth-child(2),
  972. .anliBrief > div:nth-child(2) {
  973. font-size: 17px;
  974. margin-left: 10px;
  975. color: #b0b0b0;
  976. }
  977. .anliScore > div:nth-child(2) {
  978. margin: -13px 0 0 20px;
  979. }
  980. .scoreDiv {
  981. display: flex;
  982. flex-direction: row;
  983. flex-wrap: nowrap;
  984. align-items: center;
  985. padding: 10px 0;
  986. }
  987. .scoreDiv > div:nth-child(2) {
  988. margin-left: 10px;
  989. }
  990. .scoreDiv > div:nth-child(2) >>> .el-input__inner {
  991. border-radius: 15px;
  992. background: #fafafa;
  993. height: 30px;
  994. }
  995. .anliContent {
  996. width: 80%;
  997. margin: 0 auto;
  998. border-top: 2px solid #ededed;
  999. padding: 10px 0 0 0;
  1000. }
  1001. .tAreaCss {
  1002. resize: none;
  1003. width: 100%;
  1004. text-indent: 10px;
  1005. border: 1px solid #e6e6e8;
  1006. background: #fafafa;
  1007. }
  1008. .tAreaCss:focus-visible {
  1009. outline: none !important;
  1010. }
  1011. .addScore {
  1012. width: 75%;
  1013. margin: 10px auto;
  1014. background: #409efe;
  1015. color: #fff;
  1016. height: 35px;
  1017. text-align: center;
  1018. line-height: 35px;
  1019. border-radius: 5px;
  1020. cursor: pointer;
  1021. }
  1022. .reTitle {
  1023. font-size: 18px;
  1024. }
  1025. .reTitle > div:nth-child(2) {
  1026. width: 60%;
  1027. border: 1px solid #dbdbdb;
  1028. font-size: 16px;
  1029. height: 35px;
  1030. line-height: 35px;
  1031. text-indent: 10px;
  1032. border-radius: 5px;
  1033. margin: 10px 0;
  1034. }
  1035. .reDetail,
  1036. .reScore {
  1037. display: flex;
  1038. flex-direction: row;
  1039. flex-wrap: nowrap;
  1040. align-items: flex-start;
  1041. padding: 10px 0 10px 0;
  1042. font-size: 18px;
  1043. }
  1044. .reDetail > div:nth-child(2) {
  1045. font-size: 17px;
  1046. margin-left: 10px;
  1047. color: #b0b0b0;
  1048. width: 650px;
  1049. max-height: 150px;
  1050. overflow: auto;
  1051. }
  1052. .reScore > div:nth-child(2) {
  1053. font-size: 35px;
  1054. margin-left: 20px;
  1055. }
  1056. .reScore > div:nth-child(2) > span {
  1057. color: #6188d5;
  1058. }
  1059. .reBottom {
  1060. display: flex;
  1061. flex-direction: row;
  1062. flex-wrap: nowrap;
  1063. align-items: center;
  1064. justify-content: flex-end;
  1065. }
  1066. .reBottom > div:nth-child(2) {
  1067. border: 1px solid #d7d7d9;
  1068. width: 70px;
  1069. height: 35px;
  1070. text-align: center;
  1071. line-height: 35px;
  1072. border-radius: 5px;
  1073. margin: 0 10px 0 20px;
  1074. cursor: pointer;
  1075. }
  1076. .reBottom > div:nth-child(3) {
  1077. background: #409efe;
  1078. color: #fff;
  1079. height: 35px;
  1080. line-height: 35px;
  1081. width: 85px;
  1082. text-align: center;
  1083. border-radius: 5px;
  1084. cursor: pointer;
  1085. }
  1086. </style>