ManageSchool.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  1. <script setup>
  2. import { computed, onMounted, onUnmounted, watch, ref } from "vue";
  3. import { useRouter } from 'vue-router';
  4. import { Search } from '@element-plus/icons-vue';
  5. import { ElMessage } from 'element-plus';
  6. import ManageCollege from './components/ManageSchool/ManageCollege.vue';
  7. const router = useRouter();
  8. import { schoolTree, schoolAdd, schoolItem, schoolUpdate, schoolDelete } from "../../api/admin/school";
  9. // let state = ref({
  10. // listParams: {
  11. // keyword: '',
  12. // page: 1,
  13. // limit: 5,
  14. // },
  15. // list: [],
  16. // total: 0,
  17. // showDialog: false,
  18. // ids: [],
  19. // showDel: false,
  20. // });
  21. let state = ref({
  22. // 提交分页查询数据
  23. "listParams": {
  24. // 搜索的内容
  25. "keyword": "",
  26. // 第几页
  27. "page": 1,
  28. // 每页显示多少数据
  29. "limit": 5
  30. },
  31. // 具体分页的数据
  32. "list": [
  33. // {
  34. // "id": 661434193309765,
  35. // "createTime": "2025-04-03 10:42:39",
  36. // "name": "学校_1",
  37. // },
  38. // {
  39. // "id": 661434193309766,
  40. // "createTime": "2025-04-03 10:42:39",
  41. // "name": "学校_2",
  42. // },
  43. // {
  44. // "id": 661434193309767,
  45. // "createTime": "2025-04-03 10:42:39",
  46. // "name": "学校_3",
  47. // },
  48. // {
  49. // "id": 661434193309768,
  50. // "createTime": "2025-04-03 10:42:39",
  51. // "name": "学校_4",
  52. // },
  53. // {
  54. // "id": 661434193309769,
  55. // "createTime": "2025-04-03 10:42:39",
  56. // "name": "学校_5",
  57. // },
  58. // {
  59. // "id": 661434193309770,
  60. // "createTime": "2025-04-03 10:42:39",
  61. // "name": "学校_6",
  62. // },
  63. ],
  64. // 用户总数量
  65. "total": 0,
  66. // 是否弹出添加UI
  67. "showDialog": false,
  68. // 当前分页列表,多选的数据
  69. "ids": [],
  70. // 批量删除模态框
  71. "showDel": false,
  72. // 详情模态框
  73. "showDetails": false,
  74. });
  75. // 是否弹出新的分页窗口
  76. let newPageOpen = ref(false);
  77. // 新的分页窗口的数据
  78. let newPageConfigDb = ref();
  79. const callbackExitManageCollege = () => {
  80. newPageOpen.value = false;
  81. }
  82. // 用于表单验证规则必须要的对象
  83. let ruleFormRef = ref();
  84. /**
  85. * 添加,最后提交的数据
  86. */
  87. let addParams = ref({
  88. name: '',
  89. remark: '',
  90. });
  91. /**
  92. * 初始化添加的数据
  93. */
  94. const addParamsInit = () => {
  95. addParams.value = {
  96. name: '',
  97. remark: '',
  98. }
  99. }
  100. /**
  101. * 添加,字段相关验证规则
  102. */
  103. let addRules = ref({
  104. name: [{ required: true, message: '请填写学校', trigger: 'blur' }],
  105. remark: [{ required: true, message: '请填写备注', trigger: 'blur' }],
  106. });
  107. /**
  108. * 详情数据,同时用于更新使用
  109. */
  110. let detailsDb = ref({
  111. "id": null,
  112. "name": null,
  113. "type": null,
  114. "remark": null,
  115. "parentId": null,
  116. "schoolId": null
  117. });
  118. /**
  119. * 因为这里的接口返回的不是分页的接口,是全部数据,所以这里就记录全部数据
  120. * 后面通过逻辑,来控制分页的显示
  121. */
  122. let pageDb = [];
  123. /**
  124. * 查找分页数据
  125. */
  126. const pageUpdateEvent = () => {
  127. // console.log(
  128. // "查找分页数据 pageUpdateEvent", state.value.listParams
  129. // );
  130. let submit = {
  131. // 默认优先去顶级所有,传 0 。 否则你要看到 学院, 专业 ,班级 的列表,这里固定就传 学院这个的id值
  132. "schoolId" : 0,
  133. };
  134. schoolTree(submit)
  135. .then(response => {
  136. let data = response?.data?.data;
  137. // console.log(
  138. // "schoolTreeEvent response", response, data
  139. // );
  140. pageDb = data;
  141. pageDbUpdateEvent();
  142. }).catch(error => {
  143. });
  144. }
  145. /**
  146. * 因为接口不是标准的分页接口,是直接返回所有数据的
  147. * 这里进行单独处理,来展示第几页的数据
  148. */
  149. const pageDbUpdateEvent = () => {
  150. // console.log(
  151. // "查找分页数据 pageDbUpdateEvent", state.value.listParams, pageDb
  152. // );
  153. state.value.total = pageDb.length;
  154. state.value.list = [];
  155. let page = state.value.listParams.page;
  156. let limit = state.value.listParams.limit;
  157. // 从第几个数组下标开始
  158. let indexStart = (page - 1) * limit;
  159. // 到第几个数组下标结束
  160. let indexEnd = indexStart + limit - 1;
  161. for (let i = 0; i < pageDb.length; i++) {
  162. // 在范围内
  163. if (i >= indexStart && i <= indexEnd) {
  164. let thisPageDb = pageDb[i];
  165. state.value.list.push(thisPageDb);
  166. }
  167. }
  168. }
  169. /**
  170. * 弹出添加UI
  171. */
  172. const btnAddStudent = (formEl) => {
  173. addParamsInit();
  174. state.value.showDialog = true;
  175. if (!formEl) {
  176. return;
  177. }
  178. formEl.resetFields();
  179. }
  180. /**
  181. * 触发搜索逻辑
  182. */
  183. const btnSearchName = () => {
  184. pageUpdateEvent();
  185. }
  186. /**
  187. * 上一页,下一页改变
  188. */
  189. const handleSizeChange = (val) => {
  190. // 重新查找分页数据
  191. pageUpdateEvent();
  192. }
  193. /**
  194. * 上一页,下一页改变
  195. */
  196. const handleCurrentChange = (val) => {
  197. // 重新查找分页数据
  198. pageUpdateEvent();
  199. }
  200. /**
  201. * 分页多选,更新多选的相关数据
  202. * @param res
  203. */
  204. const selectionChange = (res) => {
  205. state.value.ids = [];
  206. res.forEach((item) => {
  207. // state.value.ids.push(item.id);
  208. state.value.ids.push(item);
  209. });
  210. console.log("分页多选,更新多选的相关数据", state.value.ids);
  211. }
  212. /**
  213. * 添加 点击提交
  214. * @param formEl
  215. */
  216. const submitForm = async (formEl) => {
  217. if (!formEl) return
  218. await formEl.validate((valid, fields) => {
  219. if (valid) {
  220. // console.log(
  221. // "addParams", addParams.value
  222. // );
  223. let submit = {
  224. // 名称
  225. "name": addParams.value.name,
  226. // 0 表示学校 1 表示学院 2表示专业,3 表示班级
  227. "type": 0,
  228. // 备注
  229. "remark": addParams.value.remark,
  230. // 上级id,默认顶级是 0
  231. "parentId": 0,
  232. // 新增时传入0即可,修改则传入原始值。如果新增父级,则该参数传跟 parentId 一样的参数
  233. "schoolId": 0,
  234. };
  235. schoolAdd(submit)
  236. .then(response => {
  237. let data = response?.data?.data;
  238. // console.log(
  239. // "schoolAddEvent response", response, data
  240. // );
  241. // 重新查找分页数据
  242. pageUpdateEvent();
  243. // 接口请求完成,隐藏模态框
  244. state.value.showDialog = false;
  245. }).catch(error => {
  246. });
  247. } else {
  248. // console.log('error submit!', fields)
  249. }
  250. })
  251. }
  252. /**
  253. * 更新
  254. * @param formEl
  255. */
  256. const updateForm = async (formEl) => {
  257. if (!formEl) return
  258. await formEl.validate((valid, fields) => {
  259. if (valid) {
  260. // console.log(
  261. // "detailsDb", detailsDb.value
  262. // );
  263. let submit = {
  264. // 通过 schoolItem 接口得到的 id 值,是什么就传什么
  265. "id" : detailsDb.value.id,
  266. // 名称
  267. "name": detailsDb.value.name,
  268. // 0 表示学校 1 表示学院 2表示专业,3 表示班级, 通过 schoolItem 接口得到的 type 值,是什么就传什么
  269. "type": detailsDb.value.type,
  270. // 备注
  271. "remark": detailsDb.value.remark,
  272. // 上级id,默认顶级是 0, 通过 schoolItem 接口得到的 parentId 值,是什么就传什么
  273. "parentId": detailsDb.value.parentId,
  274. // 新增时传入0即可,修改则传入原始值, 通过 schoolItem 接口得到的 schoolId 值,是什么就传什么
  275. "schoolId": detailsDb.value.schoolId,
  276. };
  277. schoolUpdate(submit)
  278. .then(response => {
  279. let data = response?.data?.data;
  280. // console.log(
  281. // "schoolUpdateEvent response", response, data
  282. // );
  283. // 重新查找分页数据
  284. pageUpdateEvent();
  285. // 接口请求完成,隐藏模态框
  286. state.value.showDetails = false;
  287. }).catch(error => {
  288. });
  289. } else {
  290. // console.log('error submit!', fields)
  291. }
  292. })
  293. }
  294. /**
  295. * 批量删除
  296. * delIdArray 批量删除的id值
  297. * 例如
  298. * [ { "id" : "1" }, { "id" : "2" } ]
  299. * callback 全部删除完成,回调
  300. *
  301. */
  302. const idDelAll = (delIdArray, callback) => {
  303. // 删除完成次数
  304. let okNum = 0;
  305. for (let i = 0; i < delIdArray.length; i++) {
  306. let thisDelIdArray = delIdArray[i];
  307. // console.log(
  308. // "thisDelIdArray", thisDelIdArray
  309. // );
  310. let submit = {
  311. // 选校全部结构返回里面的id值
  312. "id" : thisDelIdArray.id,
  313. };
  314. schoolDelete(submit)
  315. .then(response => {
  316. // let data = response?.data?.data;
  317. // console.log(
  318. // "schoolDeleteEvent response", response, data
  319. // );
  320. okNum += 1;
  321. if (okNum >= delIdArray.length) {
  322. callback("yes");
  323. }
  324. }).catch(error => {
  325. });
  326. }
  327. }
  328. /**
  329. * 删除选中分页的某个数据
  330. * @param res
  331. */
  332. const btnDel = (res) => {
  333. // console.log(
  334. // "删除选中分页的某个数据", res
  335. // );
  336. let delIdArray = [
  337. { "id" : res.id }
  338. ];
  339. idDelAll(
  340. delIdArray,
  341. function() {
  342. ElMessage({
  343. type: 'success',
  344. message: '删除成功',
  345. });
  346. // 重新查找分页数据
  347. pageUpdateEvent();
  348. }
  349. );
  350. }
  351. /**
  352. * 弹出批量删除模态框逻辑
  353. */
  354. const btnShowDel = () => {
  355. if (state.value.ids && state.value.ids.length > 0) {
  356. state.value.showDel = true
  357. }
  358. }
  359. /**
  360. * 开始批量删除处理
  361. */
  362. const btnBatchDel = () => {
  363. console.log(
  364. "开始批量删除处理", state.value.ids
  365. );
  366. ElMessage({
  367. type: 'success',
  368. message: '删除成功',
  369. });
  370. // 重新查找分页数据
  371. pageUpdateEvent();
  372. // 批量选中的列表重置
  373. state.value.ids = [];
  374. // 隐藏模态框
  375. state.value.showDel = false;
  376. }
  377. /**
  378. * 弹出指定分页详情
  379. * @param res
  380. */
  381. const btnDetail = (res) => {
  382. // console.log('弹出指定分页详情', res);
  383. let submit = {
  384. // 选校全部结构返回里面的id值
  385. "id" : "" + res.id,
  386. };
  387. schoolItem(submit)
  388. .then(response => {
  389. let data = response?.data?.data;
  390. // console.log(
  391. // "schoolItemEvent response", response, data
  392. // );
  393. detailsDb.value = {
  394. "id": data.id,
  395. "name": data.name,
  396. "type": data.type,
  397. "remark": data.remark,
  398. "parentId": data.parentId,
  399. "schoolId": data.schoolId
  400. };
  401. state.value.showDetails = true;
  402. }).catch(error => {
  403. });
  404. }
  405. /**
  406. * 弹出管理
  407. */
  408. const btnManage = (res) => {
  409. console.log('弹出管理', res);
  410. newPageConfigDb.value = res;
  411. newPageOpen.value = true;
  412. }
  413. onMounted(function() {
  414. pageUpdateEvent();
  415. });
  416. </script>
  417. <template>
  418. <div class="ManageSchool">
  419. <div class="content commonsScrollbar">
  420. <div class="contentTitle">
  421. <div class="contentTitle-line"></div>
  422. <div class="contentTitle-text">管理学校</div>
  423. </div>
  424. <div class="contentRow">
  425. <div class="rowLeft">
  426. <div class="rowBtn rowBtn1" @click="btnAddStudent(ruleFormRef)">
  427. <img src="./assets/img/manageUser/add.svg" alt="" />
  428. <span class="rowBtn-text rowBtn-text1">添加学校</span>
  429. </div>
  430. <!-- <div class="rowBtn rowBtn2">
  431. <img src="./assets/img/manageUser/download.svg" alt="" />
  432. <span class="rowBtn-text rowBtn-text2">模板下载</span>
  433. </div>
  434. <div class="rowBtn rowBtn1">
  435. <img src="./assets/img/manageUser/import.svg" alt="" />
  436. <span class="rowBtn-text rowBtn-text1">批量导入</span>
  437. </div>
  438. <div class="rowBtn rowBtn1">
  439. <img src="./assets/img/manageUser/export.svg" alt="" />
  440. <span class="rowBtn-text rowBtn-text1">批量导出</span>
  441. </div> -->
  442. <div class="rowBtn rowBtn3" @click="btnShowDel">
  443. <img src="./assets/img/manageUser/delete.svg" alt="" />
  444. <span class="rowBtn-text rowBtn-text3">批量删除</span>
  445. </div>
  446. </div>
  447. <div class="rowRight">
  448. <el-input
  449. v-model="state.listParams.keyword"
  450. :prefix-icon="Search"
  451. clearable
  452. style="width: 17rem; height: 3rem"
  453. placeholder="搜索学校"
  454. @clear="btnSearchName"
  455. />
  456. <div class="rowSearch" @click="btnSearchName">搜索</div>
  457. </div>
  458. </div>
  459. <div class="contentTable commonsScrollbar">
  460. <el-table :data="state.list" style="width: 100%" @selection-change="selectionChange">
  461. <el-table-column align="center" type="selection" width="110" />
  462. <el-table-column prop="name" label="学校" />
  463. <el-table-column label="操作">
  464. <template #default="scope">
  465. <el-button link type="success" @click="btnManage(scope.row)">管理学院</el-button>
  466. <el-button link type="primary" @click="btnDetail(scope.row)">编辑</el-button>
  467. <el-popconfirm :title="`你确定删除${scope.row.name}吗?`" @confirm="btnDel(scope.row)">
  468. <template #reference>
  469. <el-button link type="danger" style="margin-left: 3rem">移除</el-button>
  470. </template>
  471. </el-popconfirm>
  472. </template>
  473. </el-table-column>
  474. </el-table>
  475. </div>
  476. <el-pagination
  477. class="classPagination"
  478. v-model:current-page="state.listParams.page"
  479. v-model:page-size="state.listParams.limit"
  480. :page-sizes="[10, 20, 50, 100]"
  481. background
  482. :layout="' ->, total,prev, pager, next, jumper'"
  483. :total="state.total"
  484. @size-change="handleSizeChange"
  485. @current-change="handleCurrentChange"
  486. >
  487. </el-pagination>
  488. </div>
  489. <!-- 添加模态框 -->
  490. <el-dialog v-model="state.showDialog" class="dialog">
  491. <template #header>
  492. <div class="dialog-title">添加学校</div>
  493. </template>
  494. <div class="dialogBody">
  495. <el-form ref="ruleFormRef" :model="addParams" :rules="addRules">
  496. <el-form-item label="学校" prop="name">
  497. <el-input v-model="addParams.name" clearable placeholder="请填写学校"></el-input>
  498. </el-form-item>
  499. </el-form>
  500. <el-form ref="ruleFormRef" :model="addParams" :rules="addRules">
  501. <el-form-item label="备注" prop="remark">
  502. <el-input v-model="addParams.remark" clearable placeholder="请填写备注"></el-input>
  503. </el-form-item>
  504. </el-form>
  505. <div class="dialogFoot">
  506. <el-button color="#EAEAEA" @click="state.showDialog = false" style="margin-right: 0.6rem">取消</el-button>
  507. <el-button color="#2C68FF" @click="submitForm(ruleFormRef)">确认</el-button>
  508. </div>
  509. </div>
  510. </el-dialog>
  511. <!-- 详情和更新模态框 -->
  512. <el-dialog v-model="state.showDetails" class="dialog">
  513. <template #header>
  514. <div class="dialog-title">学校详情</div>
  515. </template>
  516. <div class="dialogBody">
  517. <el-form ref="ruleFormRef" :model="detailsDb" :rules="addRules">
  518. <el-form-item label="学校" prop="name">
  519. <el-input v-model="detailsDb.name" clearable placeholder="请填写学校"></el-input>
  520. </el-form-item>
  521. </el-form>
  522. <el-form ref="ruleFormRef" :model="detailsDb" :rules="addRules">
  523. <el-form-item label="备注" prop="remark">
  524. <el-input v-model="detailsDb.remark" clearable placeholder="请填写备注"></el-input>
  525. </el-form-item>
  526. </el-form>
  527. <div class="dialogFoot">
  528. <el-button color="#EAEAEA" @click="state.showDetails = false" style="margin-right: 0.6rem">取消</el-button>
  529. <el-button color="#2C68FF" @click="updateForm(ruleFormRef)">更新</el-button>
  530. </div>
  531. </div>
  532. </el-dialog>
  533. <!-- 用于批量删除模态框 -->
  534. <el-dialog v-model="state.showDel" width="600" class="del">
  535. <template #header>
  536. <div style="display: flex; align-items: center">
  537. <img class="del-img" src="./assets/img/manageUser/error-line.svg" alt="" />
  538. <div class="del-name">批量删除</div>
  539. </div>
  540. </template>
  541. <span class="delBody">是否确认批量删除?删除后不可恢复!</span>
  542. <template #footer>
  543. <div class="dialog-footer">
  544. <el-button @click="state.showDel = false">取消</el-button>
  545. <el-button type="primary" @click="btnBatchDel">删除</el-button>
  546. </div>
  547. </template>
  548. </el-dialog>
  549. <div class="newPage" v-if="newPageOpen == true" >
  550. <ManageCollege :configDb="newPageConfigDb" @callbackExit="callbackExitManageCollege" ></ManageCollege>
  551. </div>
  552. </div>
  553. </template>
  554. <style lang="scss" scoped>
  555. @use './css/commonsScrollbar.scss';
  556. .ManageSchool * {
  557. -moz-user-select: none;
  558. -webkit-user-select: none;
  559. -ms-user-select: none;
  560. -khtml-user-select: none;
  561. user-select: none;
  562. box-sizing:border-box;
  563. -moz-box-sizing:border-box; /* Firefox */
  564. -webkit-box-sizing:border-box; /* Safari */
  565. }
  566. .ManageSchool {
  567. position: relative;
  568. z-index: 0;
  569. width: 100%;
  570. height: 100%;
  571. top: 0px;
  572. left: 0px;
  573. background-color: #ffffff;
  574. .newPage {
  575. position: absolute;
  576. top: 0px;
  577. left: 0px;
  578. width: 100%;
  579. height: 100%;
  580. z-index: 1;
  581. }
  582. .content {
  583. position: relative;
  584. width: 100%;
  585. height: 100%;
  586. border-radius: 1rem;
  587. background: #ffffff;
  588. padding: 2rem 4rem 2rem 3rem;
  589. box-sizing: border-box;
  590. .contentTitle {
  591. padding: 0 0.5rem;
  592. box-sizing: border-box;
  593. display: flex;
  594. align-items: center;
  595. .contentTitle-line {
  596. width: 0.35rem;
  597. height: 2rem;
  598. background: #2c68ff;
  599. border-radius: 0.85rem;
  600. }
  601. .contentTitle-text {
  602. font-weight: bold;
  603. font-size: 1.8rem;
  604. color: #373737;
  605. margin-left: 1.4rem;
  606. }
  607. }
  608. .contentRow {
  609. margin-top: 2.8rem;
  610. padding: 0 1.5rem 0 1rem;
  611. box-sizing: border-box;
  612. display: flex;
  613. align-items: center;
  614. justify-content: space-between;
  615. .rowLeft {
  616. display: flex;
  617. align-items: center;
  618. .rowSelect {
  619. :deep(.el-select__wrapper) {
  620. height: 3rem;
  621. font-size: 1.1rem;
  622. min-height: 0;
  623. border-radius: 0.57rem;
  624. }
  625. }
  626. .rowBtn {
  627. cursor: pointer;
  628. width: 8.8rem;
  629. height: 3rem;
  630. border-radius: 0.57rem;
  631. display: flex;
  632. align-items: center;
  633. justify-content: center;
  634. margin-left: 2rem;
  635. img {
  636. width: 1.5rem;
  637. height: 1.5rem;
  638. }
  639. .rowBtn-text {
  640. font-size: 1.15rem;
  641. margin-left: 0.7rem;
  642. }
  643. .rowBtn-text1 {
  644. color: #3d7cff;
  645. }
  646. .rowBtn-text2 {
  647. color: #d8a216;
  648. }
  649. .rowBtn-text3 {
  650. color: #e84d4d;
  651. }
  652. }
  653. .rowBtn1 {
  654. background: #e5eeff;
  655. &:hover {
  656. background: #edf3ff;
  657. }
  658. }
  659. .rowBtn2 {
  660. background: rgba(214, 154, 1, 0.1);
  661. &:hover {
  662. background: #f4e5bd;
  663. }
  664. }
  665. .rowBtn3 {
  666. background: rgba(232, 77, 77, 0.05);
  667. &:hover {
  668. background: #fad4d4;
  669. }
  670. }
  671. }
  672. .rowRight {
  673. display: flex;
  674. :deep(.el-input__wrapper) {
  675. font-size: 1rem;
  676. border-radius: 0.57rem;
  677. }
  678. .rowSearch {
  679. cursor: pointer;
  680. width: 3.9rem;
  681. height: 3rem;
  682. background: #3d7cff;
  683. border-radius: 0.57rem;
  684. font-size: 1.1rem;
  685. color: #ffffff;
  686. display: flex;
  687. align-items: center;
  688. justify-content: center;
  689. margin-left: 0.7rem;
  690. &:hover {
  691. background: #77a3ff;
  692. }
  693. }
  694. }
  695. }
  696. .contentTable {
  697. margin-top: 2.3rem;
  698. height: 36rem;
  699. :deep(tr) {
  700. border-radius: 0.57rem;
  701. }
  702. :deep(th) {
  703. background: #f5f7fa;
  704. height: 5rem;
  705. font-size: 1.4rem;
  706. color: #333746;
  707. font-weight: 500;
  708. }
  709. :deep(td) {
  710. height: 5rem;
  711. font-size: 1.2rem;
  712. color: #333333;
  713. }
  714. :deep(.cell) {
  715. height: 2rem;
  716. }
  717. :deep(.el-checkbox) {
  718. --el-checkbox-input-height: 2rem;
  719. --el-checkbox-input-width: 2rem;
  720. --el-checkbox-border-radius: 0.28rem;
  721. // border: 1px solid #cad2d8;
  722. }
  723. :deep(.el-checkbox__inner:after) {
  724. height: 1.07rem;
  725. left: 0.64rem;
  726. top: 0.21rem;
  727. width: 0.5rem;
  728. }
  729. :deep(.el-checkbox__inner::before) {
  730. top: 0.85rem;
  731. }
  732. :deep(.el-button) {
  733. font-size: 1.2rem;
  734. }
  735. :deep(.el-table__inner-wrapper::before) {
  736. height: 0px;
  737. }
  738. }
  739. :deep(.classPagination) {
  740. .el-pagination__rightwrapper {
  741. justify-content: center;
  742. .el-pagination__total {
  743. color: #000000;
  744. }
  745. .btn-prev,
  746. .btn-next {
  747. background: #f7f7f7;
  748. color: #000000;
  749. border-radius: 1rem;
  750. }
  751. .number {
  752. background: #f7f7f7;
  753. color: #000000;
  754. border-radius: 0.5rem;
  755. }
  756. .is-active {
  757. background: #2c68ff;
  758. color: #ffffff;
  759. }
  760. .el-pagination__jump {
  761. color: #000000;
  762. .el-pagination__editor.el-input {
  763. width: 4.57rem;
  764. .el-input__wrapper {
  765. border-radius: 1rem;
  766. }
  767. }
  768. }
  769. }
  770. }
  771. }
  772. :deep(.dialog) {
  773. width: 55rem;
  774. padding: 0;
  775. border-radius: 1.1rem;
  776. .el-dialog__header {
  777. padding: 0px;
  778. margin: 0px;
  779. }
  780. .dialog-title {
  781. // width: 55rem;
  782. width: 100%;
  783. height: 5.9rem;
  784. background: #2c68ff;
  785. font-size: 1.8rem;
  786. color: #ffffff;
  787. display: flex;
  788. align-items: center;
  789. border-radius: 1.1rem 1.1rem 0 0;
  790. padding-left: 4rem;
  791. box-sizing: border-box;
  792. }
  793. .el-dialog__headerbtn {
  794. font-size: 1.7rem;
  795. width: 3.57rem;
  796. height: 3.57rem;
  797. top: 1rem;
  798. right: 1rem;
  799. .el-dialog__close {
  800. color: #ffffff;
  801. font-size: 3.7rem;
  802. }
  803. }
  804. .dialogBody {
  805. padding: 0.8rem 8rem 3.5rem 6.7rem;
  806. box-sizing: border-box;
  807. .el-form-item {
  808. align-items: center;
  809. margin-bottom: 2rem;
  810. }
  811. .el-form-item__label {
  812. font-size: 1.2rem;
  813. color: #000000;
  814. padding-right: 2rem;
  815. }
  816. .el-input {
  817. height: 3.7rem;
  818. --el-input-bg-color: #efefef;
  819. font-size: 1.2rem;
  820. --el-input-border-radius: 0.57rem;
  821. --el-input-border-color: #efefef;
  822. --el-input-focus-border-color: #efefef;
  823. --el-input-hover-border-color: #efefef;
  824. .el-input__wrapper {
  825. padding: 0 2rem;
  826. }
  827. }
  828. .el-select {
  829. .el-select__wrapper {
  830. height: 3.7rem;
  831. background-color: #efefef;
  832. font-size: 1.2rem;
  833. border-radius: 0.57rem;
  834. // box-shadow: 0 0 0 1px #efefef inset;
  835. padding: 0 2rem;
  836. .el-select__caret {
  837. color: #555555;
  838. }
  839. }
  840. }
  841. .dialogFoot {
  842. display: flex;
  843. justify-content: end;
  844. margin-top: 4rem;
  845. .el-button {
  846. width: 8.5rem;
  847. height: 3.2rem;
  848. border-radius: 0.57rem;
  849. font-size: 1.2rem;
  850. }
  851. }
  852. }
  853. }
  854. :deep(.del) {
  855. .del-img {
  856. width: 1.5rem;
  857. height: 1.5rem;
  858. margin-right: 0.3rem;
  859. }
  860. .del-name {
  861. font-size: 1.2rem;
  862. color: #e84d4d;
  863. }
  864. .el-dialog__body {
  865. width: 100%;
  866. height: 10rem;
  867. display: flex;
  868. justify-content: center;
  869. padding-top: 3rem;
  870. color: #000000;
  871. box-sizing: border-box;
  872. font-size: 1.2rem;
  873. }
  874. }
  875. }
  876. </style>