educode_sales 1.10.20 → 1.10.22
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/controllers/educode_sales/assessments_controller.rb +6 -0
- data/app/controllers/educode_sales/ideas_controller.rb +36 -10
- data/app/controllers/educode_sales/money_plans_controller.rb +11 -0
- data/app/models/educode_sales/assessments_setting.rb +75 -0
- data/app/views/educode_sales/assessments/_finished.html.erb +12 -6
- data/app/views/educode_sales/assessments/finished.json.jbuilder +0 -1
- data/app/views/educode_sales/assessments/index.html.erb +1 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +2 -2
- data/app/views/educode_sales/ideas/_index.html.erb +37 -1
- data/app/views/educode_sales/ideas/assign.html.erb +45 -0
- data/app/views/educode_sales/ideas/assign_sale_staff.html.erb +45 -0
- data/app/views/educode_sales/ideas/edit.html.erb +9 -9
- data/app/views/educode_sales/ideas/new.html.erb +9 -9
- data/app/views/educode_sales/money_plan_records/_index.html.erb +4 -1
- data/config/routes.rb +4 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c2b8c0d76ccb06751726aeef62b4b04f234424db8b848d62f086b530b1213d25
|
|
4
|
+
data.tar.gz: 88f36d9731d556cdfedd495e0ad198e90baeecf454352fc8faf17d9dd373c3a9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 99412e792e86479290e2d09a62aced8ae6bc6cd32d448450d9e0b4898d5df54358e683a70b94038eb37474ba663b6d1cbe9e4b24a8440dcef2e6ca17a3d19e06
|
|
7
|
+
data.tar.gz: cb3ba8ffa9e9cf91ade0cf3a74fe5e5fc13767d05a1dfa12180fb699abbb70cbc380469b55b11b0900a7c0930afd2ba395148f532c23f3fcba70f7794fca7913
|
|
@@ -8,6 +8,7 @@ module EducodeSales
|
|
|
8
8
|
def index
|
|
9
9
|
respond_to do |format|
|
|
10
10
|
format.html do
|
|
11
|
+
gon.assement_list = EducodeSales::AssessmentsSetting::CLAZZ.map { |d, i| {value: d, name: i } }
|
|
11
12
|
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
|
12
13
|
@staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]} # [[], [], ............]
|
|
13
14
|
# 导出
|
|
@@ -53,6 +54,10 @@ module EducodeSales
|
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
def finished
|
|
57
|
+
@year = params[:q].present? && params[:q][:assessment_year].present? ? params[:q][:assessment_year] : Time.now.year
|
|
58
|
+
EducodeSales::AssessmentsSetting.update_stats(@year, params[:assessment_id])
|
|
59
|
+
|
|
60
|
+
|
|
56
61
|
if @current_admin.is_admin?
|
|
57
62
|
@assessments = AssessmentsSetting.all
|
|
58
63
|
else
|
|
@@ -67,6 +72,7 @@ module EducodeSales
|
|
|
67
72
|
@assessments = AssessmentsSetting.all
|
|
68
73
|
end
|
|
69
74
|
end
|
|
75
|
+
|
|
70
76
|
|
|
71
77
|
if params[:assessment_year].present?
|
|
72
78
|
@assessments = @assessments.where(assessment_year: Time.new(params[:assessment_year])..Time.new(params[:assessment_year]).end_of_year)
|
|
@@ -3,7 +3,35 @@ require_dependency "educode_sales/application_controller"
|
|
|
3
3
|
module EducodeSales
|
|
4
4
|
class IdeasController < ApplicationController
|
|
5
5
|
|
|
6
|
-
before_action :find_idea, only: [:edit, :destroy, :detail, :history, :update]
|
|
6
|
+
before_action :find_idea, only: [:edit, :destroy, :detail, :history, :update, :assign, :assign_staff, :assign_sale_staff, :update_sale_staff]
|
|
7
|
+
|
|
8
|
+
def assign
|
|
9
|
+
selected_staff_ids = @idea.assist_staff_ids.map(&:to_i)
|
|
10
|
+
staffs = Staff.where.not(role_id: 11).includes(:user)
|
|
11
|
+
gon.ideas_staffs = staffs.map { |d| { name: d.user.real_name, value: d.id, selected: selected_staff_ids.include?(d.id) } }
|
|
12
|
+
render layout: false
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# 指派协作人 assist_staff_ids协作人
|
|
16
|
+
def assign_staff
|
|
17
|
+
@idea.assist_staff_ids = params[:to_id].to_s.split(",")
|
|
18
|
+
@idea.save
|
|
19
|
+
render_success
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def assign_sale_staff
|
|
23
|
+
selected_staff_ids = Array(@idea.staff_id)
|
|
24
|
+
staffs = Staff.where.not(role_id: 11).includes(:user)
|
|
25
|
+
gon.sales_staffs = staffs.map { |d| { name: d.user.real_name, value: d.id, selected: selected_staff_ids.include?(d.id) } }
|
|
26
|
+
render layout: false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# 指派方案经理 staff_id
|
|
30
|
+
def update_sale_staff
|
|
31
|
+
@idea.staff_id = params[:to_id]
|
|
32
|
+
@idea.save
|
|
33
|
+
render_success
|
|
34
|
+
end
|
|
7
35
|
|
|
8
36
|
def index
|
|
9
37
|
respond_to do |format|
|
|
@@ -24,16 +52,14 @@ module EducodeSales
|
|
|
24
52
|
level = @current_admin.role.role_areas.find_by(clazz: '方案管理').try(:level)
|
|
25
53
|
case level
|
|
26
54
|
when '自己'
|
|
27
|
-
|
|
28
|
-
# @businesses = Business.where("educode_sales_businesses.staff_id = ? OR educode_sales_businesses.id in (?)", @current_admin.id, business_ids)
|
|
29
|
-
idea_ids = Idea.all.pluck(:other_staff_ids).flatten.uniq
|
|
55
|
+
idea_ids = Idea.all.select { |d| Array(d.other_staff_ids).include?(@current_admin.id) || d.sale_staff_id == @current_admin.id || Array(d.assist_staff_ids).include?(@current_admin.id) || d.staff_id == @current_admin.id }.map { |d| d.id }
|
|
30
56
|
@ideas = Idea.where("educode_sales_ideas.creator_id = ? OR educode_sales_ideas.id in (?)", @current_admin.id, idea_ids)
|
|
31
57
|
when '区域'
|
|
32
58
|
# 查看区域商机,需要排除掉其它人员手上的监管学校
|
|
33
59
|
other_staff_school_id = EducodeSales::StaffSchool.where.not(staff_id: @current_admin.id).where("school_id IN (SELECT school_id FROM educode_sales_staff_schools WHERE staff_id = #{@current_admin.id}) IS NOT TRUE").distinct.pluck :school_id
|
|
34
60
|
|
|
35
61
|
school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id) - other_staff_school_id
|
|
36
|
-
idea_ids = Idea.all.
|
|
62
|
+
idea_ids = Idea.all.select { |d| Array(d.other_staff_ids).include?(@current_admin.id) || d.sale_staff_id == @current_admin.id || Array(d.assist_staff_ids).include?(@current_admin.id) || d.staff_id == @current_admin.id }.map { |d| d.id }
|
|
37
63
|
@ideas = @ideas.joins(department: :school).where("schools.id in (?) OR educode_sales_ideas.creator_id = ? OR educode_sales_ideas.id in (?)", school_ids, @current_admin.id, idea_ids)
|
|
38
64
|
else
|
|
39
65
|
@ideas = @ideas
|
|
@@ -116,8 +142,8 @@ module EducodeSales
|
|
|
116
142
|
idea.department_id = idea.business&.department_id
|
|
117
143
|
end
|
|
118
144
|
idea.attachment_ids = attachment_ids
|
|
119
|
-
idea.assist_staff_ids = assist_staff_ids
|
|
120
|
-
idea.other_staff_ids = other_staff_ids
|
|
145
|
+
# idea.assist_staff_ids = assist_staff_ids
|
|
146
|
+
# idea.other_staff_ids = other_staff_ids
|
|
121
147
|
idea.save
|
|
122
148
|
render_success
|
|
123
149
|
end
|
|
@@ -134,11 +160,11 @@ module EducodeSales
|
|
|
134
160
|
@idea.assign_attributes(idea_params)
|
|
135
161
|
# @idea.school_id = Department.find_by_id(@idea.department_id)&.school_id
|
|
136
162
|
assist_staff_ids = Array(params[:assist_staff_ids].to_s.split(","))
|
|
137
|
-
@idea.assist_staff_ids = assist_staff_ids
|
|
163
|
+
# @idea.assist_staff_ids = assist_staff_ids
|
|
138
164
|
attachment_ids = Array(params[:attachment_ids].to_s.split(","))
|
|
139
165
|
@idea.attachment_ids = attachment_ids
|
|
140
166
|
other_staff_ids = Array(params[:other_staff_ids].to_s.split(","))
|
|
141
|
-
@idea.other_staff_ids = other_staff_ids
|
|
167
|
+
# @idea.other_staff_ids = other_staff_ids
|
|
142
168
|
if @idea.business_id.present?
|
|
143
169
|
@idea.school_id = @idea.business&.department&.school_id
|
|
144
170
|
@idea.department_id = @idea.business&.department_id
|
|
@@ -267,7 +293,7 @@ module EducodeSales
|
|
|
267
293
|
params.permit(:name, :level, :staff_id,
|
|
268
294
|
:status, :types, :model, :hardware, :project,
|
|
269
295
|
:money, :end_time, :content, :department_id, :school_id,
|
|
270
|
-
:manager_name, :manager_phone, :school_name, :department_name, :
|
|
296
|
+
:manager_name, :manager_phone, :school_name, :department_name, :attachment_id, :idea_type, :business_id)
|
|
271
297
|
end
|
|
272
298
|
|
|
273
299
|
def find_idea
|
|
@@ -90,9 +90,20 @@ module EducodeSales
|
|
|
90
90
|
def create
|
|
91
91
|
business = Business.find(params[:business_id])
|
|
92
92
|
data = []
|
|
93
|
+
week = Time.now.strftime('%W').to_i
|
|
94
|
+
current_week = ""
|
|
95
|
+
staff_manage_ids = business&.last_follow_up&.assign_follow_ups.present? ? business.last_follow_up.assign_follow_ups.pluck(:staff_id) : [business.staff_id]
|
|
93
96
|
(params[:num].to_i+1).times do |i|
|
|
97
|
+
_week = params["date_at[#{i}]"].to_date.strftime('%W').to_i
|
|
98
|
+
current_week = _week if _week == week
|
|
94
99
|
business.money_plans.create(category: params["category[#{i}]"], amount: params["amount[#{i}]"], payment_clause: params["payment_clause[#{i}]"], date_at: params["date_at[#{i}]"], follow_up_id: business.last_follow_up_id, staff_id: @current_admin.id )
|
|
95
100
|
end
|
|
101
|
+
if current_week.present?
|
|
102
|
+
staff_manage_ids.each do |staff_id|
|
|
103
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: week, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0' )
|
|
104
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0' )
|
|
105
|
+
end
|
|
106
|
+
end
|
|
96
107
|
render_success
|
|
97
108
|
end
|
|
98
109
|
|
|
@@ -41,7 +41,82 @@ module EducodeSales
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def self.update_assessment_value(assessment_id, year, data)
|
|
45
|
+
assessments = EducodeSales::AssessmentsSetting.where(assessment: assessment_id).where("assessment_year >= ? and assessment_year <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:00".to_date)
|
|
46
|
+
assessments.each do |ass|
|
|
47
|
+
if data[ass.staff_id].present?
|
|
48
|
+
data_count = []
|
|
49
|
+
data[ass.staff_id].each do |d|
|
|
50
|
+
data_count[d['month']-1] = d['value']
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
data_count[12] = data_count[0].to_f + data_count[1].to_f + data_count[2].to_f
|
|
54
|
+
data_count[13] = data_count[3].to_f + data_count[4].to_f + data_count[5].to_f
|
|
55
|
+
data_count[14] = data_count[6].to_f + data_count[7].to_f + data_count[8].to_f
|
|
56
|
+
data_count[15] = data_count[9].to_f + data_count[10].to_f + data_count[11].to_f
|
|
57
|
+
data_count[16] = data_count[12].to_f + data_count[13].to_f + data_count[14].to_f + data_count[15].to_f
|
|
58
|
+
ass.update(annual_progress: data_count[16],
|
|
59
|
+
first_quarter_progress: data_count[12],
|
|
60
|
+
second_quarter_progress: data_count[13],
|
|
61
|
+
third_quarter_progress: data_count[14],
|
|
62
|
+
fourth_quarter_progress: data_count[15],
|
|
63
|
+
january_progress: data_count[0],
|
|
64
|
+
february_progress: data_count[1],
|
|
65
|
+
march_progress: data_count[2],
|
|
66
|
+
april_progress: data_count[3],
|
|
67
|
+
may_progress: data_count[4],
|
|
68
|
+
june_progress: data_count[5],
|
|
69
|
+
july_progress: data_count[6],
|
|
70
|
+
august_progress: data_count[7],
|
|
71
|
+
september_progress: data_count[8],
|
|
72
|
+
october_progress: data_count[9],
|
|
73
|
+
november_progress: data_count[10],
|
|
74
|
+
december_progress: data_count[11])
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def self.update_stats(year, assessment_id)
|
|
80
|
+
Rails.cache.fetch("stats_by_assessment_#{year}", :expires_in => 1.days) do
|
|
81
|
+
self.stats_by_return_money(year)
|
|
82
|
+
self.stats_by_business(year)
|
|
83
|
+
self.stats_by_contracts(year)
|
|
84
|
+
true
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def self.stats_by_business(year)
|
|
89
|
+
# 商机目标完成情况
|
|
90
|
+
ids = EducodeSales::Common.where(extras: %w[a_class b_class c_class d_class e_class]).pluck(:id)
|
|
91
|
+
data = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id in (?) ",ids)
|
|
92
|
+
.where("educode_sales_follow_ups.created_at >= ? and educode_sales_follow_ups.created_at <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:59".to_date)
|
|
93
|
+
.group("educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at)").select("SUM(budget_amount) AS value, educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at) AS month")
|
|
94
|
+
.group_by{|d| d.staff_id }
|
|
95
|
+
self.update_assessment_value(7, year, data)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def self.stats_by_contracts(year)
|
|
100
|
+
# 中标目标
|
|
101
|
+
contract_ids = EducodeSales::Common.where(clazz: '商机阶段', name: ['已中标', '已签单', '已验收', '回款中', '服务中', '已结束']).pluck(:id)
|
|
102
|
+
data = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.stage_id in (?) ", contract_ids)
|
|
103
|
+
.where("educode_sales_follow_ups.created_at >= ? and educode_sales_follow_ups.created_at <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:59".to_date)
|
|
104
|
+
.group("educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at)").select("SUM(actual_amount) AS value, educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at) AS month")
|
|
105
|
+
.group_by{|d| d.staff_id }
|
|
106
|
+
self.update_assessment_value(18, year, data)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def self.stats_by_return_money(year)
|
|
110
|
+
# 回款目标完成
|
|
111
|
+
data = EducodeSales::MoneyPlanClaim.joins(:money_plan)
|
|
112
|
+
.where("educode_sales_money_plans.created_at >= ? and educode_sales_money_plans.created_at <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:59".to_date)
|
|
113
|
+
.group("educode_sales_money_plans.staff_id, MONTH(educode_sales_money_plans.created_at)").select("SUM(educode_sales_money_plan_claims.amount) AS value, educode_sales_money_plans.staff_id, MONTH(educode_sales_money_plans.created_at) AS month")
|
|
114
|
+
.group_by{|d| d.staff_id }
|
|
115
|
+
self.update_assessment_value(2, year, data)
|
|
116
|
+
end
|
|
44
117
|
|
|
45
118
|
end
|
|
119
|
+
|
|
120
|
+
|
|
46
121
|
end
|
|
47
122
|
|
|
@@ -10,9 +10,7 @@
|
|
|
10
10
|
<div class="layui-inline">
|
|
11
11
|
<label class="layui-form-label">考核指标</label>
|
|
12
12
|
<div class="layui-input-inline">
|
|
13
|
-
<
|
|
14
|
-
<%= options_for_select EducodeSales::AssessmentsSetting::CLAZZ.invert.to_a, 7 %>
|
|
15
|
-
</select>
|
|
13
|
+
<div id="assement_id"></div>
|
|
16
14
|
</div>
|
|
17
15
|
</div>
|
|
18
16
|
<div class="layui-inline">
|
|
@@ -44,7 +42,7 @@
|
|
|
44
42
|
</script>
|
|
45
43
|
|
|
46
44
|
<script>
|
|
47
|
-
layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request'], function () {
|
|
45
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request', 'xmSelect'], function () {
|
|
48
46
|
|
|
49
47
|
var $ = layui.jquery,
|
|
50
48
|
form = layui.form,
|
|
@@ -52,7 +50,8 @@
|
|
|
52
50
|
request = layui.request,
|
|
53
51
|
table = layui.table,
|
|
54
52
|
rate = layui.rate,
|
|
55
|
-
|
|
53
|
+
xmSelect = layui.xmSelect,
|
|
54
|
+
miniPage = layui.miniPage,
|
|
56
55
|
dropdown = layui.dropdown;
|
|
57
56
|
|
|
58
57
|
|
|
@@ -62,6 +61,11 @@
|
|
|
62
61
|
});
|
|
63
62
|
|
|
64
63
|
|
|
64
|
+
var assement_list = xmSelect.render({
|
|
65
|
+
el: '#assement_id',
|
|
66
|
+
data: gon.assement_list
|
|
67
|
+
})
|
|
68
|
+
|
|
65
69
|
|
|
66
70
|
var progress_table = table.render({
|
|
67
71
|
elem: '#finished_table'
|
|
@@ -119,7 +123,9 @@
|
|
|
119
123
|
loadFinishTable(form.val('assessment_progress_form'))
|
|
120
124
|
|
|
121
125
|
form.on('submit(progress_search_btn)', function (data) {
|
|
122
|
-
|
|
126
|
+
var search = data.field;
|
|
127
|
+
search.assessment_id = assement_list.getValue('valueStr').split(",");
|
|
128
|
+
loadFinishTable(search);
|
|
123
129
|
return false;
|
|
124
130
|
})
|
|
125
131
|
|
|
@@ -32,7 +32,6 @@ json.data do
|
|
|
32
32
|
json.rate_2 completion_rate(assessment.second_quarter, assessment.second_quarter_progress)
|
|
33
33
|
json.rate_3 completion_rate(assessment.third_quarter, assessment.third_quarter_progress)
|
|
34
34
|
json.rate_4 completion_rate(assessment.fourth_quarter,assessment.fourth_quarter_progress)
|
|
35
|
-
|
|
36
35
|
# 得分_score
|
|
37
36
|
if assessment.assessment == 1
|
|
38
37
|
# json.assessment '签单金额'
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
<div class="layui-inline">
|
|
6
6
|
<label class="layui-form-label">单位</label>
|
|
7
7
|
<div class="layui-input-inline" style="line-height: 38px;">
|
|
8
|
-
<%= @business.department
|
|
8
|
+
<%= @business.department&.school&.name %>
|
|
9
9
|
</div>
|
|
10
10
|
</div>
|
|
11
11
|
<div class="layui-inline">
|
|
12
12
|
<label class="layui-form-label">部门</label>
|
|
13
13
|
<div class="layui-input-inline" style="line-height: 38px;">
|
|
14
|
-
<%= @business.department
|
|
14
|
+
<%= @business.department&.name %>
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
17
17
|
<br>
|
|
@@ -102,6 +102,8 @@
|
|
|
102
102
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="idea_recycle_s">恢复</a>
|
|
103
103
|
<% end %>
|
|
104
104
|
{{# }else{}}
|
|
105
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派协作人</a>
|
|
106
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign_sale_staff">指派方案经理</a>
|
|
105
107
|
<% if can? :add_follow, EducodeSales::Idea %>
|
|
106
108
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-add_follow" lay-event="add_follows">添加跟进</a>
|
|
107
109
|
<% end %>
|
|
@@ -256,7 +258,7 @@
|
|
|
256
258
|
},
|
|
257
259
|
{
|
|
258
260
|
title: '操作',
|
|
259
|
-
minWidth:
|
|
261
|
+
minWidth: 700,
|
|
260
262
|
toolbar: '#currentTableBar',
|
|
261
263
|
align: "center",
|
|
262
264
|
fixed: 'right'
|
|
@@ -453,6 +455,40 @@
|
|
|
453
455
|
$(window).on("resize", function () {
|
|
454
456
|
layer.full(followup_index);
|
|
455
457
|
});
|
|
458
|
+
} else if (obj.event === 'assign') { //协作人
|
|
459
|
+
var content = miniPage.getHrefContent('/missions/ideas/' + id + '/assign');
|
|
460
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
461
|
+
var name = data.name;
|
|
462
|
+
sindex = layer.open({
|
|
463
|
+
title: '指派协作人',
|
|
464
|
+
type: 1,
|
|
465
|
+
shade: 0.2,
|
|
466
|
+
maxmin: true,
|
|
467
|
+
shadeClose: true,
|
|
468
|
+
area: ['600px', '300px'],
|
|
469
|
+
content: content
|
|
470
|
+
});
|
|
471
|
+
$(window).on("resize", function () {
|
|
472
|
+
layer.full(sindex);
|
|
473
|
+
});
|
|
474
|
+
return false;
|
|
475
|
+
} else if (obj.event === 'assign_sale_staff') { //指派方案经理
|
|
476
|
+
var content = miniPage.getHrefContent('/missions/ideas/' + id + '/assign_sale_staff');
|
|
477
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
478
|
+
var name = data.name;
|
|
479
|
+
sindex = layer.open({
|
|
480
|
+
title: "指派方案经理",
|
|
481
|
+
type: 1,
|
|
482
|
+
shade: 0.2,
|
|
483
|
+
maxmin: true,
|
|
484
|
+
shadeClose: true,
|
|
485
|
+
area: ['600px', '300px'],
|
|
486
|
+
content: content
|
|
487
|
+
});
|
|
488
|
+
$(window).on("resize", function () {
|
|
489
|
+
layer.full(sindex);
|
|
490
|
+
});
|
|
491
|
+
return false;
|
|
456
492
|
} else if (obj.event === 'idea_recycle') {
|
|
457
493
|
layer.confirm('确定删除' + data.name, function (index) {
|
|
458
494
|
request.delete('missions/ideas/' + id, {}, function (res) {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<%= Gon::Base.render_data %>
|
|
2
|
+
<div class="layui-form layuimini-form" style="padding:30px">
|
|
3
|
+
<div class="layui-form-item">
|
|
4
|
+
<label class="layui-form-label required">选择协作人:</label>
|
|
5
|
+
<div class="layui-input-block" style="width: 300px">
|
|
6
|
+
<div id="sales_staff_id"></div>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<hr>
|
|
10
|
+
<div class="layui-form-item">
|
|
11
|
+
<div class="layui-input-block">
|
|
12
|
+
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<script>
|
|
18
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput'], function () {
|
|
19
|
+
var form = layui.form,
|
|
20
|
+
layer = layui.layer,
|
|
21
|
+
table = layui.table,
|
|
22
|
+
laytpl = layui.laytpl,
|
|
23
|
+
request = layui.request,
|
|
24
|
+
$ = layui.$;
|
|
25
|
+
|
|
26
|
+
form.render();
|
|
27
|
+
staff_list_select = xmSelect.render({
|
|
28
|
+
el: '#sales_staff_id',
|
|
29
|
+
data: gon.ideas_staffs,
|
|
30
|
+
filterable: true,
|
|
31
|
+
radio: false,
|
|
32
|
+
})
|
|
33
|
+
var parentIndex = layer.index;
|
|
34
|
+
form.on('submit(saveBtn)', function (data) {
|
|
35
|
+
layer.confirm('确定指派协作人?', function (index) {
|
|
36
|
+
request.post('missions/ideas/' + parent.id + "/assign_staff", {to_id: staff_list_select.getValue('valueStr')}, function (res) {
|
|
37
|
+
layer.close(index);
|
|
38
|
+
layer.close(parentIndex)
|
|
39
|
+
parent.table.reload('ideas_table')
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
return false;
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
</script>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<%= Gon::Base.render_data %>
|
|
2
|
+
<div class="layui-form layuimini-form" style="padding:30px">
|
|
3
|
+
<div class="layui-form-item">
|
|
4
|
+
<label class="layui-form-label required">选择方案经理:</label>
|
|
5
|
+
<div class="layui-input-block" style="width: 300px">
|
|
6
|
+
<div id="sales_id"></div>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<hr>
|
|
10
|
+
<div class="layui-form-item">
|
|
11
|
+
<div class="layui-input-block">
|
|
12
|
+
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<script>
|
|
18
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput'], function () {
|
|
19
|
+
var form = layui.form,
|
|
20
|
+
layer = layui.layer,
|
|
21
|
+
table = layui.table,
|
|
22
|
+
laytpl = layui.laytpl,
|
|
23
|
+
request = layui.request,
|
|
24
|
+
$ = layui.$;
|
|
25
|
+
|
|
26
|
+
form.render();
|
|
27
|
+
staff_list_select = xmSelect.render({
|
|
28
|
+
el: '#sales_id',
|
|
29
|
+
data: gon.sales_staffs,
|
|
30
|
+
filterable: true,
|
|
31
|
+
radio: true,
|
|
32
|
+
})
|
|
33
|
+
var parentIndex = layer.index;
|
|
34
|
+
form.on('submit(saveBtn)', function (data) {
|
|
35
|
+
layer.confirm('确定指派方案经理?', function (index) {
|
|
36
|
+
request.post('missions/ideas/' + parent.id + "/update_sale_staff", {to_id: staff_list_select.getValue('valueStr')}, function (res) {
|
|
37
|
+
layer.close(index);
|
|
38
|
+
layer.close(parentIndex)
|
|
39
|
+
parent.table.reload('ideas_table')
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
return false;
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
</script>
|
|
@@ -41,20 +41,20 @@
|
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
43
43
|
<div class="layui-col-md6">
|
|
44
|
-
<labeL class="layui-form-label"
|
|
44
|
+
<labeL class="layui-form-label required">项目名称:</labeL>
|
|
45
45
|
<div class="layui-input-block">
|
|
46
|
-
<div id="
|
|
46
|
+
<div id="business_id" style="width: 600px;"></div>
|
|
47
47
|
</div>
|
|
48
48
|
</div>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<div class="layui-col-md6">
|
|
52
|
-
<labeL class="layui-form-label required">项目名称:</labeL>
|
|
49
|
+
<div class="layui-col-md6" style="display: none">
|
|
50
|
+
<labeL class="layui-form-label">协作人:</labeL>
|
|
53
51
|
<div class="layui-input-block">
|
|
54
|
-
<div id="
|
|
52
|
+
<div id="assist_staff_ids"></div>
|
|
55
53
|
</div>
|
|
56
54
|
</div>
|
|
57
|
-
|
|
55
|
+
</div>
|
|
56
|
+
<div class="layui-row" style="padding-top: 15px;display: none">
|
|
57
|
+
<div class="layui-col-md6" style="display: none">
|
|
58
58
|
<labeL class="layui-form-label">方案经理:</labeL>
|
|
59
59
|
<div class="layui-input-block">
|
|
60
60
|
<div id="new_staff_id"></div>
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
<%= select_tag "idea_type", options_for_select(EducodeSales::Idea.idea_types.keys, @idea&.idea_type), { 'lay-filter': 'idea_type', include_blank: false } %>
|
|
97
97
|
</div>
|
|
98
98
|
</div>
|
|
99
|
-
<div class="layui-col-md6">
|
|
99
|
+
<div class="layui-col-md6" style="display: none">
|
|
100
100
|
<labeL class="layui-form-label">指派人:</labeL>
|
|
101
101
|
<div class="layui-input-block">
|
|
102
102
|
<div id="other_staff_ids"></div>
|
|
@@ -41,20 +41,20 @@
|
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
43
43
|
<div class="layui-col-md6">
|
|
44
|
-
<labeL class="layui-form-label"
|
|
44
|
+
<labeL class="layui-form-label required">项目名称:</labeL>
|
|
45
45
|
<div class="layui-input-block">
|
|
46
|
-
<div id="
|
|
46
|
+
<div id="business_id" style="width: 600px;"></div>
|
|
47
47
|
</div>
|
|
48
48
|
</div>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<div class="layui-col-md6">
|
|
52
|
-
<labeL class="layui-form-label required">项目名称:</labeL>
|
|
49
|
+
<div class="layui-col-md6" style="display: none">
|
|
50
|
+
<labeL class="layui-form-label">协作人:</labeL>
|
|
53
51
|
<div class="layui-input-block">
|
|
54
|
-
<div id="
|
|
52
|
+
<div id="assist_staff_ids"></div>
|
|
55
53
|
</div>
|
|
56
54
|
</div>
|
|
57
|
-
|
|
55
|
+
</div>
|
|
56
|
+
<div class="layui-row" style="padding-top: 15px;display: none">
|
|
57
|
+
<div class="layui-col-md6" style="display: none">
|
|
58
58
|
<labeL class="layui-form-label">方案经理:</labeL>
|
|
59
59
|
<div class="layui-input-block">
|
|
60
60
|
<div id="new_staff_id"></div>
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
<%= select_tag "idea_type", options_for_select(EducodeSales::Idea.idea_types.keys, @idea&.idea_type), { 'lay-filter': 'idea_type', include_blank: false } %>
|
|
97
97
|
</div>
|
|
98
98
|
</div>
|
|
99
|
-
<div class="layui-col-md6">
|
|
99
|
+
<div class="layui-col-md6" style="display: none">
|
|
100
100
|
<labeL class="layui-form-label">指派人:</labeL>
|
|
101
101
|
<div class="layui-input-block">
|
|
102
102
|
<div id="other_staff_ids"></div>
|
|
@@ -94,12 +94,14 @@
|
|
|
94
94
|
url: '/missions/money_plan_records',
|
|
95
95
|
toolbar: '#toolbar_money_plan_record',
|
|
96
96
|
defaultToolbar: ['filter'],
|
|
97
|
+
totalRow:true,
|
|
97
98
|
cols: [
|
|
98
99
|
[{
|
|
99
100
|
field: 'id',
|
|
100
101
|
width: 80,
|
|
101
102
|
title: '序号',
|
|
102
103
|
type: 'numbers',
|
|
104
|
+
totalRowText:'合计'
|
|
103
105
|
},
|
|
104
106
|
{
|
|
105
107
|
field: 'payer_name',
|
|
@@ -109,7 +111,8 @@
|
|
|
109
111
|
{
|
|
110
112
|
field: 'amount',
|
|
111
113
|
width: 150,
|
|
112
|
-
title: '回款金额'
|
|
114
|
+
title: '回款金额',
|
|
115
|
+
totalRow:true
|
|
113
116
|
},
|
|
114
117
|
{
|
|
115
118
|
field: 'date_at',
|
data/config/routes.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: educode_sales
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.10.
|
|
4
|
+
version: 1.10.22
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- anke1460
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-06-
|
|
11
|
+
date: 2023-06-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -418,6 +418,8 @@ files:
|
|
|
418
418
|
- app/views/educode_sales/ideas/add_courses.html.erb
|
|
419
419
|
- app/views/educode_sales/ideas/add_event.html.erb
|
|
420
420
|
- app/views/educode_sales/ideas/add_keys.html.erb
|
|
421
|
+
- app/views/educode_sales/ideas/assign.html.erb
|
|
422
|
+
- app/views/educode_sales/ideas/assign_sale_staff.html.erb
|
|
421
423
|
- app/views/educode_sales/ideas/course_list.json.jbuilder
|
|
422
424
|
- app/views/educode_sales/ideas/course_subject.json.jbuilder
|
|
423
425
|
- app/views/educode_sales/ideas/daily_paper.html.erb
|