ManageUser.vue 26 KB

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