user.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  1. <template>
  2. <div class="content-box">
  3. <div class="left">
  4. <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
  5. <span class="cameratxt">用户管理</span>
  6. </div>
  7. <div class="scroll">
  8. <div class="middle">
  9. <div class="filter">
  10. <div class="condition">
  11. <span>状态 :</span>
  12. <el-select
  13. clearable
  14. v-model="searchInput.status"
  15. placeholder="请选择状态"
  16. >
  17. <el-option label="正常" :value="1" />
  18. <el-option label="冻结" :value="2" />
  19. </el-select>
  20. </div>
  21. <div class="condition">
  22. <span>姓名 :</span>
  23. <el-input
  24. clearable
  25. v-model.trim="searchInput.keyWord"
  26. class="w-50 m-2"
  27. placeholder="请输入姓名"
  28. style="width: 180px"
  29. @clear="searchBtn"
  30. />
  31. </div>
  32. <div class="condition">
  33. <span>创建时间 :</span>
  34. <el-date-picker
  35. v-model="searchInput.createTime"
  36. type="datetimerange"
  37. range-separator="-"
  38. start-placeholder="起始时间"
  39. end-placeholder="结束时间"
  40. format="YYYY-MM-DD HH:mm:ss"
  41. value-format="YYYY-MM-DD HH:mm:ss"
  42. placeholder="请选择日期"
  43. />
  44. </div>
  45. <el-button
  46. style="margin-left: 20px"
  47. color="rgba(38, 151, 255, 1)"
  48. type="primary"
  49. class="search"
  50. @click="searchBtn"
  51. ><span>查询</span></el-button
  52. >
  53. <el-button @click="resetBtn" plain color="rgba(43, 153, 255, 1)"
  54. >重置</el-button
  55. >
  56. </div>
  57. <!-- 按钮列表 -->
  58. <div class="gongneng">
  59. <el-button
  60. v-if="store.BtnRole('accountManagementSetting1')"
  61. type="primary"
  62. style="margin-left: 0"
  63. color="rgba(38, 151, 255, 1)"
  64. @click="addlist"
  65. >添加用户</el-button
  66. >
  67. </div>
  68. </div>
  69. <div class="footer" v-loading="loading">
  70. <el-table
  71. :row-class-name="tableRowClassName"
  72. :data="tableData.list"
  73. @selection-change="handleSelectionChange"
  74. style="width: 100%"
  75. :header-cell-style="{
  76. background: 'rgba(240, 243, 247, 1)',
  77. height: '50px',
  78. border: 0,
  79. }"
  80. >
  81. <el-table-column
  82. width="80"
  83. align="center"
  84. label="序号"
  85. type="index"
  86. index="1"
  87. />
  88. <el-table-column align="center" prop="account" label="账号" />
  89. <el-table-column align="center" prop="roleName" label="角色" />
  90. <el-table-column
  91. align="center"
  92. prop="departmentList"
  93. label="可管理部门"
  94. width="300"
  95. ><template #default="{ row }">
  96. <div class="ul" style="display: flex; flex-wrap: wrap">
  97. <el-tag
  98. v-for="i in row.welcomeOrgList"
  99. :key="i.id"
  100. style="margin: 5px"
  101. type="primary"
  102. >{{ i.name }}</el-tag
  103. >
  104. </div>
  105. </template>
  106. </el-table-column>
  107. <el-table-column align="center" prop="name" label="真实姓名" />
  108. <el-table-column align="center" prop="phone" label="手机号" />
  109. <el-table-column align="center" prop="createTime" label="创建时间" />
  110. <el-table-column align="center" prop="name" label="状态">
  111. <template #default="{ row }">
  112. <span v-if="row.status == 2" style="color: #fa9e19">冻结</span>
  113. <span v-if="row.status == 1" style="color: #2697ff">正常</span>
  114. </template>
  115. </el-table-column>
  116. <el-table-column
  117. align="center"
  118. label="操作"
  119. width="160"
  120. fixed="right"
  121. >
  122. <template #default="{ row }">
  123. <div class="options" v-if="row.id != 1">
  124. <span
  125. v-if="
  126. store.BtnRole('accountManagementSetting2') &&
  127. ((roleId ==1 || roleId == 2) && roleId != row.roleId)
  128. "
  129. class="edit"
  130. @click="updateS(row)"
  131. >编辑</span
  132. >
  133. <span
  134. v-if="
  135. store.BtnRole('accountManagementSetting3') &&
  136. ((roleId ==1 || roleId == 2) && roleId != row.roleId)
  137. "
  138. class="delete"
  139. @click="deleteS(row)"
  140. >删除</span
  141. >
  142. </div>
  143. </template>
  144. </el-table-column>
  145. </el-table>
  146. <!-- 分页组件 -->
  147. <div class="pageSize">
  148. <span></span>
  149. <el-pagination
  150. background
  151. :current-page="currentPage"
  152. :page-size="pageSize"
  153. :page-sizes="[10, 20, 30, 40]"
  154. layout="total,sizes, prev, pager, next, jumper, slot"
  155. :total="total"
  156. @size-change="handleSizeChange"
  157. @update:current-page="handleCurrentChange"
  158. />
  159. </div>
  160. </div>
  161. </div>
  162. <!-- 添加账号弹窗 -->
  163. <el-dialog
  164. class="addStaff"
  165. v-model="addDialogVisible"
  166. :close-on-click-modal="false"
  167. :close-on-press-escape="false"
  168. :title="dialongTitle"
  169. align-center
  170. width="580"
  171. :before-close="cancelAdd"
  172. destroy-on-close
  173. draggable
  174. >
  175. <el-form
  176. ref="ruleFormRef"
  177. :model="ruleForm"
  178. :rules="rules"
  179. label-width="100px"
  180. class="demo-ruleForm"
  181. :size="formSize"
  182. label-position="right"
  183. status-icon
  184. >
  185. <el-form-item label="姓名 :" prop="name">
  186. <el-input
  187. v-model.trim="ruleForm.name"
  188. placeholder="请输入姓名"
  189. clearable
  190. />
  191. </el-form-item>
  192. <el-form-item label="手机号码 :" prop="phone">
  193. <el-input
  194. v-model.trim="ruleForm.phone"
  195. placeholder="请输入手机号码"
  196. clearable
  197. />
  198. </el-form-item>
  199. <el-form-item label="用户名 :" prop="account">
  200. <el-input
  201. v-model.trim="ruleForm.account"
  202. placeholder="请输入用户名"
  203. clearable
  204. />
  205. </el-form-item>
  206. <el-form-item label="密码 :" prop="password">
  207. <el-input
  208. v-model.trim="ruleForm.password"
  209. placeholder="请输入密码"
  210. clearable
  211. />
  212. </el-form-item>
  213. <el-form-item label="状态 :" prop="status">
  214. <el-radio-group v-model="ruleForm.status">
  215. <el-radio :value="1" size="large">正常</el-radio>
  216. <el-radio :value="2" size="large">冻结</el-radio>
  217. </el-radio-group>
  218. </el-form-item>
  219. <el-form-item label="角色 :" prop="roleId">
  220. <el-select
  221. clearable
  222. v-model="ruleForm.roleId"
  223. placeholder="请选择角色"
  224. >
  225. <el-option
  226. v-for="i in roleData"
  227. :key="i.id"
  228. :label="i.roleName"
  229. :value="i.id"
  230. />
  231. </el-select>
  232. </el-form-item>
  233. <el-form-item label="部门 :" prop="collegeId">
  234. <el-select
  235. @change="collegeFormChange"
  236. v-model="ruleForm.collegeId"
  237. clearable
  238. multiple
  239. placeholder="请选择部门"
  240. >
  241. <el-option
  242. v-for="i in collegeData"
  243. :key="i.id"
  244. :label="i.name"
  245. :value="`${i.id}`"
  246. />
  247. </el-select>
  248. </el-form-item>
  249. <el-form-item class="options">
  250. <el-button @click="cancelAdd">取消</el-button>
  251. <el-button
  252. color="rgba(0, 97, 255, 1)"
  253. class="queding"
  254. type="primary"
  255. @click="submitAdd(ruleFormRef)"
  256. >
  257. 确定
  258. </el-button>
  259. </el-form-item>
  260. </el-form>
  261. </el-dialog>
  262. </div>
  263. </template>
  264. <script setup>
  265. import {
  266. ref,
  267. watch,
  268. reactive,
  269. nextTick,
  270. onBeforeMount,
  271. onUnmounted,
  272. } from "vue";
  273. import { useRouter } from "vue-router";
  274. import { ElMessage, ElMessageBox } from "element-plus";
  275. import { dayjs } from "element-plus";
  276. import lodash from "lodash";
  277. import { https } from "@/utils/request"; // 绝对路径
  278. import { storeToRefs } from "pinia";
  279. import { useCounterStore } from "@/stores/index";
  280. const router = useRouter();
  281. const store = useCounterStore();
  282. // 为避免解构时失去响应性
  283. const { name, age, isCollapse, realAge, roleId } = storeToRefs(store);
  284. // 表格数据
  285. const loading = ref(false);
  286. const tableData = reactive({
  287. list: [{}],
  288. });
  289. const activeIndex = ref(); // 默认跳转路由
  290. const dialongTitle = ref("新增账号"); // 弹窗标题
  291. const searchInput = reactive({
  292. keyWord: "",
  293. status: "",
  294. createTime: "",
  295. }); // 搜索按钮数据
  296. const currentPage = ref(1); // 当前页
  297. const pageSize = ref(10);
  298. const total = ref(); // 当前总数
  299. const selectIds = ref([]);
  300. const addDialogVisible = ref(false); // 控制添加账号弹窗
  301. // 学院
  302. const collegeData = ref([]);
  303. const roleData = ref([]);
  304. // 表单数据
  305. const formSize = ref("default");
  306. const ruleFormRef = ref();
  307. const ruleForm = reactive({
  308. name: "", //名称
  309. account: "", //账号
  310. phone: "", //手机号
  311. status: 1, //状态 2:冻结 ,1正常
  312. password: "", //密码
  313. roleId: "", //角色id
  314. collegeId: [], //学院id,多个用逗号隔开
  315. id: "",
  316. });
  317. // 表单验证
  318. const rules = reactive({
  319. name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
  320. account: [{ required: true, message: "用户名不能为空", trigger: "blur" }],
  321. phone: [
  322. { required: true, message: "手机号码不能为空", trigger: "blur" },
  323. {
  324. min: 8,
  325. max: 20,
  326. pattern: /^1[3-9]\d{9}$/,
  327. message: "手机号码格式有误,请重新输入",
  328. trigger: "blur",
  329. },
  330. ],
  331. status: [{ required: true, message: "状态不能为空", trigger: "blur" }],
  332. password: [
  333. { required: true, message: "密码不能为空", trigger: "blur" },
  334. {
  335. min: 8,
  336. max: 20,
  337. pattern:
  338. /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\._\+(){}])[0-9a-zA-Z!@#$%^&*,\\._\+(){}]{8,20}$/,
  339. message: "请输入8-20位正确密码(大小写字母·字符·数字)",
  340. trigger: "blur",
  341. },
  342. ],
  343. roleId: [{ required: true, message: "角色不能为空", trigger: "blur" }],
  344. collegeId: [{ required: true, message: "部门不能为空", trigger: "blur" }],
  345. });
  346. const schoolData = ref();
  347. // 获取账户列表
  348. const getList = async () => {
  349. loading.value = true;
  350. let params = {
  351. currentPage: currentPage.value, // 当前页
  352. pageCount: pageSize.value, // 一页数据条数
  353. keyWord: searchInput.keyWord,
  354. status: searchInput.status,
  355. };
  356. if (searchInput.createTime) {
  357. params.startTime = searchInput.createTime[0];
  358. params.endTime = searchInput.createTime[1];
  359. }
  360. let res = await https.get(
  361. "/welcome/api/welcomeAccount/listAccount",
  362. "params",
  363. params
  364. );
  365. console.log(res, "账号信息");
  366. if (res.code == 200) {
  367. res.data.list.forEach((i) => {
  368. if (i.welcomeRole) {
  369. i.roleName = i.welcomeRole.roleName;
  370. }
  371. });
  372. tableData.list = res.data.list;
  373. total.value = res.data.totalCount;
  374. loading.value = false;
  375. } else {
  376. loading.value = false;
  377. ElMessage({
  378. type: "error",
  379. showClose: true,
  380. message: res.message,
  381. center: true,
  382. });
  383. }
  384. };
  385. const roleList = async () => {
  386. let res = await https.get("/welcome/api/welcomeRole/roleGroup", "params");
  387. console.log(res, "角色数据");
  388. if (res.code == 200) {
  389. roleData.value = res.data.filter((i) => {
  390. if (roleId.value == 1) {
  391. return i.id != 1;
  392. } else if (roleId.value == 2) {
  393. return i.id != 1 && i.id != 2;
  394. } else {
  395. return [];
  396. }
  397. });
  398. console.log(roleData.value, "重组后角色数据");
  399. } else {
  400. ElMessage({
  401. type: "error",
  402. showClose: true,
  403. message: res.message,
  404. center: true,
  405. });
  406. }
  407. };
  408. const collegeList = async () => {
  409. let res = await https.get("/welcome/api/welcomeOrg/getColleges", "params");
  410. console.log(res, "学院数据");
  411. if (res.code == 200) {
  412. collegeData.value = res.data;
  413. } else {
  414. ElMessage({
  415. type: "error",
  416. showClose: true,
  417. message: res.message,
  418. center: true,
  419. });
  420. }
  421. };
  422. // 搜索功能
  423. const searchBtn = lodash.debounce(async () => {
  424. getList();
  425. }, 300);
  426. const resetBtn = lodash.debounce(async () => {
  427. searchInput.keyWord = null;
  428. searchInput.status = null;
  429. searchInput.createTime = null;
  430. getList();
  431. }, 300);
  432. // 添加账号
  433. const addlist = () => {
  434. dialongTitle.value = "新增用户";
  435. addDialogVisible.value = true;
  436. ruleForm.id = null;
  437. ruleForm.name = null;
  438. ruleForm.account = null;
  439. ruleForm.phone = null;
  440. ruleForm.status = 1;
  441. ruleForm.password = null;
  442. ruleForm.roleId = null;
  443. ruleForm.collegeId = null;
  444. };
  445. // 添加账号
  446. const updateS = (row) => {
  447. console.log(row, row.collegeId.split(","));
  448. dialongTitle.value = "编辑用户";
  449. addDialogVisible.value = true;
  450. ruleForm.id = row.id;
  451. ruleForm.name = row.name;
  452. ruleForm.account = row.account;
  453. ruleForm.phone = row.phone;
  454. ruleForm.status = row.status;
  455. ruleForm.password = row.password;
  456. ruleForm.roleId = row.roleId;
  457. ruleForm.collegeId = row.collegeId.split(",");
  458. };
  459. const deleteS = async (row) => {
  460. ElMessageBox.confirm("是否删除此数据?", "提示!!!", {
  461. confirmButtonText: "确认",
  462. cancelButtonText: "取消",
  463. type: "warning",
  464. })
  465. .then(async () => {
  466. let data = {
  467. accountId: row.id,
  468. };
  469. let res = await https.get(
  470. "/welcome/api/welcomeAccount/deleteAccount",
  471. "params",
  472. data
  473. );
  474. if (res.code == 200) {
  475. ElMessage({
  476. type: "success",
  477. showClose: true,
  478. message: res.message,
  479. center: true,
  480. });
  481. getList();
  482. } else {
  483. ElMessage({
  484. type: "error",
  485. showClose: true,
  486. message: res.message,
  487. center: true,
  488. });
  489. }
  490. })
  491. .catch(() => {
  492. loading.value = false;
  493. });
  494. };
  495. // 确认添加员工
  496. const submitAdd = lodash.debounce(async (formEl) => {
  497. if (!formEl) return;
  498. await formEl.validate(async (valid, fields) => {
  499. if (valid) {
  500. let data = {
  501. name: ruleForm.name,
  502. account: ruleForm.account,
  503. phone: ruleForm.phone,
  504. status: ruleForm.status,
  505. password: ruleForm.password,
  506. roleId: ruleForm.roleId,
  507. collegeId: ruleForm.collegeId.join(","),
  508. };
  509. if (ruleForm.id) {
  510. data.id = ruleForm.id;
  511. let res = await https.post(
  512. "/welcome/api/welcomeAccount/updateAccount",
  513. "data",
  514. data
  515. );
  516. if (res.code == 200) {
  517. addDialogVisible.value = false;
  518. getList();
  519. ElMessage({
  520. type: "success",
  521. showClose: true,
  522. message: res.message,
  523. center: true,
  524. });
  525. } else {
  526. ElMessage({
  527. type: "error",
  528. showClose: true,
  529. message: res.message,
  530. center: true,
  531. });
  532. }
  533. } else {
  534. let res = await https.post(
  535. "/welcome/api/welcomeAccount/saveAccount",
  536. "data",
  537. data
  538. );
  539. if (res.code == 200) {
  540. addDialogVisible.value = false;
  541. getList();
  542. ElMessage({
  543. type: "success",
  544. showClose: true,
  545. message: res.message,
  546. center: true,
  547. });
  548. } else {
  549. ElMessage({
  550. type: "error",
  551. showClose: true,
  552. message: res.message,
  553. center: true,
  554. });
  555. }
  556. }
  557. } else {
  558. console.log("error submit!", fields);
  559. loading.value = false;
  560. }
  561. });
  562. }, 1000);
  563. const cancelAdd = () => {
  564. addDialogVisible.value = false;
  565. // ruleFormRef.value.resetFields();
  566. };
  567. // 多选框功能
  568. const handleSelectionChange = (val) => {
  569. console.log(val);
  570. selectIds.value = val.map((i) => i.id);
  571. };
  572. // 表格斑马纹颜色修改
  573. const tableRowClassName = ({ row, rowIndex }) => {
  574. if (rowIndex % 2 === 0) {
  575. return "even";
  576. } else if (rowIndex % 2 !== 0) {
  577. return "odd";
  578. }
  579. return "";
  580. };
  581. // 每页显示条数
  582. const handleSizeChange = (value) => {
  583. console.log(value, "每页显示条数");
  584. pageSize.value = value;
  585. getList();
  586. };
  587. // 分页
  588. const handleCurrentChange = (value) => {
  589. // console.log(value);
  590. currentPage.value = value;
  591. getList();
  592. };
  593. onBeforeMount(() => {
  594. getList();
  595. roleList();
  596. collegeList();
  597. });
  598. onUnmounted(() => {
  599. // document.removeEventListener("keyup", Enters);
  600. });
  601. </script>
  602. <style scoped lang="scss">
  603. .content-box {
  604. width: calc(100% - 40px);
  605. height: calc(100% - 105px);
  606. margin: 20px auto;
  607. background-color: #fff;
  608. color: #000;
  609. display: flex;
  610. flex-direction: column;
  611. .svg {
  612. width: 22px;
  613. height: 22px;
  614. }
  615. .left {
  616. width: calc(100% - 60px);
  617. height: 60px;
  618. margin: 0 auto;
  619. display: flex;
  620. align-items: center;
  621. border-bottom: 1px solid #ccc;
  622. color: #000;
  623. font-size: 18px;
  624. font-weight: 600;
  625. .camera {
  626. margin-right: 15px;
  627. color: #4392f7;
  628. }
  629. }
  630. .scroll {
  631. width: calc(100% - 60px);
  632. height: calc(100% - 61px);
  633. margin: 0 auto;
  634. display: flex;
  635. flex-direction: column;
  636. .middle {
  637. width: calc(100%);
  638. color: #000;
  639. .filter {
  640. display: flex;
  641. flex-wrap: wrap;
  642. align-items: center;
  643. .search {
  644. margin-left: 0 !important;
  645. color: #fff;
  646. }
  647. .condition {
  648. display: flex;
  649. align-items: center;
  650. margin: 10px 30px 10px 0;
  651. :deep(.el-input .el-input__inner) {
  652. font-size: 14px;
  653. }
  654. .el-select {
  655. width: 220px;
  656. }
  657. span {
  658. margin: 0 10px 0 0;
  659. }
  660. }
  661. }
  662. .gongneng {
  663. margin: 10px 0;
  664. .el-button {
  665. color: #fff;
  666. margin-right: 15px;
  667. }
  668. }
  669. }
  670. .footer {
  671. width: calc(100%);
  672. flex: 1;
  673. margin: 0 auto;
  674. overflow: auto;
  675. .el-table--fit {
  676. height: calc(100% - 60px);
  677. :deep(.el-table__header-wrapper) {
  678. background-color: #000;
  679. font-size: 15px;
  680. color: #000;
  681. .cell {
  682. color: #000;
  683. }
  684. }
  685. :deep(.el-table__row) {
  686. height: 50px;
  687. font-size: 15px;
  688. color: #000;
  689. }
  690. :deep(.el-table__row td) {
  691. padding: 0;
  692. border: 0;
  693. }
  694. .el-button--primary {
  695. margin-left: 5px;
  696. }
  697. :deep(.el-table__body .even) {
  698. background-color: #fff;
  699. }
  700. :deep(.el-table__body .odd) {
  701. background-color: rgba(240, 243, 247, 1);
  702. }
  703. :deep(.options) {
  704. display: flex;
  705. justify-content: center;
  706. align-items: center;
  707. .edit {
  708. margin: 0 15px 0 0;
  709. color: rgba(0, 186, 173, 1);
  710. cursor: pointer;
  711. }
  712. .delete {
  713. color: rgba(212, 48, 48, 1);
  714. cursor: pointer;
  715. }
  716. }
  717. }
  718. .pageSize {
  719. display: flex;
  720. align-items: center;
  721. justify-content: space-between;
  722. margin: 0 30px;
  723. height: 60px;
  724. span {
  725. color: #000;
  726. }
  727. .el-pagination {
  728. // width: 1600px;
  729. :deep(.el-pagination__total) {
  730. color: #000;
  731. }
  732. :deep(.el-pagination__goto) {
  733. color: #000;
  734. }
  735. :deep(.el-pagination__classifier) {
  736. color: #000;
  737. }
  738. :deep(.el-input__wrapper) {
  739. border: 1px solid rgba(0, 0, 0, 1);
  740. border-radius: 5px;
  741. box-shadow: none;
  742. }
  743. :deep(.el-pager li) {
  744. margin: 0 5px;
  745. border: 1px solid rgba(0, 0, 0, 1);
  746. border-radius: 5px;
  747. background-color: transparent;
  748. }
  749. :deep(.el-pager li.is-active) {
  750. // background-color: rgba(0, 97, 255, 0.8);
  751. border: 1px solid rgba(0, 97, 255, 1);
  752. color: rgba(0, 97, 255, 1);
  753. }
  754. :deep(.btn-prev) {
  755. margin-right: 5px;
  756. border: 1px solid rgba(0, 0, 0, 1);
  757. border-radius: 5px;
  758. background-color: transparent;
  759. }
  760. :deep(.btn-next) {
  761. margin-left: 5px;
  762. border: 1px solid rgba(0, 0, 0, 1);
  763. border-radius: 5px;
  764. background-color: transparent;
  765. }
  766. }
  767. }
  768. }
  769. }
  770. // 添加员工弹窗样式
  771. :deep(.addStaff) {
  772. .el-dialog__body {
  773. padding: 20px 20px 10px 20px;
  774. .el-input {
  775. width: 400px;
  776. .el-input__suffix-inner {
  777. color: rgba(61, 81, 232, 1);
  778. }
  779. }
  780. .el-select {
  781. width: 400px;
  782. }
  783. .el-tree {
  784. width: 400px;
  785. }
  786. .el-form {
  787. .el-form-item {
  788. display: flex;
  789. align-items: center;
  790. }
  791. .options {
  792. margin-top: 30px;
  793. }
  794. }
  795. }
  796. }
  797. }
  798. </style>