多站点CMS

pull/41/head
devlike 2018-02-08 11:07:40 +08:00
parent 1dc9f0da91
commit cce2887383
5 changed files with 865 additions and 0 deletions

View File

@ -0,0 +1,306 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'posts/archives/index',
add_url: 'posts/archives/add',
edit_url: 'posts/archives/edit',
del_url: 'posts/archives/del',
multi_url: 'posts/archives/multi',
table: 'archives',
}
});
var table = $("#table");
//在普通搜索渲染后
table.on('post-common-search.bs.table', function (event, table) {
Form.events.cxselect($("form", table.$commonsearch));
});
table.on('post-body.bs.table', function (e, settings, json, xhr) {
$(".btn-editone", this)
.off("click")
.removeClass("btn-editone")
.addClass("btn-addtabs")
.prop("title", __('Edit'));
});
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'weigh',
sortOrder: 'desc',
columns: [
[
{checkbox: true},
{field: 'id', title: __('id'), operate: false},
{field: 'channel_id', title: __('Channel_id'),formatter: function (value, row, index) {
return row.channel==null?'':'<a href="javascript:;" class="searchit" data-field="channel_id" data-value="' + value + '">' + row.channel.name + '</a>';
},
searchList: $.getJSON('posts/channel/getlist')
},
{field: 'type', title: __('type'), formatter: function (value,row,index){
return '<span class="label label-info">'+value+'</span>';
}, operate:false },
{field: 'title', align:'left', title: __('title'), operate: 'LIKE %...%',
formatter: function(value,row, index){
return value + (row.cover==''?'' : ' <span><i class="fa fa-file-image-o text-danger"></i></span>');
}},
{field: 'status', title: __('status'), searchList: {new: __('New'), normal: __('Normal'), hidden: __('Hidden')}, formatter: Table.api.formatter.status},
{field: 'updatetime', title: __('updatetime'),operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'views', title: __('Views'), operate:false},
{field: 'weigh', title: __('Weigh'), operate:false},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate,
//buttons: [
// {name: 'edit', extend: 'title="'+ __('Edit')+'"', classname: 'btn btn-xs btn-success btn-addtabs', icon: 'fa fa-pencil', url: $.fn.bootstrapTable.defaults.extend.edit_url}
//],
formatter: Table.api.formatter.operate
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
$(document).on('click', '.btn-move', function () {
var ids = Table.api.selectedids(table);
Layer.open({
title: __('Move'),
content: Template("channeltpl", {}),
btn: [__('Move')],
yes: function (index, layero) {
var channel_id = $("select[name='channel']", layero).val();
if (channel_id == 0) {
Toastr.error(__('Please select channel'));
return;
}
Fast.api.ajax({
url: "posts/archives/move/ids/" + ids.join(","),
type: "post",
data: {channel_id: channel_id},
}, function () {
table.bootstrapTable('refresh', {});
Layer.close(index);
});
},
success: function (layero, index) {
}
});
});
},
recyclebin: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
multi_url: 'posts/archives/multi',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: 'posts/archives/recyclebin',
pk: 'id',
sortName: 'weigh',
columns: [
[
{checkbox: true},
{field: 'id', title: __('id'), operate: false},
{field: 'site_id', title: __('Site_id'), operate: false, formatter:function(value,row,index){
return row.sites==null? __('Main site') : row.sites.name + ' (' + row.sites.domain + ')';
}},
{field: 'channel_id', title: __('channel'),
formatter: function(value,row,index){return row.channel.name;},
searchList: $.getJSON('posts/channel/getlist')
},
{field: 'title', title: __('title'), 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-restoreit', icon: 'fa fa-rotate-left', url: 'posts/archives/restore'},
{name: 'Destroy', text: __('Destroy'), classname: 'btn btn-xs btn-danger btn-destroyit', icon: 'fa fa-times', url: 'posts/archives/destroy'}
],
formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
//清空回收站、批量/单个销毁
$(document).on('click', '.btn-destroyall,.btn-destroy,.btn-destroyit', function (e) {
var that = this;
var top = $(that).offset().top - $(window).scrollTop();
var left = $(that).offset().left - $(window).scrollLeft();
//顶部按钮显示下按钮下方
if(!$(that).hasClass('btn-destroyit')) top += $(that).height();
//表格中的删除,显示于左侧
if($(that).hasClass('btn-destroyit')) left -= 260;
if (top + 154 > $(window).height()) {
top = top - 154;
}
if ($(window).width() < 480) {
top = left = undefined;
}
var index=Layer.confirm(__('Are you sure you want to delete this item?'),
{icon: 3, title: __('Warning'), offset: [top, left], shadeClose: true},
function () {
var options = $(that).attr("href");
if($(that).hasClass('btn-destroy')){ //批量销毁
var ids = Table.api.selectedids(table);
options = {url: $(this).attr("href"), data: { ids: ids}};
}
Fast.api.ajax($(that).attr("href"), function () {
Layer.close(index);
table.bootstrapTable('refresh');
});
});
return false;
});
//全部恢复、批量/单个恢复
$(document).on('click', '.btn-restoreall,.btn-restoreit,.btn-restore', function (e) {
var options = $(this).attr("href");
if($(that).hasClass('btn-restore')){ //批量恢复
var ids = Table.api.selectedids(table);
options = {url: $(this).attr("href"), data: {ids: ids}};
}
Fast.api.ajax($(this).attr("href"), function () {
table.bootstrapTable('refresh');
});
return false;
});
},
add: function () {
//$("form#add-form").data("validator-options", {ignore: ':hidden'});
$(document).on("change", "select[name='row[site_id]']", function () {
siteid=$(this).val();
/*
$("#c-channel_id option:selected").prop("selected", false);
$("#c-channel_id option").addClass("hide");
$("#c-channel_id option[data-siteid='" + $(that).val() + "']").removeClass("hide");
try{
$("#c-channel_id").selectpicker("refresh");
}catch(e){}
$('#c-channel_id').trigger('change');
Fast.api.ajax({url: 'posts/sites/get_site_langs', data: {"lang": $(that).val()}}, function (data) {
$("#language_choose").html(data.html);
Form.api.bindevent($("#language_choose"));
return false;
});
*/
$pid = $('#c-channel_id');
Fast.api.ajax({url: 'posts/sites/get_site_info', data: {"site_id": siteid}}, function (x,ret) {
if(ret.code=="1"){
$pid.empty();
$.each(ret.data.list, function(i,k){
$pid.append("<option value='" + ret.data.list[i].id + "' "+(ret.data.list[i].disabled==1?'disabled':'')+">"+ ret.data.list[i].name + "</option>");
});
$pid.selectpicker("refresh");
$pid.trigger('change');
$("#language_choose").html(ret.data.lang);
}
Form.api.bindevent($("#language_choose"));
return false;
});
/*
var ml = $('option:selected', this).data('lang');
if(ml==undefined) {
$('input[name="row[lang]"]').prop('disabled', false).closest('label').show();
return false;
}
$('input[name="row[lang]"]').prop('disabled', true).closest('label').hide();
$.each(ml.split(','), function(key,value){
$('input[name="row[lang]"][value="'+value+'"]').prop('disabled', false).closest('label').show();
});
*/
});
$(document).on("change", "select[name='row[channel_id]']", function () {
var model = $('option:selected',this).data('model');
if($('input[name="row[type]"]').val()!=model) {
Fast.api.ajax({url: 'posts/archives/get_model_fields', data: {model: model}}, function (data) {
$("#extra").html(data.html);
Form.api.bindevent($("#extra"));
return false;
});
}
$('input[name="row[type]"]').val(model);
});
Controller.edit();
//if($('#c-site_id').size()>0) $('#c-site_id').trigger('change');
$("select[name='row[channel_id]']").trigger('change');
},
edit: function () {
$("form").data("validator-options", {ignore: ':hidden'});
$.validator.config({
rules: {
diyname: function (element) {
if (element.value.toString().match(/^\d+$/)) {
return __('Can not be digital');
}
return $.ajax({
url: 'posts/archives/check_element_available',
type: 'POST',
data: {name: element.name, value: element.value},
dataType: 'json'
});
}
}
});
$(document).on("click", ".fieldlist .btn-append", function () {
var rel = parseInt($(this).closest("dl").attr("rel")) + 1;
var name = $(this).closest("dl").data("name");
var objID = name.replace('[', '_').replace(']','_') + rel;
$(this).closest("dl").attr("rel", rel);
var appendHtml = '<dd class="form-inline">';
appendHtml += '<input type="hidden" name="' + name + '['+rel+'][id]" id="pa-' + objID + 'i' + '" value="" />';
appendHtml += '<input type="text" name="' + name + '['+rel+'][title]" id="pa-' + objID + 't'+ '" class="form-control" value="" size="23" /> ';
appendHtml += '<input type="text" name="' + name + '['+rel+'][url]" id="pa-' + objID + '" class="form-control" size="10" /> ';
appendHtml += '<span><button type="button" id="plupload-' + objID + '" class="btn btn-danger plupload" data-input-id="pa-' + objID + '" data-attach-id="pa-' + objID + 'i' + '" data-title-id="pa-' + objID + 't'+ '" data-mimetype="*/*" data-multiple="false" data-upload-success="productattachcallback"><i class="fa fa-upload"></i> ' + __('Upload') + '</button></span> ';
appendHtml += '<span><button type="button" id="fachoose-' + objID + '" class="btn btn-primary fachoose" data-input-id="pa-' + objID + '" data-attach-id="pa-' + objID + 'i' + '" data-title-id="pa-' + objID + 't'+ '" data-mimetype="*/*" data-multiple="false"><i class="fa fa-list"></i> ' + __('Choose') + '</button></span> ';
appendHtml += '<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span></dd>';
$(appendHtml).insertBefore($(this).parent());
Controller.api.bindevent();
});
$(document).on("click", ".fieldlist dd .btn-remove", function () {
var rel = parseInt($(this).closest("dl").attr("rel"));
rel = rel>1? rel-1: 0;
$(this).closest("dl").attr("rel", rel);
$(this).parent().off().remove();
});
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"), function () {
var obj = top.window.$("#nav ul li.active");
top.window.Toastr.success(__('Operation completed'));
top.window.$(".sidebar-menu a[url$='/posts/archives'][addtabs]").click();
top.window.$(".sidebar-menu a[url$='/posts/archives'][addtabs]").dblclick();
obj.find(".fa-remove").trigger("click");
});
}
}
};
return Controller;
});

