|
- (function () {
-
- /***
- * 配送区域表格
- * @param param
- * @constructor
- */
- function Delivery(param) {
- this.tableElement = param.table;
- this.RegionalChoice = new RegionalChoice(param.regional, param.datas);
- this.initCreateRegion();
- this.clickEditEvent();
- this.clickDeleteEvent();
- this.clickMethodEvent();
- }
-
- Delivery.prototype = {
-
- /**
- * 初始化添加区域事件
- */
- initCreateRegion: function () {
- var _this = this;
- $(_this.tableElement).find('.add-region').click(function () {
- // 渲染地域
- var str = '';
- $(_this.tableElement).find('input[type=hidden]').each(function (index, item) {
- str += $(item).val() + ',';
- });
- var alreadyIds = str.length > 0 ? str.substring(0, str.length - 1).split(',') : [];
- if (alreadyIds.length === 373) {
- layer.msg('已经选择了所有区域~');
- return false;
- }
- _this.RegionalChoice.render(alreadyIds);
- _this.showRegionalModal(function () {
- // 弹窗交互完成
- var Checked = _this.RegionalChoice.getCheckedContent();
- Checked.ids.length > 0 && _this.appendRulesTr(Checked.content, Checked.ids);
- });
- });
- },
-
- /**
- * 创建可配送区域规则
- */
- appendRulesTr: function (regionStr, checkedIds) {
- var $html = $(
- '<tr>' +
- '<td class="text-left">' +
- ' <p class="selected-content">' +
- ' ' + regionStr +
- ' </p>' +
- ' <p class="">' +
- ' <a class="edit" href="javascript:;">编辑</a>' +
- ' <a class="delete" href="javascript:;">删除</a>' +
- ' </p>' +
- ' <input type="hidden" name="row[area][]" value="' + checkedIds + '">' +
- '</td>' +
- '<td>' +
- ' <input type="number" name="row[first][]" min="1" value="1" required>' +
- '</td>' +
- '<td>' +
- ' <input type="number" name="row[first_fee][]" min="0" value="0.00" required>' +
- '</td>' +
- '<td>' +
- ' <input type="number" name="row[additional][]" min="1" value="1">' +
- '</td>' +
- '<td>' +
- ' <input type="number" name="row[additional_fee][]" min="0" value="0.00">' +
- '</td>' +
- '</tr>'
- );
- $(this.tableElement).children("tbody").find('tr:last').before($html);
- },
-
- /**
- * 显示区域选择窗口
- * @param callback
- */
- showRegionalModal: function (callback) {
- var _this = this;
- var area = [$(window).width() > 800 ? '800px' : '95%', $(window).height() > 600 ? '600px' : '95%'];
- layer.open({
- type: 1,
- shade: false,
- title: '选择可配送区域',
- btn: ['确定', '取消'],
- area: area, //宽高
- content: $('.regional-choice'),
- yes: function (index) {
- callback && callback();
- layer.close(index);
- },
- end: function () {
- // 销毁已选中区域
- _this.RegionalChoice.destroy();
- }
- });
- },
-
- /**
- * 编辑区域事件
- */
- clickEditEvent: function () {
- var _this = this
- , $table = $(_this.tableElement);
- $table.on('click', '.edit', function () {
- // 渲染地域
- var $html = $(this).parent().parent()
- , $content = $html.find('.selected-content')
- , $input = $html.find('input[type=hidden]');
- _this.RegionalChoice.render([], $input.val().split(','));
- // 显示地区选择弹窗
- _this.showRegionalModal(function () {
- // 弹窗交互完成
- var Checked = _this.RegionalChoice.getCheckedContent();
- if (Checked.ids.length > 0) {
- $content.html(Checked.content);
- $input.val(Checked.ids);
- }
- });
- });
- },
-
- /**
- * 删除区域事件
- */
- clickDeleteEvent: function () {
- var $table = $(this.tableElement);
- $table.on('click', '.delete', function () {
- var $delete = $(this);
- layer.confirm('确定要删除吗?', function (index) {
- $delete.parents('tr').remove();
- layer.close(index);
- });
- });
- },
-
- /**
- * 切换计费方式
- */
- clickMethodEvent: function () {
- $('input:radio[name="delivery[method]"]').change(function (e) {
- var $first = $('.first')
- , $additional = $('.additional');
- if (e.currentTarget.value === '20')
- $first.text('首重 (Kg)') && $additional.text('续重 (Kg)');
- else
- $first.text('首件 (个)') && $additional.text('续件 (个)');
- });
- },
-
- };
-
- window.Delivery = Delivery;
-
- })(window);
-
-
- //******* 地区选择插件 *******//
- (function () {
-
- /***
- * 地区选择插件
- * @param container
- * @param datas
- * @constructor
- */
- function RegionalChoice(container, datas) {
- this.container = container;
- this.datas = datas;
- this.initInterface(); // 初始化地域界面
- }
-
- RegionalChoice.prototype = {
-
- /**
- * 条件渲染
- * @param alreadyIds 已存在的区域ID: 用于新增
- * @param checkedIds 已选中的区域ID: 用于编辑
- * @param
- */
- render: function (alreadyIds, checkedIds) {
- alreadyIds = alreadyIds || [];
- alreadyIds.length > 0 && this.setAlready(alreadyIds);
- checkedIds = checkedIds || [];
- checkedIds.length > 0 && this.setChecked(checkedIds);
- },
-
- /**
- * 初始化地域界面
- */
- initInterface: function () {
- var _this = this;
- $(_this.container).append(
- $('<div/>', {
- class: 'place-div'
- }).append(
- $('<div/>', {}).append(
- $('<div/>', {
- class: 'checkbtn'
- })
- .append(
- $('<label/>', {})
- // 全选框
- .append(
- $('<input/>', {
- type: 'checkbox',
- change: function () {
- var checked = $(this).is(':checked'),
- $allCheckbox = $('.place').find('input[type=checkbox]');
- $('.ratio').html('');
- $allCheckbox.prop('checked', checked);
- }
- })
- )
- .append(' 全国')
- )
- .append(
- $('<a/>', {
- class: 'clearCheck',
- text: '清空',
- click: function () {
- _this.destroy();
- }
- })
- )
- ).append(
- // 省份
- $('<div/>', {
- class: 'place clearfloat'
- }).append(function () {
- return _this.getSmallPlace();
- }())
- )
- )
- );
-
- },
-
- /**
- * 遍历省份
- * @returns {jQuery}
- * @constructor
- */
- getSmallPlace: function () {
- var _this = this;
- return $('<div/>', {
- class: 'smallplace clearfloat'
- }).append(
- $.map(_this.datas, function (item) {
- return $('<div/>', {
- class: 'place-tooltips'
- })
- .append(
- $('<label/>', {})
- .append(
- $('<input/>', {
- id: item.id,
- type: 'checkbox',
- class: 'province',
- change: function () {
- var $this = $(this)
- , small = $this.parent().next('.citys').find('input')
- , $placeTooltips = $this.parents('.place-tooltips');
- if ($this.prop('checked')) {
- small.prop('checked', true);
- $placeTooltips.find('.ratio').html('(' + small.length + '/' + small.length + ')');
- } else {
- small.prop('checked', false);
- $placeTooltips.find('.ratio').html('');
- }
-
- }
- })
- )
- .append(
- // 省份名称
- $('<span/>', {
- class: 'province_name',
- text: item.name
- })
- )
- .append(function () {
- // 城市数量
- if (item.city) {
- return $('<span/>', {
- class: 'ratio'
- })
- }
- })
- ).append(function () {
- // 城市列表
- if (item.city) {
- return $('<div/>', {
- class: 'citys'
- }).append(
- $('<i/>', {
- class: 'jt'
- }).append($('<i/>', {}))
- ).append(
- _this.getSmallCitys(item.city)
- )
- }
- })
- })
- )
- },
-
- /**
- * 遍历城市
- * @param datas
- * @returns {jQuery}
- * @constructor
- */
- getSmallCitys: function (datas) {
- return $('<div/>', {
- class: 'row-div clearfloat'
- }).append(
- $.map(datas, function (item) {
- return $('<p/>', {}).append(
- $('<label/>', {}).append(
- $('<input/>', {
- id: item.id,
- type: 'checkbox',
- name: 'city[]',
- class: 'city',
- change: function () {
- var $citys = $(this).parents('.citys')
- , $placeTooltips = $(this).parents('.place-tooltips')
- , tf = $citys.find('input:checked').length
- , $province = $placeTooltips.find('.province')
- , $ratio = $placeTooltips.find('.ratio');
- if (tf > 0) {
- $province.prop('checked', true);
- $ratio.html('(' + tf + '/' + $citys.find('input').length + ')');
- } else if (tf === 0) {
- $province.prop('checked', false);
- $ratio.html('');
- }
- }
- })
- ).append(
- $('<span/>', {
- text: item.name
- })
- )
- )
- })
- )
- },
-
- /**
- * 获取已选中的省市id
- * @returns {array}
- * @constructor
- */
- getCheckedIds: function () {
- var checkedIds = [];
- $('input[type=checkbox][name="city[]"]:checked').each(function (index, item) {
- checkedIds.push(item.id);
- });
- return checkedIds;
- },
-
- /**
- * 获取已选中的省市id (树状)
- * @returns {Array}
- */
- getCheckedTree: function () {
- var _this = this;
- // 遍历省份
- var data = [];
- $('input.province:checked').each(function (index, province) {
- var $this = $(this)
- , $citys = $this.parent().next()
- , $cityInputChecked = $citys.find('input.city:checked')
- , cityData = []
- , cityTotal = Object.keys(_this.datas[province.id].city).length;
- // 遍历城市
- if (cityTotal !== $cityInputChecked.length) {
- $cityInputChecked.each(function (index, item) {
- cityData.push({id: item.id, name: $(this).next().text()});
- });
- }
- data.push({
- id: province.id,
- name: $this.next().text(),
- city: cityData
- });
- });
- return data;
- },
-
- /**
- * 获取已选中地区内容
- * @returns {{content: string, checkedIds: *|Array}}
- */
- getCheckedContent: function () {
- // 获取已选中的省市id
- var dataTree = this.getCheckedTree()
- , checkedIds = this.getCheckedIds()
- , content = '';
- if (checkedIds.length === 373) {
- content = '全国';
- } else {
- var str = '';
- dataTree.forEach(function (item) {
- str += item.name;
- if (item.city.length > 0) {
- var cityStr = '';
- item.city.forEach(function (city) {
- cityStr += city.name + '、';
- });
- str += ' (<span class="am-link-muted">'
- + cityStr.substring(0, cityStr.length - 1) + '</span>)';
- }
- str += '、';
- });
- content = str.substring(0, str.length - 1);
- }
- return {
- content: content,
- ids: checkedIds
- };
- },
-
- /**
- * 批量选中
- * @param checkedIds 已选中的区域ID: 用于编辑
- * @constructor
- */
- setChecked: function (checkedIds) {
- var $place = $('.place-div');
- $.each(checkedIds, function (i, id) {
- $place.find('#' + id).trigger('click');
- });
- },
-
- /**
- * 批量删除已存在的区域
- * @param alreadyIds 已存在的区域ID: 用于新增
- * @constructor
- */
- setAlready: function (alreadyIds) {
- var $place = $('.place-div');
- $.each(alreadyIds, function (i, id) {
- var $p = $place.find('#' + id).parent().parent()
- , $siblings = $p.siblings();
- $siblings.length > 0 ? $p.remove() : $p.closest('.place-tooltips').remove();
- });
- },
-
- /**
- * 清空
- */
- destroy: function () {
- var $place = $('.place-div');
- $place.find('input[type=checkbox]').prop('checked', false);
- $place.find('.ratio').html('');
- }
-
- };
-
- window.RegionalChoice = RegionalChoice;
-
- })(window);
|