diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f37d06f..2546700 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,7 +1,14 @@ class ProjectsController < ApplicationController before_action :authenticate - skip_before_action :verify_authenticity_token, :only => [:index,:create,:addUsers,:detail] + skip_before_action :verify_authenticity_token, :only => [ + :index, + :create, + :addUsers, + :detail, + :update, + :deleteUsers + ] #=============================================>获取我的项目列表,user_id保存在session中. def index @@ -32,80 +39,112 @@ class ProjectsController < ApplicationController #=============================================>创建项目 def create - - user_id = session[:user_id] - params_project = {content: params[:content],name: params[:name]} - project = Project.new(params_project) - if project.save - Projects_user.create(project_id:project.id,user_id:user_id) - render status: :created, nothing: true - else - render json: project.errors, status: :unprocessable_entity - end - #render :json => {:code => 0} - end + uid = session[:user_id] + project = Project.new(project_params) + if project.save + Projects_user.create(project_id:project.id,user_id:uid) + render status: :created, nothing: true + else + render json: project.errors, status: :unprocessable_entity + end + end #=============================================>项目添加用户 def addUsers - - uid = params[:user_id] - register = session[:user_id] - #username = params[:username] - pid = params[:project_id] - params_pu = {project_id: pid,user_id: uid} - pu = Projects_user.new(params_pu) - pu.save - content = User.find_by(id: register).name + "邀请您进入项目" + Project.find_by(id: pid).name - puts content - params_note = {user_id: uid,content: content,category: 2,project_id: pid} - note = Note.new(params_note) - note.save! - #puts Note.find_by(id: note.id).inspect - # now = Datetime.now - # note.created_at = now - # note.updated_at = now - note.save! - render :json => {:code => 0} + uid = User.find_by(email:params[:email]).id# 需要添加的用户 + register = session[:user_id]# 当前用户 + pid = params[:project_id] + # 检查该项目中是否已经有要添加的用户 + pu_exist=Projects_user.find_by(project_id:pid,user_id:uid) + if pu_exist.nil?# 不存在 + params_pu = {project_id: pid,user_id: uid} + pu = Projects_user.new(params_pu) + pu.save + + content = User.find_by(id: register).name + "邀请您进入项目" + Project.find_by(id: pid).name + puts content + params_note = {user_id: uid,content: content,category: 2,project_id: pid} + note = Note.new(params_note) + note.save! + render :json => {:code => 0} + else# 存在 + render json:current_user.errors, status: :unprocessable_entity + end + end + + #=============================================>项目删除用户 + def deleteUsers + uid = params[:user_id]# 需要添加的用户 + register = session[:user_id]# 当前用户 + pid = params[:project_id] + # 检查该项目中是否已经有要添加的用户 + projects_user=Projects_user.find_by(project_id:pid,user_id:uid) + if projects_user.nil?# 不存在 + render json:current_user.errors, status: :unprocessable_entity + end + # 存在 + puts projects_user.user_id + puts projects_user.project_id + Projects_user.where(project_id:pid,user_id:uid).delete_all + + content = User.find_by(id: register).name + "把您从项目" + Project.find_by(id: pid).name+"中删除" + puts content + params_note = {user_id: uid,content: content,category: 2,project_id: pid} + note = Note.new(params_note) + note.save! + + render :json => {:code => 0} end #=============================================>项目详情 def detail - #Todo - pid = params[:id] - project = Project.find_by(id: pid) - #uid = Projects_user.where(:project_id => pid) - users = [] - projects_users = Projects_user.where("project_id = ?",pid).all - - projects_users.each do |projects_user| - uid = projects_user.user_id - i = User.find_by(id: uid) - users += [{ - :nickname => i.name, - :id => i.id - }] - end - #puts users.inspect - # Users.find(uid).each do |i| - # users += [{ - # :nickname => i.name, - # :id => i.id - # }] - # end - render :json => { - :code => 0, - :data => { - :name => project.name, - :content => project.content, - :users => users + #Todo + pid = params[:id] + project = Project.find_by(id: pid) + #uid = Projects_user.where(:project_id => pid) + users = [] + projects_users = Projects_user.where("project_id = ?",pid).all + + projects_users.each do |projects_user| + uid = projects_user.user_id + i = User.find_by(id: uid) + users += [{ + :nickname => i.name, + :id => i.id + }] + end + #puts users.inspect + # Users.find(uid).each do |i| + # users += [{ + # :nickname => i.name, + # :id => i.id + # }] + # end + render :json => { + :code => 0, + :data => { + :name => project.name, + :content => project.content, + :users => users + } } - } end + + #=============================================>项目修改 + def update + project = Project.find_by(:id => params[:project][:id]) + if project.update(project_params) + render :json => {:code => 0} + else + render json:current_user.errors, status: :unprocessable_entity + end + end + private def project_params - params.require(:project).permit(:name,:content) + params.require(:project).permit(:name,:content,:id) end end \ No newline at end of file diff --git a/app/models/project.rb b/app/models/project.rb index 7adf60b..8ef1b5c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,7 +1,7 @@ class Project < ActiveRecord::Base has_and_belongs_to_many :users - validate :require_at_least_on_user,on: :update # 项目中最少要有一个用户 + validate :require_at_least_on_user,on: :update # 项目中最少要有一个用户 validates :name, presence: true, length: { minimum: 1, maximum: 50 }, uniqueness: true diff --git a/config/routes.rb b/config/routes.rb index 466397d..39c3e46 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -68,7 +68,9 @@ Rails.application.routes.draw do get 'projects' => 'projects#index' post 'projects' => 'projects#create' + patch 'projects' => 'projects#update' post 'projects/users' => 'projects#addUsers' + delete 'projects/users' => 'projects#deleteUsers' get 'projects/detail' => 'projects#detail' get 'notes/list' => 'notes#getNotesList' diff --git a/public/index.html b/public/index.html index 070f9bd..a1e7f1a 100644 --- a/public/index.html +++ b/public/index.html @@ -37,7 +37,7 @@ //3:通知 //4:修改个人信息 //5:项目详情 edited by cy - var src_array=["project_select","task","share","inform","alter_info","project_detail"]; + var src_array=["project_select","task","share","inform","user_detail","project_detail"]; var src="pages/"+src_array[seq]+".html"; if(seq == 5){ $("#cy_close").click(); diff --git a/public/pages/project_detail.html b/public/pages/project_detail.html index 09d598b..e90c312 100644 --- a/public/pages/project_detail.html +++ b/public/pages/project_detail.html @@ -62,14 +62,14 @@
- +
- +
@@ -77,7 +77,7 @@ @@ -92,7 +92,6 @@ -
@@ -104,14 +103,6 @@ - - 杨诏 - - - - 杨诏 - -
@@ -120,16 +111,15 @@
- +
- +
-
@@ -158,114 +148,143 @@ $.ajax({ type:"get", dataType:"json", - url:"/projects.json", + url:"/projects/detail.json", data:{ "id":parent.LoginUserInfo.selectProject }, statusCode: { 200: function(rpstr) {// 请求成功 - var robj = eval('('+rpstr+')'); - if(robj["code"]=="0"){ - $("#name").val(robj["name"]); - $("#address").val(robj["content"]); - var users = robj["users"]; + var data=rpstr.data; + if(rpstr.code=="0"){ + $("#project_name").val(data.name); + $("#project_content").val(data.content); + var users = data.users; for(var i = 0; i < users.length; ++i){ - var tduser = $("").text(users[i]["nickname"]); + var tduser = $("").text(users[i].nickname); var btn = $("").text("删除"); btn.attr("class","btn btn-primary btn-danger"); - btn.attr("onclick","cy_deleteUser("+users[i]['id']+")"); - var tdbtn = $("").append(btn); + btn.attr("onclick","deleteUser("+users[i].id+")"); + if( users[i].id!=parent.LoginUserInfo.id ){// 不能将自己从项目中删除 + var tdbtn = $("").append(btn); + } $("#cy_user_lists").children("tbody").append($("").append(tduser,tdbtn)); } } else{ - //todo + alert("服务器内部出错啦!"); } }, 401:function(){// 未授权 - + // TODO } } }); }); - function cy_addUser(){ - $.ajax({ - type:"post", - dataType:"json", - url:"/projects.json", - data:{ - "user_id":$("#cy_new_user"), - "project_id":parent.LoginUserInfo.selectProject - }, - statusCode: { - 200: function(rpstr) {// 请求成功 - var robj = eval('('+rpstr+')'); - if(robj["code"]==0){ - window.location.reload(); - } - else{ - //todo - } + function addUser(){ + var new_user_email=$("#new_user_email").val(); + if( new_user_email.length>0 ){ + // 邮箱对应的用户是否存在 + var exist; + $.ajax({ + type: "get", + dataType: "json", + url:"/users/emailExist.json", + async:false,// 强制同步 + data: { + "email":new_user_email }, - 401:function(){// 未授权 - + statusCode: { + 200: function(data) {// 请求成功 + //alert(data); + if( data=='1' ) + exist=true; + else + exist=false; + }, + 422:function(){ + alert("输入不符合要求,请重新输入!"); + }, + 401:function(){// 未授权 + alert("用户名或密码错误!"); + } } - } - }); + }); + if( exist ){// 邮箱存在 + $.ajax({ + type:"post", + dataType:"json", + async:false,// 强制同步 + url:"/projects/users.json", + data:{ + "email":new_user_email, + "project_id":parent.LoginUserInfo.selectProject + }, + statusCode: { + 200: function(response) {// 请求成功 + alert("添加成功!"); + window.location.reload(); + }, + 422:function(){ + alert("用户已经在项目中!") + } + } + }); + }else{// 邮箱不存在 + alert("该邮箱对应的用户不存在!") + } + }else{ + alert("请输入完整!"); + } } - function cy_deleteUser(id){ - return; + function deleteUser(id){ $.ajax({ type:"delete", dataType:"json", - url:"/projects.json", + url:"/projects/users.json", data:{ "project_id":parent.LoginUserInfo.selectProject, "user_id":id - //todo (write todo for find, need to be edited) }, statusCode: { - 200: function(rpstr) {// 请求成功 - var robj = eval('('+rpstr+')'); - if(robj["code"]==0){ - window.location.reload(); - } - else{ - //todo - } + 200: function(response) {// 请求成功 + alert("删除成功!"); + window.location.reload(); }, - 401:function(){// 未授权 - + 422:function(){ + alert("用户不在项目中!") } } }); } - function cy_submit(){ - $.ajax({ - type:"patch", - dataType:"json", - url:"/projects.json", - data:{ - "project_id":parent.LoginUserInfo.selectProject, - "name":$("#name").val(), - "content":$("#address").val() - //todo (write todo for find, need to be edited) - }, - statusCode: { - 200: function(rpstr) {// 请求成功 - var robj = eval('('+rpstr+')'); - if(robj["code"]==0){ - window.location.reload(); + function basic_alter(){ + var project_content=$("#project_content").val(); + var project_name=$("#project_name").val(); + if( project_name.length>0 && project_content.length>0 ){ + $.ajax({ + type:"patch", + dataType:"json", + url:"/projects.json", + data:{ + "project[id]":parent.LoginUserInfo.selectProject, + "project[name]":project_name, + "project[content]":project_content + }, + statusCode: { + 200: function(rpstr) {// 请求成功 + var robj = rpstr; + if(robj["code"]==0){ + alert("修改成功!"); + window.location.reload(); + } + }, + 422:function(){ + alert("输入不符合要求,请重新输入!"); } - else{ - //todo - } - }, - 401:function(){// 未授权 - - } - } - }); + } + }); + }else{ + alert("请输入完整!"); + } } diff --git a/public/pages/project_select.html b/public/pages/project_select.html index 24fd144..6702d99 100644 --- a/public/pages/project_select.html +++ b/public/pages/project_select.html @@ -188,6 +188,7 @@ var jstr = htmlobj.responseText; var robj = eval('('+jstr+')'); console.log(jstr); + var count=0; if(robj["code"]==0){ var data = robj["data"]; for(var i=data.length-1;i>=0;--i){ @@ -208,7 +209,7 @@ tp.find("#cy_template_shares_count").attr("id","cy_shares_count_"+id); tp.find("#cy_template_enterbtn").attr("id","cy_enter_"+id); - tp.find("#cy_template_bg").attr("class","widget-user-header "+bg_color[Math.floor(Math.random()*4)]); + tp.find("#cy_template_bg").attr("class","widget-user-header "+bg_color[(count++)%4]); tp.find("#cy_template_bg").attr("id","cy_bg_"+id); diff --git a/public/pages/alter_info.html b/public/pages/user_detail.html similarity index 96% rename from public/pages/alter_info.html rename to public/pages/user_detail.html index 5fb57d9..253c5ed 100644 --- a/public/pages/alter_info.html +++ b/public/pages/user_detail.html @@ -183,11 +183,12 @@ statusCode: { 200: function(data) {// 请求成功 alert("更新成功!"); - window.location.reload(); // alter - LoginUserInfo.name=name; - LoginUserInfo.email=email; - LoginUserInfo.phone=phone; + parent.LoginUserInfo.name=name; + parent.LoginUserInfo.email=email; + parent.LoginUserInfo.phone=phone; + window.location.reload(); + }, 401:function(){// 未授权 alert("未登录!");