educode_sales 0.3.6 → 0.4.0
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/images/educode_sales/indexlogo.png +0 -0
- data/app/assets/javascripts/educode_sales/extent/xm-select.js +8 -0
- data/app/assets/stylesheets/educode_sales/public.css +2 -1
- data/app/controllers/educode_sales/businesses_controller.rb +33 -11
- data/app/controllers/educode_sales/follow_ups_controller.rb +10 -1
- data/app/controllers/educode_sales/home_controller.rb +10 -1
- data/app/controllers/educode_sales/import_teachers_controller.rb +68 -0
- data/app/controllers/educode_sales/key_person_controller.rb +1 -1
- data/app/controllers/educode_sales/places_controller.rb +1 -0
- data/app/controllers/educode_sales/plans_controller.rb +1 -1
- data/app/controllers/educode_sales/sale_trends_controller.rb +8 -6
- data/app/controllers/educode_sales/sales_controller.rb +1 -0
- data/app/controllers/educode_sales/teachers_controller.rb +35 -11
- data/app/models/educode_sales/assign_follow_up.rb +6 -0
- data/app/models/educode_sales/follow_up.rb +1 -0
- data/app/models/educode_sales/key_person.rb +1 -1
- data/app/models/educode_sales/teacher_follow.rb +1 -0
- data/app/views/educode_sales/activities/edit.html.erb +0 -1
- data/app/views/educode_sales/activities/index.html.erb +32 -11
- data/app/views/educode_sales/activities/show_teachers.html.erb +1 -1
- data/app/views/educode_sales/businesses/edit.html.erb +15 -4
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +52 -4
- data/app/views/educode_sales/businesses/index.html.erb +160 -14
- data/app/views/educode_sales/businesses/index.json.jbuilder +4 -0
- data/app/views/educode_sales/businesses/new.html.erb +11 -1
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +53 -15
- data/app/views/educode_sales/businesses/show_follow.html.erb +12 -5
- data/app/views/educode_sales/businesses/show_follow_record.html.erb +6 -0
- data/app/views/educode_sales/commons/edit.html.erb +0 -1
- data/app/views/educode_sales/commons/index.html.erb +1 -0
- data/app/views/educode_sales/follow_ups/teachers.json.jbuilder +3 -2
- data/app/views/educode_sales/home/sales_staff.json.jbuilder +9 -0
- data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +2 -2
- data/app/views/educode_sales/operation_plans/_monthly.html.erb +3 -2
- data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +2 -1
- data/app/views/educode_sales/operation_plans/_weekly.html.erb +4 -2
- data/app/views/educode_sales/operation_plans/edit_week.html.erb +1 -0
- data/app/views/educode_sales/operation_plans/new_month.html.erb +2 -0
- data/app/views/educode_sales/operation_reports/edit.html.erb +27 -1
- data/app/views/educode_sales/places/edit.html.erb +0 -2
- data/app/views/educode_sales/places/index.html.erb +1 -0
- data/app/views/educode_sales/places/index.json.jbuilder +3 -3
- data/app/views/educode_sales/places/new.html.erb +0 -1
- data/app/views/educode_sales/plans/_monthPlan.html.erb +2 -2
- data/app/views/educode_sales/plans/_monthly.html.erb +2 -1
- data/app/views/educode_sales/plans/_weekPlan.html.erb +2 -1
- data/app/views/educode_sales/plans/_weekly.html.erb +3 -1
- data/app/views/educode_sales/plans/new_month.html.erb +3 -2
- data/app/views/educode_sales/roles/edit.html.erb +0 -1
- data/app/views/educode_sales/roles/index.html.erb +1 -1
- data/app/views/educode_sales/sale_reports/edit.html.erb +26 -0
- data/app/views/educode_sales/sales/index.html.erb +1 -0
- data/app/views/educode_sales/sales/index.json.jbuilder +2 -2
- data/app/views/educode_sales/sales/operations.html.erb +1 -0
- data/app/views/educode_sales/sales/trends.html.erb +0 -4
- data/app/views/educode_sales/staffs/index.html.erb +1 -0
- data/app/views/educode_sales/teachers/add_courses.html.erb +0 -1
- data/app/views/educode_sales/teachers/add_keys.html.erb +53 -8
- data/app/views/educode_sales/teachers/edit.html.erb +4 -2
- data/app/views/educode_sales/teachers/import.html.erb +41 -0
- data/app/views/educode_sales/teachers/index.html.erb +140 -27
- data/app/views/educode_sales/teachers/index.json.jbuilder +2 -1
- data/app/views/educode_sales/teachers/new.html.erb +1 -1
- data/app/views/layouts/educode_sales/login.html.erb +1 -1
- data/config/routes.rb +5 -0
- data/db/migrate/20211009031109_add_tel_key_peoples.rb +5 -0
- data/db/migrate/20211009063423_add_source_businesses.rb +5 -0
- data/db/migrate/20211013060712_create_educode_sales_assign_follow_ups.rb +10 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -2
@@ -21,6 +21,18 @@ module EducodeSales
|
|
21
21
|
def index
|
22
22
|
respond_to do |format|
|
23
23
|
format.html do
|
24
|
+
@more = can?(:create, EducodeSales::OperationPlan) || can?(:update, EducodeSales::Teacher) || can?(:destroy, EducodeSales::Teacher)
|
25
|
+
gon.menus = []
|
26
|
+
if can?(:create, EducodeSales::OperationPlan)
|
27
|
+
gon.menus << { title: '添加周计划', event: 'week' }
|
28
|
+
gon.menus << { title: '添加月计划', event: 'month' }
|
29
|
+
end
|
30
|
+
if can?(:update, EducodeSales::Teacher)
|
31
|
+
gon.menus << { title: '编辑', event: 'edit' }
|
32
|
+
end
|
33
|
+
if can?(:destroy, EducodeSales::Teacher)
|
34
|
+
gon.menus << { title: '删除', event: 'delete' }
|
35
|
+
end
|
24
36
|
end
|
25
37
|
format.json do
|
26
38
|
if @current_admin.is_admin?
|
@@ -43,13 +55,16 @@ module EducodeSales
|
|
43
55
|
@teachers = @teachers.where("educode_sales_teachers.name like ?", "%#{params[:q][:name]}%")
|
44
56
|
end
|
45
57
|
if params[:q].present? && params[:q][:professional_title].present?
|
46
|
-
@teachers = @teachers.where("educode_sales_teachers.professional_title
|
58
|
+
@teachers = @teachers.where("educode_sales_teachers.professional_title = ?", "#{params[:q][:professional_title]}")
|
47
59
|
end
|
48
60
|
if params[:q].present? && params[:q][:regist_at].present?
|
49
61
|
@teachers = @teachers.where("educode_sales_teachers.regist_at like ?", "%#{params[:q][:regist_at]}%")
|
50
62
|
end
|
51
63
|
if params[:q].present? && params[:q][:attitude].present?
|
52
|
-
@teachers = @teachers.where("educode_sales_teachers.attitude_id = ?", "#{params[:q][:attitude]}")
|
64
|
+
# @teachers = @teachers.where("educode_sales_teachers.attitude_id = ?", "#{params[:q][:attitude]}")
|
65
|
+
@teachers = @teachers.joins("
|
66
|
+
JOIN educode_sales_teacher_follows ON educode_sales_teachers.follow_up_id = educode_sales_teacher_follows.id
|
67
|
+
").where("educode_sales_teacher_follows.attitude_id = ?", params[:q][:attitude])
|
53
68
|
end
|
54
69
|
if params[:q].present? && params[:q][:teacher_source].present?
|
55
70
|
@teachers = @teachers.where("educode_sales_teachers.source_id = ?", "#{params[:q][:teacher_source]}")
|
@@ -70,16 +85,18 @@ module EducodeSales
|
|
70
85
|
end
|
71
86
|
if params[:q].present? && params[:q][:date].present?
|
72
87
|
date = params[:q][:date].split(" - ")
|
73
|
-
@teachers = @teachers.where("created_at > ? AND created_at < ?", date[0], date[1])
|
88
|
+
@teachers = @teachers.where("educode_sales_teachers.created_at > ? AND educode_sales_teachers.created_at < ?", date[0], date[1])
|
74
89
|
end
|
75
90
|
|
76
|
-
@teachers = @teachers.order("created_at desc").page(params[:page]).per(params[:limit])
|
91
|
+
@teachers = @teachers.order("educode_sales_teachers.created_at desc").page(params[:page]).per(params[:limit])
|
77
92
|
|
78
93
|
end
|
79
94
|
end
|
80
95
|
end
|
81
96
|
|
82
|
-
|
97
|
+
def import
|
98
|
+
render layout: false
|
99
|
+
end
|
83
100
|
|
84
101
|
def new
|
85
102
|
render layout: false
|
@@ -97,17 +114,24 @@ module EducodeSales
|
|
97
114
|
teacher.regist_at = Time.now
|
98
115
|
end
|
99
116
|
|
100
|
-
|
101
|
-
|
117
|
+
unless params[:activity_id].present?
|
118
|
+
return render json: {msg: '该教师已存在', success: false } if EducodeSales::Teacher.find_by(department_id: params[:department_id],name: params[:name])
|
119
|
+
end
|
102
120
|
|
121
|
+
if params[:activity_id].present?
|
122
|
+
if params[:user_id].present?
|
103
123
|
# 把老师添加到活动列表,提取判断下老师列表是否存在
|
104
|
-
|
105
|
-
|
106
|
-
|
124
|
+
find_teacher = Teacher.find_by(user_id: params[:user_id])
|
125
|
+
if find_teacher
|
126
|
+
teacher = find_teacher
|
127
|
+
end
|
128
|
+
else
|
129
|
+
_teacher = EducodeSales::Teacher.find_by(department_id: params[:department_id],name: params[:name])
|
130
|
+
teacher = _teacher if _teacher.present?
|
107
131
|
end
|
132
|
+
return render json: {msg: '该教师已在活动中', success: false } if teacher && teacher.activity_teachers.find_by(activity_id: params[:activity_id]).present?
|
108
133
|
end
|
109
134
|
if params[:activity_id].present?
|
110
|
-
return render json: {msg: '该教师已在活动中', success: false } if teacher.activity_teachers.find_by(activity_id: params[:activity_id]).present?
|
111
135
|
teacher.activity_teachers.build(activity_id: params[:activity_id])
|
112
136
|
end
|
113
137
|
|
@@ -5,6 +5,7 @@ module EducodeSales
|
|
5
5
|
has_many :money_plans, dependent: :destroy
|
6
6
|
has_many :key_person
|
7
7
|
has_many :teachers, through: :key_person
|
8
|
+
has_many :assign_follow_ups, dependent: :destroy
|
8
9
|
belongs_to :staff
|
9
10
|
belongs_to :stage, class_name: 'Common'
|
10
11
|
belongs_to :clazz, class_name: 'Common'
|
@@ -2,12 +2,14 @@
|
|
2
2
|
<div class="layui-btn-container">
|
3
3
|
<span class="table-label">活动列表</span>
|
4
4
|
<% if can? :create, EducodeSales::Activity %>
|
5
|
-
|
5
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import">导入数据</button>
|
6
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加活动</button>
|
6
7
|
<% end %>
|
7
8
|
</div>
|
8
9
|
</script>
|
9
|
-
|
10
|
+
<div class="min-height-table">
|
10
11
|
<table class="layui-hide" id="activities_table" lay-filter="activities_table"></table>
|
12
|
+
</div>
|
11
13
|
|
12
14
|
<script type="text/html" id="currentTableBar">
|
13
15
|
<% if can? :update, EducodeSales::Activity %>
|
@@ -48,40 +50,42 @@
|
|
48
50
|
{
|
49
51
|
field: 'name',
|
50
52
|
title: '活动名称',
|
51
|
-
width:
|
53
|
+
width: 400,
|
52
54
|
templet: '#teachers'
|
53
55
|
},
|
54
56
|
{
|
55
57
|
field: 'start_at',
|
56
|
-
width:
|
58
|
+
width: 120,
|
57
59
|
title: '时间',
|
58
60
|
sort: true,
|
59
61
|
},
|
60
62
|
{
|
61
63
|
field: 'days',
|
62
64
|
title: '天数',
|
63
|
-
width:
|
65
|
+
width: 100
|
64
66
|
},
|
65
67
|
{
|
66
68
|
field: 'teachers_count',
|
67
69
|
title: '教师数',
|
68
|
-
width:
|
70
|
+
width: 100,
|
69
71
|
templet: '#teachers_count'
|
70
72
|
},
|
71
73
|
{
|
72
74
|
field: 'students_count',
|
73
75
|
title: '学生数',
|
74
|
-
width:
|
76
|
+
width: 100
|
75
77
|
},
|
76
78
|
{
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
title: '操作',
|
80
|
+
width: 120,
|
81
|
+
fixed: 'right',
|
82
|
+
toolbar: '#currentTableBar',
|
83
|
+
align: "center"
|
81
84
|
}
|
82
85
|
]
|
83
86
|
],
|
84
87
|
limit: 20,
|
88
|
+
limits: [10,15,20,30,40,50,60,70,80,90],
|
85
89
|
page: true
|
86
90
|
});
|
87
91
|
|
@@ -117,6 +121,23 @@
|
|
117
121
|
layer.full(index);
|
118
122
|
});
|
119
123
|
}
|
124
|
+
else if (obj.event === 'import') { //
|
125
|
+
var content = miniPage.getHrefContent('/missions/teachers/import');
|
126
|
+
var openWH = miniPage.getOpenWidthHeight();
|
127
|
+
import_index = layer.open({
|
128
|
+
title: '导入数据',
|
129
|
+
type: 1,
|
130
|
+
shade: 0.2,
|
131
|
+
shadeClose: true,
|
132
|
+
area: ['200px', '100px'],
|
133
|
+
offset: 'auto',
|
134
|
+
closeBtn: 0,
|
135
|
+
content: content,
|
136
|
+
});
|
137
|
+
$(window).on("resize", function () {
|
138
|
+
layer.full(index);
|
139
|
+
});
|
140
|
+
}
|
120
141
|
});
|
121
142
|
|
122
143
|
table.on('tool(activities_table)', function (obj) {
|
@@ -15,7 +15,7 @@
|
|
15
15
|
{{# if (d.login) { }}
|
16
16
|
<a href="<%= base_url%>/users/{{d.login}}" class="layui-table-link" target="_blank">{{ d.name }}</a>
|
17
17
|
{{# } else {}}
|
18
|
-
<a href="
|
18
|
+
<a href="javascript:;" class="">{{ d.name }}</a>
|
19
19
|
{{# }}}
|
20
20
|
</script>
|
21
21
|
<script type="text/html" id="courses">
|
@@ -2,15 +2,23 @@
|
|
2
2
|
<div class="layui-form layuimini-form">
|
3
3
|
<div class="layui-form-item" style="padding: 25px">
|
4
4
|
<div class="layui-inline">
|
5
|
-
<label class="layui-form-label required"
|
5
|
+
<label class="layui-form-label required">商机名称</label>
|
6
6
|
<div class="layui-input-block">
|
7
|
-
<input type="text" name="name" autocomplete="off" lay-verify="required" class="layui-input"
|
7
|
+
<input type="text" name="name" autocomplete="off" lay-verify="required" class="layui-input" value="<%= @business.name %>" style="width: 300px;">
|
8
8
|
</div>
|
9
9
|
</div>
|
10
10
|
<div class="layui-inline">
|
11
11
|
<label class="layui-form-label required">单位部门</label>
|
12
12
|
<div class="layui-input-block" id="department" style="width: 300px;"></div>
|
13
13
|
</div>
|
14
|
+
<br>
|
15
|
+
<div class="layui-inline" style="padding-top: 20px">
|
16
|
+
<label class="layui-form-label ">商机来源</label>
|
17
|
+
<input id="source" type="text" name="source" autocomplete="off" class="layui-input" value="<%=@business.source %>" style="width: 300px;" placeholder="请输入商机来源">
|
18
|
+
</div>
|
19
|
+
<div class="layui-inline" style="padding-top: 20px">
|
20
|
+
<p style="padding-left: 40px">请填写提供本商机的人名(如‘张明’);如果为非头歌用户,请增加单位信息(如‘张明,华为公司’)</p>
|
21
|
+
</div>
|
14
22
|
<div class="layui-form-item m-t-20">
|
15
23
|
<div class="layui-input-block">
|
16
24
|
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="edit_business">提交</button>
|
@@ -64,14 +72,17 @@
|
|
64
72
|
} else {
|
65
73
|
request.authPut("missions/businesses/" + parent.id, {
|
66
74
|
department_id: department.getValue() || department_id,
|
67
|
-
name: data.field.name
|
75
|
+
name: data.field.name,
|
76
|
+
source: data.field.source
|
68
77
|
}, function (res) {
|
69
78
|
if (res.success == false) {
|
70
79
|
layer.alert(res.msg)
|
71
80
|
} else {
|
72
81
|
layer.close(parent.sindex);
|
73
82
|
parent.layer.close(parent.layer.getFrameIndex(window.name))
|
74
|
-
parent.table.reload('businesses_table')
|
83
|
+
parent.table.reload('businesses_table', {done: function() {
|
84
|
+
parent.drowpdwonRender()
|
85
|
+
}});
|
75
86
|
}
|
76
87
|
})
|
77
88
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
1
2
|
<h1 class="m-t-20 text-center"><%= @follow_up.business.name %></h1>
|
2
3
|
<div class="layui-form layuimini-form">
|
3
4
|
<div class="layui-form-item" style="padding: 25px">
|
@@ -16,9 +17,15 @@
|
|
16
17
|
<br>
|
17
18
|
<div class="layui-inline">
|
18
19
|
<label class="layui-form-label required">项目类型</label>
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
<%if EducodeSales::FollowUp.where(business_id: @follow_up.business.id,clazz_id: EducodeSales::Common.find_by(name: "O类").id).count >= 2 %>
|
21
|
+
<div class="layui-input-inline">
|
22
|
+
<%= select_tag "clazz_id", options_for_select([['O类',EducodeSales::Common.find_by(name: "O类").id]]),:disabled => true, class: 'required' %>
|
23
|
+
</div>
|
24
|
+
<%else %>
|
25
|
+
<div class="layui-input-inline">
|
26
|
+
<%= select_tag "clazz_id", options_for_select(@clazz, @follow_up&.clazz_id), class: 'required' %>
|
27
|
+
</div>
|
28
|
+
<%end %>
|
22
29
|
</div>
|
23
30
|
<div class="layui-inline">
|
24
31
|
<label class="layui-form-label required">项目阶段</label>
|
@@ -68,6 +75,12 @@
|
|
68
75
|
</div>
|
69
76
|
<span style="margin-top: 10px; float:left;">%</span>
|
70
77
|
</div>
|
78
|
+
<div class="layui-form-item">
|
79
|
+
<label class="layui-form-label">指定跟进人</label>
|
80
|
+
<div class="layui-input-inline">
|
81
|
+
<div id="edit_assign_follow" style="width: 512px;"></div>
|
82
|
+
</div>
|
83
|
+
</div>
|
71
84
|
<div class="layui-form-item layui-form-text">
|
72
85
|
<label class="layui-form-label required">商机说明</label>
|
73
86
|
<div class="layui-input-block">
|
@@ -101,10 +114,11 @@
|
|
101
114
|
</div>
|
102
115
|
|
103
116
|
<script>
|
104
|
-
layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'laydate'], function () {
|
117
|
+
layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'laydate', 'xmSelect'], function () {
|
105
118
|
var form = layui.form,
|
106
119
|
layer = layui.layer,
|
107
120
|
table = layui.table,
|
121
|
+
xmSelect = layui.xmSelect,
|
108
122
|
laytpl = layui.laytpl,
|
109
123
|
request = layui.request,
|
110
124
|
laydate = layui.laydate,
|
@@ -118,8 +132,42 @@
|
|
118
132
|
elem: '#reception_at_edit'
|
119
133
|
});
|
120
134
|
|
135
|
+
var sales_list = xmSelect.render({
|
136
|
+
el: '#edit_assign_follow',
|
137
|
+
remoteSearch: true,
|
138
|
+
clickClose: true,
|
139
|
+
delay: 1000,
|
140
|
+
paging: true,
|
141
|
+
pageRemote: true,
|
142
|
+
filterable: true,
|
143
|
+
remoteMethod: function (val, cb, show, pageIndex) {
|
144
|
+
$.ajax( '/missions/sales_staff', {
|
145
|
+
method: 'get',
|
146
|
+
data: {
|
147
|
+
q: val,
|
148
|
+
page: pageIndex
|
149
|
+
},
|
150
|
+
dataType: 'json',
|
151
|
+
success: function (res) {
|
152
|
+
var data = res.data;
|
153
|
+
if (res.code == 0) {
|
154
|
+
cb(res.data, res.count);
|
155
|
+
} else {
|
156
|
+
layer.msg(res.msg, {time: 2000, icon: 2, shade: 0.01});
|
157
|
+
}
|
158
|
+
}
|
159
|
+
})
|
160
|
+
}
|
161
|
+
})
|
162
|
+
sales_list.setValue(gon.sales)
|
163
|
+
|
121
164
|
form.render();
|
122
165
|
form.on('submit(update_follow_up)', function (data) {
|
166
|
+
var assign_follow = [];
|
167
|
+
sales_list.getValue().forEach(function(d) {
|
168
|
+
assign_follow.push(d.value);
|
169
|
+
})
|
170
|
+
data.field.assign_follow_up = assign_follow;
|
123
171
|
request.authPut("missions/follow_ups/<%= @follow_up.id%>", data.field, function (res) {
|
124
172
|
if (res.success == false) {
|
125
173
|
layer.alert(res.msg)
|
@@ -50,7 +50,7 @@
|
|
50
50
|
<input type="text" class="layui-input" id="date" name="date" placeholder=" - ">
|
51
51
|
</div>
|
52
52
|
</div>
|
53
|
-
<div class="layui-
|
53
|
+
<div class="layui-inline">
|
54
54
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
55
55
|
</button>
|
56
56
|
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
|
@@ -71,15 +71,18 @@
|
|
71
71
|
</div>
|
72
72
|
</script>
|
73
73
|
<script type="text/html" id="currentTableBar">
|
74
|
-
<% if can? :
|
75
|
-
|
76
|
-
|
74
|
+
<% if can? :add_follow, EducodeSales::Business %>
|
75
|
+
<% if @current_admin.is_admin %>
|
76
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_event">添加跟进记录</a>
|
77
|
+
<% else %>
|
78
|
+
{{# if ( d.assign_follow_ups.length > 0 && d.assign_follow_ups.indexOf(d.current_staff_id) >=0 || (d.assign_follow_ups.length == 0) || (d.current_staff_id == d.staff_id) ) {}}
|
79
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_event">添加跟进记录</a>
|
80
|
+
{{# }}}
|
77
81
|
<% end %>
|
78
|
-
|
79
|
-
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
82
|
+
|
80
83
|
<% end %>
|
81
|
-
<% if
|
82
|
-
|
84
|
+
<% if @more %>
|
85
|
+
<a class="layui-btn-xs data-count-edit more-btn" data-name={{d.name}} data-id={{d.id}}>更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
|
83
86
|
<% end %>
|
84
87
|
</script>
|
85
88
|
<script type="text/html" id="show_keys">
|
@@ -91,16 +94,17 @@
|
|
91
94
|
|
92
95
|
|
93
96
|
<script>
|
94
|
-
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate'], function () {
|
97
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate', 'dropdown'], function () {
|
95
98
|
var $ = layui.jquery,
|
96
99
|
form = layui.form,
|
97
100
|
request = layui.request,
|
98
101
|
miniPage = layui.miniPage,
|
102
|
+
dropdown = layui.dropdown,
|
99
103
|
laydate = layui.laydate;
|
100
104
|
|
101
105
|
laydate.render({
|
102
106
|
elem: '#date',
|
103
|
-
range: true
|
107
|
+
range: true
|
104
108
|
});
|
105
109
|
|
106
110
|
table = layui.table;
|
@@ -183,6 +187,11 @@
|
|
183
187
|
width: 110,
|
184
188
|
title: '渠道'
|
185
189
|
},
|
190
|
+
{
|
191
|
+
field: 'source',
|
192
|
+
width: 110,
|
193
|
+
title: '商机来源'
|
194
|
+
},
|
186
195
|
{
|
187
196
|
field: 'last_follow_person',
|
188
197
|
width: 120,
|
@@ -190,7 +199,7 @@
|
|
190
199
|
},
|
191
200
|
{
|
192
201
|
title: '操作',
|
193
|
-
minWidth:
|
202
|
+
minWidth: 170,
|
194
203
|
toolbar: '#currentTableBar',
|
195
204
|
align: "center",
|
196
205
|
fixed: 'right'
|
@@ -199,10 +208,107 @@
|
|
199
208
|
],
|
200
209
|
|
201
210
|
limit: 20,
|
211
|
+
limits: [10,15,20,30,40,50,60,70,80,90],
|
202
212
|
page: true,
|
203
|
-
skin: 'line'
|
213
|
+
skin: 'line',
|
214
|
+
done: function (res) {
|
215
|
+
drowpdwonRender()
|
216
|
+
}
|
217
|
+
|
204
218
|
});
|
205
219
|
|
220
|
+
var dropmenu = gon.menus;
|
221
|
+
|
222
|
+
drowpdwonRender = function() {
|
223
|
+
dropdown.render({
|
224
|
+
elem: '.more-btn',
|
225
|
+
data: dropmenu,
|
226
|
+
click: function(data, othis){
|
227
|
+
var elem = $(this.elem);
|
228
|
+
id = elem.data('id');
|
229
|
+
switch (data.event) {
|
230
|
+
case 'week':
|
231
|
+
week(id);
|
232
|
+
break;
|
233
|
+
case 'month':
|
234
|
+
month(id);
|
235
|
+
break;
|
236
|
+
case 'edit':
|
237
|
+
edit(id);
|
238
|
+
break;
|
239
|
+
case 'delete':
|
240
|
+
deleteBusiness(id, elem.data('name'));
|
241
|
+
break;
|
242
|
+
}
|
243
|
+
}
|
244
|
+
});
|
245
|
+
}
|
246
|
+
|
247
|
+
function week(id) {
|
248
|
+
var content = miniPage.getHrefContent('/missions/plans/new_week?business_id=' + id);
|
249
|
+
var openWH = miniPage.getOpenWidthHeight();
|
250
|
+
|
251
|
+
sindex = layer.open({
|
252
|
+
title: '添加周计划',
|
253
|
+
type: 1,
|
254
|
+
shade: 0.2,
|
255
|
+
maxmin: true,
|
256
|
+
shadeClose: true,
|
257
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
258
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
259
|
+
content: content
|
260
|
+
});
|
261
|
+
$(window).on("resize", function () {
|
262
|
+
layer.full(sindex);
|
263
|
+
});
|
264
|
+
}
|
265
|
+
|
266
|
+
function edit(id) {
|
267
|
+
var content = miniPage.getHrefContent('/missions/businesses/' + id + '/edit');
|
268
|
+
var openWH = miniPage.getOpenWidthHeight();
|
269
|
+
sindex = layer.open({
|
270
|
+
title: '编辑',
|
271
|
+
type: 1,
|
272
|
+
shade: 0.2,
|
273
|
+
maxmin: true,
|
274
|
+
shadeClose: true,
|
275
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
276
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
277
|
+
content: content
|
278
|
+
});
|
279
|
+
$(window).on("resize", function () {
|
280
|
+
layer.full(sindex);
|
281
|
+
});
|
282
|
+
}
|
283
|
+
|
284
|
+
function month(id) {
|
285
|
+
var content = miniPage.getHrefContent('/missions/plans/new_month?business_id=' + id);
|
286
|
+
var openWH = miniPage.getOpenWidthHeight();
|
287
|
+
sindex = layer.open({
|
288
|
+
title: '添加月计划',
|
289
|
+
type: 1,
|
290
|
+
shade: 0.2,
|
291
|
+
maxmin: true,
|
292
|
+
shadeClose: true,
|
293
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
294
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
295
|
+
content: content
|
296
|
+
});
|
297
|
+
$(window).on("resize", function () {
|
298
|
+
layer.full(sindex);
|
299
|
+
});
|
300
|
+
}
|
301
|
+
|
302
|
+
function deleteBusiness(id, name) {
|
303
|
+
layer.confirm('确定删除' + name, function (index) {
|
304
|
+
request.delete('missions/businesses/' + id, {}, function (res) {
|
305
|
+
layer.close(index);
|
306
|
+
table.reload("businesses_table")
|
307
|
+
})
|
308
|
+
});
|
309
|
+
}
|
310
|
+
|
311
|
+
|
206
312
|
var sort = {}, search = {};
|
207
313
|
table.on('sort(businesses_table)', function (obj) {
|
208
314
|
sort.field = obj.field;
|
@@ -265,7 +371,27 @@
|
|
265
371
|
table.on('tool(businesses_table)', function (obj) {
|
266
372
|
var data = obj.data;
|
267
373
|
id = data.id
|
268
|
-
|
374
|
+
if (obj.event === 'add_event') { // 监听添加操作
|
375
|
+
business_id = data.id
|
376
|
+
var content = miniPage.getHrefContent('/missions/businesses/new_follow_record?id=' + data.id);
|
377
|
+
var openWH = miniPage.getOpenWidthHeight();
|
378
|
+
sale_plan_index = layer.open({
|
379
|
+
title: '添加商机跟进记录',
|
380
|
+
type: 1,
|
381
|
+
shade: 0.2,
|
382
|
+
maxmin: true,
|
383
|
+
shadeClose: true,
|
384
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
385
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
386
|
+
content: content,
|
387
|
+
success: function (layero, index) {
|
388
|
+
form.render('select');
|
389
|
+
}
|
390
|
+
});
|
391
|
+
$(window).on("resize", function () {
|
392
|
+
layer.full(sale_plan_index);
|
393
|
+
});
|
394
|
+
} else if (obj.event === 'edit') {
|
269
395
|
var content = miniPage.getHrefContent('/missions/businesses/' + id + '/edit');
|
270
396
|
var openWH = miniPage.getOpenWidthHeight();
|
271
397
|
sindex = layer.open({
|
@@ -289,7 +415,27 @@
|
|
289
415
|
table.reload("businesses_table")
|
290
416
|
})
|
291
417
|
});
|
292
|
-
}
|
418
|
+
}else if (obj.event === 'add_follow') { // 监听添加操作
|
419
|
+
business_id = parent.business_id
|
420
|
+
var content = miniPage.getHrefContent('/missions/businesses/new_follow_record?id=' + parent.id);
|
421
|
+
var openWH = miniPage.getOpenWidthHeight();
|
422
|
+
sale_plan_index = layer.open({
|
423
|
+
title: '添加商机跟进记录',
|
424
|
+
type: 1,
|
425
|
+
shade: 0.2,
|
426
|
+
maxmin: true,
|
427
|
+
shadeClose: true,
|
428
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
429
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
430
|
+
content: content,
|
431
|
+
success: function (layero, index) {
|
432
|
+
form.render('select');
|
433
|
+
}
|
434
|
+
});
|
435
|
+
$(window).on("resize", function () {
|
436
|
+
layer.full(index);
|
437
|
+
});
|
438
|
+
}else if (obj.event === 'addWeek') {
|
293
439
|
var content = miniPage.getHrefContent('/missions/plans/new_week?business_id=' + obj.data.id);
|
294
440
|
var openWH = miniPage.getOpenWidthHeight();
|
295
441
|
|
@@ -16,6 +16,10 @@ json.data do
|
|
16
16
|
json.return_money d.return_money
|
17
17
|
json.place d.last_follow_up&.place&.name
|
18
18
|
json.last_follow_person d.last_follow_up.present? ? d.last_follow_up.staff.user.real_name : ''
|
19
|
+
json.source d.source
|
20
|
+
json.assign_follow_ups d.last_follow_up.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : []
|
21
|
+
json.current_staff_id @current_admin.id
|
22
|
+
json.staff_id d.staff_id
|
19
23
|
end
|
20
24
|
end
|
21
25
|
json.code 0
|
@@ -10,6 +10,14 @@
|
|
10
10
|
<label class="layui-form-label required">单位部门</label>
|
11
11
|
<div class="layui-input-block" id="add_department" style="width: 300px;"></div>
|
12
12
|
</div>
|
13
|
+
<br>
|
14
|
+
<div class="layui-inline" style="padding-top: 20px">
|
15
|
+
<label class="layui-form-label ">商机来源</label>
|
16
|
+
<input type="text" name="source" autocomplete="off" class="layui-input" style="width: 300px;" placeholder="请输入商机来源">
|
17
|
+
</div>
|
18
|
+
<div class="layui-inline" style="padding-top: 20px">
|
19
|
+
<p style="padding-left: 40px">请填写提供本商机的人名(如‘张明’);如果为非头歌用户,请增加单位信息(如‘张明,华为公司’)</p>
|
20
|
+
</div>
|
13
21
|
<div class="layui-form-item m-t-20">
|
14
22
|
<div class="layui-input-block">
|
15
23
|
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="create_business">提交</button>
|
@@ -62,7 +70,9 @@
|
|
62
70
|
}
|
63
71
|
request.authPost("missions/businesses", {
|
64
72
|
department_id: add_department.getValue(),
|
65
|
-
name: data.field.name
|
73
|
+
name: data.field.name,
|
74
|
+
source: data.field.source
|
75
|
+
|
66
76
|
}, function (res) {
|
67
77
|
if (res.success == false) {
|
68
78
|
layer.alert(res.msg)
|