Przeglądaj źródła

展示账号邀请码

neo 1 rok temu
rodzic
commit
b96d2c97e7
4 zmienionych plików z 182 dodań i 9 usunięć
  1. 71 0
      controllers/welcome.go
  2. 33 6
      models/user.go
  3. 1 1
      views/index.tpl
  4. 77 2
      views/welcome.tpl

+ 71 - 0
controllers/welcome.go

@@ -1,7 +1,14 @@
1 1
 package controllers
2 2
 
3 3
 import (
4
+	"box-gm/models"
5
+	"box-gm/utils"
6
+	"fmt"
7
+	"log"
8
+	"time"
9
+
4 10
 	"github.com/astaxie/beego"
11
+	"github.com/gomodule/redigo/redis"
5 12
 )
6 13
 
7 14
 type WelcomeController struct {
@@ -17,7 +24,71 @@ func (c *WelcomeController) Get() {
17 24
 		c.Ctx.Redirect(302, "/accountlogin")
18 25
 		return
19 26
 	}
27
+	username := userinfo.(*LoginInfo).Username
20 28
 
29
+	c.Data["rolename"] = models.GetUserRoleName(username)
30
+	c.Data["username"] = username
31
+	c.Data["sharecode"] = models.GetUserShareCode(username)
32
+	c.Data["token"] = models.GetToken()
33
+	c.Data["sysTime"] = time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05")
21 34
 	//界面模板文件
22 35
 	c.TplName = "welcome.tpl"
23 36
 }
37
+
38
+func (c *WelcomeController) Post() {
39
+	if !models.CheckToken(c.GetString("token")) {
40
+		c.Data["json"] = &map[string]interface{}{"status": false, "info": "操作失败,请重新刷新界面"}
41
+		c.ServeJSON()
42
+		return
43
+	}
44
+
45
+	userinfo := c.GetSession("user")
46
+	if userinfo == nil {
47
+		c.Ctx.Redirect(302, "/accountlogin")
48
+		return
49
+	}
50
+
51
+	username := userinfo.(*LoginInfo).Username
52
+	log.Printf("WelcomeController Post username[%s]", username)
53
+	nUser := models.GetUserByUsername(username)
54
+	if nUser == nil {
55
+		c.Data["json"] = &map[string]interface{}{"status": false, "info": fmt.Sprintf("用户[%s]已存在", username)}
56
+		c.ServeJSON()
57
+		return
58
+	}
59
+
60
+	sharecode := c.GetString("sharecode")
61
+	log.Printf("WelcomeController Post sharecode[%s]", sharecode)
62
+	// 校验邀请码
63
+	pool := utils.GetAccountRedisPool()
64
+	if pool == nil {
65
+		c.Data["json"] = &map[string]interface{}{"status": false, "info": "get redis pool fail"}
66
+		c.ServeJSON()
67
+		return
68
+	}
69
+	rd := pool.Get()
70
+	defer rd.Close()
71
+	result, _ := redis.Bool(rd.Do("sismember", "sharecode", sharecode))
72
+	log.Printf("WelcomeController Post result[%v]", result)
73
+	if result == true {
74
+		c.Data["json"] = &map[string]interface{}{"status": false, "info": fmt.Sprintf("邀请码[%s]已占有!", sharecode)}
75
+		c.ServeJSON()
76
+		return
77
+	}
78
+
79
+	nUser.ShareCode = sharecode
80
+	_, err := models.UpdateUser(nUser)
81
+	if err != nil {
82
+		c.Data["json"] = &map[string]interface{}{"status": false, "info": err}
83
+		c.ServeJSON()
84
+		return
85
+	}
86
+
87
+	rd.Do("sadd", "sharecode", sharecode)
88
+	rd.Do("sadd", "sharecode:promoter", sharecode)
89
+
90
+	c.Data["json"] = &map[string]interface{}{"status": true, "info": "更新用户成功"}
91
+	c.ServeJSON()
92
+
93
+	go models.SaveLog(username, "修改账号推广码", &map[string]interface{}{"username": username, "ShareCode": nUser.ShareCode})
94
+}

