user.vue 23 KB

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