educode_sales 0.9.76 → 0.9.78
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/contracts_controller.rb +77 -17
- data/app/models/educode_sales/business.rb +1 -1
- data/app/models/educode_sales/product_catalog.rb +7 -0
- data/app/views/educode_sales/contracts/_follows.html.erb +4 -31
- data/app/views/educode_sales/contracts/_list.html.erb +7 -7
- data/app/views/educode_sales/contracts/assign.html.erb +1 -1
- data/app/views/educode_sales/contracts/edit_product.html.erb +85 -0
- data/app/views/educode_sales/contracts/follow_ups.json.jbuilder +1 -0
- data/app/views/educode_sales/contracts/index.html.erb +0 -6
- data/app/views/educode_sales/contracts/new_product.html.erb +85 -0
- data/app/views/educode_sales/contracts/product_list.html.erb +232 -0
- data/app/views/educode_sales/contracts/product_list.json.jbuilder +16 -0
- data/app/views/educode_sales/contracts/show_follow_record.html.erb +169 -0
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +1 -1
- data/app/views/layouts/educode_sales/application.html.erb +4 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20230502142912_create_educode_sales_product_catalogs.rb +20 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -5
- data/app/views/educode_sales/contracts/_product_list.html.erb +0 -358
- data/app/views/educode_sales/contracts/product_list.js.erb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b22a3361ca68bbfaa0704aa28aeecb7f2906973b836971183936c3c13910fbe
|
4
|
+
data.tar.gz: 35b7435979cecacdc00bae4b28bf3112e8e6cb5a1b36cd2a8035e91fc817d36b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18719f022f0e3d7d1d91f4f111ecd8b234b450e5244874bf21fce753220e2a7c8e0bb02341c88ac8e6d2f9a5dd4f6540d72c41b1db9f0b1a76025654b8c006d0
|
7
|
+
data.tar.gz: 5a6d3f438a743d0004351c9d2361c60b2b79da3d468a4776954fc577f263bcd784022bca5c3ba2cddb094dfba9a66be609ef7614469ba5b6b66461183f8decbe
|
@@ -9,7 +9,6 @@ module EducodeSales
|
|
9
9
|
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
10
10
|
staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11)
|
11
11
|
@staffs = staffs.map { |d| [d.user.real_name, d.id]}
|
12
|
-
gon.staffs = staffs.map { |d| {name: d.user.real_name, value: d.id } }
|
13
12
|
gon.place = params[:place_id].present? ? [{ value: params[:place_id], name: EducodeSales::Place.find(params[:place_id]).name }] : []
|
14
13
|
gon.staffs = staffs.map { |d| {name: d.user.real_name, value: d.id } }
|
15
14
|
|
@@ -18,18 +17,18 @@ module EducodeSales
|
|
18
17
|
# 项目类型
|
19
18
|
bussiness_type = EducodeSales::Business.include_types(params[:type]) || []
|
20
19
|
end
|
21
|
-
|
20
|
+
|
22
21
|
business_step = []
|
23
22
|
if params[:step]
|
24
23
|
# 项目阶段
|
25
24
|
business_step = EducodeSales::Business.include_steps(params[:step]) || []
|
26
25
|
end
|
27
|
-
|
28
|
-
|
26
|
+
|
27
|
+
|
29
28
|
gon.business_type = Common.where(clazz: 'business_type').map do |d|
|
30
29
|
{value: d.id, name: d.name, selected: bussiness_type.include?(d.extras)}
|
31
30
|
end
|
32
|
-
|
31
|
+
|
33
32
|
gon.business_step = Common.where(clazz: 'business_step', name: ['已中标', '已签单', '已验收', '回款中', '服务中', '已结束']).order("position").map do |d|
|
34
33
|
{value: d.id, name: d.name, selected: business_step.include?(d.name)}
|
35
34
|
end
|
@@ -99,7 +98,7 @@ module EducodeSales
|
|
99
98
|
if params[:q].present? && params[:q][:business_type].present?
|
100
99
|
@businesses = @businesses.where("educode_sales_businesses.clazz_id in (?)", params[:q][:business_type].split(",").map(&:to_i))
|
101
100
|
end
|
102
|
-
|
101
|
+
|
103
102
|
if params[:q].present? && params[:q][:business_step].present?
|
104
103
|
@businesses = @businesses.joins("
|
105
104
|
JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
|
@@ -159,14 +158,14 @@ module EducodeSales
|
|
159
158
|
# 销售经理
|
160
159
|
@businesses = @businesses.joins("LEFT JOIN educode_sales_assign_follow_ups ON educode_sales_assign_follow_ups.follow_up_id = educode_sales_businesses.last_follow_up_id").
|
161
160
|
where("(educode_sales_assign_follow_ups.id IS NOT NULL AND educode_sales_assign_follow_ups.staff_id = ?) OR (educode_sales_assign_follow_ups.id IS NULL AND educode_sales_businesses.staff_id = ?)", params[:q][:sales_staff_id], params[:q][:sales_staff_id])
|
162
|
-
|
161
|
+
|
163
162
|
end
|
164
163
|
|
165
164
|
if params[:q].present? && params[:q][:after_sales_staff_id].present?
|
166
165
|
# 售后工程师
|
167
166
|
@businesses = @businesses.joins("LEFT JOIN educode_sales_assign_staffs ON educode_sales_assign_staffs.sourcable_type = 'EducodeSales::Business' AND educode_sales_assign_staffs.sourcable_id = educode_sales_businesses.id").
|
168
167
|
where("educode_sales_assign_staffs.staff_id = ?", params[:q][:after_sales_staff_id])
|
169
|
-
|
168
|
+
|
170
169
|
end
|
171
170
|
|
172
171
|
# 商机变化
|
@@ -226,6 +225,8 @@ module EducodeSales
|
|
226
225
|
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
227
226
|
staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11)
|
228
227
|
@staffs = staffs.map { |d| [d.user.real_name, d.id]}
|
228
|
+
role = Role.find_by(name: '售后工程师')
|
229
|
+
@after_sales_staffs = Staff.joins(:user).where(role_id: role.id).map { |d| [d.user.real_name, d.id]}
|
229
230
|
end
|
230
231
|
|
231
232
|
def new_follow_up
|
@@ -241,7 +242,7 @@ module EducodeSales
|
|
241
242
|
contract_ids = Common.where(clazz: '商机阶段', name: ['已中标', '已签单', '已验收', '回款中', '服务中', '已结束']).pluck(:id)
|
242
243
|
@follow_ups = FollowUp.joins("
|
243
244
|
JOIN educode_sales_businesses ON educode_sales_follow_ups.business_id = educode_sales_businesses.id
|
244
|
-
").joins(:follow_up_trends).where("educode_sales_follow_ups.stage_id in (?)", contract_ids).select("educode_sales_follow_ups.*, educode_sales_follow_up_trends.clazz, educode_sales_follow_up_trends.content")
|
245
|
+
").joins(:follow_up_trends).where("educode_sales_follow_ups.stage_id in (?)", contract_ids).select("educode_sales_follow_ups.*, educode_sales_follow_up_trends.clazz, educode_sales_follow_up_trends.content, educode_sales_follow_up_trends.id AS trend_id")
|
245
246
|
|
246
247
|
if @current_admin.is_admin?
|
247
248
|
@follow_ups = @follow_ups
|
@@ -333,7 +334,7 @@ module EducodeSales
|
|
333
334
|
follow_up.staff = @current_admin
|
334
335
|
|
335
336
|
last_follow_up = @business.last_follow_up
|
336
|
-
|
337
|
+
|
337
338
|
if follow_up.save!
|
338
339
|
contract_lists = EducodeSales::ContractDateList.clazzs.invert
|
339
340
|
data.each_with_index do |s, i|
|
@@ -358,38 +359,97 @@ module EducodeSales
|
|
358
359
|
end
|
359
360
|
|
360
361
|
def assign
|
361
|
-
|
362
|
-
staffs = Staff.joins(:user).where(
|
363
|
-
|
362
|
+
role = Role.find_by( name: '售后工程师')
|
363
|
+
staffs = Staff.joins(:user).where(role_id: role.id)
|
364
|
+
business = Business.find(params[:id])
|
365
|
+
selected_staff_ids = business.assign_staffs.pluck(:staff_id)
|
366
|
+
gon.sales_staffs = staffs.map { |d| {name: d.user.real_name, value: d.id, selected: selected_staff_ids.include?(d.id) } }
|
364
367
|
render layout: false
|
365
368
|
end
|
366
369
|
|
367
370
|
def product_list
|
368
371
|
respond_to do |format|
|
369
372
|
format.html do
|
370
|
-
|
371
|
-
end
|
372
|
-
format.js do
|
373
373
|
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
374
374
|
staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11)
|
375
375
|
@staffs = staffs.map { |d| [d.user.real_name, d.id]}
|
376
|
+
gon.staffs = staffs.map { |d| {name: d.user.real_name, value: d.id } }
|
377
|
+
gon.business_step = Common.where(clazz: 'business_step', name: ['已中标', '已签单', '已验收', '回款中', '服务中', '已结束']).order("position").map do |d|
|
378
|
+
{value: d.id, name: d.name, selected: false}
|
379
|
+
end
|
376
380
|
end
|
377
381
|
format.json do
|
382
|
+
@product_catalogs = ProductCatalog
|
383
|
+
@product_catalogs = @product_catalogs.where("name like ?", "%#{params[:q][:name]}%") if params[:q] && params[:q][:name].present?
|
384
|
+
@product_catalogs = @product_catalogs.where(item_clazz: params[:q][:item_clazz]) if params[:q] && params[:q][:item_clazz].present?
|
385
|
+
@product_catalogs = @product_catalogs.page(params[:page]).per(params[:limit])
|
378
386
|
end
|
379
387
|
end
|
380
388
|
end
|
381
389
|
|
382
390
|
def assign_staff
|
383
391
|
@business = Business.find(params[:id])
|
392
|
+
assign_staffs = []
|
384
393
|
params[:to_id].split(",").each do |i|
|
385
|
-
@business.
|
394
|
+
assign_staffs << AssignStaff.find_or_initialize_by(sourcable_id: @business.id, staff_id: i, sourcable_type: "EducodeSales::Business")
|
386
395
|
end
|
396
|
+
@business.assign_staffs = assign_staffs
|
397
|
+
@business.save
|
387
398
|
render_success
|
388
399
|
end
|
389
400
|
|
401
|
+
def new_product
|
402
|
+
render layout: false
|
403
|
+
end
|
404
|
+
|
405
|
+
def product_catalog
|
406
|
+
product_catalog = ProductCatalog.new(product_up_params)
|
407
|
+
if product_catalog.save
|
408
|
+
render_success
|
409
|
+
else
|
410
|
+
render_failure product_catalog
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
def update_product_catalog
|
415
|
+
product_catalog = ProductCatalog.find(params[:id])
|
416
|
+
if product_catalog.update(product_up_params)
|
417
|
+
render_success
|
418
|
+
else
|
419
|
+
render_failure product_catalog
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
def edit_product
|
424
|
+
@product_catalog = ProductCatalog.find(params[:id])
|
425
|
+
render layout: false
|
426
|
+
end
|
427
|
+
|
428
|
+
def show_follow_record
|
429
|
+
@follow_up = FollowUp.find(params[:follow_up_id])
|
430
|
+
@business = Business.find(@follow_up.business_id)
|
431
|
+
@show_follow_recored_deployment = EducodeSales::FollowUp::BUSINESS_DEPLOYMENT.to_h.invert[@follow_up.o_business_deployment]
|
432
|
+
|
433
|
+
@trend = FollowUpTrend.find(params[:trend_id])
|
434
|
+
|
435
|
+
id = @follow_up.id
|
436
|
+
@follow_ups = @business.follow_ups
|
437
|
+
ids = @follow_ups.ids
|
438
|
+
size = ids.size
|
439
|
+
ids = ids.reverse
|
440
|
+
index = ids.index(id)
|
441
|
+
@next_id = (index != size - 1 && size > 1) ? ids[index + 1] : 0
|
442
|
+
@pre_id = (index != 0 && size > 1) ? ids[index - 1] : 0
|
443
|
+
render layout: false
|
444
|
+
end
|
445
|
+
|
390
446
|
private
|
391
447
|
def follow_up_params
|
392
448
|
params.permit(:o_business_deployment, :plan_signed_date, :bidded_days, :signed_date, :signed_department_id, :service_years, :service_start_time, :service_end_time, :funding_source)
|
393
449
|
end
|
450
|
+
|
451
|
+
def product_up_params
|
452
|
+
params.permit(:name, :item_clazz, :brand, :specification, :unit, :param, :source_method, :supplier)
|
453
|
+
end
|
394
454
|
end
|
395
455
|
end
|
@@ -19,7 +19,7 @@ module EducodeSales
|
|
19
19
|
has_many :business_watches, dependent: :destroy
|
20
20
|
has_many :business_histories, dependent: :destroy
|
21
21
|
|
22
|
-
has_many :assign_staffs, as: :sourcable # 售后人员
|
22
|
+
has_many :assign_staffs, as: :sourcable, dependent: :destroy # 售后人员
|
23
23
|
|
24
24
|
# 关联关注
|
25
25
|
has_many :users, :class_name => 'EducodeSales::BusinessRelationShip', foreign_key: 'business_id', :dependent => :destroy
|
@@ -63,7 +63,7 @@
|
|
63
63
|
</div>
|
64
64
|
</script>
|
65
65
|
<script type="text/html" id="currentTableBar_follows">
|
66
|
-
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="
|
66
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="show_detail">详情</a>
|
67
67
|
<% if can?(:advise, EducodeSales::Business) %>
|
68
68
|
<a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="add_advise">团队建议</a>
|
69
69
|
<% end %>
|
@@ -201,15 +201,6 @@
|
|
201
201
|
},
|
202
202
|
where: {q: search, sort: sort}
|
203
203
|
}, 'data');
|
204
|
-
// table.reload('businesses_table', {
|
205
|
-
// page: {
|
206
|
-
// curr: 1
|
207
|
-
// },
|
208
|
-
// where: {q: search, sort: sort}
|
209
|
-
// }, 'data');
|
210
|
-
// form.val('search_form', {
|
211
|
-
// name: data.field.name, department: data.field.department, staff_id: data.field.staff_id, area: data.field.area , description: data.field.description
|
212
|
-
// })
|
213
204
|
return false;
|
214
205
|
});
|
215
206
|
|
@@ -246,29 +237,11 @@
|
|
246
237
|
table.on('tool(contract_follows_table)', function (obj) {
|
247
238
|
var data = obj.data;
|
248
239
|
id = data.id
|
249
|
-
if (obj.event === '
|
250
|
-
var content = miniPage.getHrefContent('/missions/
|
240
|
+
if (obj.event === 'show_detail') { // 监听添加操作
|
241
|
+
var content = miniPage.getHrefContent('/missions/contracts/show_follow_record?follow_up_id=' + data.id + "&trend_id=" + data.trend_id);
|
251
242
|
var openWH = miniPage.getOpenWidthHeight();
|
252
243
|
show_index = layer.open({
|
253
|
-
title: '
|
254
|
-
type: 1,
|
255
|
-
shade: 0.2,
|
256
|
-
maxmin: true,
|
257
|
-
shadeClose: true,
|
258
|
-
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
259
|
-
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
260
|
-
content: content
|
261
|
-
});
|
262
|
-
$(window).on("resize", function () {
|
263
|
-
layer.full(index);
|
264
|
-
});
|
265
|
-
} else if (obj.event === 'business') {
|
266
|
-
business_id = data.business_id
|
267
|
-
business_name = data.business
|
268
|
-
content = miniPage.getHrefContent('/missions/businesses/show_follow?id=' + data.business_id);
|
269
|
-
openWH = miniPage.getOpenWidthHeight();
|
270
|
-
index = layer.open({
|
271
|
-
title: '商机列表/' + data.business + '的跟进记录',
|
244
|
+
title: '查看合同动态',
|
272
245
|
type: 1,
|
273
246
|
shade: 0.2,
|
274
247
|
maxmin: true,
|
@@ -46,7 +46,7 @@
|
|
46
46
|
<div class="layui-inline">
|
47
47
|
<label class="layui-form-label">售后工程师</label>
|
48
48
|
<div class="layui-input-inline">
|
49
|
-
<%= select_tag "after_sales_staff_id", options_for_select(@
|
49
|
+
<%= select_tag "after_sales_staff_id", options_for_select(@after_sales_staffs, params[:staff_id]), { 'lay-filter': 'staff_id', include_blank: true , "lay-search": "" } %>
|
50
50
|
</div>
|
51
51
|
</div>
|
52
52
|
<div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
@@ -161,7 +161,7 @@
|
|
161
161
|
elem: '#date',
|
162
162
|
range: true
|
163
163
|
});
|
164
|
-
|
164
|
+
|
165
165
|
laydate.render({
|
166
166
|
elem: '#invitation_at',
|
167
167
|
range: true
|
@@ -525,7 +525,7 @@
|
|
525
525
|
},
|
526
526
|
where: {q: search, sort: sort}
|
527
527
|
}, 'data');
|
528
|
-
|
528
|
+
|
529
529
|
return false;
|
530
530
|
});
|
531
531
|
|
@@ -533,7 +533,7 @@
|
|
533
533
|
var field = data.field;
|
534
534
|
form.val('search_form', {
|
535
535
|
name: '', department: '', staff_id: '', business_type: '', business_step: '',
|
536
|
-
place_id: '', date: '', area: '', invitation_at: '', business_year: '', number: ''
|
536
|
+
place_id: '', date: '', area: '', invitation_at: '', business_year: '', number: '', o_business_deployment: '',after_sales_staff_id: ''
|
537
537
|
})
|
538
538
|
business_type_list.setValue([])
|
539
539
|
business_step_list.setValue([])
|
@@ -581,10 +581,10 @@
|
|
581
581
|
layer.full(sindex);
|
582
582
|
});
|
583
583
|
return false;
|
584
|
-
}
|
584
|
+
}
|
585
585
|
});
|
586
|
-
|
587
|
-
|
586
|
+
|
587
|
+
|
588
588
|
});
|
589
589
|
</script>
|
590
590
|
<style>
|
@@ -37,7 +37,7 @@
|
|
37
37
|
request.post('missions/contracts/' + parent.id +"/assign_staff", {to_id: staff_list_select.getValue('valueStr')}, function (res) {
|
38
38
|
layer.close(index);
|
39
39
|
layer.close(parentIndex)
|
40
|
-
|
40
|
+
parent.table.reload('contact_table')
|
41
41
|
})
|
42
42
|
});
|
43
43
|
return false;
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
2
|
+
<div class="layui-form layuimini-form" style="padding:30px">
|
3
|
+
<div class="layui-form-item">
|
4
|
+
<div class="layui-inline">
|
5
|
+
<label class="layui-form-label required">产品名称:</label>
|
6
|
+
<div class="layui-input-inline">
|
7
|
+
<input type="text" name="name" value="<%= @product_catalog.name %>" class="layui-input" lay-verify="required">
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="layui-inline">
|
11
|
+
<label class="layui-form-label required">销售品目:</label>
|
12
|
+
<div class="layui-input-inline">
|
13
|
+
<%= select_tag "item_clazz", options_for_select(EducodeSales::ProductCatalog.item_clazzs.keys, @product_catalog.item_clazz), { 'lay-filter': 'item_clazz', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="layui-form-item">
|
18
|
+
<div class="layui-inline">
|
19
|
+
<label class="layui-form-label required">品牌:</label>
|
20
|
+
<div class="layui-input-inline">
|
21
|
+
<input type="text" name="brand" value="<%= @product_catalog.brand %>" class="layui-input" lay-verify="required">
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<div class="layui-inline">
|
25
|
+
<label class="layui-form-label required">规格型号:</label>
|
26
|
+
<div class="layui-input-inline">
|
27
|
+
<input type="text" name="specification" value="<%= @product_catalog.specification %>" class="layui-input" lay-verify="required">
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
</div>
|
32
|
+
<div class="layui-form-item">
|
33
|
+
<div class="layui-inline">
|
34
|
+
<label class="layui-form-label required">单位:</label>
|
35
|
+
<div class="layui-input-inline">
|
36
|
+
<input type="text" name="unit" value="<%= @product_catalog.unit %>" class="layui-input" lay-verify="required">
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<div class="layui-inline">
|
40
|
+
<label class="layui-form-label required">参数:</label>
|
41
|
+
<div class="layui-input-inline">
|
42
|
+
<input type="text" name="param" value="<%= @product_catalog.param %>" class="layui-input" lay-verify="required">
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
<div class="layui-form-item">
|
47
|
+
<div class="layui-inline">
|
48
|
+
<label class="layui-form-label required">来源方式:</label>
|
49
|
+
<div class="layui-input-inline">
|
50
|
+
<%= select_tag "source_method", options_for_select(EducodeSales::ProductCatalog.source_methods.keys, @product_catalog.source_method), { 'lay-filter': 'source_method', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
<div class="layui-inline">
|
54
|
+
<label class="layui-form-label required">供应商:</label>
|
55
|
+
<div class="layui-input-inline">
|
56
|
+
<input type="text" name="supplier" value="<%= @product_catalog.supplier %>" class="layui-input" lay-verify="required">
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
<div class="layui-form-item">
|
61
|
+
<div class="layui-input-block">
|
62
|
+
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
|
67
|
+
<script>
|
68
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput'], function() {
|
69
|
+
var form = layui.form,
|
70
|
+
layer = layui.layer,
|
71
|
+
table = layui.table,
|
72
|
+
laytpl = layui.laytpl,
|
73
|
+
request = layui.request,
|
74
|
+
$ = layui.$;
|
75
|
+
form.render();
|
76
|
+
|
77
|
+
form.on('submit(saveBtn)', function(data) {
|
78
|
+
request.put("missions/contracts/"+ parent.id + "/update_product_catalog", data.field, function(res) {
|
79
|
+
layer.close(parent.edit_production_index)
|
80
|
+
parent.table.reload('contact_product_table')
|
81
|
+
})
|
82
|
+
return false;
|
83
|
+
});
|
84
|
+
});
|
85
|
+
</script>
|
@@ -5,6 +5,7 @@ json.data do
|
|
5
5
|
json.stage d.stage.name
|
6
6
|
json.staff d.staff.user.real_name
|
7
7
|
json.clazz EducodeSales::FollowUpTrend.clazzs.invert[d['clazz']]
|
8
|
+
json.trend_id d['trend_id']
|
8
9
|
json.description d['content']
|
9
10
|
json.school d.business.department&.school&.name
|
10
11
|
json.school_id d.business.department&.school&.id
|
@@ -3,7 +3,6 @@
|
|
3
3
|
<ul class="layui-tab-title">
|
4
4
|
<li class="layui-this follows_li">跟进动态</li>
|
5
5
|
<li class="contracts_list_li">合同列表</li>
|
6
|
-
<li class="contracts_product_li">产品目录</li>
|
7
6
|
</ul>
|
8
7
|
<div class="layui-tab-content">
|
9
8
|
<div class="layui-tab-item follows_div layui-show">
|
@@ -12,9 +11,6 @@
|
|
12
11
|
<div class="layui-tab-item contracts_list_div">
|
13
12
|
<div id="contract_list_wraper"></div>
|
14
13
|
</div>
|
15
|
-
<div class="layui-tab-item contracts_product_div">
|
16
|
-
<div id="contract_product_wraper"></div>
|
17
|
-
</div>
|
18
14
|
</div>
|
19
15
|
</div>
|
20
16
|
|
@@ -35,8 +31,6 @@
|
|
35
31
|
element.on('tab(contract_tab)', function(data) {
|
36
32
|
if (data.index == 1 && $("#contract_list").length == 0) {
|
37
33
|
loadPage('/missions/contracts/list')
|
38
|
-
} else if (data.index == 2 && $("#product_list").length == 0) {
|
39
|
-
loadPage('/missions/contracts/product_list')
|
40
34
|
}
|
41
35
|
});
|
42
36
|
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
2
|
+
<div class="layui-form layuimini-form" style="padding:30px">
|
3
|
+
<div class="layui-form-item">
|
4
|
+
<div class="layui-inline">
|
5
|
+
<label class="layui-form-label required">产品名称:</label>
|
6
|
+
<div class="layui-input-inline">
|
7
|
+
<input type="text" name="name" value="" class="layui-input" lay-verify="required">
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="layui-inline">
|
11
|
+
<label class="layui-form-label required">销售品目:</label>
|
12
|
+
<div class="layui-input-inline">
|
13
|
+
<%= select_tag "item_clazz", options_for_select(EducodeSales::ProductCatalog.item_clazzs.keys), { 'lay-filter': 'item_clazz', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="layui-form-item">
|
18
|
+
<div class="layui-inline">
|
19
|
+
<label class="layui-form-label required">品牌:</label>
|
20
|
+
<div class="layui-input-inline">
|
21
|
+
<input type="text" name="brand" value="" class="layui-input" lay-verify="required">
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<div class="layui-inline">
|
25
|
+
<label class="layui-form-label required">规格型号:</label>
|
26
|
+
<div class="layui-input-inline">
|
27
|
+
<input type="text" name="specification" value="" class="layui-input" lay-verify="required">
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
</div>
|
32
|
+
<div class="layui-form-item">
|
33
|
+
<div class="layui-inline">
|
34
|
+
<label class="layui-form-label required">单位:</label>
|
35
|
+
<div class="layui-input-inline">
|
36
|
+
<input type="text" name="unit" value="" class="layui-input" lay-verify="required">
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<div class="layui-inline">
|
40
|
+
<label class="layui-form-label required">参数:</label>
|
41
|
+
<div class="layui-input-inline">
|
42
|
+
<input type="text" name="param" value="" class="layui-input" lay-verify="required">
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
<div class="layui-form-item">
|
47
|
+
<div class="layui-inline">
|
48
|
+
<label class="layui-form-label required">来源方式:</label>
|
49
|
+
<div class="layui-input-inline">
|
50
|
+
<%= select_tag "source_method", options_for_select(EducodeSales::ProductCatalog.source_methods.keys), { 'lay-filter': 'source_method', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
<div class="layui-inline">
|
54
|
+
<label class="layui-form-label required">供应商:</label>
|
55
|
+
<div class="layui-input-inline">
|
56
|
+
<input type="text" name="supplier" value="" class="layui-input" lay-verify="required">
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
<div class="layui-form-item">
|
61
|
+
<div class="layui-input-block">
|
62
|
+
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
|
67
|
+
<script>
|
68
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput'], function() {
|
69
|
+
var form = layui.form,
|
70
|
+
layer = layui.layer,
|
71
|
+
table = layui.table,
|
72
|
+
laytpl = layui.laytpl,
|
73
|
+
request = layui.request,
|
74
|
+
$ = layui.$;
|
75
|
+
form.render();
|
76
|
+
|
77
|
+
form.on('submit(saveBtn)', function(data) {
|
78
|
+
request.post("missions/contracts/product_catalog", data.field, function(res) {
|
79
|
+
layer.close(parent.add_product_index)
|
80
|
+
parent.table.reload('contact_product_table')
|
81
|
+
})
|
82
|
+
return false;
|
83
|
+
});
|
84
|
+
});
|
85
|
+
</script>
|