View File

@ -0,0 +1,127 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'posts/channel/index',
add_url: 'posts/channel/add',
edit_url: 'posts/channel/edit',
del_url: 'posts/channel/del',
multi_url: 'posts/channel/multi',
table: 'channel',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
escape: false,
pk: 'id',
sortName: 'weigh',
pagination: false,
escape: false,
commonSearch: false,
search: false,
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'sites.name', title: __('Site_id')},
{field: 'type', title: __('Type'), custom: {channel: 'info', list: 'success', redirect: 'primary'}, formatter: Table.api.formatter.flag},
{field: 'name', title: __('Name'), align: 'left', formatter: Controller.api.formatter.catename},
{field: 'diyname', title: __('Redirect'), formatter:function(value,row,index){
return value==''? '' : '<a href="' + value + '" title="'+value+'" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a>';
}},
{field: 'flag', title: __('Flag'), operate: false, formatter: Table.api.formatter.flag},
{field: 'weigh', title: __('Weigh'), visible:true},
{field: 'archives.items', title: __('Items'), formatter:function(value,row,index){return (typeof value === 'number') ? value : 0;}},
{field: 'status', title: __('Status'), operate: false, 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: {
formatter: {
catename: function(value,row,index){
imgtag = row.image ? '<img src="' + Fast.api.cdnurl('/assets/img/Format_icon_16.png') + '" width="16" height="16" />' : '';
return value + '&nbsp;' + imgtag;
}
},
bindevent: function () {
$.validator.config({
rules: {
diyname: function (element) {
if (element.value.toString().match(/^\d+$/)) {
return __('Can not be digital');
}
return $.ajax({
url: 'posts/channel/check_element_available',
type: 'POST',
data: {id: $("#channel-id").val(), name: element.name, value: element.value},
dataType: 'json'
});
}
}
});
$(document).on("click", "input[name='row[type]']", function () {
$(".tf").addClass("hidden");
$(".tf.tf-" + $(this).val()).removeClass("hidden");
$("select[name='row[model]']").trigger("change");
$('#c-template').val($("input[name='row[model]']:checked").data($(this).val()+'tpl'));
});
$(document).on("change", "select[name='row[site_id]']", function () {
siteid=$(this).val();
//$("#c-pid option:first").prop("selected", true);
//$("#c-pid option").addClass("hide");
//$("#c-pid option[data-siteid='" + $(that).val() + "']").removeClass("hide");
$pid = $('#c-pid');
Fast.api.ajax({url: 'posts/sites/get_site_info', data: {"site_id": siteid}}, function (x,ret) {
if(ret.code=="1"){
$pid.empty();
$pid.append("<option value='0'>"+ __('None') + "</option>");
$.each(ret.data.list, function(i,k){
$pid.append("<option value='" + ret.data.list[i].id + "'>"+ ret.data.list[i].name + "</option>");
});
$pid.selectpicker("refresh");
$pid.trigger('change');
$("#language_choose").html(ret.data.lang);
}
Form.api.bindevent($("#language_choose"));
return false;
});
});
$(document).on("change", "#c-pid", function () {
$("#c-model_"+$('option:selected', this).data('model')).prop("checked", true);
});
$(document).on("click", "input[name='row[model]']", function () {
type = $("input[name='row[type]']:checked").val();
$('#c-template').val($(this).data(type+'tpl'));
});
$("select[name='row[model]']").trigger("change");
$("input[name='row[type]']:checked").trigger("click");
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});

View File

@ -0,0 +1,242 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'posts/modelx/index',
add_url: 'posts/modelx/add',
edit_url: 'posts/modelx/edit',
del_url: 'posts/modelx/del',
multi_url: 'posts/modelx/multi',
table: 'postsmodelx',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
commonSearch: false,
search: false,
pagination: false,
columns: [
[
{field: 'name', title: __('Name')},
{field: 'title', title: __('Title')},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate,
buttons: [
{name: 'fieldset', extend: 'title="'+ __('Fieldset')+'"', classname: 'btn btn-xs btn-success btn-dialog', icon: 'fa fa-pencil', url: $.fn.bootstrapTable.defaults.extend.edit_url}
],
formatter: function(value,row,index){
$btns = $('<div></div>').html(Table.api.formatter.operate.call(this, value, row, index));
$('.btn-editone', $btns).remove();
return $btns.html();
}
}
]
]
});
$(document).on('click', '.btn-update', function (e) {
e.preventDefault();
var inx = $(this).data('row'), status=$(this).data('status');
var fun=function(ret,data){
if(data!='success') return false;
table.bootstrapTable('updateRow', {
index:inx,
row:{'status': status}
});
}
Backend.api.ajax({url : 'posts/modelx/chgstatus',
data:{ids: $(this).data('updateid'), 'status':status } ,
complete: fun
});
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
$(document).on('click', '.btn-param', function(e){
e.preventDefault();
var fid = $(this).data('fieldid');
var opennerLayer = parent.Layer.getFrameIndex(window.name);
var params = fid?'&params='+fid:'';
//编辑窗口layer的index
parent.Backend.api.open('posts/modelx/fieldset?zl='+opennerLayer+params, $(this).attr('title'), {callback: Controller.api.saveParams});
return false;
});
$(document).on('click', '.btn-change', function(e){
var that=this;
Backend.api.ajax({
url: 'posts/modelx/chgstatus',
data: {"ids": $(that).data('ids'), "field": $(that).data('field')}
}, function(ret,data){
if(data.code==1){
if ($(that).find('i').hasClass('fa-toggle-on')){
$(that).find('i').removeClass('fa-toggle-on').addClass('fa-toggle-off');
}else{
$(that).find('i').removeClass('fa-toggle-off').addClass('fa-toggle-on');
}
}
})
});
$(document).on('click', '.btn-delparam', function(e){
e.preventDefault();
$(this).closest('li').off().remove();
});
$(document).on('click', '.btn-submit', function(e){
e.preventDefault();
//var data={fieldset: []};
var data=[];
if($('#fieldset li').size()>0){
$('#fieldset li').each(function(i){
//data.fieldset.push( $(this).data() );
data.push($(this).data());
});
//$('input[name="row[extra]"]').val(JSON.stringify(data));
Backend.api.ajax({
url: 'posts/modelx/fieldset',
data: {ids: $('input[name="ids"]').val(), fieldset: JSON.stringify(data)}
}, function(){
var index = parent.Layer.getFrameIndex(window.name);
parent.Layer.close(index);
});
}
//$('#edit-form').submit();
});
Controller.api.bindevent();
},
fieldset: function(){
var fieldid = Fast.api.query('params'),
opennerLayer = Fast.api.query('zl');
$.validator.config({
rules: {
fieldname: function (element) {
_value = $.trim(element.value.toString());
if($(element).attr('name')=='field'){
_old=$('[name="field-old"]').val();
if(_value==_old) return '';
}
if (_value.match(/^\d+$/)) {
return __('Can not be digital');
}
if (_value.length<3 || _value.length>30) {
return __('Please enter a value between %d and %d characters long',3,30);
}
let exists = false;
var c = parent.Layer.getChildFrame('body', opennerLayer);
$('#fieldset li',c).each(function(){
if(_value == $(this).data('field')){
exists=true;
return false;
}
});
if(exists) return __('Field already exist');
return $.ajax({
url: 'posts/modelx/check_element_available',
type: 'POST',
data: {"id": $("[name='ids']", c).val(), "value": _value},
dataType: 'json'
});
}
}
});
$('select#c-type').on('change', function(e){
$('.tf').addClass("hidden");
$('.tf.tf-' + $('option:selected', this).val()).removeClass("hidden");
});
$(document).on('click', '.btn-reset', function(e){
e.preventDefault();
if(fieldid!=undefined){
var c = parent.Layer.getChildFrame('body', opennerLayer);
$('input[name="fieldid"]').val(fieldid);
var arr = ['field','fieldname','type','value','rule','tip','extend','length','vars','float','min','max','length','success','error','status'];
$.each(arr, function(index,item){
let val = $('#fieldset li#'+fieldid, c).attr('data-'+item+'');
val = val!=undefined ? val.indexOf('||') ? val.replace(/(\|\|)/g, '\r\n') : val : '';
if(item=='status'){
$('[name="'+item+'"][value="'+val+'"]').prop('checked',true);
}else{
$('[name="'+item+'"]').val( val );
}
});
$('[name="field-old"]').val($('[name="field"]').val());
}
});
$('.btn-reset').trigger('click');
$('select#c-type').trigger('change');
Form.api.submit = function(){
var data={};
$('select:visible,input:visible,textarea:visible,input[name="fieldid"],input[name="rule"]').each(function(){
data[$(this).attr('name')]=$(this).val().replace(/([\r\n])/g, '||');
});
data['status']=$('input[name="status"]:checked').val();
Backend.api.close(data);
return false;
}
Controller.api.bindevent();
},
api: {
formatter: {
status: function(value,row,index){
var texts=['<span class="label label-success">' + __('Enabled') + '</span> &nbsp;',
'<span class="label label-danger">' + __('Disabled') + '</span> &nbsp;'];
var btns = ['<a href="javascript:;" data-updateid="'+row.id+'" data-status="1" data-row="'+index+'" class="btn-update" title="' + __('Enable') + '"><i class="fa fa-check"></i>' + __('Enable') + '</a>',
'<a href="javascript:;" data-updateid="'+row.id+'" data-status="0" data-row="'+index+'" class="btn-update" title="' + __('Disable') + '"><i class="fa fa-ban"></i>' + __('Disable') + '</a>'];
return (value==1)? texts[0]+btns[1] : texts[1]+btns[0];
}
},
saveParams: function(res){
var lidata='', newli=false;
if(res.fieldid==''){
res.fieldid = 'p'+new Date().getTime();
newli=true;
}
$.each(res, function(key,value){
lidata+= (key!='fieldid')? ' data-'+key+ (value==''?'':'='+value) :'';
});
var li = Template('fieldTpl', {
fieldid: res.fieldid,
field: res.field,
title: res.fieldname,
type: __(res.type),
status: __(res.status),
datapart: lidata
});
if(newli){
$('#fieldset div#btnAddParam').before($(li));
}else{
$('#fieldset li#'+res.fieldid).off().before($(li)).remove();
}
Controller.api.bindevent();
},
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});

