index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  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']" v-show="isShow" @click="save()">保存</el-button>
  8. </div>
  9. <div class="boxList">
  10. <span class="ListName">是否开启岗位</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 v-model="FormData.UserOfficerMulti" :label="1">是</el-radio>
  21. <el-radio 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="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="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="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="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">
  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="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="PwdValidtime">
  107. <el-input v-model="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="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. export default {
  140. data () {
  141. return {
  142. isShow: false,
  143. FormData: {
  144. OpenGroup: "1",
  145. UserOfficerMulti: 1,
  146. OpenRole: 1,
  147. OpenAuthData: 1,
  148. UserIdledays: 0,
  149. LockMins: 0,
  150. PwdLengthBegin: 0,
  151. PwdLengthEnd: 0,
  152. PwdStruc: "0",
  153. HasAppid: 0,
  154. PwdValidtime: 0,
  155. LoginError: 0,
  156. PwdMessage: "",
  157. SimpleValidCodeMode: 0
  158. },
  159. rules: {
  160. UserIdledays: [
  161. {
  162. required: true,
  163. message: "请输入账号变更为闲置状态的不登录时间(天)",
  164. trigger: "blur",
  165. },
  166. ],
  167. LockMins: [
  168. {
  169. required: true,
  170. message: "请输入登录后锁定系统的不操作时间(分钟)",
  171. trigger: "blur",
  172. },
  173. ],
  174. PwdLengthBegin: [
  175. {
  176. required: true,
  177. message: "请输入密码长度范围最少位数",
  178. trigger: "blur",
  179. },
  180. ],
  181. PwdLengthEnd: [
  182. {
  183. required: true,
  184. message: "请输入密码长度范围最多位数",
  185. trigger: "blur",
  186. },
  187. ],
  188. PwdValidtime: [
  189. {
  190. required: true,
  191. message: "请输入密码有效时长(天)",
  192. trigger: "blur",
  193. },
  194. ],
  195. LoginError: [
  196. {
  197. required: true,
  198. message: "请输入允许试错次数(次数)",
  199. trigger: "blur",
  200. },
  201. ],
  202. PwdMessage: [
  203. {
  204. required: true,
  205. message: "请输入密码找回联系方式",
  206. trigger: "blur",
  207. },
  208. ],
  209. },
  210. oldFormData: null,
  211. checkedList: [],
  212. PwdStrucList: [
  213. { id: "1000", name: "大写字母", isChecked: false },
  214. { id: "0100", name: "小写字母", isChecked: false },
  215. { id: "0010", name: "特殊字符", isChecked: false },
  216. { id: "0001", name: "数字", isChecked: false },
  217. ],
  218. };
  219. },
  220. watch: {
  221. FormData: {
  222. handler (val) {
  223. if (
  224. JSON.stringify(val) != this.oldFormData &&
  225. this.oldFormData != null
  226. ) {
  227. this.isShow = true;
  228. } else {
  229. this.isShow = false;
  230. }
  231. },
  232. deep: true,
  233. },
  234. },
  235. created () {
  236. this.getSystemSet();
  237. // let SystemSetInfo = JSON.parse(this.$store.state.app.systemSet);
  238. // if (SystemSetInfo) {
  239. // this.FormData = SystemSetInfo;
  240. // this.oldFormData = JSON.stringify(SystemSetInfo);
  241. // const { PwdStruc } = SystemSetInfo;
  242. // this.getPwdStruc(PwdStruc);
  243. // } else {
  244. // this.getSystemSet();
  245. // }
  246. },
  247. methods: {
  248. gotoLogin () {
  249. this.$router.push("/LoginPolicy");
  250. },
  251. getSystemSet () {
  252. GetSystemSet({})
  253. .then((response) => {
  254. const { returnData } = response;
  255. this.$store.dispatch("app/getSystemSet", returnData);
  256. this.FormData = returnData;
  257. this.oldFormData = JSON.stringify(returnData);
  258. const { PwdStruc } = returnData;
  259. this.getPwdStruc(PwdStruc);
  260. })
  261. .catch((error) => {
  262. reject(error);
  263. });
  264. },
  265. PwdStrucChange (data) {
  266. let count = 0;
  267. for (let i = 0; i < data.length; i++) {
  268. count = count + Number(data[i]);
  269. this.FormData.PwdStruc = count;
  270. }
  271. console.log(this.FormData);
  272. },
  273. getPwdStruc (data) {
  274. let dataList = data.split("");
  275. if (dataList[0] == 1) {
  276. this.checkedList.push("1000");
  277. }
  278. if (dataList[1] == 1) {
  279. this.checkedList.push("0100");
  280. }
  281. if (dataList[2] == 1) {
  282. this.checkedList.push("0010");
  283. }
  284. if (dataList[3] == 1) {
  285. this.checkedList.push("0001");
  286. }
  287. },
  288. save () {
  289. console.log(this.FormData.PwdStruc)
  290. if (this.FormData.PwdStruc == 11) {
  291. this.FormData.PwdStruc = "0011"
  292. }
  293. else if (this.FormData.PwdStruc == 101) {
  294. this.FormData.PwdStruc = "0101"
  295. }
  296. else if (this.FormData.PwdStruc == 111) {
  297. this.FormData.PwdStruc = "0111"
  298. }
  299. else if (this.FormData.PwdStruc == 1) {
  300. this.FormData.PwdStruc = "0001"
  301. }
  302. else if (this.FormData.PwdStruc == 100) {
  303. this.FormData.PwdStruc = "0100"
  304. }
  305. else if (this.FormData.PwdStruc == 0) {
  306. this.FormData.PwdStruc = "0000"
  307. }
  308. else if (this.FormData.PwdStruc == 10) {
  309. this.FormData.PwdStruc = "0010"
  310. }
  311. this.$refs["systemForm"].validate((valid) => {
  312. if (valid) {
  313. SaveSystemSet(this.FormData)
  314. .then((response) => {
  315. const { code } = response;
  316. if (code == 0) {
  317. this.$message.success("设置成功");
  318. this.oldFormData = JSON.stringify(this.FormData);
  319. this.$store.dispatch("app/getSystemSet", this.FormData);
  320. this.isShow = false;
  321. } else {
  322. this.$message.error(response.message);
  323. }
  324. })
  325. .catch((error) => {
  326. console.log(error)
  327. });
  328. } else {
  329. return false;
  330. }
  331. });
  332. },
  333. },
  334. };
  335. </script>
  336. <style lang="scss" scoped>
  337. .el-form-item {
  338. margin-bottom: 0;
  339. }
  340. .el-form-item__content {
  341. line-height: 0 !important;
  342. }
  343. .Box {
  344. width: 100%;
  345. height: 100%;
  346. padding: 0;
  347. display: flex;
  348. padding-top: 32px;
  349. }
  350. .centerBox {
  351. width: calc(100% - 502px);
  352. margin-left: 50px;
  353. background: #fff;
  354. height: 100%;
  355. margin-right: 52px;
  356. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  357. border-radius: 16px;
  358. .lineStyle {
  359. width: 700px;
  360. height: 1px;
  361. background: #c0c4cc;
  362. margin-top: 22px;
  363. }
  364. .centerTitle {
  365. margin-top: 20px;
  366. margin-bottom: 40px;
  367. width: 700px;
  368. display: flex;
  369. justify-content: space-between;
  370. text-align: center;
  371. margin-left: 260px;
  372. }
  373. .TitleStyle {
  374. font-size: 24px;
  375. font-weight: bold;
  376. color: #303133;
  377. margin-top: 7px;
  378. }
  379. .boxList {
  380. margin-left: 260px;
  381. margin-top: 24px;
  382. display: flex;
  383. flex-direction: column;
  384. }
  385. .ListName {
  386. height: 18px;
  387. font-size: 18px;
  388. font-weight: bold;
  389. color: #303133;
  390. }
  391. .riaStyle {
  392. margin-top: 24px;
  393. }
  394. .riaStyle1 {
  395. margin-top: 24px;
  396. display: flex;
  397. }
  398. .zhi {
  399. width: 16px;
  400. margin-right: 30px;
  401. margin-left: 30px;
  402. margin-top: 10px;
  403. z-index: 1;
  404. }
  405. .lineStyle1 {
  406. width: 150px;
  407. height: 1px;
  408. background: #c0c4cc;
  409. margin-top: 22px;
  410. }
  411. .lineStyle2 {
  412. width: 475px;
  413. height: 1px;
  414. background: #c0c4cc;
  415. margin-top: 22px;
  416. }
  417. }
  418. ::v-deep .riaStyle {
  419. .el-radio {
  420. margin-right: 73px;
  421. }
  422. .el-input__inner {
  423. width: 600px;
  424. border: none;
  425. padding: 0;
  426. margin-bottom: -20px;
  427. }
  428. .el-checkbox__label {
  429. font-weight: 400;
  430. color: #303133;
  431. font-size: 14px;
  432. }
  433. }
  434. ::v-deep .riaStyle1 {
  435. .ipt1 {
  436. width: 150px;
  437. }
  438. .el-radio {
  439. margin-right: 73px;
  440. }
  441. .ipt1 .el-input__inner {
  442. width: 150px;
  443. border: none;
  444. padding: 0;
  445. margin-bottom: -20px;
  446. }
  447. .ipt2 .el-input__inner {
  448. width: 600px;
  449. border: none;
  450. padding: 0;
  451. margin-bottom: -20px;
  452. }
  453. .el-checkbox__label {
  454. font-weight: 400;
  455. color: #303133;
  456. font-size: 14px;
  457. }
  458. }
  459. ::v-deep .centerTitle {
  460. .el-button {
  461. width: 72px;
  462. height: 40px;
  463. background: #6e81bc;
  464. border-radius: 6px;
  465. color: #fff;
  466. border: none;
  467. }
  468. }
  469. .asideBox {
  470. width: 400px;
  471. background: #fff;
  472. box-shadow: 0px 6px 7px 0px rgba(0, 0, 0, 0.06);
  473. height: 100vh;
  474. display: flex;
  475. flex-direction: column;
  476. margin-top: -35px;
  477. position: fixed;
  478. right: 0;
  479. // top: 0;
  480. // padding-top: 147px;
  481. }
  482. ::v-deep .asideBox {
  483. .el-button--primary {
  484. width: 280px;
  485. height: 48px;
  486. background: linear-gradient(0deg, #6983be, #777dba);
  487. box-shadow: 0px 3px 4px 0px rgba(0, 0, 0, 0.18);
  488. border-radius: 6px;
  489. color: #fff;
  490. border: none;
  491. margin: 30px 0 24px 60px;
  492. }
  493. .el-button--default {
  494. width: 280px;
  495. height: 48px;
  496. background: #f5f7fa;
  497. border: 1px solid #b4b7cb;
  498. border-radius: 6px;
  499. color: #6f81bc;
  500. margin-left: 60px;
  501. }
  502. }
  503. </style>