| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
- function parseCompanyTypeVal(s) {
- s = (s || '').trim();
- if (!s) {
- return [];
- }
- return s.split(/[、,,]+/).map(function (x) {
- return $.trim(x);
- }).filter(Boolean);
- }
- function ensureCompanyTypeOneboxCss() {
- if ($('#company-type-onebox-style').length) {
- return;
- }
- $('head').append(
- '<style id="company-type-onebox-style">' +
- '.company-type-form-group{overflow:visible !important;position:relative;z-index:10;}' +
- '.input-group.company-type-onebox{display:flex !important;flex-direction:row;flex-wrap:nowrap;align-items:stretch;width:100%;}' +
- '.company-type-onebox .bootstrap-select.btn-group{flex:1 1 auto;min-width:0;}' +
- '.company-type-onebox .bootstrap-select > .dropdown-toggle{width:100%;text-align:left;}' +
- '.company-type-onebox > .input-group-addon{flex:0 0 auto;display:flex;align-items:center;}' +
- '.company-type-onebox .bootstrap-select.open{z-index:1065;}' +
- '.company-type-onebox .bootstrap-select .dropdown-menu{margin-top:0 !important;}' +
- '</style>'
- );
- }
- var Controller = {
- index: function () {
- Table.api.init({
- extend: {
- index_url: 'customer/index' + location.search,
- add_url: 'customer/add',
- edit_url: 'customer/edit',
- del_url: 'customer/del',
- multi_url: 'customer/multi',
- import_url: 'customer/import',
- table: 'customer',
- }
- });
- var table = $("#table");
- table.bootstrapTable({
- url: $.fn.bootstrapTable.defaults.extend.index_url,
- pk: 'id',
- sortName: 'id',
- columns: [
- [
- {checkbox: true},
- {field: 'id', title: __('序号')},
- {field: 'company_name', title: __('客户名称'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
- {field: 'username', title: __('姓名'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
- {field: 'email', title: __('邮箱'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
- {field: 'phone', title: __('手机号'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
- {field: 'company_type', title: __('业务分类'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
- {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
- ]
- ]
- });
- Table.api.bindevent(table);
- },
- add: function () {
- Controller.api.bindevent();
- setTimeout(function () {
- Controller.api.initCompanyType();
- }, 50);
- },
- edit: function () {
- Controller.api.bindevent();
- setTimeout(function () {
- Controller.api.initCompanyType();
- }, 50);
- },
- api: {
- bindevent: function () {
- Form.api.bindevent($("form[role=form]"));
- },
- initCompanyType: function () {
- var $hidden = $('#c-company_type');
- var $sel = $('#c-company_type_select');
- var $count = $('#c-company_type_count');
- if (!$hidden.length || !$sel.length || !$count.length) {
- return;
- }
- ensureCompanyTypeOneboxCss();
- var initialParts = parseCompanyTypeVal($hidden.val());
- function syncHidden() {
- var v = $sel.selectpicker('val');
- if (!$.isArray(v)) {
- v = v ? [v] : [];
- }
- v = v.filter(function (x) {
- return x != null && String(x).trim() !== '';
- });
- $hidden.val(v.join('、'));
- }
- function updateCount() {
- var v = $sel.selectpicker('val');
- var n = 0;
- if ($.isArray(v)) {
- n = v.filter(function (x) {
- return x != null && String(x).trim() !== '';
- }).length;
- } else if (v) {
- n = 1;
- }
- $count.text('已选 ' + n);
- }
- require(['bootstrap-select', 'bootstrap-select-lang'], function () {
- try {
- if ($sel.data('selectpicker')) {
- $sel.selectpicker('destroy');
- }
- } catch (e) {
- // ignore
- }
- $.each(initialParts, function (i, p) {
- if (!p) {
- return;
- }
- if (!$sel.find('option').filter(function () {
- return $(this).val() === p;
- }).length) {
- $sel.append($('<option>').attr('value', p).text(p));
- }
- });
- $sel.selectpicker({
- liveSearch: true,
- selectedTextFormat: 'static',
- noneSelectedText: '请选择',
- width: '100%'
- });
- var toVal = [];
- $.each(initialParts, function (i, p) {
- if (!p) {
- return;
- }
- if ($sel.find('option').filter(function () {
- return $(this).val() === p;
- }).length) {
- toVal.push(p);
- }
- });
- $sel.selectpicker('val', toVal);
- syncHidden();
- updateCount();
- $sel.off('changed.bs.select.companyct').on('changed.bs.select.companyct', function () {
- syncHidden();
- updateCount();
- });
- $sel.off('shown.bs.select.companyct').on('shown.bs.select.companyct', function () {
- var sp = $sel.data('selectpicker');
- if (!sp || !sp.$searchbox || !sp.$searchbox.length) {
- return;
- }
- sp.$searchbox.off('keydown.companyct').on('keydown.companyct', function (e) {
- if (e.which !== 13) {
- return;
- }
- var $box = $(this);
- var q = $.trim($box.val());
- if (!q) {
- return;
- }
- var hasOption = $sel.find('option').filter(function () {
- return $(this).val() === q;
- }).length > 0;
- var noResultsVisible = sp.$menu && sp.$menu.find('li.no-results').is(':visible');
- if (hasOption) {
- e.preventDefault();
- var cur = $sel.selectpicker('val');
- if (!$.isArray(cur)) {
- cur = cur ? [cur] : [];
- }
- if ($.inArray(q, cur) === -1) {
- cur.push(q);
- $sel.selectpicker('val', cur);
- syncHidden();
- updateCount();
- }
- $box.val('').trigger('input');
- return;
- }
- if (noResultsVisible) {
- e.preventDefault();
- $sel.append($('<option>').val(q).text(q));
- $sel.selectpicker('refresh');
- var cur2 = $sel.selectpicker('val') || [];
- if (!$.isArray(cur2)) {
- cur2 = cur2 ? [cur2] : [];
- }
- if ($.inArray(q, cur2) === -1) {
- cur2.push(q);
- }
- $sel.selectpicker('val', cur2);
- syncHidden();
- updateCount();
- $box.val('').trigger('input');
- }
- });
- });
- $('form[role=form]').off('submit.companyct').on('submit.companyct', function () {
- syncHidden();
- });
- });
- }
- }
- };
- return Controller;
- });
|