index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. <template>
  2. <div class="Box">
  3. <div class="centerBox">
  4. <el-form :model="FormData" :rules="rules" ref="systemForm" label-width="0" class="demo-ruleForm">
  5. <div class="centerTitle">
  6. <span class="TitleStyle">系统基础设置</span>
  7. <el-button v-is="['system_btn_save']" @click="save()">保存</el-button>
  8. </div>
  9. <div class="boxList">
  10. <span class="ListName">是否开启{{ accountGroupType }}</span>
  11. <div class="riaStyle">
  12. <el-radio v-model="FormData.OpenGroup" :label="1">是</el-radio>
  13. <el-radio v-model="FormData.OpenGroup" :label="0">否</el-radio>
  14. </div>
  15. <div class="lineStyle"></div>
  16. </div>
  17. <div class="boxList">
  18. <span class="ListName">是否允许职员关联多账号</span>
  19. <div class="riaStyle">
  20. <el-radio disabled v-model="FormData.UserOfficerMulti" :label="1">是</el-radio>
  21. <el-radio disabled v-model="FormData.UserOfficerMulti" :label="0">否</el-radio>
  22. </div>
  23. <div class="lineStyle"></div>
  24. </div>
  25. <div class="boxList">
  26. <span class="ListName">是否开启角色</span>
  27. <div class="riaStyle">
  28. <el-radio v-model="FormData.OpenRole" :label="1">是</el-radio>
  29. <el-radio v-model="FormData.OpenRole" :label="0">否</el-radio>
  30. </div>
  31. <div class="lineStyle"></div>
  32. </div>
  33. <div class="boxList">
  34. <span class="ListName">是否开启严格数据权限</span>
  35. <div class="riaStyle">
  36. <el-radio v-model="FormData.OpenAuthData" :label="1" disabled>是</el-radio>
  37. <el-radio v-model="FormData.OpenAuthData" :label="0" disabled>否</el-radio>
  38. </div>
  39. <div class="lineStyle"></div>
  40. </div>
  41. <div class="boxList">
  42. <span class="ListName">账号变更为闲置状态的不登录时间(天)</span>
  43. <div class="riaStyle">
  44. <el-form-item prop="UserIdledays">
  45. <el-input v-model.trim="FormData.UserIdledays" placeholder="请输入"></el-input>
  46. </el-form-item>
  47. </div>
  48. <div class="lineStyle"></div>
  49. </div>
  50. <div class="boxList">
  51. <span class="ListName">登录后锁定系统的不操作时间(分钟)</span>
  52. <div class="riaStyle">
  53. <el-form-item prop="LockMins">
  54. <el-input v-model.trim="FormData.LockMins" placeholder="请输入"></el-input>
  55. </el-form-item>
  56. </div>
  57. <div class="lineStyle"></div>
  58. </div>
  59. <div class="boxList">
  60. <span class="ListName">密码长度范围</span>
  61. <div class="riaStyle1">
  62. <div>
  63. <el-form-item prop="PwdLengthBegin">
  64. <el-input class="ipt1" v-model.trim="FormData.PwdLengthBegin" placeholder="最少位数"></el-input>
  65. </el-form-item>
  66. <div class="lineStyle1"></div>
  67. </div>
  68. <span class="zhi">至</span>
  69. <div>
  70. <el-form-item prop="PwdLengthEnd">
  71. <el-input class="ipt2" v-model.trim="FormData.PwdLengthEnd" placeholder="最多位数"></el-input>
  72. </el-form-item>
  73. <div class="lineStyle2"></div>
  74. </div>
  75. </div>
  76. </div>
  77. <div class="boxList">
  78. <span class="ListName">密码组成结构</span>
  79. <div class="riaStyle">
  80. <el-checkbox-group v-model="checkedList" @change="PwdStrucChange" :min="1">
  81. <el-checkbox v-for="(item, index) in PwdStrucList" :label="item.id" :key="index" :checked="item.isChecked">{{ item.name }}</el-checkbox>
  82. </el-checkbox-group>
  83. </div>
  84. <div class="lineStyle"></div>
  85. </div>
  86. <div class="boxList">
  87. <span class="ListName">APPID是否绑定开发者</span>
  88. <div class="riaStyle">
  89. <el-radio v-model="FormData.HasAppid" :label="1">是</el-radio>
  90. <el-radio v-model="FormData.HasAppid" :label="0">否</el-radio>
  91. </div>
  92. <div class="lineStyle"></div>
  93. </div>
  94. <div class="boxList">
  95. <span class="ListName">密码有效时长(天)</span>
  96. <div class="riaStyle">
  97. <el-form-item prop="PwdValidtime">
  98. <el-input v-model.trim="FormData.PwdValidtime" placeholder="请输入"></el-input>
  99. </el-form-item>
  100. </div>
  101. <div class="lineStyle"></div>
  102. </div>
  103. <div class="boxList">
  104. <span class="ListName">允许试错次数(次数)</span>
  105. <div class="riaStyle">
  106. <el-form-item prop="LoginError">
  107. <el-input v-model.trim="FormData.LoginError" placeholder="请输入"></el-input>
  108. </el-form-item>
  109. </div>
  110. <div class="lineStyle"></div>
  111. </div>
  112. <div class="boxList">
  113. <span class="ListName">密码找回联系方式</span>
  114. <div class="riaStyle">
  115. <el-form-item prop="PwdValidtime">
  116. <el-input v-model.trim="FormData.PwdMessage" placeholder="请输入"></el-input>
  117. </el-form-item>
  118. </div>
  119. <div class="lineStyle"></div>
  120. </div>
  121. <div class="boxList">
  122. <span class="ListName">是否启用简易验证码</span>
  123. <div class="riaStyle">
  124. <el-radio v-model="FormData.SimpleValidCodeMode" :label="1">是</el-radio>
  125. <el-radio v-model="FormData.SimpleValidCodeMode" :label="0">否</el-radio>
  126. </div>
  127. <div class="lineStyle" style="margin-bottom: 70px"></div>
  128. </div>
  129. </el-form>
  130. </div>
  131. <div class="asideBox">
  132. <el-button v-is="['system_basic_page']" type="primary">系统基础设置</el-button>
  133. <el-button v-is="['system_logintac_page']" @click="gotoLogin">登录策略</el-button>
  134. </div>
  135. </div>
  136. </template>
  137. <script>
  138. import { GetSystemSet, SaveSystemSet } from "@/api/systemConfiguration";
  139. import { positiveIntegerValidator } from '@/utils/validate'
  140. export default {
  141. data () {
  142. return {
  143. isShow: false,
  144. FormData: {
  145. OpenGroup: "1",
  146. UserOfficerMulti: 1,
  147. OpenRole: 1,
  148. OpenAuthData: 1,
  149. UserIdledays: 0,
  150. LockMins: 0,
  151. PwdLengthBegin: 0,
  152. PwdLengthEnd: 0,
  153. PwdStruc: "0",
  154. HasAppid: 0,
  155. PwdValidtime: 0,
  156. LoginError: 0,
  157. PwdMessage: "",
  158. SimpleValidCodeMode: 0,
  159. },
  160. rules: {
  161. UserIdledays: [
  162. {
  163. required: true,
  164. message: "请输入账号变更为闲置状态的不登录时间(天)",
  165. trigger: "blur",
  166. },
  167. {
  168. validator: positiveIntegerValidator,
  169. max: 999999999,
  170. trigger: ['change', 'blur']
  171. }
  172. ],
  173. LockMins: [
  174. {
  175. required: true,
  176. message: "请输入登录后锁定系统的不操作时间(分钟)",
  177. trigger: "blur",
  178. },
  179. {
  180. validator: positiveIntegerValidator,
  181. max: 999999999,
  182. trigger: ['change', 'blur']
  183. }
  184. ],
  185. PwdLengthBegin: [
  186. {
  187. required: true,
  188. message: "请输入密码长度范围最少位数",
  189. trigger: "blur",
  190. },
  191. {
  192. validator: positiveIntegerValidator,
  193. min: 6,
  194. trigger: ['change', 'blur']
  195. }
  196. ],
  197. PwdLengthEnd: [
  198. {
  199. required: true,
  200. message: "请输入密码长度范围最多位数",
  201. trigger: "blur",
  202. },
  203. {
  204. validator: positiveIntegerValidator,
  205. max: 22,
  206. trigger: ['change', 'blur']
  207. }
  208. ],
  209. PwdValidtime: [
  210. {
  211. required: true,
  212. message: "请输入密码有效时长(天)",
  213. trigger: "blur",
  214. },
  215. {
  216. validator: positiveIntegerValidator,
  217. max: 999999999,
  218. trigger: ['change', 'blur']
  219. }
  220. ],
  221. LoginError: [
  222. {
  223. required: true,
  224. message: "请输入允许试错次数(次数)",
  225. trigger: "blur",
  226. },
  227. {
  228. validator: positiveIntegerValidator,
  229. max: 999999999,
  230. trigger: ['change', 'blur']
  231. }
  232. ],
  233. PwdMessage: [
  234. {
  235. required: true,
  236. message: "请输入密码找回联系方式",
  237. trigger: "blur",
  238. },
  239. ],
  240. },
  241. oldFormData: null,
  242. checkedList: [],
  243. PwdStrucList: [
  244. { id: "1000", name: "大写字母", isChecked: false },
  245. { id: "0100", name: "小写字母", isChecked: false },
  246. { id: "0010", name: "特殊字符", isChecked: false },
  247. { id: "0001", name: "数字", isChecked: false },
  248. ],
  249. };
  250. },
  251. watch: {
  252. FormData: {
  253. handler (val) {
  254. if (
  255. JSON.stringify(val) != this.oldFormData &&
  256. this.oldFormData != null
  257. ) {
  258. this.isShow = true;
  259. } else {
  260. this.isShow = false;
  261. }
  262. },
  263. deep: true,
  264. },
  265. // 'FormData.PwdLengthEnd': {
  266. // handler(val) {
  267. // this.rules.PwdLengthBegin[1].max = parseInt(val)
  268. // this.$refs["systemForm"].validateField('PwdLengthBegin')
  269. // }
  270. // },
  271. // 'FormData.PwdLengthBegin': {
  272. // handler(val) {
  273. // this.rules.PwdLengthEnd[1].min = parseInt(val)
  274. // this.$refs["systemForm"].validateField('PwdLengthEnd')
  275. // }
  276. // }
  277. },
  278. created () {
  279. this.getSystemSet();
  280. // let SystemSetInfo = JSON.parse(this.$store.state.app.systemSet);
  281. // if (SystemSetInfo) {
  282. // this.FormData = SystemSetInfo;
  283. // this.oldFormData = JSON.stringify(SystemSetInfo);
  284. // const { PwdStruc } = SystemSetInfo;
  285. // this.getPwdStruc(PwdStruc);
  286. // } else {
  287. // this.getSystemSet();
  288. // }
  289. },
  290. methods: {
  291. gotoLogin () {
  292. this.$router.push("/LoginPolicy");
  293. },
  294. getSystemSet () {
  295. GetSystemSet({})
  296. .then((response) => {
  297. const { returnData } = response;
  298. this.$store.dispatch("app/getSystemSet", returnData);
  299. this.FormData = returnData;
  300. this.oldFormData = JSON.stringify(returnData);
  301. const { PwdStruc } = returnData;
  302. this.getPwdStruc(PwdStruc);
  303. })
  304. .catch((error) => {
  305. reject(error);
  306. });
  307. },
  308. PwdStrucChange (data) {
  309. let count = 0;
  310. for (let i = 0; i < data.length; i++) {
  311. count = count + Number(data[i]);
  312. this.FormData.PwdStruc = count;
  313. }
  314. console.log(this.FormData);
  315. },
  316. getPwdStruc (data) {
  317. let dataList = data.split("");
  318. if (dataList[0] == 1) {
  319. this.checkedList.push("1000");
  320. }
  321. if (dataList[1] == 1) {
  322. this.checkedList.push("0100");
  323. }
  324. if (dataList[2] == 1) {
  325. this.checkedList.push("0010");
  326. }
  327. if (dataList[3] == 1) {
  328. this.checkedList.push("0001");
  329. }
  330. },
  331. save () {
  332. if (this.FormData.PwdStruc == 11) {
  333. this.FormData.PwdStruc = "0011";
  334. } else if (this.FormData.PwdStruc == 101) {
  335. this.FormData.PwdStruc = "0101";
  336. } else if (this.FormData.PwdStruc == 111) {
  337. this.FormData.PwdStruc = "0111";
  338. } else if (this.FormData.PwdStruc == 1) {
  339. this.FormData.PwdStruc = "0001";
  340. } else if (this.FormData.PwdStruc == 100) {
  341. this.FormData.PwdStruc = "0100";
  342. } else if (this.FormData.PwdStruc == 0) {
  343. this.FormData.PwdStruc = "0000";
  344. } else if (this.FormData.PwdStruc == 10) {
  345. this.FormData.PwdStruc = "0010";
  346. }
  347. this.$refs["systemForm"].validate((valid) => {
  348. if (valid) {
  349. SaveSystemSet(this.FormData)
  350. .then((response) => {
  351. const { code } = response;
  352. if (code == 0) {
  353. this.$message.success("设置成功");
  354. this.oldFormData = JSON.stringify(this.FormData);
  355. this.$store.dispatch("app/getSystemSet", this.FormData);
  356. this.isShow = false;
  357. } else {
  358. this.$message.error(response.message);
  359. }
  360. })
  361. .catch((error) => {
  362. console.log(error);
  363. });
  364. } else {
  365. return false;
  366. }
  367. });
  368. },
  369. },
  370. };
  371. </script>
  372. <style lang="scss" scoped>
  373. .el-form-item {
  374. margin-bottom: 0;
  375. }
  376. .el-form-item__content {
  377. line-height: 0 !important;
  378. }
  379. .Box {
  380. width: 100%;
  381. height: 100%;
  382. padding: 0;
  383. display: flex;
  384. padding-top: 32px;
  385. }
  386. .centerBox {
  387. width: calc(100% - 502px);
  388. margin-left: 50px;
  389. background: #fff;
  390. height: 100%;
  391. margin-right: 52px;
  392. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  393. border-radius: 16px;
  394. .lineStyle {
  395. width: 700px;
  396. height: 1px;
  397. background: #c0c4cc;
  398. margin-top: 22px;
  399. }
  400. .centerTitle {
  401. margin-top: 20px;
  402. margin-bottom: 40px;
  403. width: 700px;
  404. display: flex;
  405. justify-content: space-between;
  406. text-align: center;
  407. margin-left: 260px;
  408. }
  409. .TitleStyle {
  410. font-size: 24px;
  411. font-weight: bold;
  412. color: #303133;
  413. margin-top: 7px;
  414. }
  415. .boxList {
  416. margin-left: 260px;
  417. margin-top: 24px;
  418. display: flex;
  419. flex-direction: column;
  420. }
  421. .ListName {
  422. height: 18px;
  423. font-size: 18px;
  424. font-weight: bold;
  425. color: #303133;
  426. }
  427. .riaStyle {
  428. margin-top: 24px;
  429. }
  430. .riaStyle1 {
  431. margin-top: 24px;
  432. display: flex;
  433. }
  434. .zhi {
  435. width: 16px;
  436. margin-right: 30px;
  437. margin-left: 30px;
  438. margin-top: 10px;
  439. z-index: 1;
  440. }
  441. .lineStyle1 {
  442. width: 150px;
  443. height: 1px;
  444. background: #c0c4cc;
  445. margin-top: 22px;
  446. }
  447. .lineStyle2 {
  448. width: 475px;
  449. height: 1px;
  450. background: #c0c4cc;
  451. margin-top: 22px;
  452. }
  453. }
  454. ::v-deep .riaStyle {
  455. .el-radio {
  456. margin-right: 73px;
  457. }
  458. .el-input__inner {
  459. width: 600px;
  460. border: none;
  461. padding: 0;
  462. margin-bottom: -20px;
  463. }
  464. .el-checkbox__label {
  465. font-weight: 400;
  466. color: #303133;
  467. font-size: 14px;
  468. }
  469. }
  470. ::v-deep .riaStyle1 {
  471. .ipt1 {
  472. width: 150px;
  473. }
  474. .el-radio {
  475. margin-right: 73px;
  476. }
  477. .ipt1 .el-input__inner {
  478. width: 150px;
  479. border: none;
  480. padding: 0;
  481. margin-bottom: -20px;
  482. }
  483. .ipt2 .el-input__inner {
  484. width: 600px;
  485. border: none;
  486. padding: 0;
  487. margin-bottom: -20px;
  488. }
  489. .el-checkbox__label {
  490. font-weight: 400;
  491. color: #303133;
  492. font-size: 14px;
  493. }
  494. }
  495. ::v-deep .centerTitle {
  496. .el-button {
  497. width: 72px;
  498. height: 40px;
  499. background: #6e81bc;
  500. border-radius: 6px;
  501. color: #fff;
  502. border: none;
  503. }
  504. }
  505. .asideBox {
  506. width: 400px;
  507. background: #fff;
  508. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  509. height: 100vh;
  510. display: flex;
  511. flex-direction: column;
  512. margin-top: -35px;
  513. position: fixed;
  514. right: 0;
  515. // top: 0;
  516. // padding-top: 147px;
  517. }
  518. ::v-deep .asideBox {
  519. .el-button--primary {
  520. width: 280px;
  521. height: 48px;
  522. background: linear-gradient(0deg, #6983be, #777dba);
  523. box-shadow: 0px 3px 4px 0px rgba(0, 0, 0, 0.18);
  524. border-radius: 6px;
  525. color: #fff;
  526. border: none;
  527. margin: 30px 0 24px 60px;
  528. }
  529. .el-button--default {
  530. width: 280px;
  531. height: 48px;
  532. background: #f5f7fa;
  533. border: 1px solid #b4b7cb;
  534. border-radius: 6px;
  535. color: #6f81bc;
  536. margin-left: 60px;
  537. }
  538. }
  539. </style>