register_h5.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. use yii\helpers\Url;
  4. try {
  5. $this->title = \Yii::$app->services->setting->get('system.name');
  6. } catch (Exception $exception) {
  7. } ?>
  8. <!DOCTYPE html>
  9. <html lang="zh-CN">
  10. <head>
  11. <meta charset="UTF-8">
  12. <meta name="renderer" content="webkit">
  13. <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  14. <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
  15. <meta name="format-detection" content="telephone=no,email=no,address=no">
  16. <title><?= $this->title ? ($this->title . ' - ') : '' ?>商城管理</title>
  17. <link rel="stylesheet" href="<?= Yii::$app->request->baseUrl ?>/resources/unpkg/element-ui@2.15.14/lib/theme-chalk/index.css">
  18. <link href="<?= Yii::$app->request->baseUrl ?>/../favicon.ico" mce_href="<?= Yii::$app->request->baseUrl ?>/../favicon.ico" rel="shortcut icon" />
  19. <script src="<?= Yii::$app->request->baseUrl ?>/resources/unpkg/vue@2.6.10/dist/vue.js"></script>
  20. <script src="<?= Yii::$app->request->baseUrl ?>/resources/unpkg/qs@6.5.2/dist/qs.js"></script>
  21. <script src="<?= Yii::$app->request->baseUrl ?>/resources/unpkg/axios@0.18.0/dist/axios.min.js"></script>
  22. <script src="<?= Yii::$app->request->baseUrl ?>/resources/unpkg/element-ui@2.12.0/lib/index.js"></script>
  23. <!-- <script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script> -->
  24. <script src="/resources/unpkg/clipboard@1.5.12/dist/clipboard.min.js"></script>
  25. <script>
  26. let _layout = null;
  27. let _aside = null;
  28. const _csrf = '<?= Yii::$app->request->csrfToken ?>';
  29. const _scriptUrl = '<?= Yii::$app->request->scriptUrl ?>';
  30. const _baseUrl = '<?= \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl ?>';
  31. const _requestRoute = '<?= Yii::$app->requestedRoute ?>';
  32. </script>
  33. <script src="<?= Yii::$app->request->baseUrl ?>/resources/js/common.js"></script>
  34. </head>
  35. <body>
  36. <div id="app" v-cloak>
  37. <div v-if="loginBoo">
  38. <el-form :rules="registerRules" :model="registerFrom" label-width="80px" ref="ruleForm">
  39. <el-form-item label="手机号码" prop="username">
  40. <el-input prefix-icon="el-icon-mobile-phone" placeholder="请输入手机号码" v-model="registerFrom.username" size="medium"></el-input>
  41. </el-form-item>
  42. <el-form-item label="验证码" prop="mobile_captcha">
  43. <div class="ver_code">
  44. <el-input prefix-icon="el-icon-chat-dot-square" placeholder="请输入验证码" v-model="registerFrom.mobile_captcha" size="medium"></el-input>
  45. <el-button type="primary" size="mini" @click="getCode" :disabled="timeBoo">{{timeBoo?timeCount+'s':'获取验证码'}}</el-button>
  46. </div>
  47. </el-form-item>
  48. <el-form-item label="密码" prop="password">
  49. <el-input prefix-icon="el-icon-lock" placeholder="请输入密码" v-model="registerFrom.password" size="medium" show-password></el-input>
  50. </el-form-item>
  51. <el-form-item label="确认密码" prop="confirm_password">
  52. <el-input prefix-icon="el-icon-lock" placeholder="请再次输入密码" v-model="registerFrom.confirm_password" size="medium" show-password></el-input>
  53. </el-form-item>
  54. <el-form-item label="商城名称" prop="name">
  55. <el-input prefix-icon="el-icon-house" placeholder="请输入商城名称" v-model="registerFrom.name" size="medium"></el-input>
  56. </el-form-item>
  57. </el-form>
  58. <div style="text-align: center;">
  59. <el-button class="sub-btn" type="primary" @click="addUser" :loading="lodding == 'sub'">注册</el-button>
  60. </div>
  61. </div>
  62. <div class="register-suc" v-else>
  63. <i class="register-suc-icon el-icon-success"></i>
  64. <div style="margin-bottom: 30px;">注册成功</div>
  65. <el-input style="margin-bottom: 30px;" placeholder="请输入内容" v-model="sucUrl" :disabled="true"></el-input>
  66. <el-button class="sub-btn copy_btn" type="primary" @click="copyInput">复制链接</el-button>
  67. </div>
  68. </div>
  69. </body>
  70. <script>
  71. const app = new Vue({
  72. el: '#app',
  73. data() {
  74. var validateUserName = (rule, value, callback) => {
  75. var myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
  76. if(!myreg.test(value)){
  77. callback(new Error("请输入正确的手机号码"));
  78. }
  79. callback();
  80. }
  81. var validatePassword = (rule, value, callback) => {
  82. let strVal = String(value);
  83. if(strVal.length < 6 || strVal.length > 20){
  84. callback(new Error("请输入6-20位密码"));
  85. }
  86. callback();
  87. }
  88. var validateMallName = (rule, value, callback) => {
  89. let strVal = String(value);
  90. if(strVal.length > 15){
  91. callback(new Error("最多只能输入15位"));
  92. }
  93. callback();
  94. }
  95. return {
  96. registerFrom: {
  97. username: '',
  98. mobile_captcha: '',
  99. password: '',
  100. confirm_password: '',
  101. name: '',
  102. },
  103. getCodeTime: null,
  104. registerRules: {
  105. username: [
  106. { required: true, message: '请输入手机号码', trigger: 'blur' },
  107. { validator: validateUserName, trigger: 'change' },
  108. ],
  109. mobile_captcha: [
  110. { required: true, message: '请输入验证码', trigger: 'blur' },
  111. ],
  112. password: [
  113. { required: true, message: '请输入密码', trigger: 'blur' },
  114. { validator: validatePassword, trigger: 'change' },
  115. { validator: validatePassword, trigger: 'blur' },
  116. ],
  117. confirm_password: [
  118. { required: true, message: '请再次输入密码', trigger: 'blur' },
  119. ],
  120. name: [
  121. { required: true, message: '请输入商城名称', trigger: 'blur' },
  122. { validator: validateMallName, trigger: 'change' },
  123. ],
  124. },
  125. timeCount: 60,
  126. timeBoo: false,
  127. lodding: '',
  128. loginBoo: true,
  129. sucUrl: '',
  130. }
  131. },
  132. methods: {
  133. getCode(){
  134. let that = this;
  135. if(!this.registerFrom.username.length){
  136. that.$message.warning("请输入手机号码");
  137. return;
  138. }
  139. request({
  140. params: {
  141. r: 'admin/auth/register-sms-code'
  142. },
  143. method: 'post',
  144. data: {
  145. mobile: this.registerFrom.username
  146. }
  147. }).then(e => {
  148. if (e.data.code == 0) {
  149. this.timeBoo = true;
  150. that.getCodeTime = setInterval(() => {
  151. that.timeCount--;
  152. if(that.timeCount == 0){
  153. clearInterval(that.getCodeTime);
  154. that.timeBoo = false;
  155. that.timeCount = 60
  156. }
  157. },1000)
  158. } else {
  159. that.$message.error(e.data.msg);
  160. }
  161. }).catch(e => {
  162. console.log(e);
  163. });
  164. },
  165. addUser(){
  166. let that = this;
  167. this.$refs['ruleForm'].validate((valid) => {
  168. if (valid) {
  169. that.lodding = 'sub';
  170. request({
  171. params: {
  172. r: 'admin/auth/register'
  173. },
  174. method: 'post',
  175. data: this.registerFrom,
  176. }).then(e => {
  177. if (e.data.code == 0) {
  178. that.registerFrom = {
  179. username: '',
  180. mobile_captcha: '',
  181. password: '',
  182. confirm_password: '',
  183. name: '',
  184. }
  185. that.sucUrl = e.data.data.login_url;
  186. that.loginBoo = false;
  187. that.$message.success(e.data.msg);
  188. } else {
  189. that.$message.error(e.data.msg);
  190. }
  191. }).catch(e => {
  192. console.log(e);
  193. }).finally(() => {
  194. that.lodding = '';
  195. })
  196. } else {
  197. return false;
  198. }
  199. });
  200. },
  201. copyInput(){
  202. let src = this.sucUrl
  203. var clipboard = new Clipboard('.copy_btn', {
  204. text: function() {
  205. return src;
  206. }
  207. });
  208. var self = this;
  209. clipboard.on('success', function(e) {
  210. // console.log("success")
  211. self.$message.success('复制成功');
  212. e.clearSelection();
  213. clipboard.destroy()
  214. });
  215. clipboard.on('error', function(e) {
  216. // console.log("error")
  217. self.$message.error('复制失败,请手动复制');
  218. });
  219. }
  220. }
  221. })
  222. </script>
  223. <style>
  224. .ver_code{
  225. display: flex;
  226. }
  227. .ver_code button{
  228. margin-left: 10px;
  229. }
  230. .sub-btn{
  231. width: 80%;
  232. border-radius: 40px;
  233. }
  234. .register-suc-icon{
  235. font-size: 90px;
  236. color: #34CB0F;
  237. }
  238. .register-suc{
  239. text-align: center;
  240. margin-top: 40px;
  241. font-size: 22px;
  242. }
  243. </style>
  244. </html>