feat: 后端全量更新 - 含所有本次需求
- Contract.php: 返回合约账户余额(balance_contract) - My.php: 地址管理增加BTC/ETH - AppContract.php: 一键平仓(closeall) - AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2) - site.php: 手续费减半(0.018→0.009) - agent_permission_setup.sql: 代理权限SQL - crypto_news_crawler.py: 新闻自动采集脚本
This commit is contained in:
Executable
+66
@@ -0,0 +1,66 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/blacklist/index' + location.search,
|
||||
add_url: 'kefu/blacklist/add',
|
||||
edit_url: 'kefu/blacklist/edit',
|
||||
del_url: 'kefu/blacklist/del',
|
||||
multi_url: 'kefu/blacklist/multi',
|
||||
table: 'kefu_blacklist',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'user_id', title: __('User_id')},
|
||||
{field: 'kefuuser.nickname', title: __('nickname'), operate: 'LIKE', placeholder: '模糊查找'},
|
||||
{field: 'fu_user_nickname', title: __('fu_user_nickname')},
|
||||
{field: 'admin.nickname', title: __('Admin_id'), operate: 'LIKE', placeholder: '模糊查找'},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
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();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+118
@@ -0,0 +1,118 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'upload'], function ($, undefined, Backend, Table, Form, Upload) {
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
search: true,
|
||||
advancedSearch: true,
|
||||
pagination: true,
|
||||
extend: {
|
||||
"index_url": "kefu/config/index",
|
||||
"add_url": "",
|
||||
"edit_url": "",
|
||||
"del_url": "",
|
||||
"multi_url": "",
|
||||
}
|
||||
});
|
||||
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
|
||||
$('input[name="row[csr_admin]"]').data("eSelect", function () {
|
||||
Controller.api.build_csr_config()
|
||||
});
|
||||
|
||||
$('input[name="row[csr_admin]"]').data("eTagRemove", function (data) {
|
||||
if (!Controller.selectPageReady) {
|
||||
Controller.selectPageReady = true;
|
||||
} else {
|
||||
Controller.api.build_csr_config()
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$(document).on('click', '.run_config', function () {
|
||||
Fast.api.open("addon/config?name=kefu", __('Setting'));
|
||||
});
|
||||
|
||||
$('input[name="row[csr_distribution]"]').on('change', function (that) {
|
||||
var csr_distribution = $(that.target).val();
|
||||
var tis = '';
|
||||
|
||||
if (csr_distribution == 0) {
|
||||
tis = '按工作强度:优先分配给当前接待量最少的客服,若有多个客服接待量相同,则分配给其中最久未进行接待的客服';
|
||||
} else if (csr_distribution == 1) {
|
||||
tis = '智能分配:根据接待上限和当前接待量,分配给最能接待的客服';
|
||||
} else if (csr_distribution == 2) {
|
||||
tis = '轮流分配:每次都分配给最久未进行接待的客服';
|
||||
}
|
||||
|
||||
$('#distribution_help').html(tis);
|
||||
})
|
||||
},
|
||||
selectPageReady: false,
|
||||
api: {
|
||||
build_csr_config: function () {
|
||||
|
||||
var csr = $('input[name="row[csr_admin]"]').selectPageText();
|
||||
var csrs = csr.split(",");
|
||||
|
||||
for (var i = 0; i < csrs.length; i++) {
|
||||
Controller.api.build_csr_input(csrs[i]);
|
||||
}
|
||||
|
||||
// 删除-获取已构建的配置框
|
||||
var csr_config_list = $('#csr_config').children("div");
|
||||
var csr_config_length = $('#csr_config').children("div").length;
|
||||
|
||||
if (csrs.length) {
|
||||
|
||||
for (var i = 0; i < csr_config_length; i++) {
|
||||
let csr = $(csr_config_list[i]).data('name').toString();
|
||||
|
||||
if (csrs.indexOf(csr) == -1) {
|
||||
Controller.api.build_csr_input(csr, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (let i in csr_config_length) {
|
||||
let csr = $(csr_config_list[i]).data('name')
|
||||
Controller.api.build_csr_input(csr, true);
|
||||
}
|
||||
}
|
||||
},
|
||||
build_csr_input: function (username, is_del = false) {
|
||||
|
||||
if (!username) {
|
||||
return;
|
||||
}
|
||||
|
||||
var csr_item = $('#csr_config').children("[data-name='" + username + "']");
|
||||
|
||||
if (is_del && csr_item.length) {
|
||||
// 删除
|
||||
csr_item.remove();
|
||||
return;
|
||||
} else if (csr_item.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
var el = $('\
|
||||
<div data-name="' + username + '">\
|
||||
<div class="form-group">\
|
||||
<label class="control-label">' + username + ':</label>\
|
||||
<div class="input-group">\
|
||||
<div class="input-group-addon">接待上限</div>\
|
||||
<input class="form-control" name="row[csr_config][' + username + ']" placeholder="请输入接待上限人数" value="1" />\
|
||||
<div class="input-group-addon">人</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
');
|
||||
|
||||
$('#csr_config').append(el)//插入
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return Controller;
|
||||
})
|
||||
Executable
+85
@@ -0,0 +1,85 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/csrkpi/index' + location.search,
|
||||
add_url: 'kefu/csrkpi/add',
|
||||
edit_url: 'kefu/csrkpi/edit',
|
||||
del_url: 'kefu/csrkpi/del',
|
||||
multi_url: 'kefu/csrkpi/multi',
|
||||
table: 'kefu_csr_config',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'admin.nickname', title: __('Admin_id')},
|
||||
{field: 'ceiling', title: __('Ceiling'), sortable: true},
|
||||
{field: 'reception_count', title: __('Reception_count'), sortable: true},
|
||||
{field: 'sum_message_count', title: __('sum_message_count')},
|
||||
{field: 'sum_reception_count', title: __('sum_reception_count')},
|
||||
{
|
||||
field: 'last_reception_time',
|
||||
title: __('Last_reception_time'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
field: 'keep_alive',
|
||||
title: __('Keep Alive'),
|
||||
searchList: {"0": __('关'), "1": __('开')},
|
||||
formatter: Table.api.formatter.status
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: __('Status'),
|
||||
searchList: {
|
||||
"0": __('Status 0'),
|
||||
"1": __('Status 1'),
|
||||
"2": __('Status 2'),
|
||||
"3": __('Status 3')
|
||||
},
|
||||
formatter: Table.api.formatter.status
|
||||
},
|
||||
{
|
||||
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();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+144
@@ -0,0 +1,144 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/fastreply/index' + location.search,
|
||||
add_url: 'kefu/fastreply/add',
|
||||
edit_url: 'kefu/fastreply/edit',
|
||||
del_url: 'kefu/fastreply/del',
|
||||
multi_url: 'kefu/fastreply/multi',
|
||||
table: 'kefu_fast_reply',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'admin.nickname', title: __('Admin_id')},
|
||||
{field: 'title', title: __('Title'), operate: 'LIKE', placeholder: '模糊查找'},
|
||||
{
|
||||
field: 'content',
|
||||
title: __('Content'),
|
||||
operate: 'LIKE',
|
||||
placeholder: '模糊查找',
|
||||
formatter: Controller.api.formatter.value_substring
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: __('Status'),
|
||||
searchList: {"0": __('Status 0'), "1": __('Status 1')},
|
||||
formatter: Table.api.formatter.status
|
||||
},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
recyclebin: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
'dragsort_url': ''
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: 'kefu/fastreply/recyclebin' + location.search,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'title', title: __('Title'), align: 'left'},
|
||||
{
|
||||
field: 'deletetime',
|
||||
title: __('Deletetime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
width: '130px',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
buttons: [
|
||||
{
|
||||
name: 'Restore',
|
||||
text: __('Restore'),
|
||||
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
|
||||
icon: 'fa fa-rotate-left',
|
||||
url: 'kefu/fastreply/restore',
|
||||
refresh: true
|
||||
},
|
||||
{
|
||||
name: 'Destroy',
|
||||
text: __('Destroy'),
|
||||
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
|
||||
icon: 'fa fa-times',
|
||||
url: 'kefu/fastreply/destroy',
|
||||
refresh: true
|
||||
}
|
||||
],
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
},
|
||||
formatter: {
|
||||
value_substring: function (value) {
|
||||
let value_length = value.replace(/[\u0391-\uFFE5]/g, "aa").length;
|
||||
|
||||
return value_length > 20 ? value.substring(0, 20) + '...' : value;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+181
@@ -0,0 +1,181 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/kbs/index' + location.search,
|
||||
add_url: 'kefu/kbs/add',
|
||||
edit_url: 'kefu/kbs/edit',
|
||||
del_url: 'kefu/kbs/del',
|
||||
multi_url: 'kefu/kbs/multi',
|
||||
table: 'kefu_kbs',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'weigh',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{
|
||||
field: 'questions',
|
||||
title: __('Questions'),
|
||||
formatter: Controller.api.formatter.value_substring,
|
||||
operate: 'LIKE'
|
||||
},
|
||||
{field: 'match', title: __('Match')},
|
||||
{field: 'admin_id', title: __('Admin_id')},
|
||||
{field: 'weigh', title: __('Weigh')},
|
||||
{
|
||||
field: 'status',
|
||||
title: __('Status'),
|
||||
searchList: {"0": __('Status 0'), "1": __('Status 1'), "2": __('Status 2')},
|
||||
formatter: Table.api.formatter.status
|
||||
},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
recyclebin: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
'dragsort_url': ''
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: 'kefu/kbs/recyclebin' + location.search,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{
|
||||
field: 'questions',
|
||||
title: __('Questions'),
|
||||
formatter: Controller.api.formatter.value_substring,
|
||||
operate: 'LIKE'
|
||||
},
|
||||
{
|
||||
field: 'deletetime',
|
||||
title: __('Deletetime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
width: '130px',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
buttons: [
|
||||
{
|
||||
name: 'Restore',
|
||||
text: __('Restore'),
|
||||
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
|
||||
icon: 'fa fa-rotate-left',
|
||||
url: 'kefu/kbs/restore',
|
||||
refresh: true
|
||||
},
|
||||
{
|
||||
name: 'Destroy',
|
||||
text: __('Destroy'),
|
||||
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
|
||||
icon: 'fa fa-times',
|
||||
url: 'kefu/kbs/destroy',
|
||||
refresh: true
|
||||
}
|
||||
],
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
testmatch: function () {
|
||||
$('#str1, #str2').on('change', function () {
|
||||
Controller.api.test_match();
|
||||
})
|
||||
|
||||
$('.post_test_match').on('click', function () {
|
||||
Controller.api.test_match(true);
|
||||
})
|
||||
},
|
||||
api: {
|
||||
test_match: function (mandatory = false) {
|
||||
var str1 = $('#str1').val();
|
||||
var str2 = $('#str2').val();
|
||||
|
||||
if (str1 && str2) {
|
||||
$.post("kefu/kbs/testMatch", {
|
||||
'str1': str1,
|
||||
'str2': str2
|
||||
}, function (res) {
|
||||
if (res.code == 1) {
|
||||
$('.progress').show();
|
||||
$('#match').css('width', res.data + '%').html('匹配度:' + res.data + '%');
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (mandatory) {
|
||||
layer.msg('请输入要计算匹配度的字符串!');
|
||||
}
|
||||
}
|
||||
},
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
|
||||
$('.test_match').on('click', function () {
|
||||
Backend.api.addtabs('kefu/kbs/testMatch', '匹配度测试');
|
||||
});
|
||||
},
|
||||
formatter: {
|
||||
value_substring: function (value) {
|
||||
let value_length = value.replace(/[\u0391-\uFFE5]/g, "aa").length;
|
||||
return value_length > 20 ? value.substring(0, 20) + '...' : value;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/leavemessage/index' + location.search,
|
||||
add_url: 'kefu/leavemessage/add',
|
||||
edit_url: 'kefu/leavemessage/edit',
|
||||
del_url: 'kefu/leavemessage/del',
|
||||
multi_url: 'kefu/leavemessage/multi',
|
||||
table: 'kefu_leave_message',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{
|
||||
field: 'kefuuser.avatar',
|
||||
title: __('Kefuuser.avatar'),
|
||||
events: Table.api.events.image,
|
||||
formatter: Table.api.formatter.image,
|
||||
operate: false
|
||||
},
|
||||
{
|
||||
field: 'kefuuser.nickname',
|
||||
title: __('Kefuuser.nickname'),
|
||||
operate: 'LIKE',
|
||||
placeholder: '模糊查找'
|
||||
},
|
||||
{field: 'fu_user_nickname', 'title': __('绑定用户'), operate: false},
|
||||
{field: 'name', title: __('Name'), operate: 'LIKE', placeholder: '模糊查找'},
|
||||
{field: 'contact', title: __('Contact')},
|
||||
{
|
||||
field: 'kefuuser.referrer',
|
||||
title: __('Kefuuser.referrer'),
|
||||
formatter: Controller.api.formatter.url
|
||||
},
|
||||
{
|
||||
field: 'message',
|
||||
title: __('Message'),
|
||||
operate: 'LIKE',
|
||||
placeholder: '模糊查找',
|
||||
formatter: Controller.api.formatter.value_substring
|
||||
},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
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();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
},
|
||||
formatter: {
|
||||
value_substring: function (value) {
|
||||
let value_length = value.replace(/[\u0391-\uFFE5]/g, "aa").length;
|
||||
|
||||
return value_length > 20 ? value.substring(0, 20) + '...' : value;
|
||||
},
|
||||
url: function (value, row, index) {
|
||||
if (value) {
|
||||
value = value.split(' IP');
|
||||
return value[0] ? Table.api.formatter.url(value[0], row, index) : '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+286
@@ -0,0 +1,286 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
offset: 0,
|
||||
limit: 10,
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/record/index' + location.search,
|
||||
add_url: 'kefu/record/add',
|
||||
edit_url: 'kefu/record/edit',
|
||||
del_url: 'kefu/record/del',
|
||||
multi_url: 'kefu/record/multi',
|
||||
record_url: 'kefu/record/index/session_id/{session_id}',
|
||||
table: 'kefu_record',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'session_id', title: __('Session_id')},
|
||||
{
|
||||
field: 'sender_identity',
|
||||
title: __('Sender_identity'),
|
||||
searchList: {"0": __('Sender_identity 0'), "1": __('Sender_identity 1')},
|
||||
formatter: Table.api.formatter.normal,
|
||||
sortable: true
|
||||
},
|
||||
{field: 'sender_id', title: __('Sender_id'), sortable: true},
|
||||
{
|
||||
field: 'message_type',
|
||||
title: __('Message_type'),
|
||||
searchList: {
|
||||
"0": __('Message_type 0'),
|
||||
"1": __('Message_type 1'),
|
||||
"2": __('Message_type 2'),
|
||||
"3": __('Message_type 3'),
|
||||
"4": __('Message_type 4'),
|
||||
"5": __('Message_type 5')
|
||||
},
|
||||
formatter: Table.api.formatter.normal,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
field: 'message',
|
||||
title: __('Message'),
|
||||
operate: 'LIKE',
|
||||
placeholder: '模糊查找',
|
||||
formatter: Controller.api.formatter.message
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: __('Status'),
|
||||
searchList: {"0": __('Status 0'), "1": __('Status 1')},
|
||||
formatter: Table.api.formatter.status,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
formatter: Table.api.formatter.operate,
|
||||
buttons: [
|
||||
{
|
||||
name: 'record',
|
||||
title: '只看该会话',
|
||||
classname: 'btn btn-xs btn-info btn-addtabs',
|
||||
icon: 'fa fa-file-text-o',
|
||||
url: $.fn.bootstrapTable.defaults.extend.record_url,
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
Controller.api.toolbar = Config.toolbar;
|
||||
},
|
||||
sessionrecord: function () {
|
||||
var session_id = Fast.api.query('session_id');
|
||||
Controller.api.toolbar = Config.toolbar;
|
||||
|
||||
Controller.api.loadRecord(session_id)
|
||||
|
||||
$(window).scroll(function (e) {
|
||||
|
||||
var scrollTop = $(this).scrollTop();
|
||||
var scrollHeight = $(document).height();
|
||||
var windowHeight = $(this).height();
|
||||
if (scrollTop + windowHeight == scrollHeight) {
|
||||
Controller.api.loadRecord(session_id)
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('click', '.record', function (e) {
|
||||
|
||||
var img_obj = $(e.target);
|
||||
if (img_obj.hasClass('emoji')) {
|
||||
return;
|
||||
}
|
||||
img_obj = img_obj[0];
|
||||
var scrollTop = $(window).scrollTop();
|
||||
|
||||
layer.photos({
|
||||
photos: {
|
||||
"title": "聊天图片预览",
|
||||
"id": "record",
|
||||
data: [
|
||||
{
|
||||
"src": img_obj.src
|
||||
}
|
||||
]
|
||||
}, end: function () {
|
||||
$(window).scrollTop(scrollTop)
|
||||
}, anim: 5
|
||||
});
|
||||
|
||||
});
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
},
|
||||
formatCard: function (message) {
|
||||
var message = message.split('#');
|
||||
var message_arr = [];
|
||||
for (let i in message) {
|
||||
let message_temp = message[i].split('=');
|
||||
if (typeof message_temp[1] != 'undefined') {
|
||||
message_arr[message_temp[0]] = message_temp[1];
|
||||
}
|
||||
}
|
||||
return message_arr;
|
||||
},
|
||||
formatter: {
|
||||
message: function (value, row, index) {
|
||||
if (row.message_type == 0 || row.message_type == 3) {
|
||||
|
||||
let value_length = value.replace(/[\u0391-\uFFE5]/g, "aa").length;
|
||||
return value_length > 20 ? value.substring(0, 20) + '...' : value;
|
||||
} else if (row.message_type == 2) {
|
||||
return Table.api.formatter.url(value, row, index);
|
||||
} else if (row.message_type == 1) {
|
||||
return Table.api.formatter.image(value, row, index);
|
||||
} else if (row.message_type == 4 || row.message_type == 5) {
|
||||
var message = Controller.api.formatCard(value);
|
||||
var card_url = (row.message_type == 4) ? Controller.api.toolbar.goods.card_url : Controller.api.toolbar.order.card_url
|
||||
card_url += '?ref=addtabs&id=' + message['id'];
|
||||
|
||||
return '<a class="btn-addtabs" href="' + card_url + '">查看</a>';
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
loadRecord: function (session_id) {
|
||||
|
||||
if (Controller.limit === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
Fast.api.ajax({
|
||||
url: 'kefu/record/sessionRecord',
|
||||
type: 'GET',
|
||||
dataType: "json",
|
||||
loading: true,
|
||||
data: {
|
||||
addtabs: 1,
|
||||
sort: 'id',
|
||||
order: 'asc',
|
||||
offset: Controller.offset,
|
||||
limit: Controller.limit,
|
||||
filter: '{"session_id":"' + session_id + '"}',
|
||||
op: '{"session_id":"="}',
|
||||
_: new Date().getTime()
|
||||
},
|
||||
success: function (ret) {
|
||||
var index = Layer.load(true);
|
||||
index && Layer.close(index);
|
||||
|
||||
Controller.offset += 10;
|
||||
// Controller.limit += 10;
|
||||
|
||||
if (ret.rows.length) {
|
||||
// 渲染到页面
|
||||
for (var i in ret.rows) {
|
||||
Controller.api.buildRecord(ret.rows[i])
|
||||
}
|
||||
|
||||
if (ret.rows.length < 10) {
|
||||
Controller.limit = false;
|
||||
}
|
||||
} else {
|
||||
Controller.limit = false;
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
},
|
||||
buildRecord: function (row) {
|
||||
var message = '';
|
||||
|
||||
row.createtime = Table.api.formatter.datetime(row.createtime)
|
||||
row.sender_identity = (row.sender_identity == 0) ? 'me' : 'you';
|
||||
|
||||
if (row.message_type == 1) {
|
||||
message = Controller.api.buildChatImg(row.message, '聊天图片', 'record');
|
||||
} else if (row.message_type == 2) {
|
||||
var file_name = row.message.split('.');
|
||||
var file_suffix = file_name[file_name.length - 1];
|
||||
message = Controller.api.buildChatA(row.message, file_suffix, 'record');
|
||||
} else if (row.message_type == 3) {
|
||||
Controller.api.buildPrompt(row.message);
|
||||
return;
|
||||
} else if (row.message_type == 4 || row.message_type == 5) {
|
||||
var message_arr = Controller.api.formatCard(row.message);
|
||||
|
||||
var card_url = (row.message_type == 4) ? Controller.api.toolbar.goods.card_url : Controller.api.toolbar.order.card_url
|
||||
card_url += '?ref=addtabs&id=' + message_arr['id'];
|
||||
|
||||
message = '<a class="btn-addtabs" href="' + card_url + '">\n' +
|
||||
' <div class="record_card">\n' +
|
||||
' <img src="' + message_arr['logo'] + '" />\n' +
|
||||
' <div class="record_card_body">\n' +
|
||||
' <div class="record_card_title">' + message_arr['subject'] + '</div>\n' +
|
||||
(message_arr['note'] ? '<div class="record_card_note">' + message_arr['note'] + '</div>\n' : '') +
|
||||
' <div class="record_card_price">\n' +
|
||||
(message_arr['price'] ? '<span>¥' + message_arr['price'] + '</span>\n' : '') +
|
||||
(message_arr['number'] ? '<span>x' + message_arr['number'] + '</span>\n' : '') +
|
||||
' </div>\n' +
|
||||
' </div>\n' +
|
||||
' </div>\n' +
|
||||
' </a>';
|
||||
} else {
|
||||
message = row.message;
|
||||
}
|
||||
|
||||
$('.chat').append('<div class="record_item">\
|
||||
<p><span class="user_name">' + row.sender_id + '</span> ' + row.createtime + ' </p>\
|
||||
<div class="bubble ' + row.sender_identity + '">' + message + '</div>\
|
||||
</div>');
|
||||
},
|
||||
buildChatA: function (filepath, file_suffix, class_name) {
|
||||
if (class_name == 'record') {
|
||||
return '<a target="_blank" class="' + class_name + '" href="' + filepath + '">点击下载:' + file_suffix + ' 文件</a>';
|
||||
} else {
|
||||
return '<a target="_blank" class="' + class_name + '" href="' + filepath + '">点击下载:' + file_suffix + ' 文件</a>';
|
||||
}
|
||||
},
|
||||
buildChatImg: function (filename, facename, class_name = 'emoji') {
|
||||
|
||||
return '<img class="' + class_name + '" title="' + facename + '" src="' + filename + '" />';
|
||||
},
|
||||
buildPrompt: function (data) {
|
||||
$('.chat').append('<div class="status"><span>' + data + '</span></div>');
|
||||
},
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+141
@@ -0,0 +1,141 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/session/index' + location.search,
|
||||
add_url: 'kefu/session/add',
|
||||
edit_url: 'kefu/session/edit',
|
||||
del_url: 'kefu/session/del',
|
||||
multi_url: 'kefu/session/multi',
|
||||
record_url: 'kefu/record/sessionRecord/session_id/{ids}',
|
||||
table: 'kefu_session',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{
|
||||
field: 'kefuuser.nickname',
|
||||
title: __('Kefuuser.nickname'),
|
||||
operate: 'LIKE',
|
||||
placeholder: '模糊查找'
|
||||
},
|
||||
{field: 'fu_user_nickname', 'title': __('绑定用户'), operate: false},
|
||||
// {field: 'kefuuser.avatar', title: __('Kefuuser.avatar'),operate:false , events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'csr.nickname', title: __('Crs Nickname'), operate: 'LIKE', placeholder: '模糊查找'},
|
||||
// {field: 'csr_id', title: __('Csr_id')},
|
||||
{field: 'user_message_count', title: __('user_message_count'), operate: false},
|
||||
{field: 'csr_message_count', title: __('csr_message_count'), operate: false},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate', title: __('Operate'), table: table,
|
||||
events: Table.api.events.operate,
|
||||
formatter: Table.api.formatter.operate,
|
||||
buttons: [
|
||||
{
|
||||
name: 'record',
|
||||
title: '审查聊天记录',
|
||||
classname: 'btn btn-xs btn-info btn-dialog',
|
||||
icon: 'fa fa-file-text-o',
|
||||
url: $.fn.bootstrapTable.defaults.extend.record_url,
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
recyclebin: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
'dragsort_url': ''
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: 'kefu/session/recyclebin' + location.search,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{
|
||||
field: 'deletetime',
|
||||
title: __('Deletetime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
width: '130px',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
buttons: [
|
||||
{
|
||||
name: 'Restore',
|
||||
text: __('Restore'),
|
||||
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
|
||||
icon: 'fa fa-rotate-left',
|
||||
url: 'kefu/session/restore',
|
||||
refresh: true
|
||||
},
|
||||
{
|
||||
name: 'Destroy',
|
||||
text: __('Destroy'),
|
||||
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
|
||||
icon: 'fa fa-times',
|
||||
url: 'kefu/session/destroy',
|
||||
refresh: true
|
||||
}
|
||||
],
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+135
@@ -0,0 +1,135 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/toolbar/index' + location.search,
|
||||
add_url: 'kefu/toolbar/add',
|
||||
edit_url: 'kefu/toolbar/edit',
|
||||
del_url: 'kefu/toolbar/del',
|
||||
multi_url: 'kefu/toolbar/multi',
|
||||
table: 'kefu_toolbar',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
// {field: 'position', title: __('Position'), searchList: {"frontend":__('Position frontend'),"backend":__('Position backend'),"general":__('Position general')}, formatter: Table.api.formatter.flag, custom:{frontend: 'info', backend:'success', general:'warning'}},
|
||||
{field: 'mark', title: __('Mark')},
|
||||
{field: 'title', title: __('Title')},
|
||||
{
|
||||
field: 'icon_image',
|
||||
title: __('Icon_image'),
|
||||
events: Table.api.events.image,
|
||||
formatter: Table.api.formatter.image
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: __('Status'),
|
||||
searchList: {"0": __('Status 0'), "1": __('Status 1')},
|
||||
formatter: Table.api.formatter.status
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
recyclebin: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
'dragsort_url': ''
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: 'kefu/toolbar/recyclebin' + location.search,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'title', title: __('Title'), align: 'left'},
|
||||
{
|
||||
field: 'deletetime',
|
||||
title: __('Deletetime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
field: 'operate',
|
||||
width: '130px',
|
||||
title: __('Operate'),
|
||||
table: table,
|
||||
events: Table.api.events.operate,
|
||||
buttons: [
|
||||
{
|
||||
name: 'Restore',
|
||||
text: __('Restore'),
|
||||
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
|
||||
icon: 'fa fa-rotate-left',
|
||||
url: 'kefu/toolbar/restore',
|
||||
refresh: true
|
||||
},
|
||||
{
|
||||
name: 'Destroy',
|
||||
text: __('Destroy'),
|
||||
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
|
||||
icon: 'fa fa-times',
|
||||
url: 'kefu/toolbar/destroy',
|
||||
refresh: true
|
||||
}
|
||||
],
|
||||
formatter: Table.api.formatter.operate
|
||||
}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
var mark = $('#c-mark').val();
|
||||
if (mark == 'goods' || mark == 'order') {
|
||||
$('.data_api').show(200);
|
||||
$('#c-data_api').attr('placeholder', mark == 'goods' ? '请输入商品数据接口Url' : '请输入订单数据接口Url')
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'kefu/user/index' + location.search,
|
||||
add_url: 'kefu/user/add',
|
||||
edit_url: 'kefu/user/edit',
|
||||
del_url: 'kefu/user/del',
|
||||
multi_url: 'kefu/user/multi',
|
||||
table: 'kefu_user',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'id',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
// {field: 'user_id', title: __('User_id')},
|
||||
{field: 'user.nickname', title: __('User_id')},
|
||||
// {field: 'avatar', title: __('Avatar'), events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'nickname', title: __('Nickname')},
|
||||
{field: 'referrer', title: __('Referrer')},
|
||||
{field: 'contact', title: __('Contact')},
|
||||
{field: 'note', title: __('Note')},
|
||||
// {field: 'token', title: __('Token')},
|
||||
// {field: 'wechat_openid', title: __('Wechat_openid')},
|
||||
{
|
||||
field: 'createtime',
|
||||
title: __('Createtime'),
|
||||
operate: 'RANGE',
|
||||
addclass: 'datetimerange',
|
||||
formatter: Table.api.formatter.datetime
|
||||
},
|
||||
{
|
||||
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();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
Reference in New Issue
Block a user