educode_sales 0.9.75 → 0.9.77
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 +153 -14
- data/app/models/educode_sales/business.rb +2 -0
- data/app/models/educode_sales/contract_date_list.rb +2 -0
- data/app/models/educode_sales/follow_up.rb +3 -1
- data/app/models/educode_sales/follow_up_trend.rb +8 -0
- data/app/models/educode_sales/product_catalog.rb +7 -0
- data/app/views/educode_sales/contracts/_follows.html.erb +11 -39
- data/app/views/educode_sales/contracts/_list.html.erb +11 -6
- data/app/views/educode_sales/contracts/assign.html.erb +46 -0
- data/app/views/educode_sales/contracts/edit_product.html.erb +85 -0
- data/app/views/educode_sales/contracts/follow_ups.json.jbuilder +4 -5
- data/app/views/educode_sales/contracts/index.json.jbuilder +1 -1
- data/app/views/educode_sales/contracts/new_follow_up.html.erb +8 -18
- 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 +11 -0
- data/db/migrate/20230501034307_create_educode_sales_follow_up_trends.rb +12 -0
- data/db/migrate/20230502142912_create_educode_sales_product_catalogs.rb +20 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +15 -6
- data/app/assets/images/educode_sales/indexlogo.png +0 -0
@@ -94,7 +94,7 @@
|
|
94
94
|
<div class="layui-inline">
|
95
95
|
<label class="layui-form-label">项目资金来源:</label>
|
96
96
|
<div class="layui-input-inline" style="line-height: 38px;">
|
97
|
-
<%= select_tag "
|
97
|
+
<%= select_tag "funding_source", options_for_select([''] + EducodeSales::FollowUp::funding_sources.keys, @last_follow_up&.funding_source), class: 'required' %>
|
98
98
|
</div>
|
99
99
|
</div>
|
100
100
|
<br>
|
@@ -120,7 +120,7 @@
|
|
120
120
|
</div>
|
121
121
|
</div>
|
122
122
|
<div class="layui-inline">
|
123
|
-
<label class="layui-form-label
|
123
|
+
<label class="layui-form-label" style="width:100px;">签约单位:</label>
|
124
124
|
<div class="layui-input-inline" style="line-height: 38px;">
|
125
125
|
<div id="add_department" style="width: 200px"></div>
|
126
126
|
</div>
|
@@ -330,10 +330,10 @@
|
|
330
330
|
</div>
|
331
331
|
<div class="layui-form-mid layui-word-aux">年</div>
|
332
332
|
</div>
|
333
|
-
<div class="layui-form-item layui-form-text" style="margin-top:25px;">
|
333
|
+
<div class="layui-form-item layui-form-text required" style="margin-top:25px;">
|
334
334
|
<label class="layui-form-label">最新根据记录:</label>
|
335
335
|
<div class="layui-input-block">
|
336
|
-
<textarea name="content" placeholder=" " class="layui-textarea"></textarea>
|
336
|
+
<textarea name="content" placeholder=" " class="layui-textarea" lay-verify="required"></textarea>
|
337
337
|
</div>
|
338
338
|
</div>
|
339
339
|
<div class="layui-form-item m-t-20">
|
@@ -601,9 +601,9 @@
|
|
601
601
|
})
|
602
602
|
|
603
603
|
|
604
|
-
var
|
604
|
+
var add_department_select = selectInput.render({
|
605
605
|
elem: '#add_department',
|
606
|
-
name: '
|
606
|
+
name: 'signed_departmen', // 渲染的input的name值
|
607
607
|
layFilter: 'test', //同layui form参数lay-filter
|
608
608
|
// layVerify: 'required', //同layui form参数lay-verify
|
609
609
|
layVerType: 'tips', // 同layui form参数lay-verType
|
@@ -624,19 +624,9 @@
|
|
624
624
|
});
|
625
625
|
|
626
626
|
form.on('submit(add_follow_up)', function (data) {
|
627
|
-
if (data.field.clazz_id == <%= EducodeSales::Common.where(extras: EducodeSales::Common::OTYPE).first&.id %>) {
|
628
|
-
if (data.field.service_time.length == 0) {
|
629
|
-
layer.msg('请选择服务期', {time: 2000, icon: 2, shade: 0.01});
|
630
|
-
return false;
|
631
|
-
}
|
632
|
-
if (data.field.o_business_deployment === ''){
|
633
|
-
layer.msg('请选择部署类型', {time: 2000, icon: 2, shade: 0.01});
|
634
|
-
return false // 退出添加该条记录
|
635
|
-
}
|
636
|
-
}
|
637
627
|
$(".submit-btn").addClass("layui-hide");
|
638
|
-
|
639
628
|
data.field.business_id = "<%= @business.id %>";
|
629
|
+
data.field.signed_department_id = add_department_select.getValue(),
|
640
630
|
Rails.ajax({
|
641
631
|
url: "/missions/contracts/add_follow_ups",
|
642
632
|
type: 'POST',
|
@@ -649,7 +639,7 @@
|
|
649
639
|
if (res.success == false) {
|
650
640
|
layer.alert(res.msg)
|
651
641
|
} else {
|
652
|
-
|
642
|
+
layer.close(new_follow_index);
|
653
643
|
}
|
654
644
|
}
|
655
645
|
})
|
@@ -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>
|
@@ -0,0 +1,232 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
2
|
+
<div class="min-height-table" id="product_list">
|
3
|
+
<div style="margin: 10px 10px 10px 10px">
|
4
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
5
|
+
<div class="layui-form-item">
|
6
|
+
<div class="layui-inline">
|
7
|
+
<label class="layui-form-label">产品名称</label>
|
8
|
+
<div class="layui-input-inline">
|
9
|
+
<input type="text" name="name" class="layui-input" value="">
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="layui-inline">
|
13
|
+
<label class="layui-form-label">销售品目</label>
|
14
|
+
<div class="layui-input-inline">
|
15
|
+
<%= select_tag "item_clazz", options_for_select(EducodeSales::ProductCatalog.item_clazzs.keys), { 'lay-filter': 'item_clazz', include_blank: true , "lay-search": "" } %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div class="layui-inline">
|
19
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit
|
20
|
+
lay-filter="reset_prodct_form">重置
|
21
|
+
</button>
|
22
|
+
<button type="submit" id="search_bt" class="layui-btn layui-btn-primary" lay-submit
|
23
|
+
lay-filter="search_product_form">搜索
|
24
|
+
</button>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</form>
|
28
|
+
</div>
|
29
|
+
<div id="contact_table_wraper">
|
30
|
+
<table class="layui-hide" id="contact_product_table" lay-filter="contact_product_table"></table>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<script type="text/html" id="currentTableBarProduct">
|
35
|
+
<% if can? :update_product_catalog, EducodeSales::Business %>
|
36
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit_product">编辑</a>
|
37
|
+
<% end %>
|
38
|
+
</script>
|
39
|
+
|
40
|
+
<script type="text/html" id="toolbar">
|
41
|
+
<% if can? :new_product_catalog, EducodeSales::Business %>
|
42
|
+
<a class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right" lay-event="add_product">添加产品目录</a>
|
43
|
+
<% end %>
|
44
|
+
</script>
|
45
|
+
|
46
|
+
<script>
|
47
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate', 'dropdown', 'laytpl', 'xmSelect'],
|
48
|
+
function() {
|
49
|
+
var $ = layui.jquery,
|
50
|
+
form = layui.form,
|
51
|
+
request = layui.request,
|
52
|
+
miniPage = layui.miniPage,
|
53
|
+
dropdown = layui.dropdown,
|
54
|
+
xmSelect = layui.xmSelect,
|
55
|
+
laydate = layui.laydate;
|
56
|
+
var openWH = miniPage.getOpenWidthHeight();
|
57
|
+
var data = form.val("search_form");
|
58
|
+
table = layui.table;
|
59
|
+
var cols_table = [
|
60
|
+
[{
|
61
|
+
field: 'id',
|
62
|
+
width: 60,
|
63
|
+
title: '序号',
|
64
|
+
fixed: "left"
|
65
|
+
},
|
66
|
+
{
|
67
|
+
field: 'name',
|
68
|
+
width: 120,
|
69
|
+
title: '产品名称',
|
70
|
+
},
|
71
|
+
{
|
72
|
+
field: 'item_clazz',
|
73
|
+
width: 150,
|
74
|
+
title: '销售品目',
|
75
|
+
},
|
76
|
+
{
|
77
|
+
field: 'brand',
|
78
|
+
width: 150,
|
79
|
+
title: '品牌',
|
80
|
+
},
|
81
|
+
{
|
82
|
+
field: 'specification',
|
83
|
+
width: 150,
|
84
|
+
title: '规格型号',
|
85
|
+
},
|
86
|
+
{
|
87
|
+
field: 'unit',
|
88
|
+
width: 150,
|
89
|
+
title: '单位',
|
90
|
+
},
|
91
|
+
{
|
92
|
+
field: 'param',
|
93
|
+
width: 150,
|
94
|
+
title: '参数',
|
95
|
+
},
|
96
|
+
{
|
97
|
+
field: 'source_method',
|
98
|
+
width: 150,
|
99
|
+
title: '来源方式',
|
100
|
+
},
|
101
|
+
{
|
102
|
+
field: 'supplier',
|
103
|
+
width: 150,
|
104
|
+
title: '供货商',
|
105
|
+
},
|
106
|
+
{
|
107
|
+
title: '操作',
|
108
|
+
minWidth: 100,
|
109
|
+
toolbar: '#currentTableBarProduct',
|
110
|
+
align: "center",
|
111
|
+
fixed: 'right'
|
112
|
+
}
|
113
|
+
]
|
114
|
+
]
|
115
|
+
var business_table = table.render({
|
116
|
+
elem: '#contact_product_table',
|
117
|
+
url: '/missions/contracts/product_list',
|
118
|
+
autoSort: false,
|
119
|
+
toolbar: '#toolbar',
|
120
|
+
where: {
|
121
|
+
q: data
|
122
|
+
},
|
123
|
+
defaultToolbar: [],
|
124
|
+
title: '产品目录表',
|
125
|
+
cols: cols_table,
|
126
|
+
limit: 20,
|
127
|
+
limits: [10, 15, 20, 30, 40, 50, 60, 70, 80, 90],
|
128
|
+
page: true,
|
129
|
+
skin: 'line',
|
130
|
+
});
|
131
|
+
var sort = {},
|
132
|
+
search = data;
|
133
|
+
table.on('sort(contact_product_table)', function(obj) {
|
134
|
+
var data = form.val("search_form");
|
135
|
+
sort.field = obj.field;
|
136
|
+
sort.order = obj.type;
|
137
|
+
table.reload('contact_product_table', {
|
138
|
+
url: '/missions/contracts/product_list',
|
139
|
+
initSort: obj,
|
140
|
+
where: {
|
141
|
+
sort: sort,
|
142
|
+
q: search
|
143
|
+
}
|
144
|
+
});
|
145
|
+
})
|
146
|
+
// 监听搜索操作
|
147
|
+
form.on('submit(search_product_form)', function(data) {
|
148
|
+
if (search['clazz']) {
|
149
|
+
data.field['clazz'] = search['clazz']
|
150
|
+
}
|
151
|
+
search = data.field
|
152
|
+
table.reload('contact_product_table', {
|
153
|
+
url: '/missions/contracts/product_list',
|
154
|
+
page: {
|
155
|
+
curr: 1
|
156
|
+
},
|
157
|
+
where: {
|
158
|
+
q: search,
|
159
|
+
sort: sort
|
160
|
+
}
|
161
|
+
}, 'data');
|
162
|
+
return false;
|
163
|
+
});
|
164
|
+
form.on('submit(reset_prodct_form)', function(data) {
|
165
|
+
var field = data.field;
|
166
|
+
form.val('search_form', {
|
167
|
+
name: '',
|
168
|
+
item_clazz: ''
|
169
|
+
})
|
170
|
+
return false;
|
171
|
+
});
|
172
|
+
table.on('toolbar(contact_product_table)', function(obj) {
|
173
|
+
var openWH = miniPage.getOpenWidthHeight();
|
174
|
+
var content = miniPage.getHrefContent('/missions/contracts/new_product');
|
175
|
+
if (obj.event == 'add_product') {
|
176
|
+
add_product_index = layer.open({
|
177
|
+
title: '添加产品目录',
|
178
|
+
type: 1,
|
179
|
+
shade: 0.2,
|
180
|
+
maxmin: true,
|
181
|
+
shadeClose: true,
|
182
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
183
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
184
|
+
content: content,
|
185
|
+
success: function(layero, index) {
|
186
|
+
form.render('select');
|
187
|
+
}
|
188
|
+
});
|
189
|
+
$(window).on("resize", function() {
|
190
|
+
layer.full(add_product_index);
|
191
|
+
});
|
192
|
+
}
|
193
|
+
})
|
194
|
+
table.on('tool(contact_product_table)', function(obj) {
|
195
|
+
id = obj.data.id;
|
196
|
+
if (obj.event === 'edit_product') { // 监听添加操作
|
197
|
+
var content = miniPage.getHrefContent('/missions/contracts/' + id +'/edit_product');
|
198
|
+
var openWH = miniPage.getOpenWidthHeight();
|
199
|
+
edit_production_index = layer.open({
|
200
|
+
title: '编辑产品目录',
|
201
|
+
type: 1,
|
202
|
+
shade: 0.2,
|
203
|
+
maxmin: true,
|
204
|
+
shadeClose: true,
|
205
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
206
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
207
|
+
content: content,
|
208
|
+
success: function(layero, index) {
|
209
|
+
form.render('select');
|
210
|
+
}
|
211
|
+
});
|
212
|
+
$(window).on("resize", function() {
|
213
|
+
layer.full(edit_production_index);
|
214
|
+
});
|
215
|
+
}
|
216
|
+
});
|
217
|
+
});
|
218
|
+
</script>
|
219
|
+
<style>
|
220
|
+
.layui-table-tool-temp {
|
221
|
+
padding-right: 30px;
|
222
|
+
!important;
|
223
|
+
}
|
224
|
+
|
225
|
+
.layui-table-fixed .layui-table-body {
|
226
|
+
height: auto !important;
|
227
|
+
}
|
228
|
+
|
229
|
+
.layui-table-fixed.layui-hide {
|
230
|
+
display: block !important;
|
231
|
+
}
|
232
|
+
</style>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @product_catalogs do |d|
|
3
|
+
json.id d.id
|
4
|
+
json.name d.name
|
5
|
+
json.item_clazz d.item_clazz
|
6
|
+
json.brand d.brand
|
7
|
+
json.specification d.specification
|
8
|
+
json.unit d.unit
|
9
|
+
json.param d.param
|
10
|
+
json.source_method d.source_method
|
11
|
+
json.supplier d.supplier
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
json.code 0
|
16
|
+
json.count @product_catalogs.total_count
|
@@ -0,0 +1,169 @@
|
|
1
|
+
<h1 class="text-center m-t-20"><%= @follow_up.business.name %></h1>
|
2
|
+
<form class="layui-form form-value">
|
3
|
+
<div class="layui-form-item" style="padding: 10px 25px 0;">
|
4
|
+
<div class="layui-inline">
|
5
|
+
<label class="layui-form-label">单位:</label>
|
6
|
+
<div class="layui-input-inline">
|
7
|
+
<%= @follow_up.business.department&.school&.name %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<%if @follow_up.business.number.present?%>
|
11
|
+
<div class="layui-inline">
|
12
|
+
<label class="layui-form-label">编号:</label>
|
13
|
+
<div class="layui-input-inline">
|
14
|
+
<%= @follow_up.business.number %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<%end %>
|
18
|
+
<div class="layui-inline">
|
19
|
+
<label class="layui-form-label">部门:</label>
|
20
|
+
<div class="layui-input-inline">
|
21
|
+
<%= @follow_up.business.department&.name %>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<br>
|
25
|
+
<div class="layui-inline">
|
26
|
+
<label class="layui-form-label">项目类型:</label>
|
27
|
+
<div class="layui-input-inline">
|
28
|
+
<%= @follow_up.clazz.name %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<div class="layui-inline">
|
32
|
+
<label class="layui-form-label">项目阶段:</label>
|
33
|
+
<div class="layui-input-inline">
|
34
|
+
<%= @follow_up.stage.name %>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<br>
|
38
|
+
<div class="layui-inline">
|
39
|
+
<label class="layui-form-label">招标时间:</label>
|
40
|
+
<div class="layui-input-inline">
|
41
|
+
<%= @follow_up.invitation_at.to_s %>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
<div class="layui-inline">
|
45
|
+
<label class="layui-form-label">中标时间:</label>
|
46
|
+
<div class="layui-input-inline">
|
47
|
+
<%= @follow_up.bidded_date.to_s %>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<br>
|
51
|
+
<div class="layui-inline">
|
52
|
+
<label class="layui-form-label">签单时间:</label>
|
53
|
+
<div class="layui-input-inline">
|
54
|
+
<%= @follow_up.signed_date.to_s %>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
<div class="layui-inline">
|
58
|
+
<label class="layui-form-label">验收时间:</label>
|
59
|
+
<div class="layui-input-inline">
|
60
|
+
<%= @follow_up.reception_at.to_s %>
|
61
|
+
</div>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<br>
|
65
|
+
<%if @follow_up.clazz_id == EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id %>
|
66
|
+
<div class="layui-inline">
|
67
|
+
<label class="layui-form-label">服务期:</label>
|
68
|
+
<div class="layui-input-inline">
|
69
|
+
<%= @follow_up.service_start_time.to_s + "-" + @follow_up.service_end_time.to_s %>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
<%end %>
|
73
|
+
<%if @follow_up.clazz_id == EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id %>
|
74
|
+
<div class="layui-inline">
|
75
|
+
<label class="layui-form-label">部署类型:</label>
|
76
|
+
<div class="layui-input-inline">
|
77
|
+
<%=@show_follow_recored_deployment%>
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
<% end %>
|
81
|
+
<br>
|
82
|
+
|
83
|
+
<div class="layui-inline">
|
84
|
+
<label class="layui-form-label">中标额:</label>
|
85
|
+
<div class="layui-input-inline">
|
86
|
+
<%= @follow_up.total_amount.to_f.round(6) %>万
|
87
|
+
</div>
|
88
|
+
</div>
|
89
|
+
<div class="layui-inline">
|
90
|
+
<label class="layui-form-label">合同额:</label>
|
91
|
+
<div class="layui-input-inline">
|
92
|
+
<%= @follow_up.actual_amount.to_f.round(6) %>万
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
<br>
|
96
|
+
<div class="layui-inline">
|
97
|
+
<label class="layui-form-label">渠道:</label>
|
98
|
+
<div class="layui-input-inline">
|
99
|
+
<%= @follow_up.place&.name %>
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
<div class="layui-inline">
|
103
|
+
<label class="layui-form-label">渠道分成:</label>
|
104
|
+
<div class="layui-input-inline">
|
105
|
+
<%= @follow_up.divide_amount.to_f.round(6) %>万
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
<br/>
|
109
|
+
<div class="layui-inline">
|
110
|
+
<label class="layui-form-label">预算金额:</label>
|
111
|
+
<div class="layui-input-inline">
|
112
|
+
<%= @follow_up.budget_amount.to_f.round(6) %>万
|
113
|
+
</div>
|
114
|
+
</div>
|
115
|
+
<div class="layui-inline">
|
116
|
+
<label class="layui-form-label">分成比例:</label>
|
117
|
+
<div class="layui-input-inline">
|
118
|
+
<%= @follow_up.divide_rate.to_f.round(2) %>%
|
119
|
+
</div>
|
120
|
+
</div>
|
121
|
+
<div class="layui-form-item">
|
122
|
+
<div class="layui-inline">
|
123
|
+
<label class="layui-form-label">所属年度:</label>
|
124
|
+
<div class="layui-input-inline">
|
125
|
+
<%= @follow_up&.year %>年
|
126
|
+
</div>
|
127
|
+
</div>
|
128
|
+
</div>
|
129
|
+
<div class="layui-form-item">
|
130
|
+
<div class="layui-inline">
|
131
|
+
<label class="layui-form-label">项目资金来源:</label>
|
132
|
+
<div class="layui-input-inline">
|
133
|
+
<%= @follow_up&.funding_source %>
|
134
|
+
</div>
|
135
|
+
</div>
|
136
|
+
<div class="layui-inline">
|
137
|
+
<label class="layui-form-label">签约单位:</label>
|
138
|
+
<div class="layui-input-inline" style="width: 300px">
|
139
|
+
<%= @follow_up.signed_department&.school&.name || '' %>
|
140
|
+
</div>
|
141
|
+
</div>
|
142
|
+
</div>
|
143
|
+
<div class="layui-form-item">
|
144
|
+
<label class="layui-form-label" style="width: 150px;">售后工程师:</label>
|
145
|
+
<div class="layui-input-inline">
|
146
|
+
<%= @business.assign_staffs.map{|d| d.staff.user.full_name}.join("、") %>
|
147
|
+
</div>
|
148
|
+
</div>
|
149
|
+
<div class="layui-form-item layui-form-text">
|
150
|
+
<label class="layui-form-label"><%= @trend.clazz %>:</label>
|
151
|
+
<div class="layui-input-block" style="padding-right: 20px;">
|
152
|
+
<pre><%= @trend.content %></pre>
|
153
|
+
</div>
|
154
|
+
</div>
|
155
|
+
<div class="layui-form-item layui-form-text">
|
156
|
+
<label class="layui-form-label">时间:</label>
|
157
|
+
<div class="layui-input-block" style="padding-right: 20px;">
|
158
|
+
<pre><%= @follow_up.created_at.to_s %></pre>
|
159
|
+
</div>
|
160
|
+
</div>
|
161
|
+
<div class="layui-form-item layui-form-text">
|
162
|
+
<label class="layui-form-label">跟进人:</label>
|
163
|
+
<div class="layui-input-block" style="padding-right: 20px;">
|
164
|
+
<pre><%= @follow_up.staff.user.real_name %></pre>
|
165
|
+
</div>
|
166
|
+
</div>
|
167
|
+
</div>
|
168
|
+
</form>
|
169
|
+
|
@@ -5,7 +5,7 @@ json.data do
|
|
5
5
|
json.stage d.stage.name
|
6
6
|
json.staff d.staff.user.real_name
|
7
7
|
json.description d.description
|
8
|
-
json.advise d.advise
|
8
|
+
json.advise d.advise || ''
|
9
9
|
json.school d.business.department&.school&.name
|
10
10
|
json.school_id d.business.department&.school&.id
|
11
11
|
json.created_at d.created_at.to_s
|
@@ -67,6 +67,10 @@
|
|
67
67
|
<dd><a href="/missions/contracts" class="<%= current?('layui-this', contracts_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/4.商机管理.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>合同管理</a>
|
68
68
|
</dd>
|
69
69
|
<% end %>
|
70
|
+
<% if can? :read_product_catalog, EducodeSales::Business %>
|
71
|
+
<dd><a href="/missions/contracts/product_list" class="<%= current?('layui-this', product_list_contracts_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/4.商机管理.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>产品目录</a>
|
72
|
+
</dd>
|
73
|
+
<% end %>
|
70
74
|
<% if can? :read, EducodeSales::MoneyPlan %>
|
71
75
|
<dd><a href="/missions/money_plans" class="<%= current?('layui-this', money_plans_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/money_plans.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>回款计划</a>
|
72
76
|
</dd>
|
data/config/routes.rb
CHANGED
@@ -28,6 +28,17 @@ EducodeSales::Engine.routes.draw do
|
|
28
28
|
get :list
|
29
29
|
get :new_follow_up
|
30
30
|
post :add_follow_ups
|
31
|
+
get :product_list
|
32
|
+
get :new_product
|
33
|
+
post :product_catalog
|
34
|
+
get :show_follow_record
|
35
|
+
end
|
36
|
+
member do
|
37
|
+
post :advise
|
38
|
+
get :assign
|
39
|
+
post :assign_staff
|
40
|
+
get :edit_product
|
41
|
+
put :update_product_catalog
|
31
42
|
end
|
32
43
|
end
|
33
44
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateEducodeSalesFollowUpTrends < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
create_table :educode_sales_follow_up_trends do |t|
|
4
|
+
t.references :follow_up
|
5
|
+
t.integer :clazz
|
6
|
+
t.text :content
|
7
|
+
t.references :staff
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateEducodeSalesProductCatalogs < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
create_table :educode_sales_product_catalogs do |t|
|
4
|
+
t.string :name
|
5
|
+
t.integer :item_clazz
|
6
|
+
t.string :brand
|
7
|
+
t.string :specification
|
8
|
+
t.string :unit
|
9
|
+
t.text :param
|
10
|
+
t.integer :source_method
|
11
|
+
t.string :supplier
|
12
|
+
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
|
16
|
+
EducodeSales::Permission.find_or_create_by(name: '查看产品目录', subject: 'Business', action: 'read_product_catalog', clazz: 'contract')
|
17
|
+
EducodeSales::Permission.find_or_create_by(name: '添加产品目录', subject: 'Business', action: 'new_product_catalog', clazz: 'contract')
|
18
|
+
EducodeSales::Permission.find_or_create_by(name: '编辑产品目录', subject: 'Business', action: 'update_product_catalog', clazz: 'contract')
|
19
|
+
end
|
20
|
+
end
|