| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
- var DIALOG_AREA = ['920px', '800px'];
- var Controller = {
- index: function () {
- Table.api.init({
- extend: {
- index_url: 'purchasecontent/index' + location.search,
- add_url: 'purchasecontent/add',
- del_url: 'purchasecontent/del',
- table: 'purchase_content',
- }
- });
- var table = $('#table');
- function syncRecipientDeleteCheckbox() {
- var data = table.bootstrapTable('getData') || [];
- table.closest('.bootstrap-table').find('tbody tr').each(function () {
- var $tr = $(this);
- var idx = $tr.data('index');
- if (idx === undefined || idx === null) {
- return;
- }
- var row = data[idx];
- if (row && parseInt(row.can_delete, 10) === 1) {
- return;
- }
- $tr.find('input[name="btSelectItem"]').remove();
- $tr.find('td.bs-checkbox').empty();
- $tr.removeClass('selected');
- });
- }
- table.bootstrapTable({
- url: $.fn.bootstrapTable.defaults.extend.index_url,
- pk: 'id',
- sortName: 'id',
- sortOrder: 'desc',
- commonSearch: true,
- rowStyle: function (row) {
- if (parseInt(row.is_receiver, 10) === 1 && parseInt(row.is_read, 10) === 1) {
- return {classes: 'purchase-content-row-read'};
- }
- return {};
- },
- columns: [
- [
- {checkbox: true},
- {field: 'id', title: 'ID', width: 60, operate: false, sortable: true},
- {field: 'sender_name', title: '投递人', operate: false, width: 100, align: 'center', sortable: true},
- {
- field: 'recipient_names',
- title: '投递给',
- operate: false,
- align: 'left',
- class: 'autocontent',
- sortable: true,
- formatter: function (value, row) {
- var cnt = parseInt(row.recipient_count, 10) || 0;
- var text = value != null && value !== '' ? String(value) : '';
- if (cnt > 0 && text !== '') {
- return text + ' <span class="text-muted">(' + cnt + '人)</span>';
- }
- return text;
- }
- },
- {field: 'subject', title: '主题', operate: 'LIKE', align: 'left', sortable: true},
- {
- field: 'content',
- title: '内容',
- operate: 'LIKE',
- align: 'left',
- class: 'autocontent',
- sortable: true,
- formatter: Table.api.formatter.content
- },
- {
- field: 'createtime',
- title: '投递时间',
- operate: 'RANGE',
- addclass: 'datetimerange',
- width: 165,
- align: 'center',
- sortable: true,
- formatter: function (value, row) {
- if (row.send_time_text) {
- return row.send_time_text;
- }
- return Table.api.formatter.datetime.call(this, value, row);
- }
- },
- {
- field: 'is_read',
- title: '状态',
- operate: false,
- width: 72,
- align: 'center',
- sortable: true,
- formatter: function (value, row) {
- // 仅接收人区分已读/未读;纯发件人无阅读状态
- if (parseInt(row.is_receiver, 10) !== 1) {
- return '<span class="text-muted">—</span>';
- }
- return parseInt(value, 10) === 1
- ? '<span class="text-muted">已读</span>'
- : '<span class="text-warning">未读</span>';
- }
- },
- {
- field: 'operate',
- title: __('Operate'),
- width: 120,
- align: 'center',
- operate: false,
- table: table,
- events: $.extend({}, Table.api.events.operate, {
- 'click .btn-purchasecontent-view': function (e, value, row) {
- e.stopPropagation();
- e.preventDefault();
- var id = row && row.id;
- if (!id) {
- return;
- }
- Fast.api.open('purchasecontent/detail/ids/' + id, '查看通知', {
- area: DIALOG_AREA,
- end: function () {
- table.bootstrapTable('refresh');
- }
- });
- }
- }),
- formatter: Table.api.formatter.operate,
- buttons: [
- {
- name: 'detail',
- text: '查看',
- title: '查看通知',
- classname: 'btn btn-xs btn-info btn-purchasecontent-view',
- icon: 'fa fa-eye',
- url: 'purchasecontent/detail'
- },
- {
- name: 'del',
- text: __('Del'),
- title: __('Del'),
- classname: 'btn btn-xs btn-danger btn-delone',
- icon: 'fa fa-trash',
- url: 'purchasecontent/del',
- visible: function (row) {
- return parseInt(row.can_delete, 10) === 1;
- }
- }
- ]
- }
- ]
- ]
- });
- Table.api.bindevent(table);
- table.on('check-all.bs.table', function () {
- var data = table.bootstrapTable('getData') || [];
- $.each(data, function (i, row) {
- if (parseInt(row.can_delete, 10) !== 1) {
- table.bootstrapTable('uncheck', i);
- }
- });
- });
- $('#toolbar .btn-add').data('area', DIALOG_AREA);
- table.on('post-body.bs.table', function () {
- syncRecipientDeleteCheckbox();
- });
- },
- add: function () {
- Controller.api.bindevent();
- Controller.api.initRecipientPicker();
- $(document).off('click.purchaseContentClose', '.btn-purchase-content-close').on('click.purchaseContentClose', '.btn-purchase-content-close', function () {
- var index = parent.Layer.getFrameIndex(window.name);
- parent.Layer.close(index);
- });
- },
- detail: function () {
- },
- api: {
- bindevent: function () {
- Form.api.bindevent($('form[role=form]'));
- },
- initRecipientPicker: function () {
- var $picker = $('#purchase-recipient-picker');
- if (!$picker.length) {
- return;
- }
- var $hidden = $('#c-recipient_ids');
- var $search = $picker.find('.purchase-recipient-search');
- var $checkAll = $picker.find('.purchase-recipient-check-all-input');
- var $count = $picker.find('.purchase-recipient-count');
- function visibleItems() {
- return $picker.find('.purchase-recipient-item:not(.is-hidden)');
- }
- function visibleCheckboxes() {
- return visibleItems().find('.purchase-recipient-cb');
- }
- function syncHidden() {
- var ids = [];
- $picker.find('.purchase-recipient-cb:checked').each(function () {
- ids.push($(this).val());
- });
- $hidden.val(ids.join(',')).trigger('change');
- $count.text('已选 ' + ids.length + ' 人');
- var $vis = visibleCheckboxes();
- var visChecked = $vis.filter(':checked').length;
- $checkAll.prop('checked', $vis.length > 0 && visChecked === $vis.length);
- $checkAll.prop('indeterminate', visChecked > 0 && visChecked < $vis.length);
- }
- $picker.on('change', '.purchase-recipient-cb', syncHidden);
- $checkAll.on('change', function () {
- var checked = $(this).prop('checked');
- visibleCheckboxes().prop('checked', checked);
- syncHidden();
- });
- $search.on('input', function () {
- var kw = $.trim($(this).val()).toLowerCase();
- $picker.find('.purchase-recipient-item').each(function () {
- var label = String($(this).data('label') || $(this).text() || '').toLowerCase();
- $(this).toggleClass('is-hidden', kw !== '' && label.indexOf(kw) < 0);
- });
- syncHidden();
- });
- syncHidden();
- }
- }
- };
- return Controller;
- });
|