setting.blade.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. @extends('layouts.base')
  2. @section('content')
  3. <style>
  4. .panel {
  5. margin-bottom: 10px !important;
  6. padding-left: 20px;
  7. border-radius: 10px;
  8. }
  9. .panel .active a {
  10. background-color: #29ba9c !important;
  11. border-radius: 18px !important;
  12. color: #fff;
  13. }
  14. .panel a {
  15. border: none !important;
  16. background-color: #fff !important;
  17. }
  18. .content {
  19. background: #eff3f6;
  20. padding: 10px !important;
  21. }
  22. .con {
  23. padding-bottom: 20px;
  24. position: relative;
  25. border-radius: 8px;
  26. min-height: 100vh;
  27. background-color: #fff;
  28. }
  29. .con .setting .block {
  30. padding: 10px;
  31. background-color: #fff;
  32. border-radius: 8px;
  33. }
  34. .con .setting .block .title {
  35. font-size: 18px;
  36. margin-bottom: 15px;
  37. display: flex;
  38. align-items: center;
  39. }
  40. .confirm-btn {
  41. width: calc(100% - 266px);
  42. position: fixed;
  43. bottom: 0;
  44. right: 0;
  45. margin-right: 10px;
  46. line-height: 63px;
  47. background-color: #ffffff;
  48. box-shadow: 0px 8px 23px 1px rgba(51, 51, 51, 0.3);
  49. background-color: #fff;
  50. text-align: center;
  51. }
  52. b {
  53. font-size: 14px;
  54. }
  55. </style>
  56. <div id='re_content'>
  57. @include('layouts.newTabs')
  58. <div class="con">
  59. <div class="setting">
  60. <el-form ref="form" label-width="15%">
  61. <div class="block">
  62. <div class="title">
  63. <span style="width: 4px;height: 18px;background-color: #29ba9c;margin-right:15px;display:inline-block;"></span>
  64. <b>支付密码</b>
  65. </div>
  66. <el-form-item label="支付密码">
  67. <el-switch v-model="payPasswordTurnedon" active-value="1" inactive-value="0">
  68. </el-switch>
  69. </el-form-item>
  70. <el-form-item label="多位数密码">
  71. <el-switch v-model="payPasswordMultiple" active-value="1" inactive-value="0">
  72. </el-switch>
  73. <div class="tip">
  74. 系统默认6位数字+安全键盘。开启后可填多位(字母+数字+字符)且不使用安全键盘。<br>由于不使用安全键盘可能产生的密码安全问题,强烈建议不开启
  75. </div>
  76. </el-form-item>
  77. <el-form-item v-for="(conditionGroup,groupKey) in condition" :key="conditionGroup.code" :label="conditionGroup.name">
  78. <template>
  79. <el-checkbox-group v-model="selectedCondition[groupKey]" text-color="#29ba9c">
  80. <el-checkbox :label="item.key" v-for="(item,index,key) in conditionGroup.condition">[[item.name]]</el-checkbox>
  81. </el-checkbox-group>
  82. </template>
  83. </el-form-item>
  84. <div class="title">
  85. <span style="width: 4px;height: 18px;background-color: #29ba9c;margin-right:15px;display:inline-block;"></span>
  86. <b>二次校验</b>
  87. </div>
  88. <el-form-item label="二次校验场景">
  89. <el-checkbox v-model="is_phone_verify" :true-label="1" :false-label="0" @change="changeSwitch('is_phone_verify')">提现打款</el-checkbox>
  90. <el-checkbox v-model="is_member_export_verify" :true-label="1" :false-label="0" @change="changeSwitch('is_member_export_verify')">会员导出(含全部、团队、直推会员)</el-checkbox>
  91. <el-checkbox v-model="is_commission_export_verify" :true-label="1" :false-label="0" @change="changeSwitch('is_commission_export_verify')">分销商导出(含全部、推广粉丝导出)</el-checkbox>
  92. </el-form-item>
  93. <el-form-item label="验证手机号">
  94. <span>[[phone]]</span>
  95. <el-button size="mini" type="primary" @click="setPhone('phone_show')" v-if="is_set_phone==0">设置手机号</el-button>
  96. <el-button size="mini" type="primary" @click="setPhone('phone_edit')" v-if="is_set_phone==1">更改手机号</el-button>
  97. <div class="tip">
  98. 设置后修改需要原手机号验证码,请勿使用临时手机号!
  99. </div>
  100. </el-form-item>
  101. <el-form-item label="验证有效期">
  102. <el-input v-model="verify_expire" style="width:20%;"></el-input><span style="margin-left:10px;">分钟</span>
  103. <div class="tip">
  104. 验证成功后,在验证有效期内,无需重复验证,默认10分钟,最长可设置不超过120分钟。
  105. </div>
  106. </el-form-item>
  107. <div class="confirm-btn">
  108. <el-button type="primary" @click="submit">提交</el-button>
  109. </div>
  110. </div>
  111. </el-form>
  112. <el-dialog :visible.sync="phone_show" width="450px" center title="设置验证手机号">
  113. <div>
  114. <el-form ref="form1" label-width="15%">
  115. <el-form-item label="手机号">
  116. <el-input v-model="form1.phone" style="width:60%" placeholder="请输入手机号"></el-input>
  117. <el-button size="small" type="primary" @click="getVerifyCode('set_phone')" :disabled="form1.verify_code_disabled">
  118. 获取验证码[[form1.last_time]]
  119. </el-button>
  120. </el-form-item>
  121. <el-form-item label="验证码">
  122. <el-input v-model="form1.verify_code" style="width:60%" placeholder="请输入短信验证码"></el-input>
  123. </el-form-item>
  124. <div style="text-align: center">
  125. <el-button type="primary" @click="submitVerify('phone_show')">提交</el-button>
  126. <el-button type="danger" @click="cancel('phone_show')">取消</el-button>
  127. </div>
  128. </el-form>
  129. </div>
  130. </el-dialog>
  131. <el-dialog :visible.sync="phone_edit" width="450px" center title="修改验证手机号">
  132. <div>
  133. <el-form ref="form1" label-width="20%">
  134. <el-form-item label="手机号">
  135. <span style="display:inline-block;width:60%">[[phone]]</span>
  136. <el-button size="small" type="primary" @click="getVerifyCode('edit_phone')" :disabled="form2.verify_code_disabled">
  137. 获取验证码[[form2.last_time]]
  138. </el-button>
  139. </el-form-item>
  140. <el-form-item label="验证码">
  141. <el-input v-model="form2.verify_code" style="width:60%" placeholder="请输入短信验证码"></el-input>
  142. </el-form-item>
  143. <el-form-item label="新手机号">
  144. <el-input v-model="form2.phone" style="width:60%" placeholder="请输入手机号"></el-input>
  145. <el-button size="small" type="primary" @click="getVerifyCode('edit_phone_new')" :disabled="form2.verify_code_disabled_new">
  146. 获取验证码[[form2.last_time_new]]
  147. </el-button>
  148. </el-form-item>
  149. <el-form-item label="验证码">
  150. <el-input v-model="form2.verify_code_new" style="width:60%" placeholder="请输入短信验证码"></el-input>
  151. </el-form-item>
  152. <div style="text-align: center">
  153. <el-button type="primary" @click="submitVerify('phone_edit')">提交</el-button>
  154. <el-button type="danger" @click="cancel('phone_edit')">取消</el-button>
  155. </div>
  156. </el-form>
  157. </div>
  158. </el-dialog>
  159. <el-dialog :visible.sync="phone_close" width="450px" center title="关闭场景时二次校验短信验证">
  160. <div>
  161. <el-form ref="form1" label-width="20%">
  162. <el-form-item label="手机号">
  163. <span style="display:inline-block;width:60%">[[phone]]</span>
  164. <el-button size="small" type="primary" @click="getVerifyCode('close_phone')" :disabled="form3.verify_code_disabled">
  165. 获取验证码[[form3.last_time]]
  166. </el-button>
  167. </el-form-item>
  168. <el-form-item label="验证码">
  169. <el-input v-model="form3.verify_code" style="width:60%" placeholder="请输入短信验证码"></el-input>
  170. </el-form-item>
  171. <div style="text-align: center">
  172. <el-button type="primary" @click="submitVerify('phone_close')">提交</el-button>
  173. <el-button type="danger" @click="cancel('phone_close')">取消</el-button>
  174. </div>
  175. </el-form>
  176. </div>
  177. </el-dialog>
  178. </div>
  179. </div>
  180. {!! json_encode($setting) !!}
  181. </div>
  182. <script>
  183. new Vue({
  184. el: "#re_content",
  185. delimiters: ['[[', ']]'],
  186. data() {
  187. let condition = JSON.parse(`{!! json_encode($condition) !!}`);
  188. const setting = JSON.parse(`{!! json_encode($setting) !!}`);
  189. const withdraw = JSON.parse(`{!! json_encode($withdraw_verify) !!}`);
  190. const selectedCondition = {};
  191. let payPasswordTurnedon=0;
  192. let payPasswordMultiple=0;
  193. // if (Array.isArray(setting)) {
  194. // for (const key in condition) {
  195. // if (Object.hasOwnProperty.call(condition, key)) {
  196. // const element = condition[key];
  197. // if (!selectedCondition[element['code']]) {
  198. // selectedCondition[element['code']] = [];
  199. // }
  200. // }
  201. // }
  202. // } else {
  203. // payPasswordTurnedon = setting['pay_state'];
  204. // payPasswordMultiple = setting['pay_multiple'];
  205. // delete setting['pay_state'];
  206. // Object.assign(selectedCondition, setting);
  207. // }
  208. for (const key in condition) {
  209. if (Object.hasOwnProperty.call(condition, key)) {
  210. const element = condition[key];
  211. if (!selectedCondition[element['code']]) {
  212. selectedCondition[element['code']] = [];
  213. }
  214. }
  215. }
  216. payPasswordTurnedon = setting['pay_state'];
  217. payPasswordMultiple = setting['pay_multiple'];
  218. delete setting['pay_state'];
  219. Object.assign(selectedCondition, setting);
  220. return {
  221. condition,
  222. selectedCondition,
  223. payPasswordTurnedon,
  224. payPasswordMultiple,
  225. phone_show:false,
  226. phone_edit:false,
  227. phone_close:false,
  228. is_set_phone:withdraw&&withdraw.is_set_phone?withdraw.is_set_phone:0,
  229. is_phone_verify:withdraw&&withdraw.is_phone_verify?withdraw.is_phone_verify:0,
  230. is_member_export_verify:withdraw&&withdraw.is_member_export_verify?withdraw.is_member_export_verify:0,
  231. is_commission_export_verify:withdraw&&withdraw.is_commission_export_verify?withdraw.is_commission_export_verify:0,
  232. phone:withdraw&&withdraw.phone?withdraw.phone:"",
  233. verify_expire:withdraw&&withdraw.verify_expire?withdraw.verify_expire:"",
  234. is_verify:0,//判断此次验证过手机没有
  235. change_item:"",
  236. timer1:null,
  237. timer2:null,
  238. timer3:null,
  239. timer4:null,
  240. form1:{
  241. phone:'',
  242. verify_code:'',
  243. verify_code_disabled:false,
  244. last_time:"",
  245. },
  246. form2:{
  247. phone:'',
  248. verify_code:'',
  249. verify_code_disabled:false,
  250. last_time:"",
  251. verify_code_new:'',
  252. verify_code_disabled_new:false,
  253. last_time_new:"",
  254. },
  255. form3:{
  256. verify_code:'',
  257. verify_code_disabled:false,
  258. last_time:"",
  259. },
  260. }
  261. },
  262. methods: {
  263. submit() {
  264. let loading = this.$loading({
  265. target: document.querySelector(".content"),
  266. background: 'rgba(0, 0, 0, 0)'
  267. });
  268. let formData = JSON.parse(JSON.stringify(this.selectedCondition));
  269. formData['pay_state'] = this.payPasswordTurnedon
  270. formData['pay_multiple'] = this.payPasswordMultiple
  271. let withdraw_verify = {
  272. is_phone_verify : this.is_phone_verify,
  273. is_member_export_verify : this.is_member_export_verify,
  274. is_commission_export_verify : this.is_commission_export_verify,
  275. phone : this.phone,
  276. verify_expire : this.verify_expire,
  277. form1 : this.form1,
  278. form2 : this.form2,
  279. form3 : this.form3,
  280. }
  281. this.$http.post("{!! yzWebFullUrl('password.setting.index') !!}", {
  282. pay_password: formData,
  283. withdraw_verify: withdraw_verify,
  284. }).then(function(response) {
  285. if (response.data.result) {
  286. this.$message({
  287. message: response.data.msg,
  288. type: 'success'
  289. });
  290. } else {
  291. this.$message({
  292. message: response.data.msg,
  293. type: 'error'
  294. });
  295. }
  296. loading.close();
  297. }, function(response) {
  298. this.$message({
  299. message: response.data.msg,
  300. type: 'error'
  301. });
  302. })
  303. },
  304. setPhone(type) {
  305. if (type == 'phone_show') {
  306. this.phone_show = true;
  307. } else if (type == 'phone_edit') {
  308. this.phone_edit = true;
  309. } else if (type == 'phone_close') {
  310. this.phone_close = true;
  311. }
  312. },
  313. cancel(type) {
  314. if (type == 'phone_show') {
  315. this.phone_show = false;
  316. } else if (type == 'phone_edit') {
  317. this.phone_edit = false;
  318. } else if (type == 'phone_close') {
  319. this.phone_close = false;
  320. this[this.change_item] = 1;
  321. }
  322. },
  323. submitVerify(type) {
  324. let loading = this.$loading({target: document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  325. let json;
  326. if (type == 'phone_show') {
  327. json = {
  328. type : 1,
  329. phone : this.form1.phone,
  330. code : this.form1.verify_code,
  331. };
  332. } else if (type == 'phone_edit') {
  333. json = {
  334. type : 2,
  335. oldCode : this.form2.verify_code,
  336. phone : this.form2.phone,
  337. code : this.form2.verify_code_new,
  338. };
  339. } else if (type == 'phone_close') {
  340. json = {
  341. type : 3,
  342. code : this.form3.verify_code,
  343. };
  344. } else {
  345. this.$message({message: '类型错误',type: 'error'});
  346. return;
  347. }
  348. this.$http.post("{!! yzWebFullUrl('password.setting.verifyWithdrawCode') !!}",json).then(function(response) {
  349. if (response.data.result) {
  350. this.$message({message: response.data.msg,type: 'success'});
  351. if (type == 'phone_show') {
  352. this.phone = this.form1.phone;
  353. this.phone_show = false;
  354. } else if (type == 'phone_edit') {
  355. this.phone = this.form2.phone;
  356. this.phone_edit = false;
  357. } else if (type == 'phone_close') {
  358. this.phone_close = false;
  359. }
  360. this.is_verify = 1;
  361. } else {
  362. if (type == 'phone_close') {
  363. this.phone_close = false;
  364. console.log(this.change_item);
  365. this[this.change_item] = 1;
  366. }
  367. this.$message({message: response.data.msg,type: 'error'});
  368. }
  369. loading.close();
  370. }, function(response) {
  371. this.$message({
  372. message: response.data.msg,
  373. type: 'error'
  374. });
  375. })
  376. },
  377. getVerifyCode(type) {
  378. let json;
  379. if (type == 'set_phone') {
  380. if (!this.form1.phone) {
  381. this.$message({message: '请填写手机号',type: 'error'});
  382. return;
  383. }
  384. json = {
  385. type : 1,
  386. phone : this.form1.phone,
  387. };
  388. if (this.timer1) {
  389. return ;
  390. } else {
  391. this.form1.verify_code_disabled = true;
  392. this.form1.last_time = 60;
  393. this.timer1 = setInterval(() => {
  394. if (this.form1.last_time > 0 && this.form1.last_time <= 60) {
  395. this.form1.last_time--;
  396. } else {
  397. this.form1.verify_code_disabled = false;
  398. this.form1.last_time = "";
  399. clearInterval(this.timer1);
  400. this.timer1 = null;
  401. }
  402. }, 1000)
  403. }
  404. } else if (type == 'edit_phone') {
  405. json = {type : 2};
  406. if (this.timer2) {
  407. return ;
  408. } else {
  409. this.form2.verify_code_disabled = true;
  410. this.form2.last_time = 60;
  411. this.timer2 = setInterval(() => {
  412. if (this.form2.last_time > 0 && this.form2.last_time <= 60) {
  413. this.form2.last_time--;
  414. } else {
  415. this.form2.verify_code_disabled = false;
  416. this.form2.last_time = "";
  417. clearInterval(this.timer2);
  418. this.timer2 = null;
  419. }
  420. }, 1000)
  421. }
  422. } else if (type == 'edit_phone_new') {
  423. if (!this.form2.phone) {
  424. this.$message({message: '请填写新手机号',type: 'error'});
  425. return;
  426. }
  427. if (this.timer3) {
  428. return ;
  429. } else {
  430. this.form2.verify_code_disabled_new = true;
  431. this.form2.last_time_new = 60;
  432. this.timer3 = setInterval(() => {
  433. if (this.form2.last_time_new > 0 && this.form2.last_time_new <= 60) {
  434. this.form2.last_time_new--;
  435. } else {
  436. this.form2.verify_code_disabled_new = false;
  437. this.form2.last_time_new = "";
  438. clearInterval(this.timer3);
  439. this.timer3 = null;
  440. }
  441. }, 1000)
  442. }
  443. json = {
  444. type : 3,
  445. phone : this.form2.phone,
  446. };
  447. } else if (type == 'close_phone') {
  448. if (this.timer4) {
  449. return ;
  450. } else {
  451. this.form3.verify_code_disabled = true;
  452. this.form3.last_time = 60;
  453. this.timer4 = setInterval(() => {
  454. if (this.form3.last_time > 0 && this.form3.last_time <= 60) {
  455. this.form3.last_time--;
  456. } else {
  457. this.form3.verify_code_disabled = false;
  458. this.form3.last_time = "";
  459. clearInterval(this.timer4);
  460. this.timer4 = null;
  461. }
  462. }, 1000)
  463. }
  464. json = {type : 4};
  465. } else {
  466. this.$message({message: '类型错误',type: 'error'});
  467. return;
  468. }
  469. let loading = this.$loading({target: document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  470. this.$http.post("{!! yzWebFullUrl('password.setting.sendVerifyCode') !!}",json).then(function(response) {
  471. if (response.data.result) {
  472. this.$message({message: response.data.msg,type: 'success'});
  473. } else {
  474. this.$message({message: response.data.msg,type: 'error'});
  475. }
  476. loading.close();
  477. }, function(response) {
  478. this.$message({
  479. message: response.data.msg,
  480. type: 'error'
  481. });
  482. })
  483. },
  484. changeSwitch(item) {
  485. // console.log(item);
  486. // console.log(this[item]);
  487. if (this.is_set_phone != 1) {//并未设置手机号
  488. return;
  489. }
  490. if (this[item] == 0 && this.is_verify == 0) {
  491. this.change_item = item;
  492. this.setPhone('phone_close');
  493. }
  494. },
  495. },
  496. });
  497. </script>
  498. @endsection