user.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  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. <el-input v-model="suser" placeholder="请输入手机号或用户名">
  12. </el-input>
  13. <el-button @click="search">查询</el-button>
  14. </div>
  15. </div>
  16. <div class="touRight">
  17. <div></div>
  18. <div>
  19. <el-button @click="addUser">添加账号</el-button>
  20. </div>
  21. </div>
  22. </div>
  23. <div class="pb_content_body" style="margin: 0 auto">
  24. <div class="student_table">
  25. <el-table
  26. ref="table"
  27. :data="tableData"
  28. border
  29. :height="tableHeight"
  30. :fit="true"
  31. v-loading="isLoading"
  32. style="width: 100%"
  33. :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
  34. :row-class-name="tableRowClassName"
  35. >
  36. <el-table-column label="姓名" min-width="10" align="center">
  37. <template slot-scope="scope">
  38. <div class="userImg">
  39. <div>
  40. {{ scope.row.name }}
  41. </div>
  42. </div>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="账号" min-width="10" align="center">
  46. <template slot-scope="scope">
  47. <div>{{ scope.row.username }}</div>
  48. </template>
  49. </el-table-column>
  50. <el-table-column label="电话" min-width="10" align="center">
  51. <template slot-scope="scope">
  52. <div>{{ scope.row.phone ? scope.row.phone : "-" }}</div>
  53. </template>
  54. </el-table-column>
  55. <el-table-column
  56. prop="level"
  57. label="权限等级"
  58. min-width="10"
  59. align="center"
  60. ><template slot-scope="scope">
  61. <div>
  62. {{
  63. scope.row.type == 6
  64. ? "区级评审员"
  65. : scope.row.type == 5
  66. ? "区县评委"
  67. : "暂无"
  68. }}
  69. </div>
  70. </template>
  71. </el-table-column>
  72. <el-table-column
  73. prop="schoolName"
  74. label="学校"
  75. min-width="10"
  76. align="center"
  77. ><template slot-scope="scope">
  78. <div>
  79. {{ scope.row.schoolName ? scope.row.schoolName : "-" }}
  80. </div>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="操作" min-width="20">
  84. <template slot-scope="scope">
  85. <div class="tableButton">
  86. <el-button v-if="scope.row.type == 5 || scope.row.type == 6" @click="assCase(scope.row.userid)"
  87. >分配案例</el-button
  88. >
  89. <el-button @click="upUser(scope.row)">修改</el-button>
  90. <el-button @click="deUser(scope.row.userid)">删除</el-button>
  91. </div>
  92. </template>
  93. </el-table-column>
  94. </el-table>
  95. </div>
  96. <div class="student_page">
  97. <el-pagination
  98. background
  99. layout="prev, pager, next"
  100. :page-size="10"
  101. :total="total"
  102. v-if="page"
  103. @current-change="handleCurrentChange"
  104. ></el-pagination>
  105. </div>
  106. </div>
  107. <el-dialog
  108. title="添加管理员"
  109. :visible.sync="dialogVisible"
  110. :append-to-body="true"
  111. width="500px"
  112. :before-close="handleClose"
  113. class="dialog_diy"
  114. >
  115. <el-form class="inputClass">
  116. <el-form-item label="名称" :label-width="formLabelWidth">
  117. <span>
  118. <el-input
  119. placeholder="请输入名称"
  120. clearable
  121. v-model="sName"
  122. class="add_input"
  123. ></el-input>
  124. </span>
  125. </el-form-item>
  126. <el-form-item label="手机号" :label-width="formLabelWidth">
  127. <span>
  128. <el-input
  129. placeholder="请输入手机号"
  130. clearable
  131. v-model="sPhone"
  132. class="add_input"
  133. ></el-input>
  134. </span>
  135. </el-form-item>
  136. <el-form-item label="权限" :label-width="formLabelWidth">
  137. <el-select v-model="sType" placeholder="请选择权限">
  138. <el-option label="区级评审员" value="6">区级评审员</el-option>
  139. </el-select>
  140. </el-form-item>
  141. <el-form-item label="学校选择" :label-width="formLabelWidth">
  142. <el-select
  143. v-model="sSchool"
  144. filterable
  145. clearable
  146. @clear="clearSchoolList"
  147. :allow-create="false"
  148. @focus="remoteMethodclick"
  149. remote
  150. placeholder="请输入学校"
  151. :remote-method="remoteMethod"
  152. :loading="loading"
  153. no-data-text="暂未查询到此学校"
  154. >
  155. <el-option
  156. v-for="item in options"
  157. :key="item.value"
  158. :label="item.label"
  159. :value="item.value"
  160. >
  161. </el-option>
  162. </el-select>
  163. </el-form-item>
  164. <div style="text-align: center; color: #adb3b7">
  165. 注:添加账号账号密码为123456
  166. </div>
  167. </el-form>
  168. <span slot="footer" class="dialog-footer flex">
  169. <el-button class="left" @click="dialogVisible = false">取消</el-button>
  170. <el-button class="right" @click="addRaceUser" v-if="isAddOrUp == false"
  171. >确认</el-button
  172. >
  173. <el-button
  174. class="right"
  175. @click="updateRaceUser"
  176. v-if="isAddOrUp == true"
  177. >修改</el-button
  178. >
  179. </span>
  180. </el-dialog>
  181. <el-dialog
  182. title="分配案例"
  183. :visible.sync="dialogVisibleMember"
  184. :append-to-body="true"
  185. width="25%"
  186. height="80%"
  187. :before-close="handleClose"
  188. class="dialog_diy1 customWidth"
  189. >
  190. <div class="people">
  191. <div class="people_top">
  192. <div class="people_top_right">
  193. <div class="people_search">
  194. <div>选择评委</div>
  195. <el-select v-model="reviewer" placeholder="请选择评委">
  196. <el-option
  197. v-for="item in reviewerBox"
  198. :key="item.userid"
  199. :label="item.name"
  200. :value="item.userid"
  201. ></el-option>
  202. </el-select>
  203. </div>
  204. </div>
  205. </div>
  206. <el-checkbox
  207. :indeterminate="isIndeterminate"
  208. v-model="checkAll"
  209. @change="handleCheckAllChange"
  210. style="padding: 15px 0 0 15px"
  211. >全选</el-checkbox
  212. >
  213. <el-checkbox-group
  214. v-model="checkboxList"
  215. class="people_name"
  216. v-if="anliBox.length"
  217. @change="handleCheckedAnliChange"
  218. >
  219. <el-checkbox v-for="item in anliBox" :key="item.id" :label="item.id">
  220. <div class="t_j_box">
  221. <div>案例名称:</div>
  222. <el-tooltip
  223. placement="top"
  224. :content="item.info.title ? item.info.title : '暂无姓名'"
  225. >
  226. <span>{{
  227. item.info.title ? item.info.title : "暂无姓名"
  228. }}</span>
  229. </el-tooltip>
  230. </div>
  231. </el-checkbox>
  232. </el-checkbox-group>
  233. <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
  234. </div>
  235. <span slot="footer" class="dialog-footer">
  236. <el-button @click="dialogVisibleMember = false">取 消</el-button>
  237. <el-button type="primary" @click="addCase">确定</el-button>
  238. </span>
  239. </el-dialog>
  240. </div>
  241. </template>
  242. <script>
  243. export default {
  244. data() {
  245. return {
  246. suser: "",
  247. tableData: [],
  248. tableHeight: "500px",
  249. isLoading: false,
  250. formLabelWidth: "100px",
  251. page: 1,
  252. total: 0,
  253. dialogVisible: false,
  254. isAddOrUp: false,
  255. dialogVisibleMember: false,
  256. sName: "",
  257. sPhone: "",
  258. sType: "",
  259. upId: "",
  260. reviewer: "",
  261. reviewerBox: [],
  262. anliBox: [],
  263. checkboxList: [],
  264. checkboxIdList: [],
  265. isIndeterminate: false,
  266. checkAll: false,
  267. options: [],
  268. list: [],
  269. loading: false,
  270. };
  271. },
  272. mounted() {
  273. this.$nextTick(function () {
  274. this.tableHeight =
  275. window.innerHeight - this.$refs.table.$el.offsetTop - 200;
  276. if (this.tableHeight <= 530) {
  277. this.tableHeight = 530;
  278. }
  279. // 监听窗口大小变化
  280. let self = this;
  281. window.onresize = function () {
  282. self.tableHeight =
  283. window.innerHeight - self.$refs.table.$el.offsetTop - 200;
  284. if (self.tableHeight <= 530) {
  285. self.tableHeight = 530;
  286. }
  287. };
  288. });
  289. },
  290. methods: {
  291. clearSchoolList() {
  292. this.sSchool = "";
  293. },
  294. tableRowClassName({ row, rowIndex }) {
  295. if ((rowIndex + 1) % 2 === 0) {
  296. return "even_row";
  297. } else {
  298. return "";
  299. }
  300. },
  301. remoteMethodclick() {
  302. if (!this.options.length) {
  303. var _option = [];
  304. for (var i = 0; i < 10; i++) {
  305. var _a = this.randomNum(0, 10);
  306. _option.push(this.list[_a]);
  307. }
  308. this.options = _option;
  309. }
  310. },
  311. randomNum(minNum, maxNum) {
  312. switch (arguments.length) {
  313. case 1:
  314. return parseInt(Math.random() * minNum + 1, 10);
  315. break;
  316. case 2:
  317. return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
  318. break;
  319. default:
  320. return 0;
  321. break;
  322. }
  323. },
  324. remoteMethod(query) {
  325. if (query !== "") {
  326. this.loading = true;
  327. setTimeout(() => {
  328. this.loading = false;
  329. this.options = this.list.filter((item) => {
  330. return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
  331. });
  332. }, 200);
  333. } else {
  334. // this.options = [];
  335. var _option = [];
  336. for (var i = 0; i < 10; i++) {
  337. var _a = this.randomNum(0, 10);
  338. _option.push(this.list[_a]);
  339. }
  340. this.options = _option;
  341. }
  342. },
  343. getSchool() {
  344. let params = {
  345. n: "",
  346. };
  347. this.ajax
  348. .get(this.$store.state.api + "getSchool", params)
  349. .then((res) => {
  350. this.schoolList = res.data[0];
  351. this.list = this.schoolList.map((item) => {
  352. return { value: item.id, label: item.name };
  353. });
  354. var _option = [];
  355. for (var i = 0; i < 10; i++) {
  356. var _a = this.randomNum(0, this.list.length);
  357. _option.push(this.list[_a]);
  358. }
  359. this.options = _option;
  360. })
  361. .catch((err) => {
  362. console.error(err);
  363. });
  364. },
  365. handleCheckAllChange(val) {
  366. if (this.checkboxIdList.length == 0) {
  367. for (var i = 0; i < this.anliBox.length; i++) {
  368. this.checkboxIdList.push(this.anliBox[i].id);
  369. }
  370. }
  371. this.checkboxList = val ? this.checkboxIdList : [];
  372. this.isIndeterminate = false;
  373. },
  374. handleCheckedAnliChange(value) {
  375. let checkedCount = this.checkboxList.length;
  376. this.checkAll = checkedCount === this.anliBox.length;
  377. this.isIndeterminate =
  378. checkedCount > 0 && checkedCount < this.anliBox.length;
  379. },
  380. handleClose(done) {
  381. done();
  382. },
  383. handleCurrentChange(val) {
  384. this.page = val;
  385. this.getAdmin();
  386. },
  387. search() {
  388. this.page = 1;
  389. this.getAdmin();
  390. },
  391. addUser() {
  392. this.sName = "";
  393. this.sPhone = "";
  394. this.sType = "";
  395. this.isAddOrUp = false;
  396. this.dialogVisible = true;
  397. },
  398. getAdmin() {
  399. let params = {
  400. uid: this.$store.state.userInfo.userid,
  401. cn: this.suser,
  402. page: this.page,
  403. };
  404. this.ajax
  405. .get(this.$store.state.api + "selectReviewer", params)
  406. .then((res) => {
  407. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  408. this.tableData = res.data[0];
  409. this.reviewerBox = res.data[0];
  410. })
  411. .catch((err) => {
  412. console.error(err);
  413. });
  414. },
  415. addRaceUser() {
  416. if (this.sName == "") {
  417. this.$message.error("请输入名称");
  418. return;
  419. } else if (this.sPhone == "") {
  420. this.$message.error("请输入手机号");
  421. return;
  422. } else if (
  423. this.sId != "" &&
  424. !/^[1][3,4,5,7,8][0-9]{9}$/.test(this.sPhone)
  425. ) {
  426. this.$message.error("手机号格式不正确");
  427. return;
  428. } else if (this.sType == "") {
  429. this.$message.error("请选择权限");
  430. return;
  431. } else if (this.sSchool == "") {
  432. this.$message.error("请选择学校");
  433. return;
  434. }
  435. this.isloading = true;
  436. let params = [
  437. {
  438. reg: "",
  439. res: "",
  440. sch: this.sSchool,
  441. n: this.sName,
  442. p: this.sPhone,
  443. t: this.sType,
  444. parent: this.$store.state.userInfo.userid,
  445. },
  446. ];
  447. this.ajax
  448. .post(this.$store.state.api + "addRaceUser", params)
  449. .then((res) => {
  450. this.$message({
  451. message: "创建成功",
  452. type: "success",
  453. });
  454. this.sName = "";
  455. this.sPhone = "";
  456. this.sType = "";
  457. this.sSchool = "";
  458. this.dialogVisible = false;
  459. this.getAdmin();
  460. })
  461. .catch((err) => {
  462. this.$message.error("创建失败");
  463. console.error(err);
  464. });
  465. },
  466. upUser(r) {
  467. this.sName = r.name;
  468. this.sPhone = r.phone;
  469. this.sType = r.type;
  470. this.upId = r.userid;
  471. this.isAddOrUp = true;
  472. this.dialogVisible = true;
  473. },
  474. updateRaceUser() {
  475. let params = {
  476. n: this.sName,
  477. p: this.sPhone,
  478. t: this.sType,
  479. s: this.$store.state.userInfo.school,
  480. uid: this.upId,
  481. };
  482. this.ajax
  483. .get(this.$store.state.api + "updateReviewer", params)
  484. .then((res) => {
  485. this.$message({
  486. message: "修改成功",
  487. type: "success",
  488. });
  489. this.sName = "";
  490. this.sPhone = "";
  491. this.sType = "";
  492. this.upId = "";
  493. this.isAddOrUp = false;
  494. this.dialogVisible = false;
  495. this.getAdmin();
  496. })
  497. .catch((err) => {
  498. console.error(err);
  499. });
  500. },
  501. deUser(id) {
  502. this.$confirm("确定删除该账号吗?", "提示", {
  503. confirmButtonText: "确定",
  504. cancelButtonText: "取消",
  505. type: "warning",
  506. })
  507. .then(() => {
  508. let params = {
  509. uid: id,
  510. };
  511. this.ajax
  512. .get(this.$store.state.api + "deleteReviewer", params)
  513. .then((res) => {
  514. this.$message({
  515. message: "删除成功",
  516. type: "success",
  517. });
  518. this.dialogVisible = false;
  519. this.getAdmin();
  520. })
  521. .catch((err) => {
  522. console.error(err);
  523. });
  524. })
  525. .catch(() => {});
  526. },
  527. getAnliBox() {
  528. this.ajax
  529. .get(this.$store.state.api + "selecAnliBox")
  530. .then((res) => {
  531. this.anliBox = res.data[0];
  532. for (var i = 0; i < this.anliBox.length; i++) {
  533. this.anliBox[i].info = JSON.parse(this.anliBox[i].info);
  534. this.anliBox[i].overview = JSON.parse(this.anliBox[i].overview);
  535. this.anliBox[i].process = JSON.parse(this.anliBox[i].process);
  536. this.anliBox[i].proact = JSON.parse(this.anliBox[i].proact);
  537. this.anliBox[i].proexc = JSON.parse(this.anliBox[i].proexc);
  538. this.anliBox[i].results = JSON.parse(this.anliBox[i].results);
  539. }
  540. })
  541. .catch((err) => {
  542. console.error(err);
  543. });
  544. },
  545. assCase(id) {
  546. this.reviewer = id;
  547. this.dialogVisibleMember = true;
  548. },
  549. addCase() {
  550. if (this.reviewer == "") {
  551. this.$message.error("请选择评审员");
  552. return;
  553. } else if (this.checkboxList.length == 0) {
  554. this.$message.error("请选择案例");
  555. return;
  556. }
  557. let params = [
  558. {
  559. uid: this.reviewer,
  560. box: this.checkboxList.join(","),
  561. },
  562. ];
  563. this.ajax
  564. .post(this.$store.state.api + "insertCase", params)
  565. .then((res) => {
  566. this.$message({
  567. message: "分配成功",
  568. type: "success",
  569. });
  570. this.reviewer = "";
  571. this.checkboxList = [];
  572. this.isIndeterminate = false;
  573. this.checkAll = false;
  574. this.dialogVisibleMember = false;
  575. })
  576. .catch((err) => {
  577. this.$message.error("网络不佳");
  578. console.error(err);
  579. });
  580. },
  581. },
  582. created() {
  583. this.getAdmin();
  584. this.getAnliBox();
  585. this.getSchool();
  586. },
  587. };
  588. </script>
  589. <style scoped>
  590. .dialog_diy >>> .el-dialog__header,
  591. .dialog_diy1 >>> .el-dialog__header {
  592. background: #3d67bd !important;
  593. padding: 15px 20px;
  594. }
  595. .dialog_diy1 >>> .el-dialog__header {
  596. text-align: center;
  597. }
  598. .dialog_diy >>> .el-dialog__title,
  599. .dialog_diy1 >>> .el-dialog__title {
  600. color: #fff;
  601. }
  602. .dialog_diy >>> .el-dialog__headerbtn,
  603. .dialog_diy1 >>> .el-dialog__headerbtn {
  604. top: 19px;
  605. }
  606. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close,
  607. .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close {
  608. color: #fff;
  609. }
  610. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover,
  611. .dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close:hover {
  612. color: #fff;
  613. }
  614. .dialog_diy >>> .el-dialog__body,
  615. .dialog_diy >>> .el-dialog__footer,
  616. .dialog_diy1 >>> .el-dialog__body,
  617. .dialog_diy1 >>> .el-dialog__footer {
  618. background: #fafafa;
  619. }
  620. /* .inputClass.is-active >>> .el-input__inner,
  621. .inputClass >>> .el-input__inner:focus {
  622. border-color: #5c549f;
  623. }
  624. .inputClass >>> .el-select .el-input.is-focus .el-input__inner {
  625. border-color: #5c549f;
  626. }
  627. .inputClass >>> .el-select .el-input__inner:focus {
  628. border-color: #5c549f;
  629. } */
  630. .left {
  631. background: #fff !important;
  632. color: #000 !important;
  633. }
  634. .right,
  635. .left {
  636. width: 80px;
  637. color: #fff;
  638. background: #409efe;
  639. margin-bottom: 20px;
  640. }
  641. .touTop {
  642. margin: 15px auto;
  643. display: flex;
  644. flex-direction: row;
  645. flex-wrap: nowrap;
  646. align-items: center;
  647. justify-content: space-between;
  648. width: 95%;
  649. }
  650. .touLeft {
  651. display: flex;
  652. flex-direction: row;
  653. flex-wrap: nowrap;
  654. align-items: center;
  655. }
  656. .touLeft > div {
  657. display: flex;
  658. flex-direction: row;
  659. flex-wrap: nowrap;
  660. align-items: center;
  661. }
  662. .touLeft > div > .el-button {
  663. background: #2268bd;
  664. color: #fff;
  665. margin-left: 10px;
  666. }
  667. .touRight > div:nth-child(2) > .el-button {
  668. background: #2268bd;
  669. color: #fff;
  670. }
  671. .student_table >>> .el-table--border td {
  672. border-right: 0px !important;
  673. }
  674. .student_table >>> .el-table,
  675. .student_table >>> .el-table__body-wrapper {
  676. height: auto !important;
  677. }
  678. .student_page {
  679. margin-top: 10px;
  680. }
  681. .tableButton {
  682. display: flex;
  683. flex-direction: row;
  684. flex-wrap: nowrap;
  685. align-items: center;
  686. }
  687. .tableButton > .el-button {
  688. background: #409efe;
  689. color: #fff;
  690. cursor: pointer;
  691. }
  692. .customWidth >>> .el-dialog {
  693. min-width: 500px !important;
  694. }
  695. .people {
  696. border: 1px solid rgb(229 229 229);
  697. height: 495px;
  698. border-radius: 5px;
  699. width: 100%;
  700. overflow: auto;
  701. background: #fff;
  702. box-shadow: 0px 0px 10px 8px #ededed;
  703. }
  704. .people::-webkit-scrollbar {
  705. /*滚动条整体样式*/
  706. width: 6px;
  707. /*高宽分别对应横竖滚动条的尺寸*/
  708. height: 6px;
  709. }
  710. /*定义滚动条轨道 内阴影+圆角*/
  711. .people::-webkit-scrollbar-track {
  712. border-radius: 10px;
  713. background-color: #eee;
  714. }
  715. /*定义滑块 内阴影+圆角*/
  716. .people::-webkit-scrollbar-thumb {
  717. border-radius: 10px;
  718. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  719. background-color: rgba(0, 0, 0, 0.1);
  720. }
  721. .people_top {
  722. display: flex;
  723. width: 100%;
  724. flex-direction: column;
  725. padding: 10px 25px 10px;
  726. box-sizing: border-box;
  727. border-bottom: 1px solid #f4f4f7;
  728. }
  729. .people_top_right {
  730. height: 40px;
  731. margin-bottom: 10px;
  732. }
  733. .people_search {
  734. display: flex;
  735. flex-direction: row;
  736. flex-wrap: nowrap;
  737. align-items: center;
  738. }
  739. .people_search > div:nth-child(1) {
  740. font-size: 20px;
  741. margin-right: 10px;
  742. }
  743. .t_j_box {
  744. display: flex;
  745. }
  746. .t_j_box span:nth-child(1) {
  747. width: 15%;
  748. overflow: hidden;
  749. margin-right: 10px;
  750. text-overflow: ellipsis;
  751. white-space: nowrap;
  752. }
  753. .t_j_box span:nth-child(2) {
  754. width: 300px;
  755. overflow: hidden;
  756. text-overflow: ellipsis;
  757. margin-right: 10px;
  758. }
  759. .t_j_box span:nth-child(3) {
  760. width: calc(55% - 20px);
  761. overflow: hidden;
  762. text-overflow: ellipsis;
  763. }
  764. .people_name {
  765. display: flex;
  766. flex-direction: column;
  767. flex-wrap: wrap;
  768. align-items: flex-start;
  769. padding: 15px 0 0 15px;
  770. }
  771. .people_name >>> .el-checkbox {
  772. margin-bottom: 10px;
  773. }
  774. </style>