View File

@ -0,0 +1,74 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'posts/page/index',
add_url: 'posts/page/add',
edit_url: 'posts/page/edit',
del_url: 'posts/page/del',
multi_url: 'posts/page/multi',
table: 'page',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
sortName: 'weigh',
columns: [
[
{field: 'state', checkbox: true},
{field: 'id', title: __('Id'), operate: false},
{field: 'site_id', title: __('Site_id'), operate: false, formatter:function(value,row,index){
return value==0? '-': row.sites.name;
}},
{field: 'title', title: __('Title'), align:'left', operate: 'LIKE %...%', placeholder: '关键字,模糊搜索',
formatter: function(value,row,index){
return value + (row.image==''?'' : '<img src="'+Fast.api.cdnurl('/assets/img/img.gif')+'">');
}},
{field: 'flag', title: __('Flag'), formatter: Table.api.formatter.flag, operate: false},
{field: 'lang', title: __('lang'), formatter: Table.api.formatter.langs, operate: false},
{field: 'views', title: __('Views'), operate: false},
//{field: 'comments', title: __('Comments'), operate: false},
{field: 'weigh', title: __('Weigh'), operate: false},
{field: 'status', title: __('Status'), formatter: Table.api.formatter.status, searchList: {'normal': __('Normal'), 'hidden': __('Hidden')}, style: 'min-width:100px;'},
{field: 'createtime', title: __('Create Time'), formatter: Table.api.formatter.datetime, operate: 'BETWEEN', type: 'datetime', addclass: 'datetimepicker', data: 'data-date-format="YYYY-MM-DD"'},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
],
//普通搜索
commonSearch: true,
titleForm: '', //为空则不显示标题,不定义默认显示:普通搜索
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
api: {
bindevent: function () {
$(document).on("change", "#c-site_id", function () {
that=this;
Fast.api.ajax({url: 'posts/sites/get_site_langs', data: {"lang": $(that).val()}}, function (data) {
$("#language_choose").html(data.html);
Form.api.bindevent($("#language_choose"));
return false;
});
});
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});

View File

@ -0,0 +1,116 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'posts/sites/index',
add_url: 'posts/sites/add',
edit_url: 'posts/sites/edit',
del_url: 'posts/sites/del',
multi_url: 'posts/sites/multi',
table: 'sites',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'username', title: __('User_id')},
{field: 'name', title: __('name')},
{field: 'domain', title: __('Domain')},
{field: 'lang', title: __('Lang')},
{field: 'status', title: __('Status'), formatter: Table.api.formatter.status},
{field: 'createtime', title: __('Createtime'), 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();
},
config: function(){
$.validator.config({
rules: {
domain: function(ele){
_value = $.trim(element.value.toString());
if (!_value.match(/^[A-Za-z0-9]+$/)) {
return __('Please enter a valid URL');
}
return $.ajax({
url: 'posts/sites/check_element_available',
type: 'POST',
data: {"domain": _value},
dataType: 'json'
});
},
url: function (element) {
_value = $.trim(element.value.toString());
if (!_value.match(/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_\.]+$/)) {
return __('Please enter a valid URL');
}
return $.ajax({
url: 'posts/sites/check_element_available',
type: 'POST',
data: {"domain": _value},
dataType: 'json'
});
}
}
});
Controller.api.bindevent();
},
api: {
bindevent: function () {
$(document).on("click", ".fieldlist .btn-append", function () {
var rel = parseInt($(this).closest("dl").children('dd').length)-2;
$(this).closest("dl").attr("rel", rel);
$('<dd class="form-inline"><input type="text" name="custom['+ rel + '][field]" class="form-control" value="" size="20" /> <input type="text" name="custom[' + rel + '][value]" class="form-control" value="" size="50" /> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span></dd>').insertBefore($(this).parent());
});
$(document).on("click", ".fieldlist dd .btn-remove", function () {
var that=this;
$(that).parent().remove();
return;
});
$(document).on('click', 'input[name*="row[lang]"]', function(e){
if($(this).val()=='zh-cn'){
$(this).prop('checked', true);
return false;
}
$('#extraLanguage').html('');
if($('input[name*="row[lang]"]:checked').length>1){
$('input[name*="row[lang]"]:checked').each(function(){
if($(this).val()!='zh-cn'){
var language = $(this).val();
var languageText = $(this).closest('label').text();
var html = Template('seotpl', {lang: language, langName: languageText});
$('#extraLanguage').append(html)
}
});
}
});
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});