educode_sales 0.1.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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +30 -0
- data/Rakefile +32 -0
- data/app/assets/config/educode_sales_manifest.js +2 -0
- data/app/assets/fonts/iconfont.eot +0 -0
- data/app/assets/fonts/iconfont.svg +554 -0
- data/app/assets/fonts/iconfont.ttf +0 -0
- data/app/assets/fonts/iconfont.woff +0 -0
- data/app/assets/fonts/iconfont.woff2 +0 -0
- data/app/assets/images/educode_sales/favicon.ico +0 -0
- data/app/assets/images/educode_sales/icon-ext.png +0 -0
- data/app/assets/images/educode_sales/icon-login.png +0 -0
- data/app/assets/images/educode_sales/icon.png +0 -0
- data/app/assets/images/educode_sales/loading-0.gif +0 -0
- data/app/assets/images/educode_sales/loading-1.gif +0 -0
- data/app/assets/images/educode_sales/loading-2.gif +0 -0
- data/app/assets/images/educode_sales/loginbg.png +0 -0
- data/app/assets/images/educode_sales/logo.png +0 -0
- data/app/assets/javascripts/educode_sales/application.js +16 -0
- data/app/assets/javascripts/educode_sales/extent/miniPage.js +394 -0
- data/app/assets/javascripts/educode_sales/extent/request.js +137 -0
- data/app/assets/javascripts/educode_sales/extent/select_input.js +522 -0
- data/app/assets/javascripts/educode_sales/layui.js +5 -0
- data/app/assets/stylesheets/educode_sales/app.css +256 -0
- data/app/assets/stylesheets/educode_sales/application.css +17 -0
- data/app/assets/stylesheets/educode_sales/error.css +181 -0
- data/app/assets/stylesheets/educode_sales/layui.scss +1525 -0
- data/app/assets/stylesheets/educode_sales/layuimini.css +838 -0
- data/app/assets/stylesheets/educode_sales/login.scss +38 -0
- data/app/assets/stylesheets/educode_sales/modules/code.css +29 -0
- data/app/assets/stylesheets/educode_sales/modules/laydate/default/font.scss +16 -0
- data/app/assets/stylesheets/educode_sales/modules/laydate/default/laydate.css +152 -0
- data/app/assets/stylesheets/educode_sales/modules/layer/default/icon-ext.png +0 -0
- data/app/assets/stylesheets/educode_sales/modules/layer/default/icon.png +0 -0
- data/app/assets/stylesheets/educode_sales/modules/layer/default/layer.scss +179 -0
- data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-0.gif +0 -0
- data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-1.gif +0 -0
- data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-2.gif +0 -0
- data/app/assets/stylesheets/educode_sales/modules/select_input.css +103 -0
- data/app/assets/stylesheets/educode_sales/public.css +47 -0
- data/app/controllers/educode_sales/activities_controller.rb +58 -0
- data/app/controllers/educode_sales/application_controller.rb +35 -0
- data/app/controllers/educode_sales/businesses_controller.rb +189 -0
- data/app/controllers/educode_sales/commons_controller.rb +54 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +140 -0
- data/app/controllers/educode_sales/home_controller.rb +40 -0
- data/app/controllers/educode_sales/key_person_controller.rb +29 -0
- data/app/controllers/educode_sales/operation_plans_controller.rb +53 -0
- data/app/controllers/educode_sales/operation_reports_controller.rb +6 -0
- data/app/controllers/educode_sales/operations_controller.rb +38 -0
- data/app/controllers/educode_sales/places_controller.rb +69 -0
- data/app/controllers/educode_sales/plans_controller.rb +208 -0
- data/app/controllers/educode_sales/roles_controller.rb +69 -0
- data/app/controllers/educode_sales/sale_reports_controller.rb +133 -0
- data/app/controllers/educode_sales/sale_trends_controller.rb +45 -0
- data/app/controllers/educode_sales/sales_controller.rb +64 -0
- data/app/controllers/educode_sales/sessions_controller.rb +51 -0
- data/app/controllers/educode_sales/staffs_controller.rb +81 -0
- data/app/controllers/educode_sales/teachers_controller.rb +167 -0
- data/app/helpers/educode_sales/activities_helper.rb +4 -0
- data/app/helpers/educode_sales/application_helper.rb +44 -0
- data/app/helpers/educode_sales/business_helper.rb +4 -0
- data/app/helpers/educode_sales/home_helper.rb +4 -0
- data/app/helpers/educode_sales/sessions_helper.rb +4 -0
- data/app/helpers/educode_sales/teachers_helper.rb +4 -0
- data/app/jobs/educode_sales/application_job.rb +4 -0
- data/app/mailers/educode_sales/application_mailer.rb +6 -0
- data/app/models/ability.rb +54 -0
- data/app/models/educode_sales/activity.rb +6 -0
- data/app/models/educode_sales/activity_teacher.rb +6 -0
- data/app/models/educode_sales/application_record.rb +5 -0
- data/app/models/educode_sales/business.rb +11 -0
- data/app/models/educode_sales/common.rb +32 -0
- data/app/models/educode_sales/course_subject.rb +5 -0
- data/app/models/educode_sales/follow_up.rb +14 -0
- data/app/models/educode_sales/key_person.rb +11 -0
- data/app/models/educode_sales/market_area.rb +6 -0
- data/app/models/educode_sales/money_plan.rb +22 -0
- data/app/models/educode_sales/operation_plan.rb +6 -0
- data/app/models/educode_sales/operation_report.rb +5 -0
- data/app/models/educode_sales/operation_trend.rb +5 -0
- data/app/models/educode_sales/permission.rb +16 -0
- data/app/models/educode_sales/place.rb +7 -0
- data/app/models/educode_sales/place_area.rb +6 -0
- data/app/models/educode_sales/role.rb +8 -0
- data/app/models/educode_sales/role_area.rb +13 -0
- data/app/models/educode_sales/role_permission.rb +6 -0
- data/app/models/educode_sales/sale_plan.rb +6 -0
- data/app/models/educode_sales/sale_report.rb +5 -0
- data/app/models/educode_sales/sale_trend.rb +4 -0
- data/app/models/educode_sales/staff.rb +41 -0
- data/app/models/educode_sales/teacher.rb +12 -0
- data/app/models/educode_sales/teacher_follow.rb +6 -0
- data/app/views/educode_sales/activities/edit.html.erb +82 -0
- data/app/views/educode_sales/activities/index.html.erb +172 -0
- data/app/views/educode_sales/activities/index.json.jbuilder +14 -0
- data/app/views/educode_sales/activities/new.html.erb +81 -0
- data/app/views/educode_sales/activities/show_teachers.html.erb +368 -0
- data/app/views/educode_sales/businesses/edit.html.erb +82 -0
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +138 -0
- data/app/views/educode_sales/businesses/edit_plan.html.erb +172 -0
- data/app/views/educode_sales/businesses/index.html.erb +364 -0
- data/app/views/educode_sales/businesses/index.json.jbuilder +20 -0
- data/app/views/educode_sales/businesses/new.html.erb +80 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +144 -0
- data/app/views/educode_sales/businesses/show_follow.html.erb +466 -0
- data/app/views/educode_sales/businesses/show_follow.json.jbuilder +21 -0
- data/app/views/educode_sales/businesses/show_follow_record.html.erb +81 -0
- data/app/views/educode_sales/businesses/show_keys.html.erb +56 -0
- data/app/views/educode_sales/businesses/unfinish_plans.json.jbuilder +14 -0
- data/app/views/educode_sales/commons/edit.html.erb +112 -0
- data/app/views/educode_sales/commons/index.html.erb +132 -0
- data/app/views/educode_sales/commons/index.json.jbuilder +13 -0
- data/app/views/educode_sales/commons/new.html.erb +58 -0
- data/app/views/educode_sales/commons/show.json.jbuilder +9 -0
- data/app/views/educode_sales/follow_ups/money_plans.json.jbuilder +11 -0
- data/app/views/educode_sales/follow_ups/teachers.json.jbuilder +16 -0
- data/app/views/educode_sales/home/index.html.erb +1 -0
- data/app/views/educode_sales/home/no_permission.html.erb +27 -0
- data/app/views/educode_sales/home/search.json.jbuilder +8 -0
- data/app/views/educode_sales/home/search_edu_teacher.json.jbuilder +14 -0
- data/app/views/educode_sales/home/search_teacher.json.jbuilder +24 -0
- data/app/views/educode_sales/home/search_users.json.jbuilder +8 -0
- data/app/views/educode_sales/home/statistics.html.erb +68 -0
- data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +288 -0
- data/app/views/educode_sales/operation_plans/_monthly.html.erb +284 -0
- data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +291 -0
- data/app/views/educode_sales/operation_plans/_weekly.html.erb +275 -0
- data/app/views/educode_sales/operation_plans/edit_month.html.erb +60 -0
- data/app/views/educode_sales/operation_plans/edit_monthly.html.erb +175 -0
- data/app/views/educode_sales/operation_plans/edit_week.html.erb +72 -0
- data/app/views/educode_sales/operation_plans/edit_weekly.html.erb +173 -0
- data/app/views/educode_sales/operation_plans/index.html.erb +22 -0
- data/app/views/educode_sales/operation_plans/new_month.html.erb +79 -0
- data/app/views/educode_sales/operation_plans/new_monthly.html.erb +176 -0
- data/app/views/educode_sales/operation_plans/new_week.html.erb +86 -0
- data/app/views/educode_sales/operation_plans/new_weekly.html.erb +174 -0
- data/app/views/educode_sales/operation_plans/operation.html.erb +0 -0
- data/app/views/educode_sales/operation_plans/show_month.html.erb +36 -0
- data/app/views/educode_sales/operation_plans/show_monthly.html.erb +171 -0
- data/app/views/educode_sales/operation_plans/show_week.html.erb +43 -0
- data/app/views/educode_sales/operation_plans/show_weekly.html.erb +170 -0
- data/app/views/educode_sales/operations/trends.html.erb +191 -0
- data/app/views/educode_sales/places/edit.html.erb +91 -0
- data/app/views/educode_sales/places/index.html.erb +137 -0
- data/app/views/educode_sales/places/index.json.jbuilder +13 -0
- data/app/views/educode_sales/places/new.html.erb +77 -0
- data/app/views/educode_sales/plans/_monthPlan.html.erb +258 -0
- data/app/views/educode_sales/plans/_monthly.html.erb +302 -0
- data/app/views/educode_sales/plans/_weekPlan.html.erb +265 -0
- data/app/views/educode_sales/plans/_weekly.html.erb +296 -0
- data/app/views/educode_sales/plans/audit_weekly.html.erb +177 -0
- data/app/views/educode_sales/plans/edit_month.html.erb +74 -0
- data/app/views/educode_sales/plans/edit_monthly.html.erb +179 -0
- data/app/views/educode_sales/plans/edit_week.html.erb +81 -0
- data/app/views/educode_sales/plans/edit_weekly.html.erb +238 -0
- data/app/views/educode_sales/plans/index.html.erb +54 -0
- data/app/views/educode_sales/plans/index.json.jbuilder +19 -0
- data/app/views/educode_sales/plans/my_month.json.jbuilder +18 -0
- data/app/views/educode_sales/plans/my_week.json.jbuilder +19 -0
- data/app/views/educode_sales/plans/new_month.html.erb +89 -0
- data/app/views/educode_sales/plans/new_monthly.html.erb +235 -0
- data/app/views/educode_sales/plans/new_week.html.erb +95 -0
- data/app/views/educode_sales/plans/new_weekly.html.erb +262 -0
- data/app/views/educode_sales/plans/operation.html.erb +0 -0
- data/app/views/educode_sales/plans/show_month.html.erb +30 -0
- data/app/views/educode_sales/plans/show_monthly.html.erb +175 -0
- data/app/views/educode_sales/plans/show_week.html.erb +38 -0
- data/app/views/educode_sales/plans/show_weekly.html.erb +143 -0
- data/app/views/educode_sales/roles/edit.html.erb +127 -0
- data/app/views/educode_sales/roles/index.html.erb +105 -0
- data/app/views/educode_sales/roles/index.json.jbuilder +10 -0
- data/app/views/educode_sales/roles/new.html.erb +51 -0
- data/app/views/educode_sales/sale_reports/audit.html.erb +209 -0
- data/app/views/educode_sales/sale_reports/edit.html.erb +240 -0
- data/app/views/educode_sales/sale_reports/index.json.jbuilder +17 -0
- data/app/views/educode_sales/sale_reports/plans.json.jbuilder +19 -0
- data/app/views/educode_sales/sale_reports/show.html.erb +172 -0
- data/app/views/educode_sales/sale_trends/operations.html.erb +49 -0
- data/app/views/educode_sales/sale_trends/trends.html.erb +213 -0
- data/app/views/educode_sales/sales/index.html.erb +60 -0
- data/app/views/educode_sales/sales/index.json.jbuilder +17 -0
- data/app/views/educode_sales/sales/operations.html.erb +108 -0
- data/app/views/educode_sales/sales/operations.json.jbuilder +14 -0
- data/app/views/educode_sales/sales/school.html.erb +29 -0
- data/app/views/educode_sales/sales/trends.html.erb +216 -0
- data/app/views/educode_sales/sales/xschool.html.erb +35 -0
- data/app/views/educode_sales/sessions/login.html.erb +87 -0
- data/app/views/educode_sales/staffs/edit.html.erb +116 -0
- data/app/views/educode_sales/staffs/follow_up_departments.json.jbuilder +13 -0
- data/app/views/educode_sales/staffs/follow_up_schools.json.jbuilder +12 -0
- data/app/views/educode_sales/staffs/index.html.erb +141 -0
- data/app/views/educode_sales/staffs/index.json.jbuilder +15 -0
- data/app/views/educode_sales/staffs/new.html.erb +73 -0
- data/app/views/educode_sales/teachers/activities.json.jbuilder +9 -0
- data/app/views/educode_sales/teachers/add_courses.html.erb +53 -0
- data/app/views/educode_sales/teachers/add_event.html.erb +49 -0
- data/app/views/educode_sales/teachers/add_keys.html.erb +282 -0
- data/app/views/educode_sales/teachers/course_list.json.jbuilder +22 -0
- data/app/views/educode_sales/teachers/edit.html.erb +109 -0
- data/app/views/educode_sales/teachers/edit_follow_record.html.erb +67 -0
- data/app/views/educode_sales/teachers/index.html.erb +461 -0
- data/app/views/educode_sales/teachers/index.json.jbuilder +23 -0
- data/app/views/educode_sales/teachers/new.html.erb +166 -0
- data/app/views/educode_sales/teachers/new_follow_record.html.erb +67 -0
- data/app/views/educode_sales/teachers/search_new.html.erb +138 -0
- data/app/views/educode_sales/teachers/show_class.html.erb +101 -0
- data/app/views/educode_sales/teachers/show_follow.html.erb +511 -0
- data/app/views/educode_sales/teachers/show_follow_record.html.erb +67 -0
- data/app/views/layouts/educode_sales/application.html.erb +104 -0
- data/app/views/layouts/educode_sales/login.html.erb +20 -0
- data/config/locales/sale.zh-CN.yml +9 -0
- data/config/routes.rb +162 -0
- data/db/migrate/20210830081842_create_educode_sales_staffs.rb +9 -0
- data/db/migrate/20210831022421_create_educode_sales_sale_trends.rb +13 -0
- data/db/migrate/20210831085201_create_educode_sales_commons.rb +11 -0
- data/db/migrate/20210901025628_create_educode_sales_roles.rb +19 -0
- data/db/migrate/20210901031626_create_educode_sales_market_areas.rb +10 -0
- data/db/migrate/20210902061835_create_educode_sales_role_areas.rb +11 -0
- data/db/migrate/20210902064029_create_educode_sales_permissions.rb +12 -0
- data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +62 -0
- data/db/migrate/20210902073832_create_educode_sales_businesses.rb +11 -0
- data/db/migrate/20210902080535_create_educode_sales_places.rb +10 -0
- data/db/migrate/20210902080918_create_educode_sales_follow_ups.rb +20 -0
- data/db/migrate/20210902101022_create_educode_sales_teachers.rb +20 -0
- data/db/migrate/20210902103331_create_educode_sales_teacher_follows.rb +15 -0
- data/db/migrate/20210903015810_create_educode_sales_sale_plans.rb +14 -0
- data/db/migrate/20210903020721_create_educode_sales_sale_reports.rb +21 -0
- data/db/migrate/20210903021458_create_educode_sales_operation_plans.rb +14 -0
- data/db/migrate/20210903021710_create_educode_sales_operation_reports.rb +19 -0
- data/db/migrate/20210903022055_create_educode_sales_operation_trends.rb +13 -0
- data/db/migrate/20210903032011_create_educode_sales_activities.rb +16 -0
- data/db/migrate/20210906104001_create_educode_sales_money_plans.rb +18 -0
- data/db/migrate/20210906105154_create_educode_sales_place_areas.rb +10 -0
- data/db/migrate/20210908014953_create_educode_sales_key_people.rb +21 -0
- data/db/migrate/20210912061148_add_audit_user_id_to_sales_reports.rb +11 -0
- data/db/migrate/20210913070728_create_educode_sales_activity_teachers.rb +11 -0
- data/db/migrate/20210913071607_create_educode_sales_course_subjects.rb +14 -0
- data/lib/educode_sales/engine.rb +5 -0
- data/lib/educode_sales/version.rb +3 -0
- data/lib/educode_sales.rb +5 -0
- data/lib/tasks/educode_sales_tasks.rake +4 -0
- metadata +342 -0
@@ -0,0 +1,522 @@
|
|
1
|
+
/*!
|
2
|
+
* selectInput v1.0
|
3
|
+
* author JerryZst
|
4
|
+
* qq 1309579432
|
5
|
+
* Date: 2020/8/12 0007
|
6
|
+
*/
|
7
|
+
layui.define(['jquery', 'laypage'], function (exports) {
|
8
|
+
var $ = layui.jquery;
|
9
|
+
// var form = layui.form;
|
10
|
+
var _this = this;
|
11
|
+
var _MOD = 'selectInput';
|
12
|
+
var selectedCss = 'layui-form-selected';
|
13
|
+
var upCss = 'layui-form-selectup';
|
14
|
+
var selectInputClass = 'selectInput';
|
15
|
+
var x, y;
|
16
|
+
// 加载全局鼠标位置
|
17
|
+
$(document).mousemove(function (e) {
|
18
|
+
x = e.pageX;
|
19
|
+
y = e.pageY;
|
20
|
+
});
|
21
|
+
var selectInput = function (opt) {
|
22
|
+
this.version = 'selectInput-1.0';
|
23
|
+
this.tmpId = new Date().getTime();
|
24
|
+
this.tmpId = opt.uniqueId ? opt.uniqueId : Math.round(Math.random() * 1000 + 9999);
|
25
|
+
this._input = 'input-' + this.tmpId;
|
26
|
+
this._select = 'select-' + this.tmpId;
|
27
|
+
this._class = 'dd' + this.tmpId;
|
28
|
+
this.tmpSelectValue = "";
|
29
|
+
this.hasData = !!opt.data;
|
30
|
+
// 配置项
|
31
|
+
this.options = $.extend(true, {
|
32
|
+
method: 'GET',
|
33
|
+
error: opt.error || null,
|
34
|
+
data: opt.data || [],
|
35
|
+
on: opt.on || null,
|
36
|
+
remoteMethod: opt.remoteMethod || null,
|
37
|
+
invisibleMode: opt.invisibleMode || false,
|
38
|
+
invisibleData: opt.data || [],
|
39
|
+
hasInitShow: opt.hasInitShow || false,
|
40
|
+
hasCut: opt.hasCut || true,
|
41
|
+
layFilter: opt.layFilter || '',
|
42
|
+
layVerType: opt.layVerType || 'msg',
|
43
|
+
layVerify: opt.layVerify || '',
|
44
|
+
layReqText: opt.layReqText || '',
|
45
|
+
ignoreCase: opt.ignoreCase || false,
|
46
|
+
autoClose: opt.autoClose || true,
|
47
|
+
remoteEvent: opt.remoteEvent || 'input',
|
48
|
+
}, opt);
|
49
|
+
this.init(); // 初始化
|
50
|
+
};
|
51
|
+
|
52
|
+
/**
|
53
|
+
* 初始化数据层
|
54
|
+
*/
|
55
|
+
selectInput.prototype.init = function () {
|
56
|
+
var that = this;
|
57
|
+
var options = this.options;
|
58
|
+
// 直接赋值模式
|
59
|
+
if (options.data.length >= 0 && that.hasData) {
|
60
|
+
that.renderBody(options.data);
|
61
|
+
that.bindEvents(); // 绑定事件
|
62
|
+
} else if (options.url) {
|
63
|
+
// 异步渲染数据
|
64
|
+
if (!options.where) options.where = {};
|
65
|
+
$.ajax({
|
66
|
+
url: options.url,
|
67
|
+
data: options.contentType && options.contentType.indexOf('application/json') === 0 ? JSON.stringify(options.where) :
|
68
|
+
options.where,
|
69
|
+
headers: options.headers,
|
70
|
+
type: options.method,
|
71
|
+
dataType: 'json',
|
72
|
+
contentType: options.contentType,
|
73
|
+
success: function (res) {
|
74
|
+
var __res = options.parseData ? options.parseData(res) : res;
|
75
|
+
if (typeof (__res) === "string") {
|
76
|
+
__res = JSON.parse(__res);
|
77
|
+
}
|
78
|
+
if (!__res.hasOwnProperty('data')) {
|
79
|
+
layui.hint().error('返回数据格式有误,必须满足如下格式:{"code":0,"msg":"success","data":[]}');
|
80
|
+
return false;
|
81
|
+
}
|
82
|
+
var data = __res.data;
|
83
|
+
that.options.invisibleData = data;
|
84
|
+
that.renderBody(data);
|
85
|
+
that.bindEvents(); // 绑定事件
|
86
|
+
options.done && options.done(data, 1);
|
87
|
+
},
|
88
|
+
error: function (xhr) {
|
89
|
+
return options.error ? options.error({
|
90
|
+
code: xhr.status,
|
91
|
+
msg: xhr.statusText,
|
92
|
+
xhr: xhr
|
93
|
+
}) : console.error(xhr.statusText);
|
94
|
+
}
|
95
|
+
});
|
96
|
+
} else if (options.remoteSearch && options.remoteMethod) {
|
97
|
+
that.renderBody([]);
|
98
|
+
that.bindEvents(); // 绑定事件
|
99
|
+
}
|
100
|
+
};
|
101
|
+
|
102
|
+
|
103
|
+
/** 获取各个组件 */
|
104
|
+
selectInput.prototype.getComponents = function () {
|
105
|
+
var that = this;
|
106
|
+
var $elem = $(that.options.elem);
|
107
|
+
var filter = $elem.attr('lay-filter');
|
108
|
+
if (!filter) {
|
109
|
+
filter = that.options.elem.substring(1);
|
110
|
+
$elem.attr('lay-filter', filter);
|
111
|
+
}
|
112
|
+
return {
|
113
|
+
$elem: $elem, // 容器
|
114
|
+
filter: filter, // 容器的lay-filter
|
115
|
+
$inputElem: $('#' + this._input),
|
116
|
+
$selectElem: $('#' + this._select),
|
117
|
+
$ddElem: $('.' + this._class)
|
118
|
+
};
|
119
|
+
};
|
120
|
+
/**
|
121
|
+
* 加载input
|
122
|
+
*/
|
123
|
+
selectInput.prototype.renderInput = function () {
|
124
|
+
var options = this.options;
|
125
|
+
var name = options.name ? options.name : this.version + this.tmpId;
|
126
|
+
var placeholder = options.placeholder ? options.placeholder : '请输入内容';
|
127
|
+
var initValue = options.initValue ? options.initValue : '';
|
128
|
+
return '<input type="text" value="' + this.getNameByValue(initValue) + '" name="' + name + '" id="' + this._input +
|
129
|
+
'" lay-filter="' + options.layFilter +
|
130
|
+
'" lay-verType="' + options.layVerType +
|
131
|
+
'" lay-verify="' + options.layVerify +
|
132
|
+
'" lay-reqText="' + options.layReqText +
|
133
|
+
'" oncut="' + (!options.hasCut ? 'return false' : '') + '" autocomplete="off" placeholder="' + placeholder + '" class="layui-input">';
|
134
|
+
};
|
135
|
+
|
136
|
+
/**
|
137
|
+
* 加载主体内容
|
138
|
+
* @param data
|
139
|
+
*/
|
140
|
+
selectInput.prototype.renderBody = function (data) {
|
141
|
+
var _options = this.options;
|
142
|
+
var _input = this.renderInput();
|
143
|
+
var components = this.getComponents();
|
144
|
+
var icon = "";
|
145
|
+
if (_options.hasSelectIcon) {
|
146
|
+
icon = '<div class="layui-form-selectInput-title"><i class="layui-selectInput-edge"></i></div>';
|
147
|
+
}
|
148
|
+
var bodyHtml = '<div class="layui-form-selectInput" id="' + this._select + '">' + icon +
|
149
|
+
'<dl class="layui-anim layui-anim-upbit ' + selectInputClass + '" style="">';
|
150
|
+
if (!data) data = [];
|
151
|
+
if (data.length > 0) {
|
152
|
+
var contentHtml = '';
|
153
|
+
for (var i = 0; i < data.length; i++) {
|
154
|
+
contentHtml += '<dd lay-index="' + i + '" lay-value="' + data[i]['value'] + '" class="' + this._class + '">' +
|
155
|
+
data[i]['name'] + '</dd>';
|
156
|
+
}
|
157
|
+
bodyHtml = _input + bodyHtml + contentHtml + '</dl></div>';
|
158
|
+
} else {
|
159
|
+
bodyHtml = _input + bodyHtml + '</dl></div>';
|
160
|
+
}
|
161
|
+
|
162
|
+
components.$elem.html(bodyHtml);
|
163
|
+
if (_options.hasInitShow) {
|
164
|
+
this.showElem();
|
165
|
+
}
|
166
|
+
return bodyHtml;
|
167
|
+
};
|
168
|
+
|
169
|
+
/**
|
170
|
+
* 绑定事件
|
171
|
+
*/
|
172
|
+
selectInput.prototype.bindEvents = function () {
|
173
|
+
var that = this;
|
174
|
+
var _options = this.options;
|
175
|
+
var components = this.getComponents();
|
176
|
+
/* 事件公共返回对象 */
|
177
|
+
var commonMember = function (ext, isInput) {
|
178
|
+
var $item = $(ext);
|
179
|
+
var obj = {
|
180
|
+
elem: $item, //当前item的dom,
|
181
|
+
extras: $item.attr('lay-extras'),
|
182
|
+
data: isInput ? $item.val() : $item.attr('lay-value'),
|
183
|
+
id: $(this).id // 当前item索引
|
184
|
+
};
|
185
|
+
return $.extend(obj, ext);
|
186
|
+
};
|
187
|
+
|
188
|
+
// 执行重载dl数据
|
189
|
+
var cb = function (data) {
|
190
|
+
if (data && typeof (data) === 'string') {
|
191
|
+
data = JSON.parse(data)
|
192
|
+
}
|
193
|
+
if (!data) data = [];
|
194
|
+
// 判断是否为对象
|
195
|
+
if (Object.prototype.toString.call(data) === '[object Object]') {
|
196
|
+
if (data.hasOwnProperty('data')) {
|
197
|
+
data = data.data;
|
198
|
+
} else {
|
199
|
+
data = [];
|
200
|
+
layui.hint().error('返回数据格式有误,必须满足如下格式:{"code":0,"msg":"success","data":[]}');
|
201
|
+
return false;
|
202
|
+
}
|
203
|
+
}
|
204
|
+
if (data.length > 0) {
|
205
|
+
data = that.options.parseData ? that.options.parseData(data) : data;
|
206
|
+
that.options.invisibleData = data;
|
207
|
+
var contentHtml = '';
|
208
|
+
for (var i = 0; i < data.length; i++) {
|
209
|
+
contentHtml += '<dd lay-index="' + i + '" lay-value="' + data[i]['value'] + '" lay-extras="' + data[i]['extras'] + '" class="' + that._class +
|
210
|
+
'">' +
|
211
|
+
data[i]['name'] +
|
212
|
+
'</dd>';
|
213
|
+
}
|
214
|
+
components.$selectElem.find('dl').html(contentHtml);
|
215
|
+
components.$selectElem.addClass(selectedCss + ' ' + upCss);
|
216
|
+
components.$selectElem.find("dl").css({
|
217
|
+
"display": "block"
|
218
|
+
});
|
219
|
+
that.bindEvents();
|
220
|
+
} else {
|
221
|
+
components.$selectElem.removeClass(selectedCss + ' ' + upCss);
|
222
|
+
components.$selectElem.find("dl").css({
|
223
|
+
"display": "none"
|
224
|
+
});
|
225
|
+
}
|
226
|
+
};
|
227
|
+
|
228
|
+
// 定时器
|
229
|
+
let __timer = null;
|
230
|
+
// 绑定input输入事件
|
231
|
+
components.$inputElem.off('input propertychange').on('input propertychange', function () {
|
232
|
+
// 执行我们的正常的操作
|
233
|
+
var value = $(this).val();
|
234
|
+
if (value !== '' && value !== null && value !== undefined) {
|
235
|
+
that.tmpSelectValue = '';
|
236
|
+
}
|
237
|
+
if (!that.options.remoteSearch) {
|
238
|
+
if (value !== '' && value !== null && value !== undefined) {
|
239
|
+
$(this).next().addClass(selectedCss + ' ' + upCss);
|
240
|
+
$(this).next().find("dl").css({
|
241
|
+
"display": "block"
|
242
|
+
});
|
243
|
+
var dl = $(this).next().find("dl").children();
|
244
|
+
var j = -1;
|
245
|
+
for (var i = 0; i < dl.length; i++) {
|
246
|
+
var __tmpInner = dl[i].innerHTML;
|
247
|
+
if (that.options.ignoreCase) {
|
248
|
+
__tmpInner = __tmpInner.toLowerCase();
|
249
|
+
value = value.toLowerCase();
|
250
|
+
}
|
251
|
+
if (__tmpInner.indexOf(value) <= -1) {
|
252
|
+
dl[i].style.display = "none";
|
253
|
+
j++;
|
254
|
+
} else {
|
255
|
+
dl[i].style.display = "block";
|
256
|
+
}
|
257
|
+
if (j === (dl.length - 1)) {
|
258
|
+
$(this).next().find("dl").css({
|
259
|
+
"display": "none"
|
260
|
+
});
|
261
|
+
}
|
262
|
+
}
|
263
|
+
} else {
|
264
|
+
$(this).next().removeClass(selectedCss + ' ' + upCss);
|
265
|
+
$(this).next().find("dl").css({
|
266
|
+
"display": "none"
|
267
|
+
});
|
268
|
+
}
|
269
|
+
} else if (that.options.remoteSearch && that.options.remoteMethod && that.options.remoteEvent === 'input') {
|
270
|
+
if (__timer) {
|
271
|
+
clearTimeout(__timer);
|
272
|
+
__timer = null;
|
273
|
+
}
|
274
|
+
__timer = setTimeout(() => {
|
275
|
+
that.options.remoteMethod(value, cb);
|
276
|
+
}, 500);
|
277
|
+
}
|
278
|
+
layui.event.call(this, _MOD, 'itemInput(' + components.filter + ')', commonMember(this, true));
|
279
|
+
});
|
280
|
+
|
281
|
+
// 响应回车事件
|
282
|
+
if (that.options.remoteSearch && that.options.remoteMethod && that.options.remoteEvent === 'keydown') {
|
283
|
+
components.$inputElem.off('keydown').on('keydown', function (event) {
|
284
|
+
var value = $(this).val();
|
285
|
+
if (value !== '' && value !== null && value !== undefined) {
|
286
|
+
that.tmpSelectValue = '';
|
287
|
+
}
|
288
|
+
if (parseInt(event.keyCode) === 13) {
|
289
|
+
// 远程执行搜索
|
290
|
+
if (__timer) {
|
291
|
+
clearTimeout(__timer);
|
292
|
+
__timer = null;
|
293
|
+
}
|
294
|
+
__timer = setTimeout(() => {
|
295
|
+
that.options.remoteMethod(value, cb);
|
296
|
+
}, 500);
|
297
|
+
}
|
298
|
+
});
|
299
|
+
}
|
300
|
+
|
301
|
+
if (_options.hasSelectIcon) {
|
302
|
+
components.$elem.find('.layui-selectInput-edge').off('click').on('click', function () {
|
303
|
+
that.showElem();
|
304
|
+
components.$inputElem.focus();//点击选择图标同时让input获取焦点
|
305
|
+
});
|
306
|
+
}
|
307
|
+
|
308
|
+
if (_options.autoClose) {
|
309
|
+
// 绑定input光标消失事件
|
310
|
+
components.$inputElem.off('blur').on('blur', function () {
|
311
|
+
var elem = $(this).next().find('dl');
|
312
|
+
var y1 = elem.offset().top; //div上面两个的点的y值
|
313
|
+
var y2 = y1 + elem.height(); //div下面两个点的y值
|
314
|
+
var x1 = elem.offset().left; //div左边两个的点的x值
|
315
|
+
var x2 = x1 + elem.width(); //div右边两个点的x的值
|
316
|
+
if (x < x1 || x > x2 || y < y1 || y > y2) {
|
317
|
+
$(this).next().removeClass(selectedCss + ' ' + upCss);
|
318
|
+
elem.hide();
|
319
|
+
}
|
320
|
+
layui.event.call(this, _MOD, 'itemClear(' + components.filter + ')', commonMember(this));
|
321
|
+
});
|
322
|
+
}
|
323
|
+
|
324
|
+
// select 选择事件
|
325
|
+
components.$ddElem.off('click').on('click', function () {
|
326
|
+
// 执行我们的正常的操作
|
327
|
+
var _index = $(this).attr('lay-index');
|
328
|
+
var value = $(this).attr('lay-value');
|
329
|
+
var name = $(this).text();
|
330
|
+
that.tmpSelectValue = value;
|
331
|
+
$(this).parent().parent().prev().val(name);
|
332
|
+
$(this).parent().parent().removeClass(selectedCss + ' ' + upCss);
|
333
|
+
$(this).parent().css({
|
334
|
+
"display": "none"
|
335
|
+
});
|
336
|
+
layui.event.call(this, _MOD, 'itemSelect(' + components.filter + ')', commonMember(this));
|
337
|
+
});
|
338
|
+
};
|
339
|
+
|
340
|
+
/**
|
341
|
+
* 显示实例
|
342
|
+
*/
|
343
|
+
selectInput.prototype.showElem = function (isNone) {
|
344
|
+
isNone = isNone || false;
|
345
|
+
var that = this;
|
346
|
+
var components = this.getComponents();
|
347
|
+
var body = components.$elem.find('.' + selectInputClass).html();
|
348
|
+
if (body) {
|
349
|
+
var _none = components.$elem.find('.' + selectInputClass).css('display');
|
350
|
+
if (_none === 'none' && !isNone) {
|
351
|
+
components.$elem.find('.layui-form-selectInput').addClass(selectedCss + ' ' + upCss);
|
352
|
+
components.$elem.find('.' + selectInputClass).show();
|
353
|
+
components.$elem.find('.' + that._class).show();
|
354
|
+
} else {
|
355
|
+
components.$elem.find('.layui-form-selectInput').removeClass(selectedCss + ' ' + upCss);
|
356
|
+
components.$elem.find('.' + selectInputClass).hide();
|
357
|
+
components.$elem.find('.' + that._class).hide();
|
358
|
+
}
|
359
|
+
}
|
360
|
+
};
|
361
|
+
|
362
|
+
/**
|
363
|
+
* 监听事件
|
364
|
+
* @param events
|
365
|
+
* @param callback
|
366
|
+
* @returns {*}
|
367
|
+
*/
|
368
|
+
selectInput.prototype.on = function (events, callback) {
|
369
|
+
return layui.onevent.call(this, _MOD, events, callback);
|
370
|
+
};
|
371
|
+
|
372
|
+
/**
|
373
|
+
* 获取选中的value值
|
374
|
+
* @returns {*}
|
375
|
+
*/
|
376
|
+
selectInput.prototype.getValue = function () {
|
377
|
+
var components = this.getComponents();
|
378
|
+
var _value = this.tmpSelectValue;
|
379
|
+
var __data = this.options.invisibleData;
|
380
|
+
var _select = true;
|
381
|
+
if (this.tmpSelectValue === '' ||
|
382
|
+
this.tmpSelectValue === undefined ||
|
383
|
+
this.tmpSelectValue === null) {
|
384
|
+
if (_value !== '' && _value !== null && _value !== undefined) {
|
385
|
+
_select = false;
|
386
|
+
}
|
387
|
+
}
|
388
|
+
if (__data.length > 0) {
|
389
|
+
for (var k = 0; k < __data.length; k++) {
|
390
|
+
if ($.trim(__data[k].name) === $.trim(components.$inputElem.val())) {
|
391
|
+
_select = true;
|
392
|
+
}
|
393
|
+
}
|
394
|
+
}
|
395
|
+
if (this.options.invisibleMode) {
|
396
|
+
return {
|
397
|
+
value: _value,
|
398
|
+
isSelect: _select
|
399
|
+
};
|
400
|
+
}
|
401
|
+
return _value;
|
402
|
+
};
|
403
|
+
|
404
|
+
/**
|
405
|
+
* 清空输入框的value值
|
406
|
+
* @returns {boolean}
|
407
|
+
*/
|
408
|
+
selectInput.prototype.emptyValue = function () {
|
409
|
+
var components = this.getComponents();
|
410
|
+
components.$inputElem.val("");
|
411
|
+
this.tmpSelectValue = "";
|
412
|
+
return true;
|
413
|
+
};
|
414
|
+
|
415
|
+
/**
|
416
|
+
* 动态添加select选项
|
417
|
+
* @param data
|
418
|
+
* @param isPush
|
419
|
+
* @returns {boolean}
|
420
|
+
*/
|
421
|
+
selectInput.prototype.addSelect = function (data, isPush) {
|
422
|
+
isPush = isPush || false;
|
423
|
+
if (!data) {
|
424
|
+
return false;
|
425
|
+
}
|
426
|
+
var _this = this;
|
427
|
+
var _options = this.options;
|
428
|
+
var components = this.getComponents();
|
429
|
+
if (typeof (data) === 'string') {
|
430
|
+
data = JSON.parse(data)
|
431
|
+
}
|
432
|
+
if (data.length === 0) {
|
433
|
+
return false;
|
434
|
+
}
|
435
|
+
if (_options.data && _options.data.length > 0 && isPush) {
|
436
|
+
data = _options.data.concat(data)
|
437
|
+
}
|
438
|
+
var contentHtml = '';
|
439
|
+
for (var i = 0; i < data.length; i++) {
|
440
|
+
contentHtml += '<dd lay-index="' + i + '" lay-value="' + data[i]['value'] + '" class="' + _this._class + '">' +
|
441
|
+
data[i]['name'] +
|
442
|
+
'</dd>';
|
443
|
+
}
|
444
|
+
this.options.data = data;
|
445
|
+
this.options.invisibleData = data;
|
446
|
+
components.$selectElem.find('dl').html(contentHtml);
|
447
|
+
components.$selectElem.addClass(selectedCss + ' ' + upCss);
|
448
|
+
components.$selectElem.find("dl").css({
|
449
|
+
"display": "block"
|
450
|
+
});
|
451
|
+
_this.bindEvents();
|
452
|
+
}
|
453
|
+
|
454
|
+
/**
|
455
|
+
* 通过Value获取Name
|
456
|
+
* @param _value
|
457
|
+
* @returns {*}
|
458
|
+
*/
|
459
|
+
selectInput.prototype.getNameByValue = function (_value) {
|
460
|
+
var __data = this.options.invisibleData;
|
461
|
+
if (__data.length > 0) {
|
462
|
+
for (var k = 0; k < __data.length; k++) {
|
463
|
+
if ($.trim(__data[k].value) === $.trim(_value)) {
|
464
|
+
return __data[k].name;
|
465
|
+
}
|
466
|
+
}
|
467
|
+
}
|
468
|
+
return _value;
|
469
|
+
}
|
470
|
+
|
471
|
+
/**
|
472
|
+
* 设置属性值
|
473
|
+
* @param _value
|
474
|
+
* @param isEmpty
|
475
|
+
* @returns {boolean}
|
476
|
+
*/
|
477
|
+
selectInput.prototype.setValue = function (_value, isEmpty) {
|
478
|
+
isEmpty = isEmpty || false;
|
479
|
+
var __value = this.getNameByValue(_value);
|
480
|
+
var components = this.getComponents();
|
481
|
+
if ($.trim(__value) === $.trim(_value) && isEmpty) {
|
482
|
+
return false;
|
483
|
+
}
|
484
|
+
components.$inputElem.val(__value);
|
485
|
+
if ($.trim(__value) === $.trim(_value)) {
|
486
|
+
this.tmpSelectValue = __value;
|
487
|
+
}
|
488
|
+
}
|
489
|
+
|
490
|
+
var __insObj = {};
|
491
|
+
|
492
|
+
/** 外部方法 */
|
493
|
+
var iS = {
|
494
|
+
/* 渲染 */
|
495
|
+
render: function (options, _options) {
|
496
|
+
_options = _options || null;
|
497
|
+
if (typeof (options) === "string" && _options) {
|
498
|
+
_options['elem'] = options;
|
499
|
+
var __ins = new selectInput(_options);
|
500
|
+
__insObj[options] = __ins;
|
501
|
+
return __ins;
|
502
|
+
}
|
503
|
+
return new selectInput(options);
|
504
|
+
},
|
505
|
+
/* 事件监听 */
|
506
|
+
on: function (events, callback) {
|
507
|
+
return layui.onevent.call(this, _MOD, events, callback);
|
508
|
+
},
|
509
|
+
/**
|
510
|
+
* 获取实例
|
511
|
+
* @param id
|
512
|
+
* @returns {null|*}
|
513
|
+
*/
|
514
|
+
getInstance: function (id) {
|
515
|
+
if (__insObj.hasOwnProperty(id)) {
|
516
|
+
return __insObj[id];
|
517
|
+
}
|
518
|
+
return null;
|
519
|
+
}
|
520
|
+
};
|
521
|
+
exports(_MOD, iS);
|
522
|
+
});
|