+ 33 - 6
models/user.go

@@ -15,6 +15,7 @@ type User struct {
15 15
 	Role        int64  `form:"role"`
16 16
 	CreateTs    int64  `form:"create_ts"`
17 17
 	LastLoginTs int64  `form:"last_login_ts"`
18
+	ShareCode   string `orm:"size(100)" form:"sharecode"`
18 19
 }
19 20
 
20 21
 func init() {
@@ -25,7 +26,7 @@ func (u *User) TableName() string {
25 26
 	return "tb_user"
26 27
 }
27 28
 
28
-//验证用户信息
29
+// 验证用户信息
29 30
 func checkUser(u *User) (err error) {
30 31
 	valid := validation.Validation{}
31 32
 	b, _ := valid.Valid(&u)
@@ -38,7 +39,7 @@ func checkUser(u *User) (err error) {
38 39
 	return nil
39 40
 }
40 41
 
41
-//get user list
42
+// get user list
42 43
 func GetUserlist() (users []orm.Params, count int64) {
43 44
 	o := orm.NewOrm()
44 45
 	user := new(User)
@@ -48,7 +49,7 @@ func GetUserlist() (users []orm.Params, count int64) {
48 49
 	return users, count
49 50
 }
50 51
 
51
-//添加用户
52
+// 添加用户
52 53
 func AddUser(u *User) (int64, error) {
53 54
 	if err := checkUser(u); err != nil {
54 55
 		return 0, err
@@ -59,7 +60,7 @@ func AddUser(u *User) (int64, error) {
59 60
 	return id, err
60 61
 }
61 62
 
62
-//更新用户
63
+// 更新用户
63 64
 func UpdateUser(u *User) (int64, error) {
64 65
 	if err := checkUser(u); err != nil {
65 66
 		return 0, err
@@ -70,7 +71,7 @@ func UpdateUser(u *User) (int64, error) {
70 71
 		user["Username"] = u.Username
71 72
 	}
72 73
 	if len(u.Password) > 0 {
73
-		user["Password"] = u.Password//Strtomd5(u.Password)
74
+		user["Password"] = u.Password //Strtomd5(u.Password)
74 75
 	}
75 76
 	if u.Role != 0 {
76 77
 		user["Role"] = u.Role
@@ -81,6 +82,9 @@ func UpdateUser(u *User) (int64, error) {
81 82
 	if u.LastLoginTs != 0 {
82 83
 		user["LastLoginTs"] = u.LastLoginTs
83 84
 	}
85
+	if len(u.ShareCode) > 0 {
86
+		user["ShareCode"] = u.ShareCode
87
+	}
84 88
 	if len(user) == 0 {
85 89
 		return 0, errors.New("update field is empty")
86 90
 	}
@@ -127,7 +131,7 @@ func GetPermission(username string) int64 {
127 131
 	return p.Permission
128 132
 }
129 133
 
130
-//检查用户是否满足权限
134
+// 检查用户是否满足权限
131 135
 func CheckPermission(username string, permission int) bool {
132 136
 	user := GetUserByUsername(username)
133 137
 	if user == nil {
@@ -139,3 +143,26 @@ func CheckPermission(username string, permission int) bool {
139 143
 	}
140 144
 	return (p.Permission & (1 << uint(permission))) != 0
141 145
 }
146
+
147
+// 获取账号推广码
148
+func GetUserShareCode(username string) string {
149
+	user := GetUserByUsername(username)
150
+	log.Printf("GetUserShareCode username[%s] user[%v]", username, user)
151
+	if user == nil {
152
+		return ""
153
+	}
154
+	return user.ShareCode
155
+}
156
+
157
+// 获取账号角色名称
158
+func GetUserRoleName(username string) string {
159
+	user := GetUserByUsername(username)
160
+	if user == nil {
161
+		return ""
162
+	}
163
+	p := GetRoleById(user.Role)
164
+	if p == nil {
165
+		return ""
166
+	}
167
+	return p.Name
168
+}

+ 1 - 1
views/index.tpl

@@ -73,7 +73,7 @@
73 73
     <div class="page-content">
74 74
         <div class="layui-tab tab" lay-filter="xbs_tab" lay-allowclose="false">
75 75
           <ul class="layui-tab-title">
76
-            <li class="home"><i class="layui-icon">&#xe68e;</i>数据</li>
76
+            <li class="home"><i class="layui-icon">&#xe68e;</i>账号信息</li>
77 77
           </ul>
78 78
           <div class="layui-tab-content">
79 79
             <div class="layui-tab-item layui-show">

+ 77 - 2
views/welcome.tpl

@@ -9,11 +9,86 @@
9 9
         <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
10 10
         <link rel="stylesheet" href="./static/css/font.css">
11 11
         <link rel="stylesheet" href="./static/css/xadmin.css">
12
+        
13
+        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
14
+        <script src="./static/lib/layui/layui.js" charset="utf-8"></script>
15
+        <script type="text/javascript" src="./static/js/xadmin.js"></script>
12 16
     </head>
13 17
     <body>
18
+    <input type="text" id="token" value={{.token}} hidden=true>
14 19
     <div class="x-body layui-anim layui-anim-up">
15
-        <blockquote class="layui-elem-quote">欢迎管理员:
16
-            <span class="x-red">test</span>!当前时间:2018-04-25 20:50:53</blockquote>
20
+        <blockquote class="layui-elem-quote">欢迎{{.rolename}}
21
+            <span class="x-red">{{.username}}</span>!当前时间:{{.sysTime}}</blockquote>
17 22
     </div>
23
+    <div class="x-body layui-anim layui-anim-up">
24
+        <blockquote class="layui-elem-quote">推广码:
25
+            <input id="sharecode" style="width:128px;" value={{.sharecode}} type="text" class="layui-input">
26
+            <br>
27
+            <input value="刷新" class="layui-btn" style="width:128px;" type="button" onclick="randCode()">
28
+            <br>
29
+            <br>
30
+            <input value="更新" class="layui-btn" style="width:128px;" type="button" onclick="UpdateShareCode()">
31
+        </blockquote>
32
+    </div>
33
+
34
+    <script language="JavaScript">
35
+      var randChats = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
36
+      function generateMixed(n) {
37
+          var res = "";
38
+          for(var i = 0; i < n ; i ++) {
39
+              var id = Math.ceil(Math.random()*(randChats.length-1));
40
+              res += randChats[id];
41
+          }
42
+          return res;
43
+      }
44
+      // 随机兑换码
45
+      function randCode() {
46
+        document.getElementById("sharecode").value = generateMixed(6);
47
+      }
48
+      
49
+      function UpdateShareCode () {
50
+        var token = document.getElementById("token").value;
51
+        var sharecode = document.getElementById("sharecode").value;
52
+
53
+        if (sharecode.length != 6){
54
+          alert("兑换码长度错误!6位大写字母");
55
+          return;
56
+        }
57
+        // 兑换码字符检查
58
+        for (var i = 0; i < sharecode.length; i ++){
59
+          var isMatch = false
60
+          for (var j = 0; j < randChats.length; j ++) {
61
+            if (sharecode[i] == randChats[j]){
62
+              isMatch = true;
63
+              break;
64
+            }
65
+          }
66
+          if (isMatch == false){
67
+            alert("兑换码错误!请使用大写字母");
68
+            return;
69
+          }
70
+        }
71
+
72
+        var text = "token=" + encodeURI(token);
73
+        text += "&sharecode=" + encodeURI(sharecode);
74
+
75
+        $.ajax({
76
+          type:"post",
77
+          url:"/welcome?" + text,
78
+          success:function (data) {
79
+            // alert(data.status);
80
+            if (data.status){
81
+              window.location.href="/welcome";
82
+            }else{
83
+              if (data.info){
84
+                alert(data.info);
85
+              }else{
86
+                window.location.href="/accountlogin";
87
+              }
88
+            }
89
+          }
90
+        });
91
+      }
92
+    </script>
18 93
     </body>
19 94
 </html>