新增用户注册/登录
This commit is contained in:
parent
4c7a0d6e91
commit
84b81cf0ac
@ -27,6 +27,7 @@ public class DbMap {
|
||||
// Composite Primary Key order: tid,cate,attr
|
||||
arp.addMapping("dyna_attr", "tid,cate,attr", DynaAttr.class);
|
||||
arp.addMapping("user", "userId", User.class);
|
||||
arp.addMapping("user_pwd", "userId", UserPwd.class);
|
||||
}
|
||||
|
||||
public static void addSqlTemplate(ActiveRecordPlugin arp) {
|
||||
|
@ -1,6 +1,9 @@
|
||||
package com.lxyer.config;
|
||||
|
||||
import com.jfinal.aop.Interceptor;
|
||||
import com.jfinal.aop.Invocation;
|
||||
import com.jfinal.config.*;
|
||||
import com.jfinal.core.Controller;
|
||||
import com.jfinal.kit.PathKit;
|
||||
import com.jfinal.kit.PropKit;
|
||||
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
|
||||
@ -57,7 +60,14 @@ public class FlyConfig extends JFinalConfig {
|
||||
|
||||
@Override
|
||||
public void configInterceptor(Interceptors me) {
|
||||
me.add(new LoginInterceptor());
|
||||
me.add(new Interceptor() {
|
||||
@Override
|
||||
public void intercept(Invocation inv) {
|
||||
Controller controller = inv.getController();
|
||||
controller.setAttr("mine", controller.getSessionAttr("user"));
|
||||
inv.invoke();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,5 +1,9 @@
|
||||
package com.lxyer.config;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
/**
|
||||
@ -30,4 +34,20 @@ public final class LxyKit {
|
||||
return new SimpleDateFormat("yyyy-MM-dd").format(time);
|
||||
|
||||
}
|
||||
|
||||
public static String md5IfNeed(String password){
|
||||
if (password == null || password.isEmpty()) return "";
|
||||
if (password.length() == 32) return password;
|
||||
MessageDigest md5 = null;
|
||||
try {
|
||||
md5 = MessageDigest.getInstance("MD5");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
byte[] bytes = password.trim().getBytes();
|
||||
bytes = md5.digest(bytes);
|
||||
|
||||
return HexBin.encode(bytes);
|
||||
}
|
||||
}
|
||||
|
26
src/main/java/com/lxyer/config/MyException.java
Normal file
26
src/main/java/com/lxyer/config/MyException.java
Normal file
@ -0,0 +1,26 @@
|
||||
package com.lxyer.config;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 23:45.
|
||||
*/
|
||||
public class MyException extends RuntimeException {
|
||||
public MyException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public MyException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public MyException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public MyException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
protected MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
|
||||
super(message, cause, enableSuppression, writableStackTrace);
|
||||
}
|
||||
}
|
@ -12,6 +12,8 @@ public class UrlHandler extends Handler {
|
||||
@Override
|
||||
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
|
||||
|
||||
if (target.endsWith(".html")) target = target.replace(".html", "");
|
||||
|
||||
next.handle(target, request, response, isHandled);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,11 @@ package com.lxyer.config.interceptor;
|
||||
|
||||
import com.jfinal.aop.Interceptor;
|
||||
import com.jfinal.aop.Invocation;
|
||||
import com.jfinal.core.Controller;
|
||||
import com.lxyer.model.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 11:22.
|
||||
@ -9,6 +14,20 @@ import com.jfinal.aop.Invocation;
|
||||
public class LoginInterceptor implements Interceptor {
|
||||
@Override
|
||||
public void intercept(Invocation inv) {
|
||||
inv.invoke();
|
||||
|
||||
Controller controller = inv.getController();
|
||||
HttpServletRequest request = controller.getRequest();
|
||||
HttpServletResponse response = controller.getResponse();
|
||||
|
||||
User user = controller.getSessionAttr("user");
|
||||
if (user == null){
|
||||
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
|
||||
|
||||
}else {
|
||||
controller.render("/user/login.html");
|
||||
}
|
||||
}else {
|
||||
inv.invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.lxyer.config.route;
|
||||
|
||||
import com.jfinal.config.Routes;
|
||||
import com.lxyer.controller.HomeController;
|
||||
import com.lxyer.controller.JieController;
|
||||
import com.lxyer.controller.UserController;
|
||||
|
||||
/**
|
||||
@ -14,5 +15,6 @@ public class SiteRoute extends Routes {
|
||||
|
||||
add("/", HomeController.class);
|
||||
add("/user", UserController.class);
|
||||
add("/jie", JieController.class);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +0,0 @@
|
||||
package com.lxyer.controller;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 16:48.
|
||||
*/
|
||||
public class ContentController extends IController{
|
||||
|
||||
|
||||
}
|
@ -58,25 +58,5 @@ public class HomeController extends IController {
|
||||
render("jie/index.html");
|
||||
}
|
||||
|
||||
/**
|
||||
* 帖子详情
|
||||
*/
|
||||
public void jie(){
|
||||
int contentId = getParaToInt(0);
|
||||
|
||||
//ContentInfo content = contentService.contentInfo(sessionid, contentid);
|
||||
//Sheet<CommentInfo> comments = commentService.commentQuery(request.getSessionid(false) ,contentid, new Flipper().limit(30));
|
||||
|
||||
Record content = Content.dao.findFirst(Kv.by("contentId", contentId));
|
||||
|
||||
//热议
|
||||
List<Content> hotReply = Content.dao.findPage(1, 8, Kv.by("order", "replyNum DESC")).getList();
|
||||
|
||||
setAttr("bean", content);
|
||||
setAttr("hotReply", hotReply);
|
||||
|
||||
render("jie/detail.html");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import com.jfinal.plugin.activerecord.*;
|
||||
import com.jfinal.plugin.redis.Cache;
|
||||
import com.jfinal.plugin.redis.Redis;
|
||||
import com.lxyer.config.E;
|
||||
import com.lxyer.model.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -19,6 +20,22 @@ public class IController extends Controller {
|
||||
|
||||
public static final Cache cache = Redis.use();
|
||||
|
||||
public void index(){
|
||||
String para = getPara(0, "index");
|
||||
|
||||
render(para + ".html");
|
||||
}
|
||||
|
||||
|
||||
public Integer getUserId() {
|
||||
User user = getUser();
|
||||
return user == null ? null : user.getUserId();
|
||||
}
|
||||
|
||||
public User getUser(){
|
||||
return getSessionAttr("user");
|
||||
}
|
||||
|
||||
public Kv getParams(String... key) {
|
||||
Kv kv = Kv.create();
|
||||
for (String k : key) {
|
||||
|
62
src/main/java/com/lxyer/controller/JieController.java
Normal file
62
src/main/java/com/lxyer/controller/JieController.java
Normal file
@ -0,0 +1,62 @@
|
||||
package com.lxyer.controller;
|
||||
|
||||
import com.jfinal.aop.Before;
|
||||
import com.jfinal.kit.Kv;
|
||||
import com.lxyer.config.JsonBean;
|
||||
import com.lxyer.config.interceptor.LoginInterceptor;
|
||||
import com.lxyer.model.Content;
|
||||
import com.lxyer.service.ContentService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 16:48.
|
||||
*/
|
||||
public class JieController extends IController{
|
||||
|
||||
private ContentService contentService = ContentService.me;
|
||||
private int userId;
|
||||
|
||||
/**
|
||||
* 帖子详情
|
||||
*/
|
||||
public void index(){
|
||||
int contentId = getParaToInt(0);
|
||||
|
||||
//ContentInfo content = contentService.contentInfo(sessionid, contentid);
|
||||
//Sheet<CommentInfo> comments = commentService.commentQuery(request.getSessionid(false) ,contentid, new Flipper().limit(30));
|
||||
|
||||
Content content = Content.dao.findFirst(Kv.by("contentId", contentId));
|
||||
|
||||
//热议
|
||||
List<Content> hotReply = Content.dao.findPage(1, 8, Kv.by("order", "replyNum DESC")).getList();
|
||||
|
||||
setAttr("bean", content);
|
||||
setAttr("hotReply", hotReply);
|
||||
|
||||
render("detail.html");
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加/修改帖子
|
||||
*/
|
||||
@Before(LoginInterceptor.class)
|
||||
public void add(){
|
||||
setAttr("bean", Content.dao.findById(getParaToInt()));
|
||||
|
||||
render("add.html");
|
||||
}
|
||||
|
||||
/**
|
||||
* 帖子保存
|
||||
*/
|
||||
@Before(LoginInterceptor.class)
|
||||
public void save() {
|
||||
Content content = getModel(Content.class);
|
||||
|
||||
contentService.save(content, getUserId());
|
||||
|
||||
renderJson(JsonBean.success());
|
||||
}
|
||||
|
||||
}
|
@ -1,28 +1,88 @@
|
||||
package com.lxyer.controller;
|
||||
|
||||
import com.lxyer.config.JsonBean;
|
||||
import com.lxyer.model.User;
|
||||
import com.lxyer.service.UserService;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 16:40.
|
||||
*/
|
||||
public class UserController extends IController {
|
||||
|
||||
private UserService userService = UserService.me;
|
||||
|
||||
/**
|
||||
* 注册
|
||||
*/
|
||||
public void create(){
|
||||
JsonBean bean = new JsonBean(1);
|
||||
String email = getPara("email");
|
||||
String pwd = getPara("pwd");
|
||||
String nickname = getPara("nickname");
|
||||
|
||||
try {
|
||||
userService.create(email, pwd, nickname);
|
||||
} catch (Exception e) {
|
||||
bean.setCode(-1, e.getMessage());
|
||||
}
|
||||
|
||||
renderJson(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
public void login(){
|
||||
String para = getPara();
|
||||
if (para == null) {
|
||||
render("login.html");
|
||||
return;
|
||||
}else if ("out".equals(para)){
|
||||
removeSessionAttr("user");
|
||||
renderJson(JsonBean.success());
|
||||
return;
|
||||
}
|
||||
JsonBean bean = new JsonBean(1);
|
||||
String username = getPara("username");
|
||||
String pwd = getPara("pwd");
|
||||
|
||||
try {
|
||||
User user = userService.login(username, pwd);
|
||||
/*未来源app端
|
||||
String token = userService.updateToken(user);
|
||||
bean.set("user", user);
|
||||
bean.set("token", token);*/
|
||||
|
||||
setSessionAttr("user", user);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
bean.setCode(-1, e.getMessage());
|
||||
}
|
||||
|
||||
renderJson(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
* todo:用户修改资料
|
||||
*/
|
||||
public void update(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*/
|
||||
public void repwd(){
|
||||
JsonBean bean = new JsonBean(1);
|
||||
String pwd = getPara("pwd");
|
||||
|
||||
try {
|
||||
userService.updatePwd(getUserId(), pwd);
|
||||
} catch (Exception e) {
|
||||
bean.setCode(-1, e.getMessage());
|
||||
}
|
||||
|
||||
renderJson(bean);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -13,4 +13,9 @@ public class Content extends BaseContent<Content> {
|
||||
public String sqlSpace() {
|
||||
return "content";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Content getDao() {
|
||||
return dao;
|
||||
}
|
||||
}
|
||||
|
@ -13,4 +13,9 @@ public class User extends BaseUser<User> {
|
||||
public String sqlSpace() {
|
||||
return "user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getDao() {
|
||||
return dao;
|
||||
}
|
||||
}
|
||||
|
28
src/main/java/com/lxyer/model/UserPwd.java
Normal file
28
src/main/java/com/lxyer/model/UserPwd.java
Normal file
@ -0,0 +1,28 @@
|
||||
package com.lxyer.model;
|
||||
|
||||
import com.lxyer.config.LxyKit;
|
||||
import com.lxyer.model.base.BaseUserPwd;
|
||||
|
||||
/**
|
||||
* Generated by JFinal.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class UserPwd extends BaseUserPwd<UserPwd> {
|
||||
public static final UserPwd dao = new UserPwd().dao();
|
||||
|
||||
@Override
|
||||
public boolean save() {
|
||||
setUpdateTime(System.currentTimeMillis());
|
||||
setPwd(LxyKit.md5IfNeed(getPwd()));
|
||||
if (findById(getUserId()) == null) {
|
||||
return super.save();
|
||||
}else {
|
||||
return super.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update() {
|
||||
return save();
|
||||
}
|
||||
}
|
@ -32,12 +32,13 @@ public class _Generator {
|
||||
* 部分功能使用 Db + Record 模式实现,无需生成 model 的 table 在此配置
|
||||
*/
|
||||
private static String[] excludedTable = {
|
||||
/*"comment",
|
||||
"comment",
|
||||
"content",
|
||||
"content_item",
|
||||
"dyna_attr",
|
||||
"tree",
|
||||
"user"*/
|
||||
"act_log",
|
||||
"user",
|
||||
"user_pwd"
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -25,14 +25,6 @@ public abstract class BaseUser<M extends BaseUser<M>> extends Model<M> implement
|
||||
return getStr("username");
|
||||
}
|
||||
|
||||
public void setPassword(java.lang.String password) {
|
||||
set("password", password);
|
||||
}
|
||||
|
||||
public java.lang.String getPassword() {
|
||||
return getStr("password");
|
||||
}
|
||||
|
||||
public void setSex(java.lang.Integer sex) {
|
||||
set("sex", sex);
|
||||
}
|
||||
|
36
src/main/java/com/lxyer/model/base/BaseUserPwd.java
Normal file
36
src/main/java/com/lxyer/model/base/BaseUserPwd.java
Normal file
@ -0,0 +1,36 @@
|
||||
package com.lxyer.model.base;
|
||||
|
||||
import com.jfinal.plugin.activerecord.Model;
|
||||
import com.jfinal.plugin.activerecord.IBean;
|
||||
|
||||
/**
|
||||
* Generated by JFinal, do not modify this file.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public abstract class BaseUserPwd<M extends BaseUserPwd<M>> extends Model<M> implements IBean {
|
||||
|
||||
public void setUserId(java.lang.Integer userId) {
|
||||
set("userId", userId);
|
||||
}
|
||||
|
||||
public java.lang.Integer getUserId() {
|
||||
return getInt("userId");
|
||||
}
|
||||
|
||||
public void setPwd(java.lang.String pwd) {
|
||||
set("pwd", pwd);
|
||||
}
|
||||
|
||||
public java.lang.String getPwd() {
|
||||
return getStr("pwd");
|
||||
}
|
||||
|
||||
public void setUpdateTime(java.lang.Long updateTime) {
|
||||
set("updateTime", updateTime);
|
||||
}
|
||||
|
||||
public java.lang.Long getUpdateTime() {
|
||||
return getLong("updateTime");
|
||||
}
|
||||
|
||||
}
|
@ -1,36 +1,33 @@
|
||||
package com.lxyer.model.base;
|
||||
|
||||
import com.jfinal.kit.Kv;
|
||||
import com.jfinal.plugin.activerecord.Db;
|
||||
import com.jfinal.plugin.activerecord.Page;
|
||||
import com.jfinal.plugin.activerecord.Record;
|
||||
import com.jfinal.plugin.activerecord.SqlPara;
|
||||
import com.jfinal.plugin.activerecord.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 16:52.
|
||||
*/
|
||||
public interface IModel<M extends IModel<M>> {
|
||||
public interface IModel<M extends Model<M>> {
|
||||
|
||||
String sqlSpace();
|
||||
M getDao();
|
||||
|
||||
default List<M> findList(Kv kv){
|
||||
SqlPara sqlPara = Db.getSqlPara(sqlSpace()+".list", kv);
|
||||
SqlPara sqlPara = getDao().getSqlPara(sqlSpace()+".list", kv);
|
||||
|
||||
return (List) Db.find(sqlPara);
|
||||
return getDao().find(sqlPara);
|
||||
}
|
||||
|
||||
default Record findFirst(Kv kv){
|
||||
default M findFirst(Kv kv){
|
||||
SqlPara sqlPara = Db.getSqlPara(sqlSpace()+".list", kv);
|
||||
|
||||
return Db.findFirst(sqlPara);
|
||||
return getDao().findFirst(sqlPara);
|
||||
}
|
||||
|
||||
default Page<M> findPage(int pn, int ps, Kv kv){
|
||||
SqlPara sqlPara = Db.getSqlPara(sqlSpace()+".list", kv);
|
||||
|
||||
return (Page) Db.paginate(pn, ps, sqlPara);
|
||||
return getDao().paginate(pn, ps, sqlPara);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,19 @@
|
||||
package com.lxyer.service;
|
||||
|
||||
/**
|
||||
import com.lxyer.model.Content; /**
|
||||
* Created by JUECHENG at 2018/1/7 16:49.
|
||||
*/
|
||||
public class ContentService {
|
||||
|
||||
public static final ContentService me = new ContentService();
|
||||
|
||||
public void save(Content content, int userId) {
|
||||
if (content.getContentId() == null) {
|
||||
content.setCreateTime(System.currentTimeMillis());
|
||||
content.setUserId(userId);
|
||||
content.save();
|
||||
}else {
|
||||
content.update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
84
src/main/java/com/lxyer/service/UserService.java
Normal file
84
src/main/java/com/lxyer/service/UserService.java
Normal file
@ -0,0 +1,84 @@
|
||||
package com.lxyer.service;
|
||||
|
||||
import com.jfinal.kit.Kv;
|
||||
import com.jfinal.kit.StrKit;
|
||||
import com.lxyer.config.LxyKit;
|
||||
import com.lxyer.model.User;
|
||||
import com.lxyer.model.UserPwd;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Created by JUECHENG at 2018/1/7 22:59.
|
||||
*/
|
||||
public class UserService {
|
||||
public static final UserService me = new UserService();
|
||||
|
||||
/**
|
||||
* 创建用户
|
||||
* @param email
|
||||
* @param pwd
|
||||
* @param nickname
|
||||
* @throws Exception
|
||||
*/
|
||||
public void create(String email, String pwd, String nickname) throws Exception {
|
||||
if (StrKit.isBlank(email))
|
||||
throw new Exception("注册失败,邮箱格式不正确");
|
||||
if (StrKit.isBlank(pwd))
|
||||
throw new Exception("注册失败,密码格式不正确");
|
||||
if (User.dao.findFirst(Kv.by("email", email)) != null)
|
||||
throw new Exception("注册失败,邮箱被占用");
|
||||
|
||||
User user = new User();
|
||||
user.setUsername(email);
|
||||
user.setEmail(email);
|
||||
user.setNickname(nickname);
|
||||
user.setAvatar("/res/images/avatar/"+ new Random().nextInt(21) +".jpg");//默认头像
|
||||
user.setCreateTime(System.currentTimeMillis());
|
||||
user.setStatus(1);
|
||||
user.save();
|
||||
|
||||
UserPwd userPwd = new UserPwd();
|
||||
userPwd.setUserId(user.getUserId());
|
||||
userPwd.setPwd(pwd);
|
||||
userPwd.save();
|
||||
}
|
||||
|
||||
public User login(String username, String pwd) throws Exception {
|
||||
User user = User.dao.findFirst(Kv.by("username", username));
|
||||
if (user == null){
|
||||
throw new Exception("密码错误!");
|
||||
}
|
||||
|
||||
UserPwd userPwd = UserPwd.dao.findById(user.getUserId());
|
||||
if (userPwd == null || !LxyKit.md5IfNeed(pwd).equalsIgnoreCase(userPwd.getPwd())){
|
||||
throw new Exception("密码错误!");
|
||||
}
|
||||
|
||||
if (user.getInt("status") == -1){
|
||||
throw new Exception("限制登录");
|
||||
}
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
public String updateToken(User user) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
* @param userId
|
||||
* @param pwd
|
||||
*/
|
||||
public void updatePwd(Integer userId, String pwd) throws Exception {
|
||||
if (StrKit.isBlank(pwd))
|
||||
throw new Exception("操作失败,密码格式不正确");
|
||||
|
||||
UserPwd userPwd = new UserPwd();
|
||||
userPwd.setUserId(userId);
|
||||
userPwd.setPwd(pwd);
|
||||
|
||||
userPwd.update();
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
#------------------------------------------------#
|
||||
jdbcUrl=jdbc\:mysql\://dbserver\:3306/jfly?useUnicode\=true&characterEncoding\=utf8&useSSL\=false
|
||||
user=root
|
||||
password=*hello9796!
|
||||
user=guest
|
||||
password=hello
|
||||
|
||||
redis.cache_name=jfly
|
||||
redis.database=1
|
||||
|
@ -1,3 +1,19 @@
|
||||
#sql("user.list")
|
||||
SELECT * FROM `user`
|
||||
SELECT * FROM `user` u
|
||||
WHERE u.status != -1
|
||||
#if(userId)
|
||||
AND u.`userId` = #(userId)
|
||||
#end
|
||||
#if(username)
|
||||
AND u.`username` = '#(username)'
|
||||
#end
|
||||
#if(email)
|
||||
AND u.`email` = '#(email)'
|
||||
#end
|
||||
|
||||
#if(order)
|
||||
ORDER BY #(order)
|
||||
#else
|
||||
ORDER BY u.createTime DESC
|
||||
#end
|
||||
#end
|
141
src/main/webapp/WEB-INF/fly/user/activate.html
Normal file
141
src/main/webapp/WEB-INF/fly/user/activate.html
Normal file
@ -0,0 +1,141 @@
|
||||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>激活邮箱</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="keywords" content="fly,layui,前端社区">
|
||||
<meta name="description" content="Fly社区是模块化前端UI框架Layui的官网社区,致力于为web开发提供强劲动力">
|
||||
<link rel="stylesheet" href="../../res/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="../../res/css/global.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<div class="main">
|
||||
<a class="logo" href="/" title="Fly">Fly社区</a>
|
||||
<div class="nav">
|
||||
<a class="nav-this" href="index.html">
|
||||
<i class="iconfont icon-wenda"></i>问答
|
||||
</a>
|
||||
<a href="http://www.layui.com/" target="_blank">
|
||||
<i class="iconfont icon-ui"></i>框架
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="nav-user">
|
||||
<!-- 登入后的状态 -->
|
||||
|
||||
<a class="avatar" href="../user/index.html">
|
||||
<img src="http://tp4.sinaimg.cn/1345566427/180/5730976522/0">
|
||||
<cite>贤心</cite>
|
||||
<i>VIP2</i>
|
||||
</a>
|
||||
<div class="nav">
|
||||
<a href="../user/set.html"><i class="iconfont icon-shezhi"></i>设置</a>
|
||||
<a href=""><i class="iconfont icon-tuichu" style="top: 0; font-size: 22px;"></i>退了</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main fly-user-main layui-clear">
|
||||
<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="user">
|
||||
<li class="layui-nav-item">
|
||||
<a href="home.html">
|
||||
<i class="layui-icon"></i>
|
||||
我的主页
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item">
|
||||
<a href="index.html">
|
||||
<i class="layui-icon"></i>
|
||||
用户中心
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item">
|
||||
<a href="set.html">
|
||||
<i class="layui-icon"></i>
|
||||
基本设置
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item">
|
||||
<a href="message.html">
|
||||
<i class="layui-icon"></i>
|
||||
我的消息
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="site-tree-mobile layui-hide">
|
||||
<i class="layui-icon"></i>
|
||||
</div>
|
||||
<div class="site-mobile-shade"></div>
|
||||
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="user">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">
|
||||
激活邮箱
|
||||
</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
|
||||
<ul class="layui-form">
|
||||
<li class="layui-form-li">
|
||||
<label for="activate">您的邮箱:</label>
|
||||
<span class="layui-form-text">xx@xx.com
|
||||
<!-- <em style="color:#999;">(已成功激活)</em> -->
|
||||
<em style="color:#c00;">(尚未激活)</em>
|
||||
</span>
|
||||
</li>
|
||||
<li class="layui-form-li" style="margin-top: 20px; line-height: 26px;">
|
||||
<div>
|
||||
1. 如果您未收到邮件,或激活链接失效,您可以
|
||||
<a class="layui-form-a" style="color:#4f99cf;" id="LAY-activate" href="javascript:;" email="{{user.email}}">重新发送邮件</a>,或者
|
||||
<a class="layui-form-a" style="color:#4f99cf;" href="set.html">更换邮箱</a>;
|
||||
</div>
|
||||
<div>
|
||||
2. 如果您始终没有收到 Fly 发送的邮件,请注意查看您邮箱中的垃圾邮件;
|
||||
</div>
|
||||
<div>
|
||||
3. 如果你实在无法激活邮件,您还可以联系:admin@xx.com
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p><a href="http://fly.layui.com/">Fly社区</a> 2017 © <a href="http://www.layui.com/">layui.com</a></p>
|
||||
<p>
|
||||
<a href="http://fly.layui.com/auth/get" target="_blank">产品授权</a>
|
||||
<a href="http://fly.layui.com/jie/8157.html" target="_blank">获取Fly社区模版</a>
|
||||
<a href="http://fly.layui.com/jie/2461.html" target="_blank">微信公众号</a>
|
||||
</p>
|
||||
</div>
|
||||
<script src="../../res/layui/layui.js"></script>
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
,uid: -1
|
||||
,avatar: '../../res/images/avatar/00.jpg'
|
||||
,experience: 83
|
||||
,sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
,base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
146
src/main/webapp/WEB-INF/fly/user/forget.html
Normal file
146
src/main/webapp/WEB-INF/fly/user/forget.html
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>找回密码/重置密码</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="keywords" content="fly,layui,前端社区">
|
||||
<meta name="description" content="Fly社区是模块化前端UI框架Layui的官网社区,致力于为web开发提供强劲动力">
|
||||
<link rel="stylesheet" href="../../res/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="../../res/css/global.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<div class="main">
|
||||
<a class="logo" href="/" title="Fly">Fly社区</a>
|
||||
<div class="nav">
|
||||
<a class="nav-this" href="index.html">
|
||||
<i class="iconfont icon-wenda"></i>问答
|
||||
</a>
|
||||
<a href="http://www.layui.com/" target="_blank">
|
||||
<i class="iconfont icon-ui"></i>框架
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="nav-user">
|
||||
<!-- 登入后的状态 -->
|
||||
|
||||
<a class="avatar" href="../user/index.html">
|
||||
<img src="http://tp4.sinaimg.cn/1345566427/180/5730976522/0">
|
||||
<cite>贤心</cite>
|
||||
<i>VIP2</i>
|
||||
</a>
|
||||
<div class="nav">
|
||||
<a href="../user/set.html"><i class="iconfont icon-shezhi"></i>设置</a>
|
||||
<a href=""><i class="iconfont icon-tuichu" style="top: 0; font-size: 22px;"></i>退了</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main layui-clear">
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="user">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">找回密码</li>
|
||||
</ul>
|
||||
<div class="layui-form layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="layui-form layui-form-pane">
|
||||
<form method="post">
|
||||
<div class="layui-form-item">
|
||||
<label for="L_email" class="layui-form-label">邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_email" name="email" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_vercode" class="layui-form-label">人类验证</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_vercode" name="vercode" required lay-verify="required" placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid">
|
||||
<span style="color: #c00;">{{d.vercode}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" alert="1" lay-filter="*" lay-submit>提交</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- 重置密码模版也在该页面中,HTML被注释部分 -->
|
||||
|
||||
<!-- <div class="fly-error">该重置密码链接已失效,请重新校验您的信息</div>
|
||||
<div class="fly-error">非法链接,请重新校验您的信息</div>
|
||||
|
||||
<div class="fly-msg">马云,请重置您的密码</div>
|
||||
<div class="layui-form layui-form-pane" style="margin-top: 30px;">
|
||||
<form action="/user/repass" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label for="L_pass" class="layui-form-label">密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_pass" name="pass" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">6到16个字符</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_repass" class="layui-form-label">确认密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_repass" name="repass" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_vercode" class="layui-form-label">人类验证</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_vercode" name="vercode" required lay-verify="required" placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid">
|
||||
<span style="color: #c00;">{{d.vercode}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<input type="hidden" name="username" value="{{d.username}}">
|
||||
<input type="hidden" name="email" value="{{d.email}}">
|
||||
<button class="layui-btn" alert="1" lay-filter="*" lay-submit>提交</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p><a href="http://fly.layui.com/">Fly社区</a> 2017 © <a href="http://www.layui.com/">layui.com</a></p>
|
||||
<p>
|
||||
<a href="http://fly.layui.com/auth/get" target="_blank">产品授权</a>
|
||||
<a href="http://fly.layui.com/jie/8157.html" target="_blank">获取Fly社区模版</a>
|
||||
<a href="http://fly.layui.com/jie/2461.html" target="_blank">微信公众号</a>
|
||||
</p>
|
||||
</div>
|
||||
<script src="../../res/layui/layui.js"></script>
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
,uid: -1
|
||||
,avatar: '../../res/images/avatar/00.jpg'
|
||||
,experience: 83
|
||||
,sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
,base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
114
src/main/webapp/WEB-INF/fly/user/home.html
Normal file
114
src/main/webapp/WEB-INF/fly/user/home.html
Normal file
@ -0,0 +1,114 @@
|
||||
#@layout()
|
||||
|
||||
#define main()
|
||||
#@flyColumn()
|
||||
<div class="fly-home fly-panel" style="background-image: url());">
|
||||
<img src="#(user.avatar??)" alt="#(user.nickname??)">
|
||||
<!--
|
||||
<i class="iconfont icon-renzheng" title="Fly社区认证"></i>
|
||||
-->
|
||||
<h1>
|
||||
#(user.nickname??)
|
||||
<i class="iconfont icon-nan"></i>
|
||||
<!--
|
||||
<i class="iconfont icon-nv"></i>
|
||||
<i class="layui-badge fly-badge-vip">VIP3</i>
|
||||
<span style="color:#c00;">(管理员)</span>
|
||||
<span style="color:#5FB878;">(社区之光)</span>
|
||||
<span>(该号已被封)</span>
|
||||
-->
|
||||
</h1>
|
||||
|
||||
<!--
|
||||
<p style="padding: 10px 0; color: #5FB878;">认证信息:layui 作者</p>
|
||||
-->
|
||||
|
||||
<p class="fly-home-info">
|
||||
<!--
|
||||
<i class="iconfont icon-kiss" title="飞吻"></i><span style="color: #FF7200;">66666 飞吻</span>
|
||||
-->
|
||||
<i class="iconfont icon-shijian"></i><span>#(EJ.date(user.createTime??,"yyyy-MM-dd")) 加入</span>
|
||||
<i class="iconfont icon-chengshi"></i><span>来自#(user.city?? "火星")</span>
|
||||
</p>
|
||||
|
||||
<p class="fly-home-sign">(#(user.sign) #if(user.sign == '')这个人懒得留下签名#end)</p>
|
||||
|
||||
<!--
|
||||
<div class="fly-sns" data-user="">
|
||||
<a href="javascript:;" class="layui-btn layui-btn-primary fly-imActive" data-type="addFriend">加为好友</a>
|
||||
<a href="javascript:;" class="layui-btn layui-btn-normal fly-imActive" data-type="chat">发起会话</a>
|
||||
</div>
|
||||
-->
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-container">
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-col-md6 fly-home-jie">
|
||||
<div class="fly-panel">
|
||||
<h3 class="fly-panel-title">#(user.nickname) 最近的帖子</h3>
|
||||
<ul class="jie-row">
|
||||
#for(x : contents.rows??)
|
||||
<li>
|
||||
#if(x.wonderful == 1)
|
||||
<span class="fly-jing">精</span>
|
||||
#end
|
||||
<a href="/jie/detail/#(x.contentId)" class="jie-title">#(x.title)</a>
|
||||
<i>#(x.createTime)</i>
|
||||
<em class="layui-hide-xs">#(x.viewNum)阅/#(x.replyNum)答</em>
|
||||
</li>
|
||||
#end
|
||||
<!-- <div class="fly-none" style="min-height: 50px; padding:30px 0; height:auto;"><i style="font-size:14px;">没有发表任何求解</i></div> -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-col-md6 fly-home-da">
|
||||
<div class="fly-panel">
|
||||
<h3 class="fly-panel-title">#(user.nickname) 最近的回答</h3>
|
||||
<ul class="home-jieda">
|
||||
#for(x : comments.rows??)
|
||||
<li>
|
||||
<p>
|
||||
<span>#(x.createTime)</span>
|
||||
在<a href="/jie/detail/#(x.contentId)" target="_blank">#(x.title)</a>中回答:
|
||||
</p>
|
||||
<div class="home-dacontent">
|
||||
#(x.content)
|
||||
</div>
|
||||
</li>
|
||||
#else
|
||||
<div class="fly-none" style="min-height: 50px; padding:30px 0; height:auto;"><span>没有回答任何问题</span></div>
|
||||
#end
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
#end
|
||||
|
||||
#define js()
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
,uid: -1
|
||||
,avatar: '../../res/images/avatar/00.jpg'
|
||||
,experience: 83
|
||||
,sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
,base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly', function () {
|
||||
var $ = layui.jquery, fly = layui.fly;
|
||||
//如果你是采用模版自带的编辑器,你需要开启以下语句来解析。
|
||||
$('.home-dacontent').each(function(){
|
||||
var othis = $(this), html = othis.html();
|
||||
othis.html(fly.content(html));
|
||||
});
|
||||
});
|
||||
</script>
|
||||
#end
|
77
src/main/webapp/WEB-INF/fly/user/index.html
Normal file
77
src/main/webapp/WEB-INF/fly/user/index.html
Normal file
@ -0,0 +1,77 @@
|
||||
#@layout()
|
||||
|
||||
#define main()
|
||||
<div class="layui-container fly-marginTop fly-user-main">
|
||||
#@user_side("index")
|
||||
|
||||
<div class="site-tree-mobile layui-hide">
|
||||
<i class="layui-icon"></i>
|
||||
</div>
|
||||
<div class="site-mobile-shade"></div>
|
||||
|
||||
<div class="site-tree-mobile layui-hide">
|
||||
<i class="layui-icon"></i>
|
||||
</div>
|
||||
<div class="site-mobile-shade"></div>
|
||||
|
||||
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<!--
|
||||
<div class="fly-msg" style="margin-top: 15px;">
|
||||
您的邮箱尚未验证,这比较影响您的帐号安全,<a href="activate.html">立即去激活?</a>
|
||||
</div>
|
||||
-->
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="user">
|
||||
<ul class="layui-tab-title" id="LAY_mine">
|
||||
<li data-type="mine-jie" lay-id="index" class="layui-this">我发的帖(<span>#if(contents.total??0 < 1) 0 #else #(contents.total) #end</span>)</li>
|
||||
<li data-type="collection" data-url="/collection/find/" lay-id="collection">我收藏的帖(<span>#if(collects.total??0 < 1) 0 #else #(collects.total) #end</span>)</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding: 20px 0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<ul class="mine-view jie-row">
|
||||
#for(x : contents.rows)
|
||||
<li>
|
||||
<a class="jie-title" href="/jie/detail/#(x.contentId)" target="_blank">#(x.title)</a>
|
||||
<i>#(x.createTime) </i>
|
||||
<a class="mine-edit" href="/jie/add/#(x.contentId)">编辑</a>
|
||||
<em>#(x.viewNum)阅/#(x.replyNum)答</em>
|
||||
</li>
|
||||
#end
|
||||
</ul>
|
||||
<div id="LAY_page"></div>
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
<ul class="mine-view jie-row">
|
||||
#for(x : collects.rows??)
|
||||
<li>
|
||||
<a class="jie-title" href="/jie/detail/#(x.contentId)" target="_blank">#(x.title)</a>
|
||||
<i>收藏于#(x.createTime)</i>
|
||||
</li>
|
||||
#end
|
||||
</ul>
|
||||
<div id="LAY_page1"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
#end
|
||||
|
||||
#define js()
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
, uid: -1
|
||||
, avatar: '../../res/images/avatar/00.jpg'
|
||||
, experience: 83
|
||||
, sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
, base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly');
|
||||
</script>
|
||||
#end
|
73
src/main/webapp/WEB-INF/fly/user/login.html
Normal file
73
src/main/webapp/WEB-INF/fly/user/login.html
Normal file
@ -0,0 +1,73 @@
|
||||
#@layout()
|
||||
|
||||
#define main()
|
||||
<div class="layui-container fly-marginTop">
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<div class="layui-tab layui-tab-brief">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">登入</li>
|
||||
<li><a href="/user/reg.html">注册</a></li>
|
||||
</ul>
|
||||
<div class="layui-form layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="layui-form layui-form-pane">
|
||||
<form method="post">
|
||||
<div class="layui-form-item">
|
||||
<label for="L_email" class="layui-form-label">邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_email" name="username" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_pass" class="layui-form-label">密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_pass" name="password" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="layui-form-item">
|
||||
<label for="L_vercode" class="layui-form-label">人类验证</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_vercode" name="vercode" required lay-verify="required" placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid">
|
||||
<span style="color: #c00;">{{d.vercode}}</span>
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" lay-filter="login" lay-submit>立即登录</button>
|
||||
<!--<span style="padding-left:20px;">
|
||||
<a href="forget.html">忘记密码?</a>
|
||||
</span>-->
|
||||
</div>
|
||||
<!--<div class="layui-form-item fly-form-app">
|
||||
<span>或者使用社交账号登入</span>
|
||||
<a href="" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-qq" title="QQ登入"></a>
|
||||
<a href="" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})" class="iconfont icon-weibo" title="微博登入"></a>
|
||||
</div>-->
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
#end
|
||||
|
||||
#define js()
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
,uid: -1
|
||||
,avatar: '../../res/images/avatar/00.jpg'
|
||||
,experience: 83
|
||||
,sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
,base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly');
|
||||
</script>
|
||||
#end
|
130
src/main/webapp/WEB-INF/fly/user/message.html
Normal file
130
src/main/webapp/WEB-INF/fly/user/message.html
Normal file
@ -0,0 +1,130 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>我的消息</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="keywords" content="fly,layui,前端社区">
|
||||
<meta name="description" content="Fly社区是模块化前端UI框架Layui的官网社区,致力于为web开发提供强劲动力">
|
||||
<link rel="stylesheet" href="../../res/layui/css/layui.css">
|
||||
<link rel="stylesheet" href="../../res/css/global.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<div class="main">
|
||||
<a class="logo" href="/" title="Fly">Fly社区</a>
|
||||
<div class="nav">
|
||||
<a class="nav-this" href="index.html">
|
||||
<i class="iconfont icon-wenda"></i>问答
|
||||
</a>
|
||||
<a href="http://www.layui.com/" target="_blank">
|
||||
<i class="iconfont icon-ui"></i>框架
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="nav-user">
|
||||
<!-- 登入后的状态 -->
|
||||
|
||||
<a class="avatar" href="../user/index.html">
|
||||
<img src="http://tp4.sinaimg.cn/1345566427/180/5730976522/0">
|
||||
<cite>贤心</cite>
|
||||
<i>VIP2</i>
|
||||
</a>
|
||||
<div class="nav">
|
||||
<a href="../user/set.html"><i class="iconfont icon-shezhi"></i>设置</a>
|
||||
<a href=""><i class="iconfont icon-tuichu" style="top: 0; font-size: 22px;"></i>退了</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main fly-user-main layui-clear">
|
||||
<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="user">
|
||||
<li class="layui-nav-item">
|
||||
<a href="home.html">
|
||||
<i class="layui-icon"></i>
|
||||
我的主页
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item">
|
||||
<a href="index.html">
|
||||
<i class="layui-icon"></i>
|
||||
用户中心
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item">
|
||||
<a href="set.html">
|
||||
<i class="layui-icon"></i>
|
||||
基本设置
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item layui-this">
|
||||
<a href="message.html">
|
||||
<i class="layui-icon"></i>
|
||||
我的消息
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="site-tree-mobile layui-hide">
|
||||
<i class="layui-icon"></i>
|
||||
</div>
|
||||
<div class="site-mobile-shade"></div>
|
||||
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="user" id="LAY_msg" style="margin-top: 15px;">
|
||||
<button class="layui-btn layui-btn-danger" id="LAY_delallmsg">清空全部消息</button>
|
||||
<div id="LAY_minemsg" style="margin-top: 10px;">
|
||||
<!--<div class="fly-none">您暂时没有最新消息</div>-->
|
||||
<ul class="mine-msg">
|
||||
<li data-id="123">
|
||||
<blockquote class="layui-elem-quote">
|
||||
<a href="/jump?username=Absolutely" target="_blank"><cite>Absolutely</cite></a>回答了您的求解<a target="_blank" href="/jie/8153.html/page/0/#item-1489505778669"><cite>layui后台框架</cite></a>
|
||||
</blockquote>
|
||||
<p><span>1小时前</span><a href="javascript:;" class="layui-btn layui-btn-small layui-btn-danger fly-delete">删除</a></p>
|
||||
</li>
|
||||
<li data-id="123">
|
||||
<blockquote class="layui-elem-quote">
|
||||
系统消息:欢迎使用 layui
|
||||
</blockquote>
|
||||
<p><span>1小时前</span><a href="javascript:;" class="layui-btn layui-btn-small layui-btn-danger fly-delete">删除</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<p><a href="http://fly.layui.com/">Fly社区</a> 2017 © <a href="http://www.layui.com/">layui.com</a></p>
|
||||
<p>
|
||||
<a href="http://fly.layui.com/auth/get" target="_blank">产品授权</a>
|
||||
<a href="http://fly.layui.com/jie/8157.html" target="_blank">获取Fly社区模版</a>
|
||||
<a href="http://fly.layui.com/jie/2461.html" target="_blank">微信公众号</a>
|
||||
</p>
|
||||
</div>
|
||||
<script src="../../res/layui/layui.js"></script>
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
,uid: -1
|
||||
,avatar: '../../res/images/avatar/00.jpg'
|
||||
,experience: 83
|
||||
,sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
,base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
88
src/main/webapp/WEB-INF/fly/user/reg.html
Normal file
88
src/main/webapp/WEB-INF/fly/user/reg.html
Normal file
@ -0,0 +1,88 @@
|
||||
#@layout()
|
||||
|
||||
#define main()
|
||||
<div class="layui-container fly-marginTop">
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="user">
|
||||
<ul class="layui-tab-title">
|
||||
<li><a href="/user/login.html">登入</a></li>
|
||||
<li class="layui-this">注册</li>
|
||||
</ul>
|
||||
<div class="layui-form layui-tab-content" id="LAY_ucm" style="padding: 20px 0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<div class="layui-form layui-form-pane">
|
||||
<form method="post">
|
||||
<div class="layui-form-item">
|
||||
<label for="L_email" class="layui-form-label">邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_email" name="email" required lay-verify="email" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">既然都注册了,就用个有效邮箱吧,方便交流</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_nickname" class="layui-form-label">昵称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_nickname" name="nickname" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_pass" class="layui-form-label">密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_pass" name="pass" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">6到16个字符</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_repass" class="layui-form-label">确认密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_repass" name="repass" required lay-verify="required|repass" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="layui-form-item">
|
||||
<label for="L_vercode" class="layui-form-label">人类验证</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_vercode" name="vercode" required lay-verify="required"
|
||||
placeholder="请回答后面的问题" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid">
|
||||
<span style="color: #c00;">{{d.vercode}}</span>
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" lay-filter="reg" lay-submit>立即注册</button>
|
||||
</div>
|
||||
<!--<div class="layui-form-item fly-form-app">
|
||||
<span>或者直接使用社交账号快捷注册</span>
|
||||
<a href="" onclick="layer.msg('正在通过QQ登入', {icon:16, shade: 0.1, time:0})"
|
||||
class="iconfont icon-qq" title="QQ登入"></a>
|
||||
<a href="" onclick="layer.msg('正在通过微博登入', {icon:16, shade: 0.1, time:0})"
|
||||
class="iconfont icon-weibo" title="微博登入"></a>
|
||||
</div>-->
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
#end
|
||||
|
||||
#define js()
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
, uid: -1
|
||||
, avatar: '../../res/images/avatar/00.jpg'
|
||||
, experience: 83
|
||||
, sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
, base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly');
|
||||
</script>
|
||||
#end
|
156
src/main/webapp/WEB-INF/fly/user/set.html
Normal file
156
src/main/webapp/WEB-INF/fly/user/set.html
Normal file
@ -0,0 +1,156 @@
|
||||
#@layout()
|
||||
|
||||
#define main()
|
||||
<div class="layui-container fly-marginTop fly-user-main">
|
||||
#@user_side("set")
|
||||
|
||||
<div class="site-tree-mobile layui-hide">
|
||||
<i class="layui-icon"></i>
|
||||
</div>
|
||||
<div class="site-mobile-shade"></div>
|
||||
|
||||
<div class="site-tree-mobile layui-hide">
|
||||
<i class="layui-icon"></i>
|
||||
</div>
|
||||
<div class="site-mobile-shade"></div>
|
||||
|
||||
<div class="fly-panel fly-panel-user" pad20>
|
||||
<div class="layui-tab layui-tab-brief" lay-filter="user">
|
||||
<ul class="layui-tab-title" id="LAY_mine">
|
||||
<li class="layui-this" lay-id="info">我的资料</li>
|
||||
<li lay-id="avatar">头像</li>
|
||||
<li lay-id="pass">密码</li>
|
||||
<!--<li lay-id="bind">帐号绑定</li>-->
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="padding: 20px 0;">
|
||||
<!--资料-->
|
||||
<div class="layui-form layui-form-pane layui-tab-item layui-show">
|
||||
<form method="post">
|
||||
<div class="layui-form-item">
|
||||
<label for="L_email" class="layui-form-label">邮箱</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_email" name="email" required lay-verify="email" autocomplete="off" value="#(mine.email)" class="layui-input">
|
||||
</div>
|
||||
<!--<div class="layui-form-mid layui-word-aux">如果您在邮箱已激活的情况下,变更了邮箱,需<a href="activate.html" style="font-size: 12px; color: #4f99cf;">重新验证邮箱</a>。</div>-->
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_nickname" class="layui-form-label">昵称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_nickname" name="nickname" required lay-verify="required" autocomplete="off" value="#(mine.nickname)" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="sex" value="1" #if(mine.sex == 1) checked #end title="男">
|
||||
<input type="radio" name="sex" value="2" #if(mine.sex == 2) checked #end title="女">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_city" class="layui-form-label">城市</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_city" name="city" autocomplete="off" value="" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label for="L_sign" class="layui-form-label">签名</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea placeholder="随便写些什么刷下存在感" id="L_sign" name="sign" autocomplete="off" class="layui-textarea" style="height: 80px;">#(mine.sign??)</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" key="set-mine" lay-filter="set-info" lay-submit>确认修改</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--头像-->
|
||||
<div class="layui-form layui-form-pane layui-tab-item">
|
||||
<div class="layui-form-item">
|
||||
<div class="avatar-add">
|
||||
<p>建议尺寸168*168,支持jpg、png、gif,最大不能超过50KB</p>
|
||||
<button type="button" class="layui-btn upload-img">
|
||||
<i class="layui-icon"></i>上传头像
|
||||
</button>
|
||||
<img src="#(mine.avatar??)">
|
||||
<span class="loading"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--密码-->
|
||||
<div class="layui-form layui-form-pane layui-tab-item">
|
||||
<form action="/user/repass" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label for="L_nowpass" class="layui-form-label">当前密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_nowpass" name="nowpass" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_pass" class="layui-form-label">新密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_pass" name="pass" required lay-verify="required" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">6到16个字符</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="L_repass" class="layui-form-label">确认密码</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="password" id="L_repass" name="repass" required lay-verify="required|repass" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<button class="layui-btn" key="set-mine" lay-filter="set-changepwd" lay-submit>确认修改</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--账号绑定-->
|
||||
<div class="layui-form layui-form-pane layui-tab-item">
|
||||
<ul class="app-bind">
|
||||
<li class="fly-msg app-havebind">
|
||||
<i class="iconfont icon-qq"></i>
|
||||
<span>已成功绑定,您可以使用QQ帐号直接登录Fly社区,当然,您也可以</span>
|
||||
<a href="javascript:;" class="acc-unbind" type="qq_id">解除绑定</a>
|
||||
|
||||
<!-- <a href="" onclick="layer.msg('正在绑定微博QQ', {icon:16, shade: 0.1, time:0})" class="acc-bind" type="qq_id">立即绑定</a>
|
||||
<span>,即可使用QQ帐号登录Fly社区</span> -->
|
||||
</li>
|
||||
<li class="fly-msg">
|
||||
<i class="iconfont icon-weibo"></i>
|
||||
<!-- <span>已成功绑定,您可以使用微博直接登录Fly社区,当然,您也可以</span>
|
||||
<a href="javascript:;" class="acc-unbind" type="weibo_id">解除绑定</a> -->
|
||||
|
||||
<a href="" class="acc-weibo" type="weibo_id" onclick="layer.msg('正在绑定微博', {icon:16, shade: 0.1, time:0})" >立即绑定</a>
|
||||
<span>,即可使用微博帐号登录Fly社区</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
#end
|
||||
|
||||
#define js()
|
||||
<script>
|
||||
layui.cache.page = 'user';
|
||||
layui.cache.user = {
|
||||
username: '游客'
|
||||
,uid: -1
|
||||
,avatar: '../../res/images/avatar/00.jpg'
|
||||
,experience: 83
|
||||
,sex: '男'
|
||||
};
|
||||
layui.config({
|
||||
version: "2.0.0"
|
||||
,base: '../../res/mods/'
|
||||
}).extend({
|
||||
fly: 'index'
|
||||
}).use('fly',function () {
|
||||
var $ = layui.jquery, fly = layui.fly;
|
||||
|
||||
});
|
||||
</script>
|
||||
#end
|
@ -526,7 +526,7 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'face'], f
|
||||
});
|
||||
//退出登录
|
||||
$(".logout").on('click', function () {
|
||||
$.post("/os/user/logout",{},function (data) {
|
||||
$.post("/user/login/out",{},function (data) {
|
||||
location.reload();
|
||||
});
|
||||
});
|
||||
|
@ -284,13 +284,13 @@ layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
|
||||
form.on('submit(login)', function(data){
|
||||
var fdata = data.field;
|
||||
|
||||
$.post("/os/user/login",{
|
||||
bean:JSON.stringify({username:fdata.username, password:fdata.password})
|
||||
$.post("/user/login/check",{
|
||||
username:fdata.username
|
||||
,pwd:fdata.password
|
||||
,vercode:fdata.vercode
|
||||
},function (data) {
|
||||
data = JSON.parse(data);
|
||||
if(data.retcode != 0){
|
||||
layer.msg(data.retinfo);
|
||||
if(data.code != 1){
|
||||
layer.msg(data.msg);
|
||||
return false;
|
||||
}
|
||||
location.href = "/";
|
||||
@ -301,16 +301,13 @@ layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
|
||||
data = data.field;
|
||||
var bean = {
|
||||
email:data.email
|
||||
,password:data.pass
|
||||
,pwd:data.pass
|
||||
,nickname:data.nickname
|
||||
};
|
||||
|
||||
$.post("/os/user/register",{
|
||||
bean:JSON.stringify(bean)
|
||||
},function (data) {
|
||||
data = JSON.parse(data);
|
||||
if(data.retcode != 0){
|
||||
layer.msg(data.retinfo);
|
||||
$.post("/user/create",bean,function (data) {
|
||||
if(data.code != 1){
|
||||
layer.msg(data.msg);
|
||||
return false;
|
||||
}
|
||||
layer.msg("注册成功",{icon:16, shade: 0.1, time:0});
|
||||
@ -352,7 +349,7 @@ layui.define(['laypage', 'fly', 'element', 'flow'], function(exports){
|
||||
layer.msg('密码修改成功,重新登录', {
|
||||
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
||||
}, function(){
|
||||
$.post('/os/user/logout',{},function () {
|
||||
$.post('/user/login/out',{},function () {
|
||||
location.reload();
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user