汪总电商平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

740 lines
24 KiB

3 weeks ago
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'upload', 'vue', 'vuedraggable'], function ($, undefined, Backend, Table, Form, Upload, Vue, wanldraggable) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'wanlshop/page/index' + location.search,
add_url: '',
edit_url: 'wanlshop/page/edit',
del_url: 'wanlshop/page/del',
multi_url: '',
table: 'wanlshop_page',
}
});
Fast.config.openArea = ['90%', '90%'];
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'page_token', title: __('Token')},
{field: 'name', title: __('Name')},
{field: 'shop_id', title: __('Shop_id')},
{field: 'type', title: __('Type'), searchList: {"page":__('Page'),"shop":__('Shop'),"index":__('Index')}, formatter: Table.api.formatter.normal},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'status', title: __('Status'), searchList: {"normal":__('Normal'),"hidden":__('Hidden')}, 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);
// 新建页面
$(document).on("click", ".btn-addnew", function () {
Backend.api.open('wanlshop/page/add/', __('新建页面'), {area:['800px', '400px']});
});
},
history: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: `wanlshop/page/history/token/${Fast.api.query('token')}`,
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
commonSearch: false,
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'name', title: __('Name')},
{field: 'type', title: __('Type'), searchList: {"page":__('Page'),"shop":__('Shop'),"index":__('Index')}, formatter: Table.api.formatter.normal},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'deletetime', title: __('Deletetime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{
field: 'operate', title: __('Operate'), events: {
'click .btn-chooseone': function (e, value, row, index) {
Fast.api.close(row.id);
},
}, formatter: function () {
return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('还原') + '</a>';
}
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
recyclebin: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
'dragsort_url': ''
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: 'wanlshop/page/recyclebin' + location.search,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'type', title: __('Type'), align: 'left', searchList: {"page":__('Page'),"shop":__('Shop'),"index":__('Index')}, formatter: Table.api.formatter.normal},
{field: 'shop_id', title: __('Shop_id'), align: 'left'},
{field: 'name', title: __('Name'), align: 'left'},
{field: 'page_token', title: __('Token'), 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: 'wanlshop/page/restore',
refresh: true
},
{
name: 'Destroy',
text: __('Destroy'),
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
icon: 'fa fa-times',
url: 'wanlshop/page/destroy',
refresh: true
}
],
formatter: Table.api.formatter.operate
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
link: function() {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'wanlshop/page/link',
}
});
var urlArr = [];
var table = $("#table");
table.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table', function (e, row) {
if (e.type == 'check' || e.type == 'uncheck') {
row = [row];
} else {
urlArr = [];
}
$.each(row, function (i, j) {
if (e.type.indexOf("uncheck") > -1) {
var index = urlArr.indexOf(j.route);
if (index > -1) {
urlArr.splice(index, 1);
}
} else {
urlArr.indexOf(j.route) == -1 && urlArr.push(j.route);
}
});
});
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
sortName: 'id',
pagination: false,
search: false,
// escape: false,
showToggle: false,
showExport: false,
columns: [
[
{checkbox: true},
{field: 'image', title: __('Image'), events: Table.api.events.image, formatter: Table.api.formatter.image},
{field: 'title', title: __('Title'), formatter: Controller.api.formatter.escape2Html},
{field: 'route', title: __('Route'),operate: false},
{field: 'sort', title: __('Sort'), searchList: {"product":__('Sort product'),"sort":__('Sort sort'),"page":__('Sort page')}, formatter: Table.api.formatter.normal},
{
field: 'operate', title: __('Operate'), events: {
'click .btn-chooseone': function (e, value, row, index) {
var multiple = Backend.api.query('multiple');
multiple = multiple == 'true' ? true : false;
Fast.api.close({url: row.route, multiple: multiple});
},
}, formatter: function () {
return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
}
}
]
]
});
// 选中多个
$(document).on("click", ".btn-choose-multi", function () {
var multiple = Backend.api.query('multiple');
multiple = multiple == 'true' ? true : false;
Fast.api.close({url: urlArr.join(","), multiple: multiple});
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function() {
var vm = new Vue({
el: '#app',
components: {
wanldraggable
},
data() {
return {
// 组件样式
moduleStyle: {
"height": {"name": "高度(px)","default": "100px"},
"width": {"name": "宽度(%)","default": "100%"},
"background-image": {"name": "背景图片(绝对路径)",
"default": "url(..图片地址..)"},
"background-color": {"name": "背景颜色(HEX)","default": "#ffffff"},
"background-repeat": {"name": "背景重复方式","default": ""},
"color": {"name": "字体颜色","default": "#333333"},
"font-size": {"name": "字体大小(px)","default": "12px"},
"text-align": {"name": "对齐方式","default": "inherit"},
"line-height": {"name": "段落高度(px)","default": ""},
"border": {"name": "边框","default": "1px solid #000000"},
"border-bottom": {"name": "下边框","default": "1px solid #000000"},
"border-left": {"name": "左边框","default": "1px solid #000000"},
"border-right": {"name": "右边框","default": "1px solid #000000"},
"border-top": {"name": "上边框","default": "1px solid #000000"},
"border-radius": {"name": "圆角(px)","default": "10px"},
"margin": {"name": "外边距","default": "25px"},
"margin-bottom": {"name": "下外边(px)","default": "25px"},
"margin-right": {"name": "右外边(px)","default": "25px"},
"margin-left": {"name": "左外边(px)","default": "25px"},
"margin-top": {"name": "上外边(px)","default": "25px"},
"padding": {"name": "内边距","default": "25px"},
"padding-bottom": {"name": "下内边(px)","default": "25px"},
"padding-left": {"name": "左内边(px)","default": "25px"},
"padding-right": {"name": "右内边(px)","default": "25px"},
"padding-top": {"name": "上内边(px)","default": "25px"},
"overflow": {"name": "溢出隐藏","default": "hidden"}
},
//插件数据
module: {
"Basics": [{
"name": "轮播组件",
"type": "banner",
"style": {
"color": "#000000"
},
"params": {
"interval": "2800",
"height": "115px",
"banstyle": "圆形"
},
"data": [{
"image": "/assets/addons/wanlshop/img/page/banner-default.png",
"tips": "尽量使用高像素素材,否则可能出现虚化",
"link": ""
}]
},
{
"name": "图片橱窗",
"type": "image",
"params": {
"imgLayout": 1,
"imgPaddingTb": "1px",
"imgPaddingLf": "1px"
},
"style": {
"margin": "-1px",
"padding": "12.5px"
},
"data": [{
"image": "/assets/addons/wanlshop/img/page/image-default.png",
"link": ""
}]
},
{
"name": "视频组件",
"type": "video",
"style": {},
"data": [{
"image": "/assets/addons/wanlshop/img/page/video-default.png",
"video": ""
}]
},
{
"name": "菜单组件",
"type": "menu",
"params": {
"menuType": "icon",
"colfive": "5",
"menuMarginTop": "12.5px",
"menuMarginBottom": "5px",
"menuHeightWidth": "45px",
"menuIconSize": "28px",
"menuBorderRadius": "1000px",
"menuTextSize": "12px"
},
"style": {
"color": "#333333",
"padding-bottom": "12.5px"
},
"data": [{
"text": "菜单一",
"icon": "wlIcon-leimu",
"iconClass": "wanl-text-white",
"iconImage": "/assets/addons/wanlshop/img/page/video-default.png",
"bgClass": "wanl-bg-redorange",
"link": ""
}]
},
{
"name": "公告栏",
"type": "notice",
"params": {
"show": true
},
"style": {
"background-color": "#fffbe8",
"color": "#de8f1c",
"padding": "2px 12.5px"
},
"data": [{
"content": "公告内容",
"link": ""
}]
},
{
"name": "搜索栏",
"type": "search",
"params": {
"searchRadius": "2000px",
"searchBackground": "#eee",
"searchPadding": "6px 15px"
},
"style": {
"padding": "12.5px"
},
"data": [{
"content": "关键字请用空格 隔开"
}]
}
],
"Shop": [
// {
// "name": "活动橱窗",
// "type": "activity",
// "style": {
// "background-color": "#ffffff",
// "border-radius": "10px",
// "margin": "12.5px"
// },
// "params": {
// "activityBackground": null,
// "colStyle": "col-2-2-4"
// },
// "data": [{
// "activity": "rush",
// "textColor" : "wanl-pip",
// "describe": "30天包退 365天包换",
// "tags": "新品尝鲜",
// "title": "自动获取商品"
// }]
// },
{
"name": "类目标题",
"type": "categoryTitle",
"style": {
"margin": "12.5px"
},
"data": [{
"categoryName": "默认名",
"categoryIcon": "wlIcon-huomiao2",
"categoryLink": ""
}]
},
// {
// "name": "分类橱窗",
// "type": "classify",
// "style": {
// "background-color": "#ffffff",
// "border-radius": "10px",
// "margin": "12.5px"
// },
// "params": {
// "classifyBackground": null,
// "colStyle": "col-2-2-4"
// },
// "data": [{
// "categoryId": 1,
// "textColor" : "wanl-pip",
// "describe": "30天包退 365天包换",
// "tags": "新品尝鲜"
// }]
// },
{
"name": "拼团组件",
"type": "groups",
"style": {
"background-color": "#ffffff",
"border-radius": "10px",
"overflow": "hidden",
"margin": "12.5px"
},
"params": {
"groupsBackground": null,
"colmargin": "25",
"titleText" : "热门拼团",
"titleColor" : "#333333",
"titleFontSize" : "14px",
"infoText" : "拼着买,更便宜~",
"infoColor" : "#999999",
"infoFontSize" : "12px",
},
"data": [{
"title": "自动获取商品"
}]
},
{
"name": "商品组件",
"type": "goods",
"style": {
"background-color": "#f5f5f5"
},
"params": {
"colthree": "2",
"colmargin": "25"
},
"data": [{
"goodsLink": 1
}]
}
],
"Tool": [{
"name": "空白行",
"type": "empty",
"style": {
"height": "25px"
},
"data": []
},
{
"name": "分隔符",
"type": "division",
"style": {
"width": "100%",
"padding": "12.5px"
},
"params": {
"lineWidth": "60%",
"lineHeight": "1px",
"lineBackground": "#bababa",
"lineText": "文字内容",
"lineTextColor": "#333333",
"lineTextSize": "14px",
"lineTextBackground": "#ffffff",
"lineTextPadding": "0 9px"
}
}
]
},
//整体数据
pageData: Config.page,
pageCategory: Config.pageCategory,
type: 'page', //选中
device: 'iPhoneX', //设备
nowTime: '11:11', //时间
signal: 'WIFI', //信号
moveDom: '',
changeDom: '',
startY: 0,
endY: 0
}
},
created() {
this.nowTimes();
},
mounted() {
this.nowTimes();
},
filters: {
formatDate(timestamp) {
var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var D = date.getDate() + ' ';
var h = date.getHours() + ':';
var m = date.getMinutes() + ':';
var s = date.getSeconds();
return Y + M + D + h + m + s;
}
},
methods: {
// 保存数据后,拉取最新回收站记录
publish() {
let _this = this;
Fast.api.ajax({
url: "wanlshop/page/edit",
data: this.pageData,
}, function(data, ret){
//刷新父级页面
parent.$("a.btn-refresh").trigger("click");
});
},
// 还原历史页面
historyPage(){
let _this = this;
parent.Fast.api.open(`wanlshop/page/history/token/${_this.pageData.page_token}`, __('历史记录'), {
area: ['900px', '600px'],
callback: function (id) {
_this.recover(id);
}
});
},
// 恢复历史记录
recover(id) {
let _this = this;
Fast.api.ajax({
url: "wanlshop/page/recover",
data: {"id":id}
}, function(data, ret){
_this.pageData = data;
});
},
onType(e) {
this.type = e;
},
addData(key, arr) {
Vue.set(vm.pageData.item[key].data, vm.pageData.item[key].data.length, JSON.parse(JSON.stringify(arr)));
},
delData(key, num) {
if (vm.pageData.item[key].data.length == 1) {
Toastr.warning("不能再删了,至少剩一个");
} else {
Vue.delete(vm.pageData.item[key].data, num); //vue方法
}
},
addStyle(key, type, text) {
Vue.set(vm.pageData.item[key].style, type, text);
},
delStyle(key, type) {
Vue.delete(vm.pageData.item[key].style, type); //vue方法
},
delModule(key) {
Vue.delete(vm.pageData.item, key); //vue方法
this.type = this.type - 1;
},
onDevice(e) {
this.device = e;
},
onSignal(e) {
this.signal = e;
},
addTemplate(arr) {
this.type = this.pageData.item.length;
Vue.set(this.pageData.item, this.pageData.item.length, JSON.parse(JSON.stringify(arr))); //数据 追加
},
// 页面上传图片 1.1.9升级
changeImage(event, key){
let files = event.target.files[0]; //获取input的图片file值
require(['upload'], function (Upload) {
Upload.api.send(files, function (data, ret) {
if(type){
Vue.set(vm.pageData, key, data.url);
}else{
Vue.set(vm.pageData.page.style, key, data.url);
}
});
});
},
// 数据上传图片 1.1.9升级
dataUpload(event, key, num, type) {
let files = event.target.files[0]; //获取input的图片file值
require(['upload'], function (Upload) {
Upload.api.send(files, function (data, ret) {
Vue.set(vm.pageData.item[key].data[num], type, data.url);
});
});
},
// 配置上传图片 1.1.9升级
paramsUpload(event, index, type) {
let files = event.target.files[0]; //获取input的图片file值
require(['upload'], function (Upload) {
Upload.api.send(files, function (data, ret) {
Vue.set(vm.pageData.item[index].params, type, data.url);
});
});
},
// 选择链接
obtainLink(key, num, type, multiple){
parent.Fast.api.open("wanlshop/page/link?multiple=" + multiple, __('选择链接'), {
area: ['800px', '600px'],
callback: function (data) {
Vue.set(vm.pageData.item[key].data[num], type, data.url);
}
});
},
// 选择媒体
attachmentLink(key, num, type, multiple){
parent.Fast.api.open("wanlshop/attachment/select?mimetype=video/*&multiple=" + multiple, __('选择链接'), {
area: ['800px', '600px'],
callback: function (data) {
console.log(data);
Vue.set(vm.pageData.item[key].data[num], type, data.url);
}
});
},
// 类目链接
categoryLink(key, num, multiple){
parent.Fast.api.open("wanlshop/shopsort/select?multiple=" + multiple, __('选择类目链接'), {
area: ['800px', '600px'],
callback: function (data) {
Vue.set(vm.pageData.item[key].data[num], 'categoryLink', data.url);
Vue.set(vm.pageData.item[key].data[num], 'categoryName', data.name);
}
});
},
// 商品链接
goodsLink(key, num, type, multiple){
parent.Fast.api.open("wanlshop/goods/select?multiple=" + multiple, __('选择商品链接'), {
area: ['800px', '600px'],
callback: function (data) {
Vue.set(vm.pageData.item[key].data[num], type, data.url);
}
});
},
// 选择图标
iconLink(key, num, type, multiple){
parent.Fast.api.open("wanlshop/icon/select?multiple=" + multiple, __('选择图标'), {
area: ['800px', '600px'],
callback: function (data) {
Vue.set(vm.pageData.item[key].data[num], type, data.name);
}
});
},
// 获取当前时间函数
timeFormate(timeStamp) {
let hh = new Date(timeStamp).getHours() < 10 ? "0" + new Date(timeStamp).getHours() : new Date(timeStamp).getHours();
let mm = new Date(timeStamp).getMinutes() < 10 ? "0" + new Date(timeStamp).getMinutes() : new Date(
timeStamp).getMinutes();
this.nowTime = hh + ":" + mm;
},
// 定时器函数
nowTimes() {
this.timeFormate(new Date());
setInterval(this.nowTimes, 50 * 1000);
},
cdnurl(url){
return Fast.api.cdnurl(url);
},
mergeSpace(str){
str=str.replace(/(\s|&nbsp;)+/g,'');
return str;
},
categoryName(id){
let category = this.pageCategory,categoryData = category[category.map((item) => item.id).indexOf(parseInt(id))];
if(categoryData){
return categoryData.name;
}
},
getListNum(style, key){
var list = {
'col-1-2-2': [3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
'col-1-1_2': [3,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
'col-2-1_2': [2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
'col-2-2_1': [2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
'col-2-2-1_2': [2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2],
'col-2-4': [2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
'col-2-2-4': [2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2]
};
return list[style][key];
},
getParameter(name) {
var language = {
'Basics': '基础组件',
'Shop': '商城组件',
'Tool': '辅助组件',
'Advert': '广告组件',
'interval': '轮播速度(毫秒)',
'menuMarginTop': '菜单-上边距',
'menuMarginBottom': '菜单-下边距',
'menuHeightWidth': '菜单大小',
'menuBorderRadius': '菜单圆角',
'menuTextSize': '文字大小',
'imgPaddingTb': '图片上下边距',
'imgPaddingLf': '图片左右边距',
'searchPadding': '搜索文字边距',
'lineWidth': '线段长度',
'lineHeight': '线段高度',
'lineText': '文字内容',
'lineTextSize': '文字大小',
'lineTextPadding': '文字外边距',
'text': '名称',
'describe': '描述',
'tags': '标签',
'distribution': '分销',
'group': '团购拼团',
'bargain': '砍价',
'rush': '限时抢购',
'height': '组件高度',
'coupon': '领券中心',
'titleText': '标题',
'titleFontSize': '标题字体大小',
'infoText': '描述',
'infoFontSize': '描述字体大小'
};
return language.hasOwnProperty(name)?language[name]:name;
}
}
});
},
api: {
formatter: {
//转意符换成普通字符
escape2Html: function (value, row, index) {
return value.toString().replace(/(&|&amp;)nbsp;/g, '');
}
},
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});