commit
de46c5d9ca
@ -1 +0,0 @@
|
||||
{"access_token":"b_Pc60Dd5eyg_ut3cHbsjQO9EJJdj2Qj5F99o9LH9ltKSme7_FZ3Of22lWLL-K2V0siWzv-bd9PO0Dn-L1PBvIy9LhXa0qPVaFl6vTtZHR2kA8qjo1ps2ancya0t7KmzURGbAFAAXM","expires_in":7200,"got_token_at":1467976842}
|
@ -0,0 +1,181 @@
|
||||
#coding=utf-8
|
||||
|
||||
module Mobile
|
||||
module Apis
|
||||
class Projects < Grape::API
|
||||
|
||||
resources :projects do
|
||||
desc "获取项目列表"
|
||||
params do
|
||||
requires :token, type: String
|
||||
end
|
||||
get do
|
||||
authenticate!
|
||||
|
||||
ps = ProjectsService.new
|
||||
projects = ps.user_projects(current_user)
|
||||
present :data, projects, with: Mobile::Entities::Project,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
desc "返回单个项目"
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
requires :token,type:String
|
||||
end
|
||||
route_param :id do
|
||||
get do
|
||||
# course = Course.find(params[:id])
|
||||
ps = ProjectsService.new
|
||||
project = ps.show_project(params,current_user)
|
||||
|
||||
if project[:status] == 9
|
||||
{status:-1, message: '该项目不存在或已被删除啦' }
|
||||
else
|
||||
present :data, project, with: Mobile::Entities::Project,user: current_user
|
||||
present :status, 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "获取项目动态"
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
requires :token, type: String
|
||||
end
|
||||
post 'activities' do
|
||||
authenticate!
|
||||
|
||||
user = current_user
|
||||
|
||||
project_types = "('Message','Issue','Project')"
|
||||
activities = UserActivity.where("(container_type = 'Project' and container_id = #{params[:id]} and act_type in #{project_types})").order('updated_at desc')
|
||||
|
||||
page = params[:page] ? params[:page] : 0
|
||||
all_count = activities.count
|
||||
activities = activities.limit(10).offset(page * 10)
|
||||
count = activities.count
|
||||
present :data, activities, with: Mobile::Entities::Activity,user: user
|
||||
present :all_count, all_count
|
||||
present :count, count
|
||||
present :page, page
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
desc "获取项目成员"
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
requires :token, type: String
|
||||
end
|
||||
post 'members' do
|
||||
authenticate!
|
||||
|
||||
project = Project.find("#{params[:id]}")
|
||||
members = project.member_principals
|
||||
|
||||
master_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=3").all.sort
|
||||
|
||||
master_members.each do |m|
|
||||
if m.user_id == project.user_id
|
||||
master_members.delete(m)
|
||||
master_members.insert(0,m)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
develop_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=4").all.sort
|
||||
report_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=5").all.sort
|
||||
|
||||
present :master_members,master_members, with: Mobile::Entities::ProjectMember
|
||||
present :develop_members,develop_members, with: Mobile::Entities::ProjectMember
|
||||
present :report_members,report_members, with: Mobile::Entities::ProjectMember
|
||||
present :status, 0
|
||||
end
|
||||
|
||||
desc "获取项目某成员角色信息"
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
requires :token, type: String
|
||||
requires :user_id, type: Integer
|
||||
end
|
||||
post 'get_member_info' do
|
||||
authenticate!
|
||||
|
||||
project = Project.find("#{params[:id]}")
|
||||
|
||||
my_member = project.member_principals.where("users.id=#{params[:user_id]}").first
|
||||
|
||||
if my_member && my_member.roles[0]
|
||||
present :project_id,params[:id]
|
||||
present :user_id,params[:user_id]
|
||||
present :member_info,my_member, with: Mobile::Entities::ProjectMember
|
||||
present :status, 0
|
||||
else
|
||||
present :status, -1
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
desc "修改项目某成员角色信息"
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
requires :token, type: String
|
||||
requires :user_id, type: Integer
|
||||
requires :role_id, type: Integer
|
||||
end
|
||||
post 'edit_member_role' do
|
||||
authenticate!
|
||||
|
||||
project = Project.find("#{params[:id]}")
|
||||
|
||||
my_member = project.member_principals.where("users.id=#{current_user.id}").first
|
||||
|
||||
#3管理 4开发 5报告
|
||||
if !(my_member && my_member.roles[0] && my_member.roles[0].id == 3 ) || project.user_id == params[:user_id] || !(params[:role_id] == 3 || params[:role_id] == 4 || params[:role_id] == 5)
|
||||
present :status, -1
|
||||
else
|
||||
ps = ProjectsService.new
|
||||
|
||||
status = ps.modify_user_project_role params
|
||||
|
||||
present :status, status
|
||||
end
|
||||
end
|
||||
|
||||
desc "新建项目"
|
||||
params do
|
||||
requires :token, type: String
|
||||
requires :name, type: String, desc: '项目名称'
|
||||
end
|
||||
post 'create' do
|
||||
authenticate!
|
||||
|
||||
ps = ProjectsService.new
|
||||
|
||||
status = ps.createNewProject params,current_user
|
||||
|
||||
|
||||
present :status, 0
|
||||
|
||||
end
|
||||
|
||||
desc "加入项目"
|
||||
params do
|
||||
requires :token, type: String
|
||||
requires :invite_code, type: String, desc: '邀请码'
|
||||
end
|
||||
post "join" do
|
||||
authenticate!
|
||||
|
||||
# ps = ProjectsService.new
|
||||
# status = ps.join_project({role: "5", openid: params[:openid], invite_code: params[:invite_code]}, current_user)
|
||||
#
|
||||
# present :status, status
|
||||
|
||||
{status:-1, message: '该功能将在近日开放,敬请期待!' }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,32 @@
|
||||
module Mobile
|
||||
module Entities
|
||||
class Project < Grape::Entity
|
||||
expose :name
|
||||
expose :id
|
||||
expose :user_id
|
||||
# expose :invite_code
|
||||
# expose :qrcode
|
||||
expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options|
|
||||
current_user = options[:user]
|
||||
|
||||
my_member = instance.member_principals.where("users.id=#{current_user.id}").first
|
||||
can_setting = false
|
||||
if my_member && my_member.roles[0] && my_member.roles[0].id == 3
|
||||
can_setting = true
|
||||
end
|
||||
can_setting
|
||||
end
|
||||
|
||||
expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options|
|
||||
current_user = options[:user]
|
||||
|
||||
current_user.id == instance.user_id
|
||||
end
|
||||
|
||||
|
||||
expose :member_count, if: lambda { |instance, options| options[:user] } do |instance, options|
|
||||
instance.members.count
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,35 @@
|
||||
module Mobile
|
||||
module Entities
|
||||
class ProjectMember < Grape::Entity
|
||||
include Redmine::I18n
|
||||
include ApplicationHelper
|
||||
include ApiHelper
|
||||
def self.member_expose(f)
|
||||
expose f do |u,opt|
|
||||
if u.is_a?(Hash) && u.key?(f)
|
||||
u[f]
|
||||
elsif u.is_a?(::Member)
|
||||
if u.respond_to?(f)
|
||||
u.send(f)
|
||||
else
|
||||
case f
|
||||
when :roles_id
|
||||
u.roles[0].id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
expose :user, using: Mobile::Entities::User do |c, opt|
|
||||
if c.is_a?(::Member)
|
||||
c.user
|
||||
end
|
||||
end
|
||||
|
||||
member_expose :roles_id
|
||||
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
#coding=utf-8
|
||||
#
|
||||
module Mobile
|
||||
module Exceptions
|
||||
class AuthException < StandardError
|
||||
attr_reader :err_code, :msg
|
||||
def initialize(code, msg)
|
||||
@err_code = code
|
||||
@msg = msg
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,145 @@
|
||||
#coding=utf-8
|
||||
|
||||
class ProjectsService
|
||||
|
||||
include ApplicationHelper
|
||||
|
||||
#获取指定用户的项目列表
|
||||
def user_projects(user)
|
||||
projects = user.projects.not_deleted.select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updated_at ").order("updated_at desc")
|
||||
projects
|
||||
end
|
||||
|
||||
#显示项目
|
||||
def show_project(params,current_user)
|
||||
project = Project.find(params[:id])
|
||||
# project.generate_invite_code
|
||||
# project.generate_qrcode
|
||||
|
||||
project
|
||||
end
|
||||
|
||||
def send_wechat_create_project_notice user,project
|
||||
count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Project' and shield_id=#{project.id}").count
|
||||
Rails.logger.info "!!!!!!!!!!!!!!!!!!!!!!#{project}"
|
||||
if count == 0
|
||||
ws = WechatService.new
|
||||
title = "恭喜您创建项目成功。"
|
||||
ws.create_project_notice user.id, "create_project_notice", project.id,title, project.name, format_time(project.created_on),"点击查看项目详情。"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def createNewProject params,user
|
||||
status = -1
|
||||
issue_custom_fields = IssueCustomField.sorted.all
|
||||
trackers = Tracker.sorted.all
|
||||
project = Project.new
|
||||
|
||||
project[:name] = params[:name]
|
||||
project[:description] = ''
|
||||
project[:is_public] = '1' #公开
|
||||
project[:project_type] = 0
|
||||
project[:project_new_type] = 1
|
||||
project[:identifier] = Project.next_identifier if Setting.sequential_project_identifiers?
|
||||
|
||||
project.organization_id = params[:organization_id]
|
||||
project.user_id = user.id
|
||||
|
||||
# if validate_parent_id && @project.save
|
||||
if project.save
|
||||
p = Project.find("#{project.id}")
|
||||
send_wechat_create_project_notice user,p
|
||||
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
|
||||
m = Member.new(:user => user, :roles => [r])
|
||||
# project's score
|
||||
if ProjectScore.where("project_id=?", project.id).first.nil?
|
||||
ProjectScore.create(:project_id => project.id, :score => false)
|
||||
end
|
||||
# end
|
||||
project_info = ProjectInfo.new(:user_id => user.id, :project_id => project.id)
|
||||
user_grades = UserGrade.create(:user_id => user.id, :project_id => project.id)
|
||||
project_status = ProjectStatus.create(:project_id => project.id, :watchers_count => 0, :changesets_count => 0, :project_type => project.project_type,:grade => 0)
|
||||
project.members << m
|
||||
project.project_infos << project_info
|
||||
status = 0
|
||||
end
|
||||
status
|
||||
end
|
||||
|
||||
#修改项目成员角色
|
||||
def modify_user_project_role params
|
||||
status = -1
|
||||
|
||||
project = Project.find("#{params[:id]}")
|
||||
|
||||
member = project.member_principals.includes(:roles, :principal).where("user_id=?",params[:user_id]).first
|
||||
|
||||
if member
|
||||
member.member_roles[0].role_id = params[:role_id]
|
||||
|
||||
|
||||
role = Role.find(params[:role_id])
|
||||
if role.allowed_to?(:is_manager)
|
||||
projectInfo = ProjectInfo.new(:user_id => member.user_id, :project_id => project.id)
|
||||
projectInfo.save
|
||||
else
|
||||
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", member.user_id, project.id)
|
||||
if user_admin.size > 0
|
||||
user_admin.each do |user|
|
||||
user.destroy
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if member.member_roles[0].save
|
||||
status = 0
|
||||
end
|
||||
end
|
||||
status
|
||||
end
|
||||
|
||||
class JoinProjectError < Errors
|
||||
define_error [
|
||||
0, '加入成功',
|
||||
1, '您的邀请码不正确',
|
||||
2, '您还未登录',
|
||||
3, '您已经是该项目的管理人员',
|
||||
4, '您已经是该项目的开发人员',
|
||||
5, '您已经是该项目的报告人员',
|
||||
6, '该项目不存在或已被删除啦',
|
||||
'未知错误,请稍后再试'
|
||||
]
|
||||
end
|
||||
|
||||
def join_project params,current_user
|
||||
status = -1
|
||||
project = project.find_by_invite_code(params[:invite_code]) if params[:invite_code]
|
||||
|
||||
if project
|
||||
if project[:is_delete] == 1
|
||||
status = 6
|
||||
else
|
||||
if current_user.member_of?(project) #如果已经是成员
|
||||
member = project.member_principals.includes(:roles, :principal).where("user_id=?",current_user.id).first
|
||||
status = member.member_roles[0].role_id
|
||||
else
|
||||
if params[:invite_code].present?
|
||||
members = []
|
||||
members << Member.new(:role_ids => [5], :user_id => current_user.id)
|
||||
project.members << members
|
||||
projectInfo = ProjectInfo.new(:user_id => current_user.id, :project_id => project.id)
|
||||
projectInfo.save
|
||||
status = 0
|
||||
else
|
||||
status = 4
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
status = 4
|
||||
end
|
||||
status
|
||||
end
|
||||
|
||||
end
|
@ -1 +0,0 @@
|
||||
Subproject commit 222a9bdd72014f197baf2131ab71cc41660111ed
|
@ -0,0 +1,25 @@
|
||||
#coding=utf-8
|
||||
#
|
||||
|
||||
module Wechat
|
||||
class CacheFile
|
||||
class << self
|
||||
def cache
|
||||
if defined?(Rails)
|
||||
Rails.cache
|
||||
else
|
||||
File
|
||||
end
|
||||
end
|
||||
|
||||
def read(key)
|
||||
cache.read(key) || ''
|
||||
end
|
||||
|
||||
def write(key, val)
|
||||
cache.write(key, val)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,3 +0,0 @@
|
||||
[submodule "app/assets/javascripts/ckeditor-releases"]
|
||||
path = app/assets/javascripts/ckeditor-releases
|
||||
url = git://github.com/ckeditor/ckeditor-releases.git
|
@ -0,0 +1,21 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
<div ng-show="current_edit_member" class="post-container" style="padding-bottom:50px;">
|
||||
<div class="blue-title">角色变更</div>
|
||||
<div class="class-detail-row f13 c-grey3"><img ng-src="/images/wechat/{{current_edit_member.user.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle mt4" /><span class="fl mt10 ml10">{{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}</span><img ng-src="/images/wechat/{{current_edit_member.user.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt10" /><div class="cl"></div> </div>
|
||||
<div class="course-list-row f13 c-grey3 mt10"><span class="fl ml10">角色</span></div>
|
||||
<ul class="class-list f13 c-grey3">
|
||||
<li><span class="fl ml10 class-list-name hidden">教师</span><span ng-click="selectRole(9)" ng-class="['login-box', 'fr', 'mr10', 'mt12','img-circle', {'checked': current_edit_member.roles_id == 9}]"></span></li>
|
||||
<li><span class="fl ml10 class-list-name hidden">教辅</span><span ng-click="selectRole(7)" ng-class="['login-box', 'fr', 'mr10', 'mt12','img-circle', {'checked': current_edit_member.roles_id == 7}]"></span></li>
|
||||
<li class="border-bottom-none"><span class="fl ml10 class-list-name hidden">学生</span><span ng-click="selectRole(10)" ng-class="['login-box', 'fr', 'mr10', 'mt12','img-circle', {'checked': current_edit_member.roles_id == 10}]"></span></li>
|
||||
</ul>
|
||||
<div class="bottom-tab-wrap mt10">
|
||||
<a href="javascript:void(0);" ng-click="cancel()" class="weixin-tab c-grey border-top">取消</a>
|
||||
<a href="javascript:void(0);" ng-click="edit_member_role()" class="weixin-tab link-blue2 border-top">确定</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
@ -0,0 +1,21 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
<div ng-show="current_edit_member" class="post-container" style="padding-bottom:50px;">
|
||||
<div class="blue-title">角色变更</div>
|
||||
<div class="class-detail-row f13 c-grey3"><img ng-src="/images/wechat/{{current_edit_member.user.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle mt4" /><span class="fl mt10 ml10">{{current_edit_member.user.real_name == "" ? current_edit_member.user.name : current_edit_member.user.real_name}}</span><img ng-src="/images/wechat/{{current_edit_member.user.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt10" /><div class="cl"></div> </div>
|
||||
<div class="course-list-row f13 c-grey3 mt10"><span class="fl ml10">角色</span></div>
|
||||
<ul class="class-list f13 c-grey3">
|
||||
<li><span class="fl ml10 class-list-name hidden">管理人员</span><span ng-click="selectRole(3)" ng-class="['login-box', 'fr', 'mr10', 'mt12','img-circle', {'checked': current_edit_member.roles_id == 3}]"></span></li>
|
||||
<li><span class="fl ml10 class-list-name hidden">开发人员</span><span ng-click="selectRole(4)" ng-class="['login-box', 'fr', 'mr10', 'mt12','img-circle', {'checked': current_edit_member.roles_id == 4}]"></span></li>
|
||||
<li class="border-bottom-none"><span class="fl ml10 class-list-name hidden">报告人员</span><span ng-click="selectRole(5)" ng-class="['login-box', 'fr', 'mr10', 'mt12','img-circle', {'checked': current_edit_member.roles_id == 5}]"></span></li>
|
||||
</ul>
|
||||
<div class="bottom-tab-wrap mt10">
|
||||
<a href="javascript:void(0);" ng-click="cancel()" class="weixin-tab c-grey border-top">取消</a>
|
||||
<a href="javascript:void(0);" ng-click="edit_member_role()" class="weixin-tab link-blue2 border-top">确定</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
@ -0,0 +1,11 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
|
||||
<div class="blue-title">新建项目</div>
|
||||
<form novalidate name="classForm">
|
||||
<div class="course-list-row f13 c-grey3 mt30"><span class="fl ml15 c-grey3">项目</span><input class="new-class-input ml25" ng-model="project.name" required placeholder="例如:团队写作方法与机制研究" /></div>
|
||||
<a ng-click="newProject(classForm, project)" ng-class="['finish-btn', {'btn-disabled':!classForm.$valid} ]" >完成</a>
|
||||
</form>
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
@ -0,0 +1,132 @@
|
||||
<div class="post-container">
|
||||
<div loading-spinner></div>
|
||||
<div class="class-detail-name"><span class="course-name-width hidden inline-block">{{project.name}}</span><span ng-click="invite()" class="f13 blue-title-sub">邀请码</span></div>
|
||||
<div class="tab-wrap">
|
||||
<a ng-click="tab($index+1)" ng-repeat="menu in menus" id="class_tab_1" href="javascript:void(0);" ng-class="['weixin-tab', {'class-tab-active': currentTab == $index+1}]">{{menu}}</a>
|
||||
</div>
|
||||
|
||||
<div ng-class="{'undis': currentTab != 1}">
|
||||
<div ng-repeat="act in project_activities">
|
||||
<div ng-if="act.container_type=='Project' ">
|
||||
<div ng-if="act.act_type=='Issue'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div dataID = "{{act.act_id}}" ng-click="goDetail('issues',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl mr10"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="30" height="30" class="border-radius img-circle" /></div>
|
||||
<div class="post-dynamic-author hidden fl">
|
||||
<span ng-if="act.author.realname != ' '">{{act.author.realname}}</span>
|
||||
<span ng-if="act.author.realname == ' '">{{act.author.nickname}}</span>
|
||||
<img ng-if="act.author.gender == '0'" src="images/wechat/male.png" width="14" class="ml5" />
|
||||
<img ng-if="act.author.gender != '0'" src="images/wechat/female.png" width="14" class="ml5" />
|
||||
</div>
|
||||
<div class="post-dynamic-time fr f13">{{act.latest_update}}</div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-dynamic-title c-grey3 hidden mt12 fb">【问题】{{act.subject|safeHtml}}</div>
|
||||
<div class="post-content c-grey3 mt10 mb10">
|
||||
<div class="post-all-content" ng-bind-html="act.description|safeHtml"></div>
|
||||
<span class="mr15 f13 c-grey2">状态:{{act.issue_detail.issue_status}}</span> <span class="mr15 f13 c-grey2">优先级:{{act.issue_detail.issue_priority}}</span> <br />
|
||||
<span class="mr15 f13 c-grey2">指派给:{{act.issue_detail.issue_assigned_to}}</span> <span class="mr15 f13 c-grey2">完成度:{{act.issue_detail.done_ratio}}%</span>
|
||||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="post-dynamic-from hidden fl c-grey3">来源: <span class="c-blue">{{act.course_project_name}}</span></div>
|
||||
<div class="fr f13">
|
||||
<div ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>赞</span></div>
|
||||
<div ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{act.praise_count}}</span></div>
|
||||
<div ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{act.praise_count}}</span></div>
|
||||
</div>
|
||||
<div class="fr mr25 f13">
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)"><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)"><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div ng-if="act.act_type=='Message'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div dataID = "{{act.act_id}}" ng-click="goDetail('project_discussion',act.act_id, act.id)" id="act_{{act.id}}">
|
||||
<div class="post-avatar fl mr10"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="30" height="30" class="border-radius img-circle" /></div>
|
||||
<div class="post-dynamic-author hidden fl">
|
||||
<span ng-if="act.author.realname != ' '">{{act.author.realname}}</span>
|
||||
<span ng-if="act.author.realname == ' '">{{act.author.nickname}}</span>
|
||||
<img ng-if="act.author.gender == '0'" src="images/wechat/male.png" width="14" class="ml5" />
|
||||
<img ng-if="act.author.gender != '0'" src="images/wechat/female.png" width="14" class="ml5" />
|
||||
</div>
|
||||
<div class="post-dynamic-time fr f13">{{act.latest_update}}</div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-dynamic-title c-grey3 hidden mt12 fb">【帖子】{{act.subject|safeHtml}}</div>
|
||||
<div class="post-content c-grey3 mt10 mb10">
|
||||
<div class="post-all-content" ng-bind-html="act.description|safeHtml"></div>
|
||||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="post-dynamic-from hidden fl c-grey3">来源: <span class="c-blue">{{act.course_project_name}}</span></div>
|
||||
<div class="fr f13">
|
||||
<div ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>赞</span></div>
|
||||
<div ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{act.praise_count}}</span></div>
|
||||
<div ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span>{{act.praise_count}}</span></div>
|
||||
</div>
|
||||
<div class="fr mr25 f13">
|
||||
<a ng-if="!act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)"><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||
<a ng-if="act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)"><img src="/images/wechat/w_reply.png" width="20" style="vertical-align:top; margin-top:2px;" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||
</div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="act.act_type=='Project'">
|
||||
<div class="post-container">
|
||||
<div class="post-wrapper">
|
||||
<div class="post-main">
|
||||
<div class="post-avatar fl mr10"><img ng-src="{{replaceUrl(act.author.img_url)}}" width="30" height="30" class="border-radius img-circle" /></div>
|
||||
<div class="post-title hidden mb5"><span class="c-grey3 f13 fb mr10">{{act.author.realname}}</span>创建了<span class="c-grey3 f13 fb ml10">{{act.course_project_name}} | 项目</span></div>
|
||||
<div class="post-title hidden"><span class="mr10">{{act.latest_update}}</span></div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="project_has_more">
|
||||
<div id="more_project_activities" class="more-events mt10" ng-click="getActivities(project_activities_page+1);">更多</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-class="{'undis': currentTab != 2}">
|
||||
<div class="class-search-wrap">
|
||||
<div class="class-search-inner"> <img src="/images/wechat/search.png" width="18" class="class-search-icon" />
|
||||
<input class="class-detail-search" ng-model="searchText" placeholder="输入关键词进行搜索" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="member-banner f13 c-grey3">管理人员({{project_master_members.length}})</div>
|
||||
<div class="class-member-row f13 c-grey3" ng-repeat="master in project_master_members|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{master.user.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle" /><span class="fl ml10 mt5">{{master.user.real_name == "" ? master.user.name : master.user.real_name }}</span><span class="fr mr10 c-grey2">{{teacher.role_name|identify}}</span><img ng-src="/images/wechat/{{master.user.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt5" />
|
||||
<img src="/images/wechat/setting.png" ng-show = "master.user.id != project.user_id && project.can_setting" width="15" class="class-list-setting" ng-click="onSetting(master)" />
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="member-banner f13 mt10 c-grey3">开发人员({{project_develop_members.length}})</div>
|
||||
<div class="class-member-row f13 c-grey3" ng-repeat="develop in project_develop_members|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{develop.user.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle" /><span class="fl ml10 mt5">{{develop.user.real_name == "" ? develop.user.name : develop.user.real_name}}</span><img ng-src="/images/wechat/{{develop.user.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt5" />
|
||||
<img src="/images/wechat/setting.png" ng-show = "master.user.id != project.user_id && project.can_setting " width="15" class="class-list-setting" ng-click="onSetting(develop)" />
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="member-banner f13 mt10 c-grey3">报告人员({{project_report_members.length}})</div>
|
||||
<div class="class-member-row f13 c-grey3" ng-repeat="report in project_report_members|filter:searchText">
|
||||
<img ng-src="/images/wechat/{{report.user.gender==0 ? 'male' : 'female'}}.jpg" width="30" class="fl ml10 img-circle" /><span class="fl ml10 mt5">{{report.user.real_name == "" ? report.user.name : report.user.real_name}}</span><img ng-src="/images/wechat/{{report.user.gender==0 ? 'male' : 'female'}}.png" width="15" class="fl ml10 mt5" />
|
||||
<img src="/images/wechat/setting.png" ng-show = "master.user.id != project.user_id && project.can_setting " width="15" class="class-list-setting" ng-click="onSetting(report)" />
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<my-alert message="alertService.message" title="alertService.title" visible="alertService.visible" cb="alertService.cb"></my-alert>
|
||||
</div>
|
@ -0,0 +1,38 @@
|
||||
<div class="post-container" style="padding-bottom: 50px;">
|
||||
<div loading-spinner></div>
|
||||
<div class="blue-title">项目列表</div>
|
||||
|
||||
<div>
|
||||
<div class="course-diff-row"><span class="c-blue f13 ml10">我创建的项目</span></div>
|
||||
<div ng-repeat="project in projects" style="position:relative;">
|
||||
<div ng-click="goProject(project.id)" ng-show="project.is_creator" class="course-list-row f13 c-grey3 border-top-none">
|
||||
<span class="fl ml15 class-list-name hidden">{{project.name}}</span>
|
||||
<span class="fr c-grey4 mr10">></span>
|
||||
<span class="students-amount f12 fr mt10 mr5">{{project.member_count}}人</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<div class="course-diff-row mt10"><span class="c-blue f13 ml10">我参与的项目</span></div>
|
||||
<div ng-click="goProject(project.id)" ng-repeat="project in projects" style="position:relative;">
|
||||
<div ng-show="!project.is_creator" class="course-list-row f13 c-grey3 border-top-none">
|
||||
<span class="fl ml15 class-list-name hidden">{{project.name}}</span>
|
||||
<span class="fr c-grey4 mr10">></span>
|
||||
<span class="students-amount f12 fr mt10 mr5">{{project.member_count}}人</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bottom-tab-wrap mt10">
|
||||
<a ng-click="newProject()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">新建项目</a>
|
||||
<a ng-click="joinProject()" href="javascript:void(0);" class="weixin-tab link-blue2 border-top">加入项目</a>
|
||||
</div>
|
||||
|
||||
<my-alert message="alertService_1.message" title="alertService_1.title" visible="alertService_1.visible" cb="alertService_1.cb"></my-alert>
|
||||
<my-alert3 message="alertService_3.message" title="alertService_3.title" visible="alertService_3.visible" cb="alertService_3.cb" invite="alertService_3.invite" ></my-alert3>
|
||||
</div>
|
@ -0,0 +1,30 @@
|
||||
<div ng-if="journal.parents_reply_top[i]" class="mult-reply-container">
|
||||
<!--<ul ng-if="journal.parents_reply_top[i+1]" ng-include="'comment_reply'" ng-init="i=i+1;journal=journal"></ul>-->
|
||||
|
||||
<ul ng-if="journal.parents_reply_top[i+1]" ng-include="'comment_reply'" ng-init="i=i+1;journal=journal"></ul>
|
||||
<div class="ml5 mr5">
|
||||
<div class="post-reply-author hidden fl ng-binding">
|
||||
{{journal.parents_reply_top[i].user.realname}}
|
||||
</div>
|
||||
<div class="post-reply-time fr f12">{{journal.parents_reply_top[i].lasted_comment}}</div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-reply-content c-grey2 mt5 border-bottom-none" ng-bind-html="journal.parents_reply_top[i].content|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script id="comment_reply" type="text/ng-template">
|
||||
<div class="mult-reply-container mb10">
|
||||
<ul ng-if="journal.parents_reply_top[i+1]" ng-include="'comment_reply'" ng-init="i=i+1;journal=journal"></ul>
|
||||
<div class="ml5 mr5">
|
||||
<div class="post-reply-author hidden fl ng-binding">
|
||||
{{journal.parents_reply_top[i].user.realname}}
|
||||
</div>
|
||||
<div class="post-reply-time fr f12">{{journal.parents_reply_top[i].lasted_comment}}</div>
|
||||
<div class="cl"></div>
|
||||
<div class="post-reply-content c-grey2 mt5 border-bottom-none" ng-bind-html="journal.parents_reply_top[i].content|safeHtml"></div>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
@ -0,0 +1,72 @@
|
||||
|
||||
|
||||
app.controller('EditClassMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){
|
||||
var vm = $scope;
|
||||
|
||||
// vm.current_edit_member = rms.get('current_edit_member');
|
||||
vm.current_edit_member = null;
|
||||
|
||||
vm.alertService = alertService.create();
|
||||
|
||||
var course_id = $routeParams.id;
|
||||
var user_id = $routeParams.user_id;
|
||||
if(!vm.current_edit_member){
|
||||
$http.post(config.apiUrl+'courses/get_member_info', {
|
||||
token: auth.token(),
|
||||
id: course_id,
|
||||
user_id:user_id
|
||||
}).then(function(response){
|
||||
if(response.data.status!=0){
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
} else {
|
||||
course_id = response.data.course_id;
|
||||
user_id = response.data.user_id;
|
||||
vm.current_edit_member = response.data.member_info;
|
||||
vm.current_roles_id = vm.current_edit_member.roles_id;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
console.log(vm.current_edit_member);
|
||||
|
||||
vm.cancel = function(){
|
||||
vm.alertService.showMessage('提示', '您确定不对角色进行变更吗?', function(){
|
||||
// rms.save("project_master_members",[]);
|
||||
// rms.save("project_develop_members",[]);
|
||||
// rms.save("project_report_members",[]);
|
||||
window.history.back();
|
||||
// $location.path("/project").search({id: project_id});
|
||||
});
|
||||
};
|
||||
|
||||
vm.edit_member_role = function(){
|
||||
if(vm.current_roles_id == vm.current_edit_member.roles_id){
|
||||
vm.alertService.showMessage('提示', "该用户当前已是该角色");
|
||||
return;
|
||||
}
|
||||
|
||||
$http.post(config.apiUrl+'courses/edit_member_role', {
|
||||
token: auth.token(),
|
||||
id: course_id,
|
||||
user_id:vm.current_edit_member.user.id,
|
||||
role_id:vm.current_edit_member.roles_id
|
||||
}).then(function(response){
|
||||
if(response.data.status!=0){
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', '修改角色成功', function(){
|
||||
// window.history.back();
|
||||
|
||||
$location.path("/class").search({id: course_id,tag:1});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
vm.selectRole = function(role_id){
|
||||
vm.current_edit_member.roles_id = role_id;
|
||||
}
|
||||
|
||||
}] );
|
@ -0,0 +1,80 @@
|
||||
|
||||
|
||||
app.controller('EditProjectMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){
|
||||
var vm = $scope;
|
||||
|
||||
// vm.current_edit_member = rms.get('current_edit_member');
|
||||
|
||||
vm.current_edit_member = null;
|
||||
|
||||
vm.alertService = alertService.create();
|
||||
|
||||
var project_id = $routeParams.id;
|
||||
var user_id = $routeParams.user_id;
|
||||
if(!vm.current_edit_member){
|
||||
$http.post(config.apiUrl+'projects/get_member_info', {
|
||||
token: auth.token(),
|
||||
id: project_id,
|
||||
user_id:user_id
|
||||
}).then(function(response){
|
||||
if(response.data.status!=0){
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
} else {
|
||||
project_id = response.data.project_id;
|
||||
user_id = response.data.user_id;
|
||||
vm.current_edit_member = response.data.member_info;
|
||||
vm.current_roles_id = vm.current_edit_member.roles_id;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
console.log(vm.current_edit_member);
|
||||
|
||||
vm.cancel = function(){
|
||||
vm.alertService.showMessage('提示', '您确定不对角色进行变更吗?', function(){
|
||||
// rms.save("project_master_members",[]);
|
||||
// rms.save("project_develop_members",[]);
|
||||
// rms.save("project_report_members",[]);
|
||||
window.history.back();
|
||||
// $location.path("/project").search({id: project_id});
|
||||
});
|
||||
};
|
||||
|
||||
vm.edit_member_role = function(){
|
||||
if(vm.current_roles_id == vm.current_edit_member.roles_id){
|
||||
vm.alertService.showMessage('提示', "该用户当前已是该角色");
|
||||
return;
|
||||
}
|
||||
|
||||
$http.post(config.apiUrl+'projects/edit_member_role', {
|
||||
token: auth.token(),
|
||||
id: project_id,
|
||||
user_id:vm.current_edit_member.user.id,
|
||||
role_id:vm.current_edit_member.roles_id
|
||||
}).then(function(response){
|
||||
if(response.data.status!=0){
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', '修改角色成功', function(){
|
||||
rms.save('project_activities_page',0);
|
||||
rms.save("project_activities",[]);
|
||||
rms.save("project_has_more",false);
|
||||
rms.save("project",null);
|
||||
rms.save("project_master_members",[]);
|
||||
rms.save("project_develop_members",[]);
|
||||
rms.save("project_report_members",[]);
|
||||
rms.save('tab_num',null);
|
||||
// window.history.back();
|
||||
$location.path("/project").search({id: project_id,tag:1});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
|
||||
vm.selectRole = function(role_id){
|
||||
vm.current_edit_member.roles_id = role_id;
|
||||
}
|
||||
|
||||
}] );
|
@ -0,0 +1,47 @@
|
||||
|
||||
|
||||
app.controller('NewProjectController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','rms', function($scope, $http, auth, config, alertService, $location,rms){
|
||||
var vm = $scope;
|
||||
|
||||
vm.alertService = alertService.create();
|
||||
|
||||
vm.project = {
|
||||
name:""
|
||||
};
|
||||
|
||||
vm.addClass = function(){
|
||||
vm.syllabus.courses.push({});
|
||||
};
|
||||
|
||||
vm.deleteClass = function(index){
|
||||
vm.syllabus.courses.splice(index, 1);
|
||||
}
|
||||
|
||||
vm.newProject = function (frm, project) {
|
||||
frm.$setSubmitted();
|
||||
console.log(project);
|
||||
|
||||
if(!frm.$valid){
|
||||
console.log(frm.$error);
|
||||
return;
|
||||
}
|
||||
|
||||
$http.post(config.apiUrl+"projects/create", {
|
||||
token: auth.token(),
|
||||
name: project.name
|
||||
}).then(function(response){
|
||||
if(response.data.status!=0){
|
||||
vm.alertService.showMessage('出错了', response.data.message);
|
||||
} else {
|
||||
vm.alertService.showMessage('提示', '新建项目成功', function(){
|
||||
// window.history.back();
|
||||
rms.save('projects',[]);
|
||||
$location.path("/project_list");
|
||||
});
|
||||
}
|
||||
console.log(response.data.data);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}] );
|
@ -0,0 +1,204 @@
|
||||
app.controller('ProjectController', ['$scope', 'config','$http','$timeout', 'auth','$location','$routeParams','alertService','rms','common', function($scope, config, $http,$timeout, auth, $location, $routeParams,alertService,rms,common){
|
||||
$scope.replaceUrl = function(url){
|
||||
return url;
|
||||
};
|
||||
|
||||
var vm = $scope;
|
||||
var projectid = $routeParams.id;
|
||||
var tag = $routeParams.tag;
|
||||
|
||||
vm.project_activities_page = rms.get('project_activities_page') || 0;
|
||||
vm.project_activities = rms.get("project_activities") || [];
|
||||
vm.project_has_more = rms.get("project_has_more");
|
||||
|
||||
vm.project = rms.get("project") || null;
|
||||
|
||||
|
||||
// vm.project_members_page = rms.get('project_members_page') || 0;
|
||||
vm.project_master_members = rms.get("project_master_members") || [];
|
||||
vm.project_develop_members = rms.get("project_develop_members") || [];
|
||||
vm.project_report_members = rms.get("project_report_members") || [];
|
||||
|
||||
// vm.project_members_has_more = rms.get("project_members_has_more");
|
||||
|
||||
vm.alertService = alertService.create();
|
||||
|
||||
//跳入邀请界面
|
||||
vm.invite = function(){
|
||||
vm.alertService.showMessage('提示', "该功能将在近日开放,敬请期待!");
|
||||
|
||||
|
||||
// $location.path("/project_invite_code").search({id: projectid});
|
||||
};
|
||||
|
||||
//获取项目动态
|
||||
vm.getActivities = function(page){
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: apiUrl + "projects/activities?id=" + projectid,
|
||||
data:{token:auth.token(),page:page}
|
||||
}).then(function successCallback(response) {
|
||||
console.log(response.data);
|
||||
if(response.data.status == 0){
|
||||
vm.project_activities_page = response.data.page;
|
||||
if(response.data.page > 0)
|
||||
{
|
||||
vm.project_activities = vm.project_activities.concat(response.data.data);
|
||||
}
|
||||
else{
|
||||
vm.project_activities = response.data.data;
|
||||
vm.project_activities_page = 0;
|
||||
vm.project_has_more = (response.data.count + response.data.page * 10) < response.data.all_count;
|
||||
}
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
|
||||
|
||||
}, function errorCallback(response) {
|
||||
});
|
||||
}
|
||||
|
||||
vm.getMembers = function(page){
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: apiUrl + "projects/members?id=" + projectid,
|
||||
data:{token:auth.token(),page:page}
|
||||
}).then(function successCallback(response) {
|
||||
console.log(response.data);
|
||||
if(response.data.status == 0){
|
||||
// vm.project_members_page = response.data.page;
|
||||
// if(response.data.page > 0)
|
||||
// {
|
||||
// vm.project_members = vm.project_members.concat(response.data.data);
|
||||
// }
|
||||
// else{
|
||||
// vm.project_members = response.data.data;
|
||||
// vm.project_members_page = 0;
|
||||
// vm.project_members_has_more = (response.data.count + response.data.page * 10) < response.data.all_count;
|
||||
// }
|
||||
vm.project_master_members = response.data.master_members;
|
||||
vm.project_develop_members = response.data.develop_members;
|
||||
vm.project_report_members = response.data.report_members;
|
||||
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message);
|
||||
}
|
||||
|
||||
|
||||
}, function errorCallback(response) {
|
||||
});
|
||||
}
|
||||
|
||||
//跳到详情页
|
||||
vm.goDetail = function(type, act_id,id){
|
||||
rms.save("yoffset", document.documentElement.scrollTop);
|
||||
rms.save("project_activities",vm.project_activities);
|
||||
rms.save("project",vm.project);
|
||||
$location.path('/'+type+'/'+act_id);
|
||||
}
|
||||
|
||||
//切换 按钮
|
||||
vm.tab = function(index){
|
||||
vm.currentTab = index;
|
||||
vm.searchText = '';
|
||||
|
||||
if(index == 1 && vm.project_activities.length <= 0 ){
|
||||
vm.getActivities(0);
|
||||
}
|
||||
else if(index == 2 && vm.project_master_members.length <= 0){
|
||||
vm.getMembers(0);
|
||||
}
|
||||
|
||||
rms.save("tab_num",vm.currentTab);
|
||||
};
|
||||
|
||||
//初始化TAB按钮
|
||||
var resetMenu = function(can_setting){
|
||||
if(can_setting){
|
||||
vm.menus = ["项目动态", "成员管理"];
|
||||
} else {
|
||||
vm.menus = ['项目动态', "我的伙伴"];
|
||||
}
|
||||
}
|
||||
if(vm.project){
|
||||
resetMenu(vm.project.can_setting);
|
||||
}
|
||||
|
||||
vm.currentTab = rms.get('tab_num');
|
||||
|
||||
//
|
||||
if(!vm.currentTab){
|
||||
$http.get(config.apiUrl+ 'projects/'+projectid+"?token="+auth.token()).then(
|
||||
function(response) {
|
||||
console.log(response.data);
|
||||
|
||||
if (response.data.status == 0){
|
||||
vm.project = response.data.data;
|
||||
resetMenu(vm.project.can_setting);
|
||||
if(tag){
|
||||
vm.tab(2);
|
||||
tag = null;
|
||||
}
|
||||
else{
|
||||
vm.tab(1);
|
||||
}
|
||||
}
|
||||
else{
|
||||
vm.alertService.showMessage('提示', response.data.message,function(){
|
||||
window.history.back();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
);
|
||||
vm.currentTab = 1;
|
||||
vm.tab(vm.currentTab);
|
||||
} else {
|
||||
$timeout(function(){
|
||||
window.scrollTo(0, rms.get("yoffset"));
|
||||
});
|
||||
}
|
||||
|
||||
vm.addPraise = function(act){
|
||||
for(var i in vm.project_activities){
|
||||
if(vm.project_activities[i].act_id == act.act_id){
|
||||
vm.project_activities[i].praise_count += 1;
|
||||
vm.project_activities[i].has_praise = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
common.addCommonPraise(act);
|
||||
};
|
||||
|
||||
vm.decreasePraise = function(act){
|
||||
for(var i in vm.project_activities){
|
||||
if(vm.project_activities[i].act_id == act.act_id){
|
||||
vm.project_activities[i].praise_count -= 1;
|
||||
vm.project_activities[i].has_praise = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
common.decreaseCommonPraise(act);
|
||||
};
|
||||
|
||||
vm.onSetting = function(data){
|
||||
rms.save('current_edit_member', data);
|
||||
|
||||
rms.save('project_activities_page',vm.project_activities_page);
|
||||
rms.save("project_activities",vm.project_activities);
|
||||
rms.save("project_has_more",vm.project_has_more);
|
||||
|
||||
rms.save("project",vm.project);
|
||||
rms.save("project_master_members",vm.project_master_members);
|
||||
rms.save("project_develop_members",vm.project_develop_members);
|
||||
rms.save("project_report_members",vm.project_report_members);
|
||||
|
||||
$location.path("/edit_project_member").search({id: projectid,user_id: data.user.id});
|
||||
};
|
||||
|
||||
}]);
|
@ -0,0 +1,79 @@
|
||||
/**
|
||||
* Created by guange on 16/6/27.
|
||||
*/
|
||||
|
||||
|
||||
app.controller('ProjectListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms',
|
||||
function ($scope, config, auth, $http, $location, alertService,rms) {
|
||||
var vm = $scope;
|
||||
// vm.projects = rms.get('projects') || [];
|
||||
vm.projects = [];
|
||||
|
||||
vm.alertService_1 = alertService.create();
|
||||
vm.alertService_3 = alertService.create();
|
||||
|
||||
var loadProjectList = function () {
|
||||
$http.get(config.apiUrl + "projects?token=" + auth.token()).then(
|
||||
function (response) {
|
||||
console.log(response.data);
|
||||
vm.projects = response.data.data;
|
||||
rms.save('projects', vm.projects);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
if(vm.projects.length<=0){
|
||||
loadProjectList();
|
||||
}
|
||||
|
||||
vm.goProject = function (project_id) {
|
||||
|
||||
rms.save('project_activities_page',0);
|
||||
rms.save("project_activities",[]);
|
||||
rms.save("project_has_more",false);
|
||||
rms.save("project",null);
|
||||
rms.save('project_members_page',0);
|
||||
rms.save("project_members",[]);
|
||||
rms.save("project_members_has_more",false);
|
||||
rms.save('tab_num',null);
|
||||
console.log(project_id);
|
||||
$location.path("/project").search({id: project_id});
|
||||
};
|
||||
|
||||
vm.newProject = function () {
|
||||
$location.path("/new_project");
|
||||
};
|
||||
|
||||
vm.joinProject = function () {
|
||||
vm.alertService_1.showMessage('提示', "该功能将在近日开放,敬请期待!");
|
||||
|
||||
// vm.alertService_3.showMessage('提示', '请输入6位项目邀请码(不区分大小写)', function(){
|
||||
// if (vm.alertService_3.invite && vm.alertService_3.invite.length == 6) {
|
||||
// $http.post(config.apiUrl + "projects/join", {
|
||||
// token: auth.token(),
|
||||
// invite_code: vm.alertService_3.invite
|
||||
// }).then(function (response) {
|
||||
// console.log(response.data);
|
||||
// if (response.data.status != 0) {
|
||||
// vm.alertService_1.showMessage('提示', response.data.message);
|
||||
// } else {
|
||||
// vm.alertService_1.showMessage('提示', '加入项目成功');
|
||||
// vm.alertService_3.invite = "";
|
||||
// loadProjectList();
|
||||
// }
|
||||
// });
|
||||
// } else {
|
||||
// if(vm.alertService_3.invite){
|
||||
// vm.alertService_1.showMessage('提示', '邀请码格式不正确');
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
};
|
||||
|
||||
vm.onSetting = function (project) {
|
||||
console.log(project);
|
||||
rms.save('current_edit_project', project);
|
||||
$location.path("/edit_project").search({id: project.id});
|
||||
}
|
||||
|
||||
}]);
|
@ -0,0 +1,9 @@
|
||||
app.directive('commentReply', ['config', function(config){
|
||||
return {
|
||||
templateUrl: config.rootPath+ 'templates/comment_reply.html',
|
||||
scope: {
|
||||
i: "=",
|
||||
journal: "="
|
||||
}
|
||||
}
|
||||
}]);
|
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Created by Tim on 7/22/16.
|
||||
*/
|
||||
app.directive('ellipsisShow',["$timeout",function(timer){
|
||||
return{
|
||||
restrict: 'A',
|
||||
scope: {},
|
||||
link: function(scope, element){
|
||||
timer(function() {
|
||||
var textContent = element.text();
|
||||
console.log(textContent);
|
||||
//while (textHeight > 100) {
|
||||
// element.text(element.text().replace(/(\s)*([a-zA-Z0-9]+|\W)(\.\.\.)?$/, "..."));
|
||||
//}
|
||||
});
|
||||
}
|
||||
}
|
||||
}]);
|
Loading…
Reference in new issue