educode_sales 1.10.48 → 1.10.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/educode_sales/modules/easyeditor/easyeditor.css +130 -0
- data/app/assets/stylesheets/educode_sales/modules/easyeditor/fangge-style.css +4 -0
- data/app/controllers/educode_sales/application_controller.rb +12 -0
- data/app/controllers/educode_sales/business_courses_controller.rb +230 -0
- data/app/controllers/educode_sales/home_controller.rb +7 -0
- data/app/controllers/educode_sales/shixun_dectects_controller.rb +111 -0
- data/app/controllers/educode_sales/shixuns_controller.rb +157 -0
- data/app/controllers/educode_sales/subject_trends_controller.rb +937 -0
- data/app/controllers/educode_sales/subjects_controller.rb +202 -0
- data/app/helpers/educode_sales/application_helper.rb +8 -0
- data/app/helpers/educode_sales/business_courses_helper.rb +37 -0
- data/app/helpers/educode_sales/subject_helper.rb +29 -0
- data/app/models/educode_sales/business.rb +22 -0
- data/app/models/educode_sales/business_deliver_subject.rb +48 -0
- data/app/models/educode_sales/business_subject.rb +62 -0
- data/app/models/educode_sales/business_subject_shixun.rb +46 -0
- data/app/models/educode_sales/business_subject_staff.rb +35 -0
- data/app/models/educode_sales/permission.rb +2 -1
- data/app/models/educode_sales/shixun_dectect.rb +12 -0
- data/app/views/educode_sales/business_courses/edit.html.erb +148 -0
- data/app/views/educode_sales/business_courses/index.html.erb +312 -0
- data/app/views/educode_sales/business_courses/index.json.jbuilder +16 -0
- data/app/views/educode_sales/business_courses/list_shixuns.html.erb +224 -0
- data/app/views/educode_sales/business_courses/list_shixuns.json.jbuilder +17 -0
- data/app/views/educode_sales/business_courses/list_subjects.html.erb +217 -0
- data/app/views/educode_sales/business_courses/list_subjects.json.jbuilder +12 -0
- data/app/views/educode_sales/business_courses/new.html.erb +212 -0
- data/app/views/educode_sales/shixun_dectects/index.html.erb +466 -0
- data/app/views/educode_sales/shixun_dectects/index.json.jbuilder +22 -0
- data/app/views/educode_sales/shixun_dectects/markdown.html.erb +60 -0
- data/app/views/educode_sales/shixuns/edit.html.erb +186 -0
- data/app/views/educode_sales/shixuns/index.html.erb +513 -0
- data/app/views/educode_sales/shixuns/index.json.jbuilder +22 -0
- data/app/views/educode_sales/shixuns/new.html.erb +251 -0
- data/app/views/educode_sales/subject_trends/trends.html.erb +1074 -0
- data/app/views/educode_sales/subjects/edit.html.erb +86 -0
- data/app/views/educode_sales/subjects/index.html.erb +247 -0
- data/app/views/educode_sales/subjects/index.json.jbuilder +16 -0
- data/app/views/educode_sales/subjects/list_shixuns.html.erb +228 -0
- data/app/views/educode_sales/subjects/list_shixuns.json.jbuilder +17 -0
- data/app/views/educode_sales/subjects/new.html.erb +254 -0
- data/app/views/layouts/educode_sales/application.html.erb +38 -0
- data/config/routes.rb +37 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +37 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d727604aed61afc7d3df20bbfdb069c2c14d10a205e6a95c6b16af0171f2363
|
4
|
+
data.tar.gz: 0353401db95554ddff072354913db810537640035ded808cf3bac648dbfc9fb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8adacfd640268d7b7e0cd88b6ad1687caaf143e83e75d6025e433ad42f7b09723e6c8d3b7bfdca71fc4af362bf1ab862d8a252b023cd545eae4e88bdcc0fcad
|
7
|
+
data.tar.gz: 8ba9309c8d723f146a3ae7493451b61a404721ccd0d82ea0896246c5f92a4112a78b6272a2cabb7b01cf50ab1e20491d409e5d9fc18e1bec5ead12ac2a4ec83c
|
@@ -0,0 +1,130 @@
|
|
1
|
+
|
2
|
+
/* 全局 */
|
3
|
+
html,body{overflow-x: hidden;font-size: 16px;line-height: 1.6;}
|
4
|
+
/* html body{margin-top: 61px;} */
|
5
|
+
html{background-color: #F2F2F2;}
|
6
|
+
|
7
|
+
i{font-style: normal;}
|
8
|
+
/* 图标 */
|
9
|
+
@font-face {font-family: "layui-icon-fly";
|
10
|
+
src: url('../../../../fonts/iconfont.eot?t=1512007250695'); /* IE9*/
|
11
|
+
src: url('../../../../fonts/iconfont.eot?t=1512007250695#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
12
|
+
url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),
|
13
|
+
url('../../../../fonts/iconfont.ttf?t=1512007250695') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
|
14
|
+
url('../../../../fonts/iconfont.svg?t=1512007250695#iconfont') format('svg'); /* iOS 4.1- */
|
15
|
+
}
|
16
|
+
|
17
|
+
.iconfont {
|
18
|
+
font-family:"layui-icon-fly" !important;
|
19
|
+
font-size:16px;
|
20
|
+
font-style:normal;
|
21
|
+
-webkit-font-smoothing: antialiased;
|
22
|
+
-webkit-text-stroke-width: 0.2px;
|
23
|
+
-moz-osx-font-smoothing: grayscale;
|
24
|
+
}
|
25
|
+
|
26
|
+
|
27
|
+
/* 辅助 */
|
28
|
+
a:hover{color: #009688; transition: all .3s;}
|
29
|
+
/* pre{padding: 10px 15px; margin: 10px 0; font-size: 12px; border-left: 6px solid #009688; background-color: #f8f8f8; font-family: Courier New; overflow: auto;} */
|
30
|
+
|
31
|
+
.layui-container{padding: 0;}
|
32
|
+
.fly-main{width: 1079px; min-height: 600px; margin: 0 auto 15px;}
|
33
|
+
.layui-badge{height: 20px; line-height: 20px; border-radius: 2px;}
|
34
|
+
|
35
|
+
.fly-link{color: #01AAED;}
|
36
|
+
.fly-link:hover{color: #5FB878;}
|
37
|
+
.fly-grey{color: #999;}
|
38
|
+
|
39
|
+
.fly-msg, .fly-error{padding: 10px 15px; line-height: 24px;}
|
40
|
+
.fly-msg{background-color:#F8F8F8; color:#666;}
|
41
|
+
.fly-msg a{color:#4F99CF}
|
42
|
+
.fly-editbox{position: relative;}
|
43
|
+
|
44
|
+
.fly-marginTop{margin-top: 15px;}
|
45
|
+
.fly-mid{display: inline-block; height: 10px; width: 1px; margin: 0 10px; vertical-align: middle; background-color: #e2e2e2;}
|
46
|
+
.fly-right{position: absolute; right: 15px; top: 0;}
|
47
|
+
|
48
|
+
/* 过度 */
|
49
|
+
.fly-loading{position: absolute; top: 50%; left: 50%; margin: -12px 0 0 -15px; font-size: 30px; color: #c2c2c2;}
|
50
|
+
|
51
|
+
/* 简易编辑器 */
|
52
|
+
.fly-edit{position:relative; display: block; top: 0; left:0; padding:0 10px; border: 1px solid #e6e6e6; border-radius: 2px 2px 0 0; background-color: #FBFBFB;}
|
53
|
+
.fly-edit span{cursor:pointer; padding:0 10px; line-height: 38px;color:#1E9FFF;font-size: 18px;}
|
54
|
+
.fly-edit span i{position: relative; padding-right: 6px; font-size: 18px;}
|
55
|
+
.fly-edit span:hover{color: #009E94;}
|
56
|
+
.layui-textarea{height: 270px;}
|
57
|
+
/* markdown样式 */
|
58
|
+
.easyeditor-content p{
|
59
|
+
padding: 5px 0;
|
60
|
+
}
|
61
|
+
|
62
|
+
.easyeditor-content ul,
|
63
|
+
.easyeditor-content ol {
|
64
|
+
padding: 10px 15px;
|
65
|
+
}
|
66
|
+
.easyeditor-content ul:first-child,
|
67
|
+
.easyeditor-content ol:first-child {
|
68
|
+
margin-top: 0;
|
69
|
+
}
|
70
|
+
.easyeditor-content ul:last-child,
|
71
|
+
.easyeditor-content ol:last-child {
|
72
|
+
margin-bottom: 0;
|
73
|
+
}
|
74
|
+
.easyeditor-content ul li{margin-top: 5px;}
|
75
|
+
.easyeditor-content>ol li{list-style: decimal;margin-top: 5px;}
|
76
|
+
.easyeditor-content li{list-style: disc;}
|
77
|
+
|
78
|
+
.layui-table th{text-align: center;}
|
79
|
+
|
80
|
+
.easyeditor-content hr {
|
81
|
+
height: 2px;
|
82
|
+
padding: 0;
|
83
|
+
margin: 16px 0;
|
84
|
+
background-color: #e7e7e7;
|
85
|
+
border: 0 none;
|
86
|
+
overflow: hidden;
|
87
|
+
box-sizing: content-box;
|
88
|
+
}
|
89
|
+
/* 标题样式 */
|
90
|
+
.easyeditor-content > h1,
|
91
|
+
.easyeditor-content > h2,
|
92
|
+
.easyeditor-content > h3,
|
93
|
+
.easyeditor-content > h4,
|
94
|
+
.easyeditor-content > h5,
|
95
|
+
.easyeditor-content > h6 {
|
96
|
+
position: relative;
|
97
|
+
margin-top: 1rem;
|
98
|
+
margin-bottom: 1rem;
|
99
|
+
font-weight: bold;
|
100
|
+
line-height: 1.4;
|
101
|
+
cursor: text;
|
102
|
+
}
|
103
|
+
|
104
|
+
|
105
|
+
/* 单行列表 */
|
106
|
+
.fly-list-one .fly-panel-title{margin-bottom: 5px;}
|
107
|
+
.fly-list-one dd{margin: 0 15px; line-height: 26px; white-space: nowrap; overflow: hidden; list-style: decimal-leading-zero inside; *list-style-type: decimal inside; color: #009E94;}
|
108
|
+
.fly-list-one dd a,
|
109
|
+
.fly-list-one dd span{display: inline-block; *display: inline; *zoom: 1; vertical-align: top; font-style: normal}
|
110
|
+
.fly-list-one dd a{max-width: 85%; margin-right: 5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px;}
|
111
|
+
.fly-list-one dd span{font-size: 12px; color: #ccc;}
|
112
|
+
.fly-list-one dd:last-child{padding-bottom: 5px;}
|
113
|
+
|
114
|
+
/* 面板 */
|
115
|
+
.easyeditor-panel{margin-bottom: 15px; margin-top: 15px; background-color: #fff; box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);}
|
116
|
+
.easyeditor-panel[pad20]{padding: 20px;}
|
117
|
+
.easyeditor-panel-title{position: relative; height: 50px; line-height: 50px; padding: 0 15px; border-bottom: 1px dotted #E9E9E9; color: #333; border-radius: 2px 2px 0 0; font-size: 14px;}
|
118
|
+
.easyeditor-panel-main{padding: 10px 15px;}
|
119
|
+
.easyeditor-panel-border{border: 1px solid #e6e6e6; box-shadow: none;}
|
120
|
+
.easyeditor-panel-border .easyeditor-panel-title{border-bottom: 1px solid #e6e6e6;}
|
121
|
+
|
122
|
+
/* Detail页 */
|
123
|
+
.detail-box{padding: 20px;}
|
124
|
+
|
125
|
+
body .layui-edit-face{ border:none; background:none;}
|
126
|
+
body .layui-edit-face .layui-layer-content{padding:0; background-color:#fff; color:#666; box-shadow:none}
|
127
|
+
.layui-edit-face .layui-layer-TipsG{display:none;}
|
128
|
+
.layui-edit-face ul{position:relative; width:372px; padding:10px; border:1px solid #D9D9D9; background-color:#fff; box-shadow: 0 0 20px rgba(0,0,0,.2);}
|
129
|
+
.layui-edit-face ul li{cursor: pointer; float: left; border: 1px solid #e8e8e8; height: 22px; width: 26px; overflow: hidden; margin: -1px 0 0 -1px; padding: 4px 2px; text-align: center;}
|
130
|
+
.layui-edit-face ul li:hover{position: relative; z-index: 2; border: 1px solid #eb7350; background: #fff9ec;}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
.fly-edit span{cursor:pointer; padding:0 10px; line-height: 38px; height: 38px;width: 30px;color:#1E9FFF;font-size: 18px;border-right: 1px solid #e6e6e6;display: inline-block;text-align: center;}
|
2
|
+
.fly-right span:first-child{border-left: 1px solid #e6e6e6;}
|
3
|
+
.fly-right span:last-child{border-right: 0}
|
4
|
+
.fly-edit span:hover{color: #009E94;background-color: #f2f2f2;}
|
@@ -1,8 +1,20 @@
|
|
1
1
|
module EducodeSales
|
2
2
|
class ApplicationController < ActionController::Base
|
3
|
+
include ApplicationHelper
|
3
4
|
protect_from_forgery with: :exception
|
4
5
|
before_action :authenticate_request
|
5
6
|
|
7
|
+
|
8
|
+
def subject_members
|
9
|
+
common = Common.find_by(clazz: 'staff_type', name: '课程')
|
10
|
+
@manages = Staff.joins(:user).where(job_type: common.id.to_i).where.not(role_id: 11).map { |d| {name: d.user.real_name, value: d.id}}
|
11
|
+
end
|
12
|
+
|
13
|
+
def subject_staffs
|
14
|
+
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
15
|
+
@staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11).map { |d| { value: d.id, name: d.name } }
|
16
|
+
end
|
17
|
+
|
6
18
|
def render_success
|
7
19
|
render json: { success: true }
|
8
20
|
end
|
@@ -0,0 +1,230 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EducodeSales
|
4
|
+
|
5
|
+
# 商机交付课程
|
6
|
+
class BusinessCoursesController < ApplicationController
|
7
|
+
include BusinessCoursesHelper
|
8
|
+
before_action :subject_members
|
9
|
+
|
10
|
+
def index
|
11
|
+
authorize! :business, BusinessDeliverSubject
|
12
|
+
respond_to do |format|
|
13
|
+
format.html do
|
14
|
+
end
|
15
|
+
format.json do
|
16
|
+
@business_deliver = BusinessDeliverSubject.joins(business: [:school, :staff, :last_follow_up])
|
17
|
+
|
18
|
+
# 查询条件 交付状态 state == 0 代表全部
|
19
|
+
if params[:q] && params[:q][:state].present? && params[:q][:state] != '0'
|
20
|
+
@business_deliver = @business_deliver.where("educode_sales_business_deliver_subjects.status = :status", status: params[:q][:state])
|
21
|
+
end
|
22
|
+
# 查询条件 商机id
|
23
|
+
if params[:q] && params[:q][:name].present?
|
24
|
+
@business_deliver = @business_deliver.where("educode_sales_businesses.name like '%#{params[:q][:name]}%'")
|
25
|
+
end
|
26
|
+
# 查询条件 时间
|
27
|
+
if params[:q] && params[:q][:time].present?
|
28
|
+
start_time = params[:q][:time].split(" - ")[0]
|
29
|
+
end_time = params[:q][:time].split(" - ")[-1]
|
30
|
+
@business_deliver = @business_deliver.where("educode_sales_follow_ups.reception_at BETWEEN '#{start_time}' AND '#{end_time}' ")
|
31
|
+
end
|
32
|
+
# 分页查询
|
33
|
+
@business_deliver = @business_deliver.includes(business: [:school, :staff], business_subjects: :subject) \
|
34
|
+
.page(params[:page])
|
35
|
+
.per(params[:limit])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def edit
|
41
|
+
authorize! :business, BusinessDeliverSubject
|
42
|
+
if params[:id]
|
43
|
+
# 查询商机信息 和交付状态等
|
44
|
+
@item = BusinessDeliverSubject.joins(:business)
|
45
|
+
.select("educode_sales_businesses.name,
|
46
|
+
educode_sales_business_deliver_subjects.status,
|
47
|
+
educode_sales_business_deliver_subjects.id")
|
48
|
+
.find(params[:id])
|
49
|
+
# 查询课程是否已经有实践课程
|
50
|
+
@subjects = @item.business_subjects.pluck(:subject_id)
|
51
|
+
@subjects = Subject.where(id: @subjects).map { |item| { value: item[:id], name: item[:name] } }
|
52
|
+
gon.staffs = @manages
|
53
|
+
|
54
|
+
@value_list = BusinessSubjectStaff.where(container_type: BusinessSubjectStaff::CONTAINER_TYPES::BUSSINESS,
|
55
|
+
container_id: params[:id])
|
56
|
+
.select(:staff_id)
|
57
|
+
.map { |item| item[:staff_id] }
|
58
|
+
|
59
|
+
render layout: false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def update
|
64
|
+
authorize! :business, BusinessDeliverSubject
|
65
|
+
# 开启事务
|
66
|
+
ActiveRecord::Base.transaction do
|
67
|
+
@business = BusinessDeliverSubject.find_by(id: params[:id])
|
68
|
+
# 修改状态
|
69
|
+
if !@business.blank?
|
70
|
+
@business.update(params.require(:business).permit(:status))
|
71
|
+
|
72
|
+
old_subject_ids = @business.business_subjects.pluck(:subject_id)
|
73
|
+
new_subject_ids = params[:business][:subject_ids].split(',').map(&:to_i)
|
74
|
+
|
75
|
+
del_arr = old_subject_ids - new_subject_ids
|
76
|
+
# 需要新增的科目id
|
77
|
+
add_arr = new_subject_ids - old_subject_ids
|
78
|
+
|
79
|
+
@business.business_subjects.where(subject_id: del_arr).update_all(business_id: nil, business_deliver_subject_id: nil)
|
80
|
+
|
81
|
+
@business.add_subjects(add_arr)
|
82
|
+
|
83
|
+
@business.manages.destroy_all
|
84
|
+
|
85
|
+
BusinessSubjectStaff.bulk_insert(:staff_id, :container_id, :container_type, :created_at, :updated_at, :category) do |d|
|
86
|
+
params[:business][:manage_id].split(",").each do |m|
|
87
|
+
d.add [m.to_i, @business.id, BusinessSubjectStaff::CONTAINER_TYPES::BUSSINESS, Time.now, Time.now, BusinessSubjectStaff::CATEGORY_TYPES::BUSINESS_MANAGE]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
render_success
|
92
|
+
else
|
93
|
+
render_failure("操作失败")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def new
|
99
|
+
authorize! :business, BusinessDeliverSubject
|
100
|
+
staffs = Staff.where.not(role_id: 11).includes(:user)
|
101
|
+
@businesses = Business
|
102
|
+
# 要求只能是已签单的商机
|
103
|
+
gon.stage_id = Common.where(clazz: '商机阶段', name: ['已签单']).pluck(:id)[0]
|
104
|
+
gon.staffs = @manages
|
105
|
+
render layout: false
|
106
|
+
end
|
107
|
+
|
108
|
+
def create
|
109
|
+
authorize! :business, BusinessDeliverSubject
|
110
|
+
# 开启事务
|
111
|
+
ActiveRecord::Base.transaction do
|
112
|
+
item = BusinessDeliverSubject.find_by(business_id: params[:business][:business_id])
|
113
|
+
# 判断是否存在 不存在进入下一步
|
114
|
+
|
115
|
+
if item.blank?
|
116
|
+
add_item = BusinessDeliverSubject.new(business_params)
|
117
|
+
|
118
|
+
add_item.add_subjects(params[:business][:subject_ids].split(",")) if add_item.save! && !params[:business][:subject_ids].blank?
|
119
|
+
|
120
|
+
BusinessSubjectStaff.bulk_insert(:staff_id, :container_id, :container_type, :created_at, :updated_at, :category) do |d|
|
121
|
+
params[:business][:manage_id].split(",").each do |m|
|
122
|
+
d.add [m.to_i, add_item.id, BusinessSubjectStaff::CONTAINER_TYPES::BUSSINESS, Time.now, Time.now, BusinessSubjectStaff::CATEGORY_TYPES::BUSINESS_MANAGE ]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
render_success
|
127
|
+
else
|
128
|
+
render_failure("操作失败")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def select_business
|
134
|
+
respond_to do |format|
|
135
|
+
format.json do
|
136
|
+
stage_id = Common.where(clazz: '商机阶段', name: ['已签单']).pluck(:id).join(",")
|
137
|
+
@businesses = Business.joins(:last_follow_up, :school)
|
138
|
+
.where("educode_sales_businesses.NAME LIKE '%#{params[:q]}%' and educode_sales_follow_ups.stage_id IN (#{stage_id}) ")
|
139
|
+
.where("educode_sales_businesses.id not in (?) ", BusinessDeliverSubject.pluck(:business_id).map(&:to_i) ) # todo 数组中包含nil会导致查询失败,无法找到数据
|
140
|
+
.select("educode_sales_businesses.*, schools.name as s_name, schools.id as s_id")
|
141
|
+
.page(params[:page])
|
142
|
+
.distinct
|
143
|
+
.per(10)
|
144
|
+
render json: {
|
145
|
+
data: @businesses,
|
146
|
+
code: 0,
|
147
|
+
count: @businesses.total_count / 10
|
148
|
+
}
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
def list_shixuns
|
155
|
+
respond_to do |format|
|
156
|
+
format.html do
|
157
|
+
render layout: false
|
158
|
+
end
|
159
|
+
format.json do
|
160
|
+
business_deliver = BusinessDeliverSubject.find_by(id: params[:id])
|
161
|
+
|
162
|
+
shixuns = BusinessSubjectShixun.joins(:shixun, business_subject: [business_deliver_subject: :business]).where("educode_sales_business_deliver_subjects.id = #{business_deliver.id }")
|
163
|
+
|
164
|
+
@count = shixuns.count
|
165
|
+
|
166
|
+
@shixuns = shixuns.select("educode_sales_business_subject_shixuns.*, shixuns.name s_name, shixuns.identifier s_identifier")
|
167
|
+
.page(params[:page]).per(params[:limit])
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
def list_subjects # todo 接口该为 list_subjects
|
174
|
+
respond_to do |format|
|
175
|
+
format.html do
|
176
|
+
render layout: false
|
177
|
+
end
|
178
|
+
format.json do
|
179
|
+
# 商机交付课程id
|
180
|
+
bussiness_deliver_id = params[:id].to_i
|
181
|
+
|
182
|
+
# subject.status => :0 编辑中 1 审核中 2 发布
|
183
|
+
# public: 2: 公开
|
184
|
+
# todo 响应参数中: 交付时间 交付单位 销售 课程经理 全部来自商机交付课程中数据 => (bussiness_deliver)
|
185
|
+
subjects = Subject.joins("INNER JOIN educode_sales_business_subjects bs ON subjects.id = bs.subject_id
|
186
|
+
INNER JOIN educode_sales_business_deliver_subjects e_s_b_d_s ON bs.business_deliver_subject_id = e_s_b_d_s.id and e_s_b_d_s.id = #{bussiness_deliver_id}
|
187
|
+
LEFT JOIN stage_shixuns ss ON ss.subject_id = subjects.id
|
188
|
+
LEFT JOIN shixuns s ON s.id = ss.item_id")
|
189
|
+
# todo 搜索 subjects.where("subjects.字段 = x") # 不需要单位搜索
|
190
|
+
|
191
|
+
# 搜索条件
|
192
|
+
if params[:q].present? && params[:q][:name].present?
|
193
|
+
subjects = subjects.where("subjects.name like '%#{params[:q][:name]}%'")
|
194
|
+
end
|
195
|
+
if params[:q].present? && params[:q][:p_state].present?
|
196
|
+
status = params[:q][:p_state].to_i
|
197
|
+
if status < 3
|
198
|
+
subjects = subjects.where("subjects.status = #{params[:q][:p_state]}")
|
199
|
+
else
|
200
|
+
subjects = subjects.where("subjects.public = 2")
|
201
|
+
end
|
202
|
+
end
|
203
|
+
@subjects = subjects.group("subjects.id").select("subjects.identifier, subjects.status status, subjects.name name, subjects.id, subjects.public").page(params[:page]).per(params[:limit])
|
204
|
+
p @subjects.map { |d| d.shixuns_completed_progress }
|
205
|
+
@url = "https://test.educoder.net/paths/"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
def subjects
|
212
|
+
respond_to do |format|
|
213
|
+
format.json do
|
214
|
+
@subjects = Subject.unhidden.where.not(id: BusinessSubject.joins(:business).pluck(:subject_id)).where("name like '%#{params[:q]}%' ").page(params[:page]).per(10)
|
215
|
+
render json: {
|
216
|
+
data: @subjects.map { |item| { value: item[:id], name: item[:name] } },
|
217
|
+
code: 0,
|
218
|
+
count: @subjects.total_count / 10
|
219
|
+
}
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def business_params
|
225
|
+
params.require(:business).permit(:status, :business_id)
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
end
|
@@ -74,6 +74,13 @@ module EducodeSales
|
|
74
74
|
@schools = Business.all
|
75
75
|
if params[:q].present?
|
76
76
|
@schools = @schools.where("name like :q ", q: "%#{params[:q]}%").page(params[:page]).per(10)
|
77
|
+
# 商机搜索为空时 去搜索学校名 如果搜索到学校名 则返回学校id相关的商机
|
78
|
+
if @schools.empty?
|
79
|
+
@schools = Business.joins(:school)
|
80
|
+
.where("schools.name LIKE :q", q: "%#{params[:q]}%")
|
81
|
+
.page(params[:page])
|
82
|
+
.per(10)
|
83
|
+
end
|
77
84
|
end
|
78
85
|
end
|
79
86
|
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# 实践项目管理
|
4
|
+
module EducodeSales
|
5
|
+
class ShixunDectectsController < ApplicationController
|
6
|
+
before_action :subject_members
|
7
|
+
|
8
|
+
def index
|
9
|
+
respond_to do |format|
|
10
|
+
format.html do
|
11
|
+
end
|
12
|
+
format.json do
|
13
|
+
# 默认显示为待审核的
|
14
|
+
index = 1
|
15
|
+
if params[:q].present? && params[:q][:index].present?
|
16
|
+
index = params[:q][:index].to_i
|
17
|
+
end
|
18
|
+
@shixun_dectects = BusinessSubjectShixun.joins(:shixun)
|
19
|
+
.left_joins(:school)
|
20
|
+
.joins(last_dectect: [reviewed_staff: :user])
|
21
|
+
|
22
|
+
if params[:q].present? && params[:q][:category].present? && params[:q][:category].to_i != 0
|
23
|
+
@shixun_dectects = @shixun_dectects.where(category: params[:q][:category])
|
24
|
+
end
|
25
|
+
if params[:q].present? && params[:q][:shixun_name].present?
|
26
|
+
@shixun_dectects = @shixun_dectects.where("shixuns.name like '%#{params[:q][:shixun_name]}%'")
|
27
|
+
end
|
28
|
+
|
29
|
+
case index
|
30
|
+
when 1 # 显示待审核的 和审核被打回的
|
31
|
+
@shixun_dectects = @shixun_dectects.where("dectect_type != 1")
|
32
|
+
|
33
|
+
when 2 # 显示已审核的
|
34
|
+
@shixun_dectects = @shixun_dectects.where("dectect_type = 1 or dectect_type = 2")
|
35
|
+
else
|
36
|
+
render_failure("操作失败,index只能为1,2")
|
37
|
+
end
|
38
|
+
@shixun_dectects = @shixun_dectects.select("educode_sales_business_subject_shixuns.*,
|
39
|
+
schools.name as school_name,
|
40
|
+
shixuns.name as shixun_name,
|
41
|
+
CONCAT(users.lastname, users.firstname) as real_name,
|
42
|
+
educode_sales_shixun_dectects.dectect_type,
|
43
|
+
educode_sales_shixun_dectects.content")
|
44
|
+
.page(params[:page])
|
45
|
+
.per(params[:limit])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# 审核提交
|
52
|
+
def submit
|
53
|
+
respond_to do |format|
|
54
|
+
format.json do
|
55
|
+
ActiveRecord::Base.transaction do
|
56
|
+
@shixuns = ShixunDectect.find_by(business_subject_shixun_id: params[:id])
|
57
|
+
if @shixuns.blank?
|
58
|
+
@shixuns = ShixunDectect.create!(business_subject_shixun_id: params[:id],
|
59
|
+
reviewed_id: current_user.id,
|
60
|
+
dectect_type: 0)
|
61
|
+
BusinessSubjectShixun.find(params[:id]).update(shixun_dectect_id: @shixuns.id)
|
62
|
+
render_success
|
63
|
+
else
|
64
|
+
render_failure("已经提交过了")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# 通过审核
|
72
|
+
def examine
|
73
|
+
ActiveRecord::Base.transaction do
|
74
|
+
if params[:id].present? && params[:type].present?
|
75
|
+
business_subject_shixun = BusinessSubjectShixun.find(params[:id])
|
76
|
+
if business_subject_shixun.present?
|
77
|
+
shixun_dectect = ShixunDectect.create!(reviewed_id: current_user.id,
|
78
|
+
date: Time.now,
|
79
|
+
content: params[:content].gsub(/\r\n?/, "\n").strip,
|
80
|
+
business_subject_shixun_id: params[:id],
|
81
|
+
dectect_type: params[:type].to_i)
|
82
|
+
business_subject_shixun.update(shixun_dectect_id: shixun_dectect.id,shixun_status:5)
|
83
|
+
end
|
84
|
+
render_success
|
85
|
+
else
|
86
|
+
render_failure("操作失败")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# 审核拒绝通过
|
92
|
+
|
93
|
+
def edit
|
94
|
+
render layout: false
|
95
|
+
end
|
96
|
+
|
97
|
+
def update
|
98
|
+
end
|
99
|
+
|
100
|
+
def new
|
101
|
+
render layout: false
|
102
|
+
end
|
103
|
+
|
104
|
+
def create
|
105
|
+
end
|
106
|
+
|
107
|
+
def markdown
|
108
|
+
render layout: false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|