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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec6bd4aff88d498d4b416ae1a654e7e0d391a1438b3dc3358ab9d0c44e843355
4
- data.tar.gz: 3b83113b2949c8b7ea4faf3b029a367ecf994b6a42492b67111c5b6bb6539eb6
3
+ metadata.gz: 7b22a3361ca68bbfaa0704aa28aeecb7f2906973b836971183936c3c13910fbe
4
+ data.tar.gz: 35b7435979cecacdc00bae4b28bf3112e8e6cb5a1b36cd2a8035e91fc817d36b
5
5
  SHA512:
6
- metadata.gz: 99d66d74810cd737a62330d5b69782fbcf3c26a9e087fb7859c53f37c6eb5187f03f2692afd67f23060be03c3baa397e0928da12202d3d59b55314844fac6dc0
7
- data.tar.gz: f997afa839cf458d0bbcdbedf8aa4a564c512499092c4cc9597449d9c8a9b39e3d1825f3a45ac1f777a453b9467da4fbf698b743a86804c06d010de81170cd86
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
- common = Common.find_by(clazz: 'staff_type', name: '销售')
362
- staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11)
363
- gon.sales_staffs = staffs.map { |d| {name: d.user.real_name, value: d.id } }
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.assign_staffs.create({staff_id: i})
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
@@ -0,0 +1,7 @@
1
+ module EducodeSales
2
+ class ProductCatalog < ApplicationRecord
3
+
4
+ enum item_clazz: %w(平台 课程 硬件 技术服务 培训服务 咨询服务 云服务 装修服务 其他)
5
+ enum source_method: %w(自研 在研 待研 外购)
6
+ end
7
+ end
@@ -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="add_event">详情</a>
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 === 'add_event') { // 监听添加操作
250
- var content = miniPage.getHrefContent('/missions/businesses/show_follow_record?follow_up_id=' + data.id);
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(@staffs, params[:staff_id]), { 'lay-filter': 'staff_id', include_blank: true , "lay-search": "" } %>
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
- // parent.table.reload('contact_table')
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>