educode_sales 0.9.32 → 0.9.33

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.
@@ -0,0 +1,401 @@
1
+ /*!
2
+ * jQuery cxSelect
3
+ * @name jquery.cxselect.js
4
+ * @version 1.4.0
5
+ * @date 2016-04-01
6
+ * @author ciaoca
7
+ * @email ciaoca@gmail.com
8
+ * @site https://github.com/ciaoca/cxSelect
9
+ * @license Released under the MIT license
10
+ */
11
+ (function(factory) {
12
+ if (typeof define === 'function' && define.amd) {
13
+ define(['jquery'], factory);
14
+ } else {
15
+ factory(window.jQuery || window.Zepto || window.$);
16
+ };
17
+ }(function($) {
18
+ var cxSelect = function() {
19
+ var self = this;
20
+ var dom, settings, callback;
21
+
22
+ // 分配参数
23
+ for (var i = 0, l = arguments.length; i < l; i++) {
24
+ if (cxSelect.isJquery(arguments[i]) || cxSelect.isZepto(arguments[i])) {
25
+ dom = arguments[i];
26
+ } else if (cxSelect.isElement(arguments[i])) {
27
+ dom = $(arguments[i]);
28
+ } else if (typeof arguments[i] === 'function') {
29
+ callback = arguments[i];
30
+ } else if (typeof arguments[i] === 'object') {
31
+ settings = arguments[i];
32
+ };
33
+ };
34
+
35
+ var api = new cxSelect.init(dom, settings);
36
+
37
+ if (typeof callback === 'function') {
38
+ callback(api);
39
+ };
40
+
41
+ return api;
42
+ };
43
+
44
+ cxSelect.isElement = function(o){
45
+ if (o && (typeof HTMLElement === 'function' || typeof HTMLElement === 'object') && o instanceof HTMLElement) {
46
+ return true;
47
+ } else {
48
+ return (o && o.nodeType && o.nodeType === 1) ? true : false;
49
+ };
50
+ };
51
+
52
+ cxSelect.isJquery = function(o){
53
+ return (o && o.length && (typeof jQuery === 'function' || typeof jQuery === 'object') && o instanceof jQuery) ? true : false;
54
+ };
55
+
56
+ cxSelect.isZepto = function(o){
57
+ return (o && o.length && (typeof Zepto === 'function' || typeof Zepto === 'object') && Zepto.zepto.isZ(o)) ? true : false;
58
+ };
59
+
60
+ cxSelect.getIndex = function(n, required) {
61
+ return required ? n : n - 1;
62
+ };
63
+
64
+ cxSelect.getData = function(data, space) {
65
+ if (typeof space === 'string' && space.length) {
66
+ space = space.split('.');
67
+ for (var i = 0, l = space.length; i < l; i++) {
68
+ data = data[space[i]];
69
+ };
70
+ };
71
+ return data;
72
+ };
73
+
74
+ cxSelect.init = function(dom, settings) {
75
+ var self = this;
76
+
77
+ if (!cxSelect.isJquery(dom) && !cxSelect.isZepto(dom)) {return};
78
+
79
+ var theSelect = {
80
+ dom: {
81
+ box: dom
82
+ }
83
+ };
84
+
85
+ self.attach = cxSelect.attach.bind(theSelect);
86
+ self.detach = cxSelect.detach.bind(theSelect);
87
+ self.setOptions = cxSelect.setOptions.bind(theSelect);
88
+ self.clear = cxSelect.clear.bind(theSelect);
89
+
90
+ theSelect.changeEvent = function() {
91
+ cxSelect.selectChange.call(theSelect, this.className);
92
+ };
93
+
94
+ theSelect.settings = $.extend({}, $.cxSelect.defaults, settings, {
95
+ url: theSelect.dom.box.data('url'),
96
+ emptyStyle: theSelect.dom.box.data('emptyStyle'),
97
+ required: theSelect.dom.box.data('required'),
98
+ firstTitle: theSelect.dom.box.data('firstTitle'),
99
+ firstValue: theSelect.dom.box.data('firstValue'),
100
+ jsonSpace: theSelect.dom.box.data('jsonSpace'),
101
+ jsonName: theSelect.dom.box.data('jsonName'),
102
+ jsonValue: theSelect.dom.box.data('jsonValue'),
103
+ jsonSub: theSelect.dom.box.data('jsonSub')
104
+ });
105
+
106
+ var _dataSelects = theSelect.dom.box.data('selects');
107
+
108
+ if (typeof _dataSelects === 'string' && _dataSelects.length) {
109
+ theSelect.settings.selects = _dataSelects.split(',');
110
+ };
111
+
112
+ self.setOptions();
113
+ self.attach();
114
+
115
+ // 使用独立接口获取数据
116
+ if (!theSelect.settings.url && !theSelect.settings.data) {
117
+ cxSelect.start.apply(theSelect);
118
+
119
+ // 设置自定义数据
120
+ } else if ($.isArray(theSelect.settings.data)) {
121
+ cxSelect.start.call(theSelect, theSelect.settings.data);
122
+
123
+ // 设置 URL,通过 Ajax 获取数据
124
+ } else if (typeof theSelect.settings.url === 'string' && theSelect.settings.url.length) {
125
+ $.getJSON(theSelect.settings.url, function(json) {
126
+ cxSelect.start.call(theSelect, json);
127
+ });
128
+ };
129
+ };
130
+
131
+ // 设置参数
132
+ cxSelect.setOptions = function(opts) {
133
+ var self = this;
134
+
135
+ if (opts) {
136
+ $.extend(self.settings, opts);
137
+ };
138
+
139
+ // 初次或重设选择器组
140
+ if (!$.isArray(self.selectArray) || !self.selectArray.length || (opts && opts.selects)) {
141
+ self.selectArray = [];
142
+
143
+ if ($.isArray(self.settings.selects) && self.settings.selects.length) {
144
+ var _tempSelect;
145
+
146
+ for (var i = 0, l = self.settings.selects.length; i < l; i++) {
147
+ _tempSelect = self.dom.box.find('select.' + self.settings.selects[i]);
148
+
149
+ if (!_tempSelect || !_tempSelect.length) {break};
150
+
151
+ self.selectArray.push(_tempSelect);
152
+ };
153
+ };
154
+ };
155
+
156
+ if (opts) {
157
+ if (!$.isArray(opts.data) && typeof opts.url === 'string' && opts.url.length) {
158
+ $.getJSON(self.settings.url, function(json) {
159
+ cxSelect.start.call(self, json);
160
+ });
161
+
162
+ } else {
163
+ cxSelect.start.call(self, opts.data);
164
+ };
165
+ };
166
+ };
167
+
168
+ // 绑定
169
+ cxSelect.attach = function() {
170
+ var self = this;
171
+
172
+ if (!self.attachStatus) {
173
+ self.dom.box.on('change', 'select', self.changeEvent);
174
+ };
175
+
176
+ if (typeof self.attachStatus === 'boolean') {
177
+ cxSelect.start.call(self);
178
+ };
179
+
180
+ self.attachStatus = true;
181
+ };
182
+
183
+ // 移除绑定
184
+ cxSelect.detach = function() {
185
+ var self = this;
186
+ self.dom.box.off('change', 'select', self.changeEvent);
187
+ self.attachStatus = false;
188
+ };
189
+
190
+ // 清空选项
191
+ cxSelect.clear = function(index) {
192
+ var self = this;
193
+ var _style = {
194
+ display: '',
195
+ visibility: ''
196
+ };
197
+
198
+ index = isNaN(index) ? 0 : index;
199
+
200
+ // 清空后面的 select
201
+ for (var i = index, l = self.selectArray.length; i < l; i++) {
202
+ self.selectArray[i].empty().prop('disabled', true);
203
+
204
+ if (self.settings.emptyStyle === 'none') {
205
+ _style.display = 'none';
206
+ } else if (self.settings.emptyStyle === 'hidden') {
207
+ _style.visibility = 'hidden';
208
+ };
209
+
210
+ self.selectArray[i].css(_style);
211
+ };
212
+ };
213
+
214
+ cxSelect.start = function(data) {
215
+ var self = this;
216
+
217
+ if ($.isArray(data)) {
218
+ self.settings.data = cxSelect.getData(data, self.settings.jsonSpace);
219
+ };
220
+
221
+ if (!self.selectArray.length) {return};
222
+
223
+ // 保存默认值
224
+ for (var i = 0, l = self.selectArray.length; i < l; i++) {
225
+ if (typeof self.selectArray[i].attr('data-value') !== 'string' && self.selectArray[i][0].options.length) {
226
+ self.selectArray[i].attr('data-value', self.selectArray[i].val());
227
+ };
228
+ };
229
+
230
+ if (self.settings.data || (typeof self.selectArray[0].data('url') === 'string' && self.selectArray[0].data('url').length)) {
231
+ cxSelect.getOptionData.call(self, 0);
232
+ } else {
233
+ self.selectArray[0].prop('disabled', false).css({
234
+ 'display': '',
235
+ 'visibility': ''
236
+ });
237
+ };
238
+ };
239
+
240
+ // 获取选项数据
241
+ cxSelect.getOptionData = function(index) {
242
+ var self = this;
243
+
244
+ if (typeof index !== 'number' || isNaN(index) || index < 0 || index >= self.selectArray.length) {return};
245
+
246
+ var _indexPrev = index - 1;
247
+ var _select = self.selectArray[index];
248
+ var _selectData;
249
+ var _valueIndex;
250
+ var _dataUrl = _select.data('url');
251
+ var _jsonSpace = typeof _select.data('jsonSpace') === 'undefined' ? self.settings.jsonSpace : _select.data('jsonSpace');
252
+ var _query = {};
253
+ var _queryName;
254
+ var _selectName;
255
+
256
+ cxSelect.clear.call(self, index);
257
+
258
+ // 使用独立接口
259
+ if (typeof _dataUrl === 'string' && _dataUrl.length) {
260
+ if (_indexPrev >= 0) {
261
+ if (!self.selectArray[_indexPrev].val().length) {return};
262
+
263
+ _queryName = _select.data('queryName');
264
+ _selectName = self.selectArray[_indexPrev].attr('name');
265
+
266
+ if (typeof _queryName === 'string' && _queryName.length) {
267
+ _query[_queryName] = self.selectArray[_indexPrev].val();
268
+ } else if (typeof _selectName === 'string' && _selectName.length) {
269
+ _query[_selectName] = self.selectArray[_indexPrev].val();
270
+ };
271
+ };
272
+
273
+ $.getJSON(_dataUrl, _query, function(json) {
274
+ _selectData = cxSelect.getData(json, _jsonSpace);
275
+
276
+ cxSelect.buildOption.call(self, index, _selectData);
277
+ });
278
+
279
+ // 使用整合数据
280
+ } else if (self.settings.data && typeof self.settings.data === 'object') {
281
+ _selectData = self.settings.data;
282
+
283
+ for (var i = 0; i < index; i++) {
284
+ _valueIndex = cxSelect.getIndex(self.selectArray[i][0].selectedIndex, typeof self.selectArray[i].data('required') === 'boolean' ? self.selectArray[i].data('required') : self.settings.required);
285
+
286
+ if (typeof _selectData[_valueIndex] === 'object' && $.isArray(_selectData[_valueIndex][self.settings.jsonSub]) && _selectData[_valueIndex][self.settings.jsonSub].length) {
287
+ _selectData = _selectData[_valueIndex][self.settings.jsonSub];
288
+ } else {
289
+ _selectData = null;
290
+ break;
291
+ };
292
+ };
293
+
294
+ cxSelect.buildOption.call(self, index, _selectData);
295
+ };
296
+ };
297
+
298
+ // 构建选项列表
299
+ cxSelect.buildOption = function(index, data) {
300
+ var self = this;
301
+
302
+ var _select = self.selectArray[index];
303
+ var _required = typeof _select.data('required') === 'boolean' ? _select.data('required') : self.settings.required;
304
+ var _firstTitle = typeof _select.data('firstTitle') === 'undefined' ? self.settings.firstTitle : _select.data('firstTitle');
305
+ var _firstValue = typeof _select.data('firstValue') === 'undefined' ? self.settings.firstValue : _select.data('firstValue');
306
+ var _jsonName = typeof _select.data('jsonName') === 'undefined' ? self.settings.jsonName : _select.data('jsonName');
307
+ var _jsonValue = typeof _select.data('jsonValue') === 'undefined' ? self.settings.jsonValue : _select.data('jsonValue');
308
+
309
+ if (!$.isArray(data)) {return};
310
+
311
+ var _html = !_required ? '<option value="' + String(_firstValue) + '">' + String(_firstTitle) + '</option>' : '';
312
+
313
+ // 区分标题、值的数据
314
+ if (typeof _jsonName === 'string' && _jsonName.length) {
315
+ // 无值字段时使用标题作为值
316
+ if (typeof _jsonValue !== 'string' || !_jsonValue.length) {
317
+ _jsonValue = _jsonName;
318
+ };
319
+
320
+ for (var i = 0, l = data.length; i < l; i++) {
321
+ _html += '<option value="' + String(data[i][_jsonValue]) + '">' + String(data[i][_jsonName]) + '</option>';
322
+ };
323
+
324
+ // 数组即为值的数据
325
+ } else {
326
+ for (var i = 0, l = data.length; i < l; i++) {
327
+ _html += '<option value="' + String(data[i]) + '">' + String(data[i]) + '</option>';
328
+ };
329
+ };
330
+
331
+ _select.html(_html).prop('disabled', false).css({
332
+ 'display': '',
333
+ 'visibility': ''
334
+ });
335
+
336
+ // 初次加载设置默认值
337
+ if (typeof _select.attr('data-value') === 'string') {
338
+ _select.val(String(_select.attr('data-value'))).removeAttr('data-value');
339
+
340
+ if (_select[0].selectedIndex < 0) {
341
+ _select[0].options[0].selected = true;
342
+ };
343
+ };
344
+
345
+ if (_required || _select[0].selectedIndex > 0) {
346
+ _select.trigger('change');
347
+ };
348
+
349
+ };
350
+
351
+ // 改变选择时的处理
352
+ cxSelect.selectChange = function(name) {
353
+ var self = this;
354
+
355
+ if (typeof name !== 'string' || !name.length) {return};
356
+
357
+ var index;
358
+
359
+ name = name.replace(/\s+/g, ',');
360
+ name = ',' + name + ',';
361
+
362
+ // 获取当前 select 位置
363
+ for (var i = 0, l = self.selectArray.length; i < l; i++) {
364
+ if (name.indexOf(',' + self.settings.selects[i] + ',') > -1) {
365
+ index = i;
366
+ break;
367
+ };
368
+ };
369
+
370
+ if (typeof index === 'number' && index > -1) {
371
+ index += 1;
372
+ cxSelect.getOptionData.call(self, index);
373
+ };
374
+ };
375
+
376
+ $.cxSelect = function() {
377
+ return cxSelect.apply(this, arguments);
378
+ };
379
+
380
+ // 默认值
381
+ $.cxSelect.defaults = {
382
+ selects: [], // 下拉选框组
383
+ url: null, // 列表数据文件路径(URL)或数组数据
384
+ data: null, // 自定义数据
385
+ emptyStyle: null, // 无数据状态显示方式
386
+ required: false, // 是否为必选
387
+ firstTitle: '请选择', // 第一个选项的标题
388
+ firstValue: '', // 第一个选项的值
389
+ jsonSpace: '', // 数据命名空间
390
+ jsonName: 'n', // 数据标题字段名称
391
+ jsonValue: '', // 数据值字段名称
392
+ jsonSub: 's' // 子集数据字段名称
393
+ };
394
+
395
+ $.fn.cxSelect = function(settings, callback) {
396
+ this.each(function(i) {
397
+ $.cxSelect(this, settings, callback);
398
+ });
399
+ return this;
400
+ };
401
+ }));
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * jQuery cxSelect
3
+ * @name jquery.cxselect.js
4
+ * @version 1.4.0
5
+ * @date 2016-04-01
6
+ * @author ciaoca
7
+ * @email ciaoca@gmail.com
8
+ * @site https://github.com/ciaoca/cxSelect
9
+ * @license Released under the MIT license
10
+ */
11
+ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(window.jQuery||window.Zepto||window.$)}(function(a){var b=function(){var d,e,f,g,h,i;for(g=0,h=arguments.length;h>g;g++)b.isJquery(arguments[g])||b.isZepto(arguments[g])?d=arguments[g]:b.isElement(arguments[g])?d=a(arguments[g]):"function"==typeof arguments[g]?f=arguments[g]:"object"==typeof arguments[g]&&(e=arguments[g]);return i=new b.init(d,e),"function"==typeof f&&f(i),i};b.isElement=function(a){return a&&("function"==typeof HTMLElement||"object"==typeof HTMLElement)&&a instanceof HTMLElement?!0:a&&a.nodeType&&1===a.nodeType?!0:!1},b.isJquery=function(a){return a&&a.length&&("function"==typeof jQuery||"object"==typeof jQuery)&&a instanceof jQuery?!0:!1},b.isZepto=function(a){return a&&a.length&&("function"==typeof Zepto||"object"==typeof Zepto)&&Zepto.zepto.isZ(a)?!0:!1},b.getIndex=function(a,b){return b?a:a-1},b.getData=function(a,b){if("string"==typeof b&&b.length){b=b.split(".");for(var c=0,d=b.length;d>c;c++)a=a[b[c]]}return a},b.init=function(c,d){var f,g,e=this;(b.isJquery(c)||b.isZepto(c))&&(f={dom:{box:c}},e.attach=b.attach.bind(f),e.detach=b.detach.bind(f),e.setOptions=b.setOptions.bind(f),e.clear=b.clear.bind(f),f.changeEvent=function(){b.selectChange.call(f,this.className)},f.settings=a.extend({},a.cxSelect.defaults,d,{url:f.dom.box.data("url"),emptyStyle:f.dom.box.data("emptyStyle"),required:f.dom.box.data("required"),firstTitle:f.dom.box.data("firstTitle"),firstValue:f.dom.box.data("firstValue"),jsonSpace:f.dom.box.data("jsonSpace"),jsonName:f.dom.box.data("jsonName"),jsonValue:f.dom.box.data("jsonValue"),jsonSub:f.dom.box.data("jsonSub")}),g=f.dom.box.data("selects"),"string"==typeof g&&g.length&&(f.settings.selects=g.split(",")),e.setOptions(),e.attach(),f.settings.url||f.settings.data?a.isArray(f.settings.data)?b.start.call(f,f.settings.data):"string"==typeof f.settings.url&&f.settings.url.length&&a.getJSON(f.settings.url,function(a){b.start.call(f,a)}):b.start.apply(f))},b.setOptions=function(c){var e,f,g,d=this;if(c&&a.extend(d.settings,c),(!a.isArray(d.selectArray)||!d.selectArray.length||c&&c.selects)&&(d.selectArray=[],a.isArray(d.settings.selects)&&d.settings.selects.length))for(f=0,g=d.settings.selects.length;g>f&&(e=d.dom.box.find("select."+d.settings.selects[f]),e&&e.length);f++)d.selectArray.push(e);c&&(!a.isArray(c.data)&&"string"==typeof c.url&&c.url.length?a.getJSON(d.settings.url,function(a){b.start.call(d,a)}):b.start.call(d,c.data))},b.attach=function(){var a=this;a.attachStatus||a.dom.box.on("change","select",a.changeEvent),"boolean"==typeof a.attachStatus&&b.start.call(a),a.attachStatus=!0},b.detach=function(){var a=this;a.dom.box.off("change","select",a.changeEvent),a.attachStatus=!1},b.clear=function(a){var d,e,b=this,c={display:"",visibility:""};for(a=isNaN(a)?0:a,d=a,e=b.selectArray.length;e>d;d++)b.selectArray[d].empty().prop("disabled",!0),"none"===b.settings.emptyStyle?c.display="none":"hidden"===b.settings.emptyStyle&&(c.visibility="hidden"),b.selectArray[d].css(c)},b.start=function(c){var e,f,d=this;if(a.isArray(c)&&(d.settings.data=b.getData(c,d.settings.jsonSpace)),d.selectArray.length){for(e=0,f=d.selectArray.length;f>e;e++)"string"!=typeof d.selectArray[e].attr("data-value")&&d.selectArray[e][0].options.length&&d.selectArray[e].attr("data-value",d.selectArray[e].val());d.settings.data||"string"==typeof d.selectArray[0].data("url")&&d.selectArray[0].data("url").length?b.getOptionData.call(d,0):d.selectArray[0].prop("disabled",!1).css({display:"",visibility:""})}},b.getOptionData=function(c){var e,f,g,h,i,j,k,l,m,n,d=this;if(!("number"!=typeof c||isNaN(c)||0>c||c>=d.selectArray.length))if(e=c-1,f=d.selectArray[c],i=f.data("url"),j="undefined"==typeof f.data("jsonSpace")?d.settings.jsonSpace:f.data("jsonSpace"),k={},b.clear.call(d,c),"string"==typeof i&&i.length){if(e>=0){if(!d.selectArray[e].val().length)return;l=f.data("queryName"),m=d.selectArray[e].attr("name"),"string"==typeof l&&l.length?k[l]=d.selectArray[e].val():"string"==typeof m&&m.length&&(k[m]=d.selectArray[e].val())}a.getJSON(i,k,function(a){g=b.getData(a,j),b.buildOption.call(d,c,g)})}else if(d.settings.data&&"object"==typeof d.settings.data){for(g=d.settings.data,n=0;c>n;n++){if(h=b.getIndex(d.selectArray[n][0].selectedIndex,"boolean"==typeof d.selectArray[n].data("required")?d.selectArray[n].data("required"):d.settings.required),"object"!=typeof g[h]||!a.isArray(g[h][d.settings.jsonSub])||!g[h][d.settings.jsonSub].length){g=null;break}g=g[h][d.settings.jsonSub]}b.buildOption.call(d,c,g)}},b.buildOption=function(b,c){var k,l,m,d=this,e=d.selectArray[b],f="boolean"==typeof e.data("required")?e.data("required"):d.settings.required,g="undefined"==typeof e.data("firstTitle")?d.settings.firstTitle:e.data("firstTitle"),h="undefined"==typeof e.data("firstValue")?d.settings.firstValue:e.data("firstValue"),i="undefined"==typeof e.data("jsonName")?d.settings.jsonName:e.data("jsonName"),j="undefined"==typeof e.data("jsonValue")?d.settings.jsonValue:e.data("jsonValue");if(a.isArray(c)){if(k=f?"":'<option value="'+String(h)+'">'+String(g)+"</option>","string"==typeof i&&i.length)for("string"==typeof j&&j.length||(j=i),l=0,m=c.length;m>l;l++)k+='<option value="'+String(c[l][j])+'">'+String(c[l][i])+"</option>";else for(l=0,m=c.length;m>l;l++)k+='<option value="'+String(c[l])+'">'+String(c[l])+"</option>";e.html(k).prop("disabled",!1).css({display:"",visibility:""}),"string"==typeof e.attr("data-value")&&(e.val(String(e.attr("data-value"))).removeAttr("data-value"),e[0].selectedIndex<0&&(e[0].options[0].selected=!0)),(f||e[0].selectedIndex>0)&&e.trigger("change")}},b.selectChange=function(a){var d,e,f,c=this;if("string"==typeof a&&a.length){for(a=a.replace(/\s+/g,","),a=","+a+",",e=0,f=c.selectArray.length;f>e;e++)if(a.indexOf(","+c.settings.selects[e]+",")>-1){d=e;break}"number"==typeof d&&d>-1&&(d+=1,b.getOptionData.call(c,d))}},a.cxSelect=function(){return b.apply(this,arguments)},a.cxSelect.defaults={selects:[],url:null,data:null,emptyStyle:null,required:!1,firstTitle:"请选择",firstValue:"",jsonSpace:"",jsonName:"n",jsonValue:"",jsonSub:"s"},a.fn.cxSelect=function(b,c){return this.each(function(){a.cxSelect(this,b,c)}),this}});