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.
Files changed (244) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +30 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/educode_sales_manifest.js +2 -0
  6. data/app/assets/fonts/iconfont.eot +0 -0
  7. data/app/assets/fonts/iconfont.svg +554 -0
  8. data/app/assets/fonts/iconfont.ttf +0 -0
  9. data/app/assets/fonts/iconfont.woff +0 -0
  10. data/app/assets/fonts/iconfont.woff2 +0 -0
  11. data/app/assets/images/educode_sales/favicon.ico +0 -0
  12. data/app/assets/images/educode_sales/icon-ext.png +0 -0
  13. data/app/assets/images/educode_sales/icon-login.png +0 -0
  14. data/app/assets/images/educode_sales/icon.png +0 -0
  15. data/app/assets/images/educode_sales/loading-0.gif +0 -0
  16. data/app/assets/images/educode_sales/loading-1.gif +0 -0
  17. data/app/assets/images/educode_sales/loading-2.gif +0 -0
  18. data/app/assets/images/educode_sales/loginbg.png +0 -0
  19. data/app/assets/images/educode_sales/logo.png +0 -0
  20. data/app/assets/javascripts/educode_sales/application.js +16 -0
  21. data/app/assets/javascripts/educode_sales/extent/miniPage.js +394 -0
  22. data/app/assets/javascripts/educode_sales/extent/request.js +137 -0
  23. data/app/assets/javascripts/educode_sales/extent/select_input.js +522 -0
  24. data/app/assets/javascripts/educode_sales/layui.js +5 -0
  25. data/app/assets/stylesheets/educode_sales/app.css +256 -0
  26. data/app/assets/stylesheets/educode_sales/application.css +17 -0
  27. data/app/assets/stylesheets/educode_sales/error.css +181 -0
  28. data/app/assets/stylesheets/educode_sales/layui.scss +1525 -0
  29. data/app/assets/stylesheets/educode_sales/layuimini.css +838 -0
  30. data/app/assets/stylesheets/educode_sales/login.scss +38 -0
  31. data/app/assets/stylesheets/educode_sales/modules/code.css +29 -0
  32. data/app/assets/stylesheets/educode_sales/modules/laydate/default/font.scss +16 -0
  33. data/app/assets/stylesheets/educode_sales/modules/laydate/default/laydate.css +152 -0
  34. data/app/assets/stylesheets/educode_sales/modules/layer/default/icon-ext.png +0 -0
  35. data/app/assets/stylesheets/educode_sales/modules/layer/default/icon.png +0 -0
  36. data/app/assets/stylesheets/educode_sales/modules/layer/default/layer.scss +179 -0
  37. data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-0.gif +0 -0
  38. data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-1.gif +0 -0
  39. data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-2.gif +0 -0
  40. data/app/assets/stylesheets/educode_sales/modules/select_input.css +103 -0
  41. data/app/assets/stylesheets/educode_sales/public.css +47 -0
  42. data/app/controllers/educode_sales/activities_controller.rb +58 -0
  43. data/app/controllers/educode_sales/application_controller.rb +35 -0
  44. data/app/controllers/educode_sales/businesses_controller.rb +189 -0
  45. data/app/controllers/educode_sales/commons_controller.rb +54 -0
  46. data/app/controllers/educode_sales/follow_ups_controller.rb +140 -0
  47. data/app/controllers/educode_sales/home_controller.rb +40 -0
  48. data/app/controllers/educode_sales/key_person_controller.rb +29 -0
  49. data/app/controllers/educode_sales/operation_plans_controller.rb +53 -0
  50. data/app/controllers/educode_sales/operation_reports_controller.rb +6 -0
  51. data/app/controllers/educode_sales/operations_controller.rb +38 -0
  52. data/app/controllers/educode_sales/places_controller.rb +69 -0
  53. data/app/controllers/educode_sales/plans_controller.rb +208 -0
  54. data/app/controllers/educode_sales/roles_controller.rb +69 -0
  55. data/app/controllers/educode_sales/sale_reports_controller.rb +133 -0
  56. data/app/controllers/educode_sales/sale_trends_controller.rb +45 -0
  57. data/app/controllers/educode_sales/sales_controller.rb +64 -0
  58. data/app/controllers/educode_sales/sessions_controller.rb +51 -0
  59. data/app/controllers/educode_sales/staffs_controller.rb +81 -0
  60. data/app/controllers/educode_sales/teachers_controller.rb +167 -0
  61. data/app/helpers/educode_sales/activities_helper.rb +4 -0
  62. data/app/helpers/educode_sales/application_helper.rb +44 -0
  63. data/app/helpers/educode_sales/business_helper.rb +4 -0
  64. data/app/helpers/educode_sales/home_helper.rb +4 -0
  65. data/app/helpers/educode_sales/sessions_helper.rb +4 -0
  66. data/app/helpers/educode_sales/teachers_helper.rb +4 -0
  67. data/app/jobs/educode_sales/application_job.rb +4 -0
  68. data/app/mailers/educode_sales/application_mailer.rb +6 -0
  69. data/app/models/ability.rb +54 -0
  70. data/app/models/educode_sales/activity.rb +6 -0
  71. data/app/models/educode_sales/activity_teacher.rb +6 -0
  72. data/app/models/educode_sales/application_record.rb +5 -0
  73. data/app/models/educode_sales/business.rb +11 -0
  74. data/app/models/educode_sales/common.rb +32 -0
  75. data/app/models/educode_sales/course_subject.rb +5 -0
  76. data/app/models/educode_sales/follow_up.rb +14 -0
  77. data/app/models/educode_sales/key_person.rb +11 -0
  78. data/app/models/educode_sales/market_area.rb +6 -0
  79. data/app/models/educode_sales/money_plan.rb +22 -0
  80. data/app/models/educode_sales/operation_plan.rb +6 -0
  81. data/app/models/educode_sales/operation_report.rb +5 -0
  82. data/app/models/educode_sales/operation_trend.rb +5 -0
  83. data/app/models/educode_sales/permission.rb +16 -0
  84. data/app/models/educode_sales/place.rb +7 -0
  85. data/app/models/educode_sales/place_area.rb +6 -0
  86. data/app/models/educode_sales/role.rb +8 -0
  87. data/app/models/educode_sales/role_area.rb +13 -0
  88. data/app/models/educode_sales/role_permission.rb +6 -0
  89. data/app/models/educode_sales/sale_plan.rb +6 -0
  90. data/app/models/educode_sales/sale_report.rb +5 -0
  91. data/app/models/educode_sales/sale_trend.rb +4 -0
  92. data/app/models/educode_sales/staff.rb +41 -0
  93. data/app/models/educode_sales/teacher.rb +12 -0
  94. data/app/models/educode_sales/teacher_follow.rb +6 -0
  95. data/app/views/educode_sales/activities/edit.html.erb +82 -0
  96. data/app/views/educode_sales/activities/index.html.erb +172 -0
  97. data/app/views/educode_sales/activities/index.json.jbuilder +14 -0
  98. data/app/views/educode_sales/activities/new.html.erb +81 -0
  99. data/app/views/educode_sales/activities/show_teachers.html.erb +368 -0
  100. data/app/views/educode_sales/businesses/edit.html.erb +82 -0
  101. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +138 -0
  102. data/app/views/educode_sales/businesses/edit_plan.html.erb +172 -0
  103. data/app/views/educode_sales/businesses/index.html.erb +364 -0
  104. data/app/views/educode_sales/businesses/index.json.jbuilder +20 -0
  105. data/app/views/educode_sales/businesses/new.html.erb +80 -0
  106. data/app/views/educode_sales/businesses/new_follow_record.html.erb +144 -0
  107. data/app/views/educode_sales/businesses/show_follow.html.erb +466 -0
  108. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +21 -0
  109. data/app/views/educode_sales/businesses/show_follow_record.html.erb +81 -0
  110. data/app/views/educode_sales/businesses/show_keys.html.erb +56 -0
  111. data/app/views/educode_sales/businesses/unfinish_plans.json.jbuilder +14 -0
  112. data/app/views/educode_sales/commons/edit.html.erb +112 -0
  113. data/app/views/educode_sales/commons/index.html.erb +132 -0
  114. data/app/views/educode_sales/commons/index.json.jbuilder +13 -0
  115. data/app/views/educode_sales/commons/new.html.erb +58 -0
  116. data/app/views/educode_sales/commons/show.json.jbuilder +9 -0
  117. data/app/views/educode_sales/follow_ups/money_plans.json.jbuilder +11 -0
  118. data/app/views/educode_sales/follow_ups/teachers.json.jbuilder +16 -0
  119. data/app/views/educode_sales/home/index.html.erb +1 -0
  120. data/app/views/educode_sales/home/no_permission.html.erb +27 -0
  121. data/app/views/educode_sales/home/search.json.jbuilder +8 -0
  122. data/app/views/educode_sales/home/search_edu_teacher.json.jbuilder +14 -0
  123. data/app/views/educode_sales/home/search_teacher.json.jbuilder +24 -0
  124. data/app/views/educode_sales/home/search_users.json.jbuilder +8 -0
  125. data/app/views/educode_sales/home/statistics.html.erb +68 -0
  126. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +288 -0
  127. data/app/views/educode_sales/operation_plans/_monthly.html.erb +284 -0
  128. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +291 -0
  129. data/app/views/educode_sales/operation_plans/_weekly.html.erb +275 -0
  130. data/app/views/educode_sales/operation_plans/edit_month.html.erb +60 -0
  131. data/app/views/educode_sales/operation_plans/edit_monthly.html.erb +175 -0
  132. data/app/views/educode_sales/operation_plans/edit_week.html.erb +72 -0
  133. data/app/views/educode_sales/operation_plans/edit_weekly.html.erb +173 -0
  134. data/app/views/educode_sales/operation_plans/index.html.erb +22 -0
  135. data/app/views/educode_sales/operation_plans/new_month.html.erb +79 -0
  136. data/app/views/educode_sales/operation_plans/new_monthly.html.erb +176 -0
  137. data/app/views/educode_sales/operation_plans/new_week.html.erb +86 -0
  138. data/app/views/educode_sales/operation_plans/new_weekly.html.erb +174 -0
  139. data/app/views/educode_sales/operation_plans/operation.html.erb +0 -0
  140. data/app/views/educode_sales/operation_plans/show_month.html.erb +36 -0
  141. data/app/views/educode_sales/operation_plans/show_monthly.html.erb +171 -0
  142. data/app/views/educode_sales/operation_plans/show_week.html.erb +43 -0
  143. data/app/views/educode_sales/operation_plans/show_weekly.html.erb +170 -0
  144. data/app/views/educode_sales/operations/trends.html.erb +191 -0
  145. data/app/views/educode_sales/places/edit.html.erb +91 -0
  146. data/app/views/educode_sales/places/index.html.erb +137 -0
  147. data/app/views/educode_sales/places/index.json.jbuilder +13 -0
  148. data/app/views/educode_sales/places/new.html.erb +77 -0
  149. data/app/views/educode_sales/plans/_monthPlan.html.erb +258 -0
  150. data/app/views/educode_sales/plans/_monthly.html.erb +302 -0
  151. data/app/views/educode_sales/plans/_weekPlan.html.erb +265 -0
  152. data/app/views/educode_sales/plans/_weekly.html.erb +296 -0
  153. data/app/views/educode_sales/plans/audit_weekly.html.erb +177 -0
  154. data/app/views/educode_sales/plans/edit_month.html.erb +74 -0
  155. data/app/views/educode_sales/plans/edit_monthly.html.erb +179 -0
  156. data/app/views/educode_sales/plans/edit_week.html.erb +81 -0
  157. data/app/views/educode_sales/plans/edit_weekly.html.erb +238 -0
  158. data/app/views/educode_sales/plans/index.html.erb +54 -0
  159. data/app/views/educode_sales/plans/index.json.jbuilder +19 -0
  160. data/app/views/educode_sales/plans/my_month.json.jbuilder +18 -0
  161. data/app/views/educode_sales/plans/my_week.json.jbuilder +19 -0
  162. data/app/views/educode_sales/plans/new_month.html.erb +89 -0
  163. data/app/views/educode_sales/plans/new_monthly.html.erb +235 -0
  164. data/app/views/educode_sales/plans/new_week.html.erb +95 -0
  165. data/app/views/educode_sales/plans/new_weekly.html.erb +262 -0
  166. data/app/views/educode_sales/plans/operation.html.erb +0 -0
  167. data/app/views/educode_sales/plans/show_month.html.erb +30 -0
  168. data/app/views/educode_sales/plans/show_monthly.html.erb +175 -0
  169. data/app/views/educode_sales/plans/show_week.html.erb +38 -0
  170. data/app/views/educode_sales/plans/show_weekly.html.erb +143 -0
  171. data/app/views/educode_sales/roles/edit.html.erb +127 -0
  172. data/app/views/educode_sales/roles/index.html.erb +105 -0
  173. data/app/views/educode_sales/roles/index.json.jbuilder +10 -0
  174. data/app/views/educode_sales/roles/new.html.erb +51 -0
  175. data/app/views/educode_sales/sale_reports/audit.html.erb +209 -0
  176. data/app/views/educode_sales/sale_reports/edit.html.erb +240 -0
  177. data/app/views/educode_sales/sale_reports/index.json.jbuilder +17 -0
  178. data/app/views/educode_sales/sale_reports/plans.json.jbuilder +19 -0
  179. data/app/views/educode_sales/sale_reports/show.html.erb +172 -0
  180. data/app/views/educode_sales/sale_trends/operations.html.erb +49 -0
  181. data/app/views/educode_sales/sale_trends/trends.html.erb +213 -0
  182. data/app/views/educode_sales/sales/index.html.erb +60 -0
  183. data/app/views/educode_sales/sales/index.json.jbuilder +17 -0
  184. data/app/views/educode_sales/sales/operations.html.erb +108 -0
  185. data/app/views/educode_sales/sales/operations.json.jbuilder +14 -0
  186. data/app/views/educode_sales/sales/school.html.erb +29 -0
  187. data/app/views/educode_sales/sales/trends.html.erb +216 -0
  188. data/app/views/educode_sales/sales/xschool.html.erb +35 -0
  189. data/app/views/educode_sales/sessions/login.html.erb +87 -0
  190. data/app/views/educode_sales/staffs/edit.html.erb +116 -0
  191. data/app/views/educode_sales/staffs/follow_up_departments.json.jbuilder +13 -0
  192. data/app/views/educode_sales/staffs/follow_up_schools.json.jbuilder +12 -0
  193. data/app/views/educode_sales/staffs/index.html.erb +141 -0
  194. data/app/views/educode_sales/staffs/index.json.jbuilder +15 -0
  195. data/app/views/educode_sales/staffs/new.html.erb +73 -0
  196. data/app/views/educode_sales/teachers/activities.json.jbuilder +9 -0
  197. data/app/views/educode_sales/teachers/add_courses.html.erb +53 -0
  198. data/app/views/educode_sales/teachers/add_event.html.erb +49 -0
  199. data/app/views/educode_sales/teachers/add_keys.html.erb +282 -0
  200. data/app/views/educode_sales/teachers/course_list.json.jbuilder +22 -0
  201. data/app/views/educode_sales/teachers/edit.html.erb +109 -0
  202. data/app/views/educode_sales/teachers/edit_follow_record.html.erb +67 -0
  203. data/app/views/educode_sales/teachers/index.html.erb +461 -0
  204. data/app/views/educode_sales/teachers/index.json.jbuilder +23 -0
  205. data/app/views/educode_sales/teachers/new.html.erb +166 -0
  206. data/app/views/educode_sales/teachers/new_follow_record.html.erb +67 -0
  207. data/app/views/educode_sales/teachers/search_new.html.erb +138 -0
  208. data/app/views/educode_sales/teachers/show_class.html.erb +101 -0
  209. data/app/views/educode_sales/teachers/show_follow.html.erb +511 -0
  210. data/app/views/educode_sales/teachers/show_follow_record.html.erb +67 -0
  211. data/app/views/layouts/educode_sales/application.html.erb +104 -0
  212. data/app/views/layouts/educode_sales/login.html.erb +20 -0
  213. data/config/locales/sale.zh-CN.yml +9 -0
  214. data/config/routes.rb +162 -0
  215. data/db/migrate/20210830081842_create_educode_sales_staffs.rb +9 -0
  216. data/db/migrate/20210831022421_create_educode_sales_sale_trends.rb +13 -0
  217. data/db/migrate/20210831085201_create_educode_sales_commons.rb +11 -0
  218. data/db/migrate/20210901025628_create_educode_sales_roles.rb +19 -0
  219. data/db/migrate/20210901031626_create_educode_sales_market_areas.rb +10 -0
  220. data/db/migrate/20210902061835_create_educode_sales_role_areas.rb +11 -0
  221. data/db/migrate/20210902064029_create_educode_sales_permissions.rb +12 -0
  222. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +62 -0
  223. data/db/migrate/20210902073832_create_educode_sales_businesses.rb +11 -0
  224. data/db/migrate/20210902080535_create_educode_sales_places.rb +10 -0
  225. data/db/migrate/20210902080918_create_educode_sales_follow_ups.rb +20 -0
  226. data/db/migrate/20210902101022_create_educode_sales_teachers.rb +20 -0
  227. data/db/migrate/20210902103331_create_educode_sales_teacher_follows.rb +15 -0
  228. data/db/migrate/20210903015810_create_educode_sales_sale_plans.rb +14 -0
  229. data/db/migrate/20210903020721_create_educode_sales_sale_reports.rb +21 -0
  230. data/db/migrate/20210903021458_create_educode_sales_operation_plans.rb +14 -0
  231. data/db/migrate/20210903021710_create_educode_sales_operation_reports.rb +19 -0
  232. data/db/migrate/20210903022055_create_educode_sales_operation_trends.rb +13 -0
  233. data/db/migrate/20210903032011_create_educode_sales_activities.rb +16 -0
  234. data/db/migrate/20210906104001_create_educode_sales_money_plans.rb +18 -0
  235. data/db/migrate/20210906105154_create_educode_sales_place_areas.rb +10 -0
  236. data/db/migrate/20210908014953_create_educode_sales_key_people.rb +21 -0
  237. data/db/migrate/20210912061148_add_audit_user_id_to_sales_reports.rb +11 -0
  238. data/db/migrate/20210913070728_create_educode_sales_activity_teachers.rb +11 -0
  239. data/db/migrate/20210913071607_create_educode_sales_course_subjects.rb +14 -0
  240. data/lib/educode_sales/engine.rb +5 -0
  241. data/lib/educode_sales/version.rb +3 -0
  242. data/lib/educode_sales.rb +5 -0
  243. data/lib/tasks/educode_sales_tasks.rake +4 -0
  244. 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
+ });