index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. <template>
  2. <div class="Box">
  3. <el-form
  4. :model="FormData"
  5. :rules="rules"
  6. ref="ruleForm"
  7. label-width="100px"
  8. class="demo-ruleForm"
  9. >
  10. <div class="topBox">
  11. <div class="titleBtn">
  12. <span class="titleStyle">策略信息新增 </span>
  13. <el-button @click="save()">保存</el-button>
  14. </div>
  15. <!-- 第一排 -->
  16. <div class="fristLine">
  17. <div class="inputBox">
  18. <el-form-item label="策略名称" prop="TacName">
  19. <el-input
  20. placeholder="请输入"
  21. v-model.trim="FormData.TacName"
  22. ></el-input>
  23. </el-form-item>
  24. </div>
  25. <div class="inputBox">
  26. <el-form-item label="IP类型" prop="IpType">
  27. <el-select v-model="FormData.IpType" placeholder="请选择类型">
  28. <el-option
  29. v-for="item in options"
  30. :key="item.value"
  31. :label="item.label"
  32. :value="item.value"
  33. >
  34. </el-option>
  35. </el-select>
  36. </el-form-item>
  37. </div>
  38. <div class="block inputBox1">
  39. <el-form-item label="登录日期" prop="Date">
  40. <el-date-picker
  41. v-model="FormData.Date"
  42. type="daterange"
  43. range-separator="至"
  44. start-placeholder="开始日期"
  45. end-placeholder="结束日期"
  46. @change="dataChange"
  47. value-format="yyyy-MM-dd"
  48. >
  49. </el-date-picker>
  50. </el-form-item>
  51. </div>
  52. <div class="block inputBox1">
  53. <el-form-item label="登录时间" prop="Time">
  54. <el-time-picker
  55. is-range
  56. v-model="FormData.Time"
  57. range-separator="至"
  58. start-placeholder="开始时间"
  59. end-placeholder="结束时间"
  60. placeholder="选择时间范围"
  61. @change="timeChange"
  62. value-format="HH:mm:ss"
  63. >
  64. </el-time-picker>
  65. </el-form-item>
  66. </div>
  67. </div>
  68. <!-- 第二排 -->
  69. <div class="fristLine" style="margin-top: 24px">
  70. <div class="inputBox2">
  71. <el-form-item prop="IpList" label="IP段">
  72. <el-input
  73. placeholder="请输入IP,并以‘;’号隔开"
  74. v-model.trim="FormData.IpList"
  75. ></el-input>
  76. </el-form-item>
  77. </div>
  78. <div class="inputBox3">
  79. <el-form-item label="描述" prop="TacDesc">
  80. <el-input
  81. placeholder="请输入"
  82. v-model.trim="FormData.TacDesc"
  83. ></el-input>
  84. </el-form-item>
  85. </div>
  86. </div>
  87. </div>
  88. </el-form>
  89. <div class="centerBox">
  90. <div class="leftB">
  91. <div class="titleBtn">
  92. <span class="titleStyle">已分配职员 </span>
  93. <div class="searchBox">
  94. <el-input
  95. placeholder="请输入内容"
  96. clearable
  97. v-model.trim="keyWordsUp"
  98. @keyup.enter.native="queryDatas"
  99. ></el-input>
  100. <el-button @click="queryDatas">搜索</el-button>
  101. </div>
  102. </div>
  103. <div class="center-box fpBox">
  104. <el-row class="scCont" :gutter="16">
  105. <el-col
  106. :span="4"
  107. v-for="(item, index) in FormData.UseList"
  108. :key="index"
  109. >
  110. <el-card class="box-card">
  111. <div class="lineTop"></div>
  112. <div class="text item">
  113. <div class="header-top flex">
  114. <div class="header-mid">
  115. <span :title="item.UserName" class="titles">{{
  116. item.UserName
  117. }}</span>
  118. </div>
  119. <el-checkbox-group
  120. v-model="UncheckList"
  121. @change="UnchangeChecked(item, index)"
  122. >
  123. <el-checkbox checked></el-checkbox>
  124. </el-checkbox-group>
  125. </div>
  126. </div>
  127. </el-card>
  128. </el-col>
  129. </el-row>
  130. <el-empty
  131. v-if="FormData.UseList.length == 0"
  132. description="没有选取"
  133. style="margin: 0 auto"
  134. ></el-empty>
  135. </div>
  136. </div>
  137. <div class="rightB">
  138. <div class="titleBtn">
  139. <span class="titleStyle">选择职员 </span>
  140. <div class="searchBox">
  141. <el-input
  142. placeholder="请输入内容"
  143. clearable
  144. v-model.trim="keyWords"
  145. @keyup.enter.native="getUserData"
  146. ></el-input>
  147. <el-button @click="getUserData">搜索</el-button>
  148. </div>
  149. </div>
  150. <div
  151. class="center-box scrollbar"
  152. v-infinite-scroll="load"
  153. :infinite-scroll-distance="20"
  154. infinite-scroll-disabled="disabled"
  155. >
  156. <el-row class="scCont" :gutter="16">
  157. <el-col
  158. :span="6"
  159. v-for="(item, index) in FormData.Unuselist"
  160. :key="index"
  161. >
  162. <el-card class="box-card">
  163. <div class="lineTop"></div>
  164. <div class="text item">
  165. <div class="header-top flex">
  166. <div class="header-mid">
  167. <span :title="item.UserName" class="title">{{
  168. item.UserName
  169. }}</span>
  170. </div>
  171. <el-checkbox-group
  172. v-model="checkList"
  173. @change="changeChecked(item, index)"
  174. >
  175. <el-checkbox></el-checkbox>
  176. </el-checkbox-group>
  177. </div>
  178. </div>
  179. </el-card>
  180. </el-col>
  181. </el-row>
  182. <template v-if="total > 1">
  183. <p class="center" v-if="loading">加载中...</p>
  184. <p class="center" v-if="noMore">没有更多数据了~</p>
  185. </template>
  186. <el-empty
  187. v-if="FormData.Unuselist.length == 0"
  188. description="没有内容"
  189. style="margin: 0 auto"
  190. ></el-empty>
  191. </div>
  192. </div>
  193. </div>
  194. </div>
  195. </template>
  196. <script>
  197. import { GetUserList } from "@/api/apiAuthority";
  198. import { SaveTac } from "@/api/systemConfiguration";
  199. import { findarrays } from "@/utils/validate";
  200. import { lengthValidator } from "@/utils/validate";
  201. export default {
  202. data() {
  203. return {
  204. keyWordsUp: "",
  205. keyWords: "",
  206. checkList: [],
  207. UncheckList: true,
  208. options: [
  209. {
  210. value: 0,
  211. label: "黑名单",
  212. },
  213. {
  214. value: 1,
  215. label: "白名单",
  216. },
  217. ],
  218. boxArr: [],
  219. boxArr1: [],
  220. FormData: {
  221. TacName: "",
  222. TacDesc: "",
  223. DateBegin: "",
  224. DateEnd: "",
  225. TimeBegin: "",
  226. TimeEnd: "",
  227. IpType: 1,
  228. IpList: "",
  229. UseList: [],
  230. UseLists: [],
  231. Unuselist: [],
  232. Unuselists: [],
  233. Date: null,
  234. Time: null,
  235. },
  236. rules: {
  237. TacName: [
  238. { required: true, message: "请输入策略名称", trigger: "blur" },
  239. {
  240. validator: lengthValidator,
  241. max: 128,
  242. message: "长度在 1 到 128 个字符",
  243. trigger: ["change", "blur"],
  244. },
  245. ],
  246. Date: [
  247. { required: true, message: "请选择登录日期", trigger: "change" },
  248. ],
  249. Time: [
  250. { required: true, message: "请选择登录时间", trigger: "change" },
  251. ],
  252. TacDesc: [
  253. {
  254. validator: lengthValidator,
  255. max: 256,
  256. message: "长度在 1 到 256 个字符",
  257. trigger: ["change", "blur"],
  258. },
  259. ],
  260. IpList: [
  261. {
  262. validator: lengthValidator,
  263. max: 256,
  264. message: "长度在 1 到 256 个字符",
  265. trigger: ["change", "blur"],
  266. },
  267. ],
  268. },
  269. pageNum: 1,
  270. PageSize: 40,
  271. loading: false,
  272. total: null,
  273. arrList: [],
  274. dataList: [],
  275. checkData: [],
  276. copyList: [],
  277. };
  278. },
  279. created: function () {
  280. this.getUserList({
  281. QueryName: this.keyWords,
  282. PageSize: this.PageSize,
  283. PageIndex: this.pageNum,
  284. });
  285. },
  286. computed: {
  287. noMore() {
  288. return this.pageNum >= this.total;
  289. },
  290. disabled() {
  291. return this.loading || this.noMore;
  292. },
  293. },
  294. watch: {
  295. keyWords(val) {
  296. if (this.keyWords.length == 0) {
  297. this.arrList = [];
  298. this.getUserList({
  299. QueryName: this.keyWords,
  300. PageSize: this.PageSize,
  301. PageIndex: 1,
  302. });
  303. }
  304. },
  305. keyWordsUp() {
  306. if (this.keyWordsUp.length == 0) {
  307. const res = this.FormData.UseLists;
  308. this.FormData.UseList = JSON.parse(JSON.stringify(res));
  309. }
  310. },
  311. },
  312. methods: {
  313. nuew() {
  314. let arr = "";
  315. arr = this.isValidseg(this.FormData.IpList);
  316. console.log(this.FormData.IpList);
  317. console.log(arr, "1111111");
  318. },
  319. isValidIP: function (ip) {
  320. let reg =
  321. /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
  322. return reg.test(ip);
  323. },
  324. isValidseg(ip) {
  325. let reg =
  326. /^((?:(?:[01]?\d?\d|2(?:[0-4]\d|5[0-5]))\.){2}(?:[01]?\d?\d|2(?:[0-4]\d|5[0-5])))(?:(?:\.(?:[01]?\d?\d|2(?:[0-4]\d|5[0-5])))(\/(?:(?:[01]?\d?\d|2(?:[0-4]\d|5[0-5]))))?|(\/(?:(?:[01]?\d?\d|2(?:[0-4]\d|5[0-5])))\.(?:(?:[01]?\d?\d|2(?:[0-4]\d|5[0-5])))))$/;
  327. return reg.test(ip);
  328. },
  329. save() {
  330. let that = this;
  331. let ipArr = [];
  332. if (this.FormData.IpList) {
  333. ipArr = this.FormData.IpList.split(";");
  334. }
  335. let isSave = true;
  336. if (ipArr.length >= 2) {
  337. ipArr.forEach((item) => {
  338. if (this.isValidIP(item) == true || this.isValidseg(item) == true) {
  339. // this.$message.error("请输入正确IP段,并以;号隔开");
  340. isSave = true;
  341. } else {
  342. this.$message.error("请输入正确IP段,并以;号隔开");
  343. isSave = false;
  344. }
  345. });
  346. } else {
  347. if (
  348. this.isValidIP(ipArr[0]) == true ||
  349. this.isValidseg(ipArr[0]) == true
  350. ) {
  351. isSave = true;
  352. } else {
  353. if (ipArr.length != 0) {
  354. this.$message.error("请输入正确IP段,并以;号隔开");
  355. isSave = false;
  356. }
  357. }
  358. }
  359. this.$refs["ruleForm"].validate((valid) => {
  360. if (valid && isSave) {
  361. return new Promise((resolve, reject) => {
  362. SaveTac(this.FormData)
  363. .then((response) => {
  364. if (response.code === 0) {
  365. this.FormData = {
  366. TacName: "",
  367. TacDesc: "",
  368. DateBegin: "",
  369. DateEnd: "",
  370. TimeBegin: "",
  371. TimeEnd: "",
  372. IpType: 1,
  373. IpList: "",
  374. UseList: [],
  375. Unuselist: [],
  376. Date: null,
  377. Time: null,
  378. };
  379. this.$message.success("新增成功");
  380. this.$store.dispatch("tagsView/delView", this.$route);
  381. that.$router.push("/LoginPolicy");
  382. } else {
  383. this.$message.error(response.message);
  384. }
  385. resolve();
  386. })
  387. .catch((error) => {
  388. reject(error);
  389. });
  390. });
  391. } else {
  392. return false;
  393. }
  394. });
  395. },
  396. getUserList(obj) {
  397. return new Promise((resolve, reject) => {
  398. this.loading = true;
  399. GetUserList(obj)
  400. .then((res) => {
  401. if (res.code === 0) {
  402. const datas = res.returnData.records;
  403. const num = res.returnData.pages;
  404. this.arrList.push(datas);
  405. const arrs = this.arrList.flat();
  406. const msgs = _.unionBy(arrs, "UserId");
  407. this.FormData.Unuselist = msgs;
  408. // this.FormData.Unuselists = msgs;
  409. this.copyList = msgs;
  410. this.FormData.Unuselist = this.FormData.Unuselist.filter(
  411. (i) => i.UserName
  412. );
  413. this.FormData.Unuselist.forEach((res, index) => {
  414. res.indexname = index;
  415. });
  416. if (this.FormData.UseLists.length > 0) {
  417. this.FormData.UseLists.forEach((element) => {
  418. this.FormData.Unuselist.forEach((res, index) => {
  419. if (element.UserId == res.UserId) {
  420. this.FormData.Unuselist.splice(index, 1);
  421. }
  422. });
  423. });
  424. }
  425. this.dataList = msgs;
  426. this.total = num;
  427. this.loading = false;
  428. }
  429. resolve();
  430. })
  431. .catch((error) => {
  432. reject(error);
  433. this.loading = false;
  434. });
  435. });
  436. },
  437. changeChecked(val, index) {
  438. this.checkList = false;
  439. this.FormData.UseList.push(val);
  440. this.FormData.UseLists.push(val);
  441. // const res = this.FormData.UseList;
  442. // this.FormData.UseLists = res;
  443. this.FormData.Unuselist.splice(index, 1);
  444. // this.FormData.Unuselists.splice(index, 1);
  445. this.FormData.Unuselists = this.FormData.Unuselists.filter(
  446. (i) => i.UserId !== val.UserId
  447. );
  448. },
  449. compare(property) {
  450. return function (a, b) {
  451. var value1 = a[property];
  452. var value2 = b[property];
  453. return value1 - value2;
  454. };
  455. },
  456. UnchangeChecked(val, index) {
  457. this.UncheckList = true;
  458. this.FormData.Unuselist.push(val);
  459. // this.FormData.Unuselists.push(val);
  460. this.FormData.Unuselist = this.FormData.Unuselist.sort(
  461. this.compare("indexname")
  462. );
  463. this.FormData.Unuselists = this.FormData.Unuselists.sort(
  464. this.compare("indexname")
  465. );
  466. this.FormData.UseList = this.FormData.UseList.filter(
  467. (i) => i.UserId !== val.UserId
  468. );
  469. // this.FormData.UseLists.splice(index, 1);
  470. this.FormData.UseLists = this.FormData.UseLists.filter(
  471. (i) => i.UserId !== val.UserId
  472. );
  473. },
  474. dataChange: function (data) {
  475. this.FormData.DateBegin = data[0];
  476. this.FormData.DateEnd = data[1];
  477. },
  478. timeChange: function (data) {
  479. this.FormData.TimeBegin = data[0];
  480. this.FormData.TimeEnd = data[1];
  481. },
  482. load() {
  483. this.pageNum += 1;
  484. this.getUserList({
  485. QueryName: this.keyWords,
  486. PageSize: this.PageSize,
  487. PageIndex: this.pageNum,
  488. });
  489. },
  490. queryDatas() {
  491. this.keyWordsUp = this.keyWordsUp.replace(/\s+/g, "");
  492. const search = this.keyWordsUp;
  493. if (search) {
  494. let res = this.FormData.UseLists;
  495. this.FormData.UseList = res;
  496. this.FormData.UseList = findarrays(
  497. this.FormData.UseList,
  498. "UserName",
  499. search
  500. );
  501. } else {
  502. this.FormData.UseList = this.FormData.UseLists;
  503. }
  504. },
  505. getUserData(val) {
  506. this.keyWords = this.keyWords.replace(/\s+/g, "");
  507. const search = this.keyWords;
  508. this.arrList = [];
  509. this.getUserList({
  510. QueryName: this.keyWords,
  511. PageSize: this.PageSize,
  512. PageIndex: 1,
  513. });
  514. // if (search) {
  515. // this.FormData.Unuselist = findarrays(
  516. // this.FormData.Unuselist,
  517. // "UserName",
  518. // search
  519. // );
  520. // }
  521. },
  522. clearData() {
  523. this.arrList = [];
  524. this.FormData.Unuselist = [];
  525. this.pageNum = 1;
  526. this.getUserList({
  527. QueryName: "",
  528. PageSize: this.PageSize,
  529. PageIndex: this.pageNum,
  530. });
  531. },
  532. },
  533. };
  534. </script>
  535. <style lang="scss" scoped>
  536. .Box {
  537. width: 100%;
  538. height: 100%;
  539. padding: 0 64px;
  540. padding-top: 32px;
  541. }
  542. ::v-deep .el-row {
  543. width: 100%;
  544. }
  545. .topBox {
  546. width: 100%;
  547. height: 240px;
  548. background: #ffffff;
  549. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  550. border-radius: 16px;
  551. }
  552. .fpBox {
  553. display: block;
  554. }
  555. .fristLine {
  556. display: flex;
  557. margin-left: 33px;
  558. }
  559. .inputBox {
  560. display: flex;
  561. height: 32px;
  562. line-height: 32px;
  563. }
  564. .inputBox1 {
  565. display: flex;
  566. height: 32px;
  567. line-height: 32px;
  568. }
  569. .inputBox2 {
  570. display: flex;
  571. height: 32px;
  572. line-height: 32px;
  573. }
  574. .inputBox3 {
  575. display: flex;
  576. height: 32px;
  577. line-height: 32px;
  578. }
  579. .SystemName {
  580. width: 108px;
  581. height: 14px;
  582. font-size: 14px;
  583. font-weight: 400;
  584. color: #303133;
  585. }
  586. .SystemName1 {
  587. width: 70px;
  588. text-align: right;
  589. margin-left: -10px;
  590. height: 14px;
  591. font-size: 14px;
  592. font-weight: 400;
  593. color: #303133;
  594. cursor: pointer;
  595. }
  596. ::v-deep .topBox {
  597. .el-button--default {
  598. width: 80px;
  599. height: 40px;
  600. background: #6e81bc;
  601. color: #ffffff;
  602. border-radius: 6px;
  603. border: none;
  604. }
  605. .inputBox .el-input__inner {
  606. width: 184px;
  607. height: 32px;
  608. background: #f5f7fa;
  609. // border: 1px solid #dcdfe6;
  610. border-radius: 6px;
  611. }
  612. .el-select__caret {
  613. text-align: center;
  614. height: 32px;
  615. line-height: 32px;
  616. }
  617. .inputBox1 .el-date-editor {
  618. width: 322px;
  619. height: 32px;
  620. line-height: 32px;
  621. background: #f5f7fa;
  622. border: 1px solid #dcdfe6;
  623. border-radius: 6px;
  624. .el-range-separator {
  625. height: 32px;
  626. line-height: 32px;
  627. }
  628. .el-range-input {
  629. background: #f5f7fa;
  630. }
  631. }
  632. .inputBox2 .el-input__inner {
  633. width: 468px;
  634. height: 32px;
  635. background: #f5f7fa;
  636. // border: 1px solid #dcdfe6;
  637. border-radius: 6px;
  638. }
  639. .inputBox3 .el-input__inner {
  640. width: 500px;
  641. height: 32px;
  642. background: #f5f7fa;
  643. // border: 1px solid #dcdfe6;
  644. border-radius: 6px;
  645. }
  646. }
  647. .titleBtn {
  648. display: flex;
  649. justify-content: space-between;
  650. padding: 20px;
  651. }
  652. .titleStyle {
  653. width: 200px;
  654. height: 24px;
  655. font-size: 24px;
  656. font-weight: bold;
  657. color: #303133;
  658. margin-left: 10px;
  659. }
  660. .centerBox {
  661. display: flex;
  662. margin-top: 23px;
  663. position: relative;
  664. }
  665. .leftB {
  666. width: 1242px;
  667. height: 760px;
  668. background: #ffffff;
  669. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  670. border-radius: 4px;
  671. overflow: auto;
  672. > .titleBtn {
  673. width: 63%;
  674. position: absolute;
  675. z-index: 99;
  676. top: 0;
  677. left: 0;
  678. background: #ffffff;
  679. }
  680. > .center-box {
  681. margin-top: 70px;
  682. }
  683. .searchBox {
  684. display: flex;
  685. }
  686. }
  687. .center-box {
  688. // max-height: calc(100% - 105px);
  689. // margin-top: 12px;
  690. padding: 0 24px 24px 24px;
  691. // overflow: auto;
  692. }
  693. .colorTitle {
  694. margin-top: 20px;
  695. width: 195px;
  696. height: 20px;
  697. display: flex;
  698. justify-content: space-between;
  699. float: left;
  700. }
  701. ::v-deep .box-card {
  702. margin-top: 16px;
  703. height: 80px;
  704. background: #f5f7fa;
  705. box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.1);
  706. border-radius: 8px;
  707. .el-checkbox__label {
  708. display: none;
  709. }
  710. }
  711. // .center-box :hover {
  712. // box-shadow: 0 16px 32px 0 rgba(48, 55, 66, 0.15);
  713. // transform: translate(0, -5px);
  714. // transition-delay: 0s !important;
  715. // }
  716. .title {
  717. max-width: 60px;
  718. min-width: 60px;
  719. height: 16px;
  720. font-size: 16px;
  721. font-weight: 400;
  722. color: #303133;
  723. // margin-right: 20px;
  724. display: block;
  725. white-space: nowrap;
  726. overflow: hidden;
  727. text-overflow: ellipsis;
  728. cursor: pointer;
  729. }
  730. .titles {
  731. max-width: 101px;
  732. min-width: 101px;
  733. height: 16px;
  734. font-size: 16px;
  735. font-weight: 400;
  736. color: #303133;
  737. // margin-right: 20px;
  738. display: block;
  739. white-space: nowrap;
  740. overflow: hidden;
  741. text-overflow: ellipsis;
  742. cursor: pointer;
  743. }
  744. // .box-card :hover {
  745. // box-shadow: none;
  746. // transform: none;
  747. // }
  748. .rightB {
  749. width: 670px;
  750. height: 760px;
  751. background: #ffffff;
  752. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  753. border-radius: 16px;
  754. margin-left: 40px;
  755. // overflow: auto;
  756. // position: relative;
  757. .searchBox {
  758. display: flex;
  759. }
  760. > .titleBtn {
  761. width: 34%;
  762. position: absolute;
  763. z-index: 99;
  764. top: 0;
  765. right: 0;
  766. background: #ffffff;
  767. }
  768. > .center-box {
  769. margin-top: 72px;
  770. }
  771. .searchBox {
  772. display: flex;
  773. }
  774. > .scrollbar {
  775. height: calc(100% - 91px);
  776. overflow-y: auto;
  777. overflow-x: hidden;
  778. > p {
  779. margin: 12px 0 0;
  780. }
  781. }
  782. }
  783. ::v-deep .leftB {
  784. .el-input__inner {
  785. width: 200px;
  786. height: 32px;
  787. background: #f5f7fa;
  788. border: 1px solid #c0c4cc;
  789. border-radius: 6px;
  790. }
  791. .el-button--default {
  792. width: 64px;
  793. height: 32px;
  794. line-height: 8px;
  795. background: linear-gradient(0deg, #6983be, #777dba);
  796. border-radius: 6px;
  797. color: #ffffff;
  798. border: none;
  799. margin-left: 10px;
  800. }
  801. }
  802. ::v-deep .rightB {
  803. .el-input__inner {
  804. width: 200px;
  805. height: 32px;
  806. background: #f5f7fa;
  807. border: 1px solid #c0c4cc;
  808. border-radius: 6px;
  809. }
  810. .el-button--default {
  811. width: 64px;
  812. height: 32px;
  813. line-height: 8px;
  814. background: linear-gradient(0deg, #6983be, #777dba);
  815. border-radius: 6px;
  816. color: #ffffff;
  817. border: none;
  818. margin-left: 10px;
  819. }
  820. }
  821. ::-webkit-scrollbar-track-piece {
  822. background: #d3dce6;
  823. }
  824. ::-webkit-scrollbar {
  825. width: 6px;
  826. }
  827. ::-webkit-scrollbar-thumb {
  828. background: #99a9bf;
  829. border-radius: 20px;
  830. }
  831. </style>