anliList.vue 28 KB

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