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.
 

1013 lines
45 KiB

<!DOCTYPE html>
<html lang="en" class="app">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<script type="text/javascript" src="style/tgt/util.js"></script>
<link rel="stylesheet" href="style/assets/css/bootstrap.min.css" type="text/css"/>
{literal}
<script>
var require = {
urlArgs: 'v=2018070213'
};
</script>
<script src="style/tgt/require.js"></script>
<script src="style/tgt/config.js"></script>
<script src="style/js/jquery.min.js"></script>
<script type="text/javascript" src="style/tgt/jquery.gcjs.js"></script>
<script type="text/javascript" src="style/tgt/jquery.form.js"></script>
<script type="text/javascript" src="style/tgt/tooltipbox.js"></script>
<script type="text/javascript" src="style/tgt/sceollFix.js"></script>
<script src="style/tgt/common.js"></script>
<script language='javascript' src="style/tgt/designer.js"></script>
<script language='javascript' src="style/tgt/jquery.contextMenu.js"></script>
<link href="style/tgt/jquery.contextMenu.css" rel="stylesheet">
{/literal}
</head>
<body>
{literal}
<style type="text/css">
.red {
float: left;
color: red
}
.white {
float: left;
color: #fff
}
.tooltipbox {
background: #fef8dd;
border: 1px solid #c40808;
position: absolute;
left: 0;
top: 0;
text-align: center;
height: 20px;
color: #c40808;
padding: 2px 5px 1px 5px;
border-radius: 3px;
z-index: 1000;
}
.red {
float: left;
color: red
}
.bg-light .nav-primary > ul > li > ul.nav > li > a {
margin: 0 0 0 10px;
}
#poster {
width: 320px;
height: 504px;
border: 1px solid #ccc;
position: relative
}
#poster .bg {
position: absolute;
width: 100%;
z-index: 0
}
#poster .drag[type=img] img,
#poster .drag[type=thumb] img {
width: 100%;
height: 100%;
}
#poster .drag {
position: absolute;
width: 80px;
height: 80px;
border: 1px solid #000;
}
#poster .drag[type=nickname] {
width: 80px;
height: 40px;
font-size: 16px;
font-family: ;
}
#poster .drag img {
position: absolute;
z-index: 0;
width: 100%;
}
#poster .rRightDown,
.rLeftDown,
.rLeftUp,
.rRightUp,
.rRight,
.rLeft,
.rUp,
.rDown {
position: absolute;
width: 7px;
height: 7px;
z-index: 1;
font-size: 0;
}
#poster .rRightDown,
.rLeftDown,
.rLeftUp,
.rRightUp,
.rRight,
.rLeft,
.rUp,
.rDown {
background: #C00;
}
.rLeftDown,
.rRightUp {
cursor: ne-resize;
}
.rRightDown,
.rLeftUp {
cursor: nw-resize;
}
.rRight,
.rLeft {
cursor: e-resize;
}
.rUp,
.rDown {
cursor: n-resize;
}
.rLeftDown {
left: -4px;
bottom: -4px;
}
.rRightUp {
right: -4px;
top: -4px;
}
.rRightDown {
right: -4px;
bottom: -4px;
}
.rRightDown {
background-color: #00F;
}
.rLeftUp {
left: -4px;
top: -4px;
}
.rRight {
right: -4px;
top: 50%;
margin-top: -4px;
}
.rLeft {
left: -4px;
top: 50%;
margin-top: -4px;
}
.rUp {
top: -4px;
left: 50%;
margin-left: -4px;
}
.rDown {
bottom: -4px;
left: 50%;
margin-left: -4px;
}
.context-menu-layer {
z-index: 9999;
}
.context-menu-list {
z-index: 9999;
}
</style>
{/literal}
<section class="scrollable padder" style="padding-top:10px;">
<div class="main rightlist">
<form action="" method="post" class="form-horizontal form" enctype="multipart/form-data">
<input type="hidden" name="id" value="{$res->id}"/>
<input type="hidden" name="https_name" class="https_name" value="{$uploadImg}"/>
<div class='panel panel-default'>
<div class='panel-heading'>
海报修改
</div>
<div class='panel-body'>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label"><span style='color:red'>*</span>
海报名称</label>
<div class="col-sm-9 col-xs-12">
<input type="text" name="title" class="form-control" value="{$res->name}"/>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label"><span style='color:red'>*</span>
海报类型</label>
<div class="col-sm-9 col-xs-12">
<label class="radio-inline">
<input type="radio" {if $res->type ==1} checked='checked"{/if} name="type" value="1" /> 文章海报
</label>
<label class="radio-inline">
<input type="radio" {if $res->type ==2} checked="checked"{/if} name="type" value="2" /> 红包
</label>
<label class="radio-inline">
<input type="radio" {if $res->type ==3} checked="checked"{/if} name="type" value="3" /> 商品海报
</label>
</div>
</div>
<div class="form-group" style="display:none">
<label class="col-xs-12 col-sm-3 col-md-2 control-label"><span style=' color:red'>*</span>
生成二维码关键词</label>
<div class="col-sm-9 col-xs-12">
<input type="text" name="keyword" class="form-control" value="{$res->keyword}"/>
<span class='help-block'>如果是商品海报 ,回复关键词是 关键词+商品ID</span>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">是否默认</label>
<div class="col-sm-9 col-xs-12">
{if $res->isdefault == 1}
<label class="radio-inline">
<input type="radio" name="isdefault" value="1" checked/> 是
</label>
<label class="radio-inline">
<input type="radio" name="isdefault" value="0"/> 否
</label>
{else}
<label class="radio-inline">
<input type="radio" name="isdefault" value="1"/> 是
</label>
<label class="radio-inline">
<input type="radio" name="isdefault" value="0" checked/> 否
</label>
{/if}
<span class='help-block'>是否是海报类型的默认设置,一种海报只能一个默认设置</span>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label"><span style='color:red'>*</span>
海报设计</label>
<div class="col-sm-9 col-xs-12">
<table style='width:100%;'>
<tr>
<td style='width:320px;' valign='top'>
<div id='poster'>
{if $res->bg != ''}
<img src='{$uploadImg}{$res->bg}' class='bg'/>
{/if}
{if $data != ''}
{foreach from=$data item=d key=key name=f1}
<div class="drag" type="{$d->type}" index="{$key+1}"
style="zindex:{$key+1};left:{$d->left};top:{$d->top};
width:{$d->width};height:{$d->height}"
src="{$d->src}" size="{$d->size}" color="{$d->color}">
{if $d->type=='qr'}
<img src="style/tgt/qr.jpg"/>
{elseif $d->type=='head'}
<img src="style/tgt/moren.png"/>
{elseif $d->type=='thumb'}
<img src="style/tgt/kdd.png"/>
{elseif $d->type =='img'}
<img src="{$d->src}"/>
{elseif $d->type =='nickname'}
<div class=text
style="font-size:{$d->size};color:{$d->color}">昵称
</div>
{elseif $d->type =='title'}
<div class=text
style="font-size:{$d->size};color:{$d->color}">商品名称
</div>
{elseif $d->type =='marketprice'}
<div class=text
style="font-size:{$d->size};color:{$d->color}">商品现价
</div>
{elseif $d->type =='productprice'}
<div class=text
style="font-size:{$d->size};color:{$d->color}">商品原价
</div>
{/if}
<div class="rRightDown"></div>
<div class="rLeftDown"></div>
<div class="rRightUp"></div>
<div class="rLeftUp"></div>
<div class="rRight"></div>
<div class="rLeft"></div>
<div class="rUp"></div>
<div class="rDown"></div>
</div>
{/foreach}
{/if}
</div>
</td>
<td valign='top'>
<div class='panel panel-default'>
<div class='panel-body'>
<div class="form-group" id="bgset">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">背景图片</label>
<div class="col-sm-9 col-xs-12">
{literal}
<script type="text/javascript">
function showImageDialog(elm, opts, options) {
require(["util"], function (util) {
var btn = $(elm);
var ipt = btn.parent().prev();
var val = ipt.val();
options = {
'global': false,
'class_extra': '',
'direct': true,
'multiple': false
};
util.image(val, function (url) {
var imgInfo = JSON.parse(url._raw);
if (imgInfo.height != 1008 || imgInfo.width != 640) {
alert('背景图片尺寸不符!')
return;
} else {
if (url.url) {
ipt.val(url.attachment);
ipt.attr("filename", url.filename);
ipt.attr("url", url.url);
}
}
if (url.media_id) {
if (img.length > 0) {
img.get(0).src = "";
}
ipt.val(url.media_id);
}
}, null, options);
});
}
function deleteImage(elm) {
require(["jquery"], function ($) {
$(elm).prev().attr("src", "style/tgt/nopic.jpg");
$(elm).parent().prev().find("input").val("");
});
}
</script>
{/literal}
<div class="input-group ">
<input type="text" name="bg" value="{$res->bg}"
class="form-control" autocomplete="off">
<span class="input-group-btn">
<button class="btn btn-default" type="button" onclick="showImageDialog(this);">选择图片</button>
</span>
</div>
<div class="input-group " style="margin-top:.5em;">
<img src="style/tgt/nopic.jpg"
onerror="this.src='style/tgt/nopic.jpg'; this.title='图片未找到.'"
class="img-responsive img-thumbnail" width="150"/>
<em class="close"
style="position:absolute; top: 0px; right: -14px;"
title="删除这张图片" onclick="deleteImage(this)">×</em>
</div>
<span class='help-block'>背景图片尺寸: 640 * 1008</span>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-3 control-label">海报元素</label>
<div class="col-sm-9 col-xs-12">
<button class='btn btn-default btn-com' type='button'
data-type='qr' style="margin-bottom: 4px">二维码
</button>
<button class='btn btn-default btn-com' type='button'
data-type='img' style="margin-bottom: 4px">图片
</button>
<span id="goodsparams">
<button class='btn btn-default btn-com' type='button'
data-type='title'>商品名称</button>
<button class='btn btn-default btn-com' type='button'
data-type='thumb'>商品图片</button>
<button class='btn btn-default btn-com' type='button'
data-type='marketprice'>商品现价</button>
<button class='btn btn-default btn-com' type='button'
data-type='productprice'>商品原价</button>
</span>
</div>
</div>
<div id='qrset' style='display:none'>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-3 control-label">二维码尺寸</label>
<div class="col-sm-9 col-xs-12">
<select id='qrsize' class='form-control'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
</select>
</div>
</div>
</div>
<div id='nameset' style='display:none'>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-3 control-label">昵称颜色</label>
<div class="col-sm-9 col-xs-12 wid100">
{literal}
<script type="text/javascript">
require(["jquery", "util"], function ($, util) {
$(function () {
$(".colorpicker").each(function () {
var elm = this;
util.colorpicker(elm, function (color) {
$(elm).parent().prev().prev().val(color.toHexString());
$(elm).parent().prev().css("background-color", color.toHexString());
});
});
$(".colorclean").click(function () {
$(this).parent().prev().prev().val("");
$(this).parent().prev().css("background-color", "#FFF");
});
});
});
</script>
{/literal}
<div class="row row-fix">
<div class="col-xs-8 col-sm-8"
style="padding-right:0;">
<div class="input-group">
<input class="form-control" type="text"
name="color" placeholder="请选择颜色"
value="{$res->color}">
<span class="input-group-addon"
style="width:35px;border-left:none;background-color:"></span>
<span class="input-group-btn">
<button class="btn btn-default colorpicker" type="button">选择颜色 <i class="fa fa-caret-down"></i></button>
<button class="btn btn-default colorclean" type="button"><span><i class="fa fa-remove"></i></span></button>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-3 control-label">昵称大小</label>
<div class="col-sm-4">
<div class='input-group wid100'>
<input type="text" id="namesize"
class="form-control namesize"
placeholder="例如: 14,16"/>
<div class='input-group-addon'>px</div>
</div>
</div>
</div>
</div>
<div class="form-group" id="imgset" style="display:none">
<label class="col-xs-12 col-sm-3 col-md-3 control-label">图片设置</label>
<div class="col-sm-9 col-xs-12">
<div class="input-group ">
<input type="text" name="img" value="{$res->image}"
class="form-control" autocomplete="off">
<span class="input-group-btn">
<button class="btn btn-default" type="button" onclick="showImageDialog(this);">选择图片</button>
</span>
</div>
<div class="input-group " style="margin-top:.5em;">
<img src="style/tgt/nopic.jpg"
onerror="this.src='style/tgt/nopic.jpg'; this.title='图片未找到.'"
class="img-responsive img-thumbnail" width="150"/>
<em class="close"
style="position:absolute; top: 0px; right: -14px;"
title="删除这张图片" onclick="deleteImage(this)">×</em>
</div>
</div>
</div>
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">生成等待文字</label>
<div class="col-sm-9 col-xs-12">
<textarea name="waittext" class="form-control">{$res->waittext}</textarea>
<span class="help-block">例如:您的专属海报正在拼命生成中,请等待片刻...</span>
</div>
</div>
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label"></label>
<div class="col-sm-9 col-xs-12">
<input type="submit" name="submit" value="提交" class="btn btn-primary col-lg-1"/>
<input type="hidden" name="token" value=""/>
<input type="hidden" name="data" value="{$res->data}"/>
<input type="button" name="back" onclick='history.back()' style='margin-left:10px;'
value="返回列表" class="btn btn-default"/>
</div>
</div>
</div>
</div>
</form>
</div>
{literal}
<script language='javascript'>
$('form').submit(function () {
if ($(':input[name=title]').isEmpty()) {
Tip.focus($(':input[name=title]'), '请输入海报名称!');
return false;
}
if ($(':input[name=type]:checked').length <= 0) {
Tip.focus($(':input[name=title]'), '请选择海报类型!');
return false;
}
if ($(':radio[name=type]:checked').val() == '4') {
if ($(':radio[name=paytype]:checked').val() == '1') {
var recmoney = parseFloat($(':input[name=recmoney]').val());
if (recmoney > 0) {
if (recmoney < 1) {
Tip.select($(':input[name=recmoney]'), '微信企业付款需支付1元以上!', 'bottom');
return false;
}
}
var submoney = parseFloat($(':input[name=submoney]').val());
if (submoney > 0) {
if (submoney < 1) {
Tip.select($(':input[name=submoney]'), '微信企业付款需支付1元以上!', 'bottom');
return false;
}
}
}
}
var data = [];
$('.drag').each(function () {
var obj = $(this);
var type = obj.attr('type');
var left = obj.css('left'),
top = obj.css('top');
var d = {
left: left,
top: top,
type: obj.attr('type'),
width: obj.css('width'),
height: obj.css('height')
};
if (type == 'nickname' || type == 'title' || type == 'marketprice' || type == 'productprice') {
d.size = obj.attr('size');
d.color = obj.attr('color');
} else if (type == 'qr') {
d.size = obj.attr('size');
} else if (type == 'img') {
d.src = obj.attr('src');
}
data.push(d);
});
$(':input[name=data]').val(JSON.stringify(data));
return true;
});
function bindEvents(obj) {
var index = obj.attr('index');
var rs = new Resize(obj, {
Max: true,
mxContainer: "#poster"
});
rs.Set($(".rRightDown", obj), "right-down");
rs.Set($(".rLeftDown", obj), "left-down");
rs.Set($(".rRightUp", obj), "right-up");
rs.Set($(".rLeftUp", obj), "left-up");
rs.Set($(".rRight", obj), "right");
rs.Set($(".rLeft", obj), "left");
rs.Set($(".rUp", obj), "up");
rs.Set($(".rDown", obj), "down");
rs.Scale = true;
var type = obj.attr('type');
if (type == 'nickname' || type == 'img' || type == 'title' || type == 'marketprice' || type == 'productprice') {
rs.Scale = false;
}
new Drag(obj, {
Limit: true,
mxContainer: "#poster"
});
$('.drag .remove').unbind('click').click(function () {
$(this).parent().remove();
})
$.contextMenu({
selector: '.drag[index=' + index + ']',
callback: function (key, options) {
var index = parseInt($(this).attr('zindex'));
if (key == 'next') {
var nextdiv = $(this).next('.drag');
if (nextdiv.length > 0) {
nextdiv.insertBefore($(this));
}
} else if (key == 'prev') {
var prevdiv = $(this).prev('.drag');
if (prevdiv.length > 0) {
$(this).insertBefore(prevdiv);
}
} else if (key == 'last') {
var len = $('.drag').length;
if (index >= len - 1) {
return;
}
var last = $('#poster .drag:last');
if (last.length > 0) {
$(this).insertAfter(last);
}
} else if (key == 'first') {
var index = $(this).index();
if (index <= 1) {
return;
}
var first = $('#poster .drag:first');
if (first.length > 0) {
$(this).insertBefore(first);
}
} else if (key == 'delete') {
$(this).remove();
}
var n = 1;
$('.drag').each(function () {
$(this).css("z-index", n);
n++;
})
},
items: {
"next": {
name: "调整到上层"
},
"prev": {
name: "调整到下层"
},
"last": {
name: "调整到最顶层"
},
"first": {
name: "调整到最低层"
},
"delete": {
name: "删除元素"
}
}
});
obj.unbind('click').click(function () {
bind($(this));
})
}
var imgsettimer = 0;
var nametimer = 0;
var bgtimer = 0;
function bindType(type) {
$("#goodsparams").hide();
$(".type4").hide();
if (type == '4') {
$(".type4").show();
} else if (type == '3') {
$("#goodsparams").show();
}
}
function clearTimers() {
clearInterval(imgsettimer);
clearInterval(nametimer);
clearInterval(bgtimer);
}
function getImgUrl(val) {
var https_name = $(".https_name").val();
if (val.indexOf('http://') == -1) {
val = https_name + val;
}
return val;
}
function bind(obj) {
var imgset = $('#imgset'),
nameset = $("#nameset"),
qrset = $('#qrset');
imgset.hide(), nameset.hide(), qrset.hide();
clearTimers();
var type = obj.attr('type');
if (type == 'img') {
imgset.show();
var src = obj.attr('src');
var input = imgset.find('input');
var img = imgset.find('img');
if (typeof(src) != 'undefined' && src != '') {
input.val(src);
img.attr('src', getImgUrl(src));
}
imgsettimer = setInterval(function () {
if (input.val() != src && input.val() != '') {
var url = getImgUrl(input.val());
obj.attr('src', input.val()).find('img').attr('src', url);
}
}, 10);
} else if (type == 'nickname' || type == 'title' || type == 'marketprice' || type == 'productprice') {
nameset.show();
var color = obj.attr('color') || "#000";
var size = obj.attr('size') || "16";
var input = nameset.find('input:first');
var namesize = nameset.find('#namesize');
var picker = nameset.find('.sp-preview-inner');
input.val(color);
namesize.val(size.replace("px", ""));
picker.css({
'background-color': color,
'font-size': size
});
nametimer = setInterval(function () {
obj.attr('color', input.val()).find('.text').css('color', input.val());
obj.attr('size', namesize.val() + "px").find('.text').css('font-size', namesize.val() + "px");
}, 10);
} else if (type == 'qr') {
qrset.show();
var size = obj.attr('size') || "3";
var sel = qrset.find('#qrsize');
sel.val(size);
sel.unbind('change').change(function () {
obj.attr('size', sel.val())
});
}
}
$(function () {
$('.drag').each(function () {
bindEvents($(this));
})
$(':radio[name=type]').click(function () {
var type = $(this).val();
bindType(type);
})
//
$('#bgset').find('button:first').click(function () {
var oldbg = $(':input[name=bg]').val();
bgtimer = setInterval(function () {
var bg = $(':input[name=bg]').val();
if (oldbg != bg && bg != '') {
bg = getImgUrl(bg);
$('#poster .bg').remove();
var bgh = $("<img src='" + bg + "' class='bg' />");
var first = $('#poster .drag:first');
if (first.length > 0) {
bgh.insertBefore(first);
} else {
$('#poster').append(bgh);
}
oldbg = bg;
clearInterval(bgtimer);
}
}, 1000);
})
$('.btn-com').click(function () {
var imgset = $('#imgset'),
nameset = $("#nameset"),
qrset = $('#qrset');
imgset.hide(), nameset.hide(), qrset.hide();
clearTimers();
var type = $(this).data('type');
var img = "";
if (type == 'qr') {
img = '<img src="style/tgt/qr.jpg" />';
} else if (type == 'head') {
img = '<img src="style/tgt/moren.png" />';
} else if (type == 'img' || type == 'thumb') {
img = '<img src="style/tgt/kdd.png" />';
} else if (type == 'nickname') {
img = '<div class=text>昵称</div>';
} else if (type == 'title') {
img = '<div class=text>商品名称</div>';
} else if (type == 'marketprice') {
img = '<div class=text>商品现价</div>';
} else if (type == 'productprice') {
img = '<div class=text>商品原价</div>';
}
var index = $('#poster .drag').length + 1;
var obj = $('<div class="drag" type="' + type + '" index="' + index + '" style="z-index:' + index + '">' + img + '<div class="rRightDown"> </div><div class="rLeftDown"> </div><div class="rRightUp"> </div><div class="rLeftUp"> </div><div class="rRight"> </div><div class="rLeft"> </div><div class="rUp"> </div><div class="rDown"></div></div>');
$('#poster').append(obj);
bindEvents(obj);
});
$('.drag').click(function () {
bind($(this));
})
})
var currentCouponType = null;
function selectCoupon(type) {
currentCouponType = type;
$('#modal-module-menus-coupon').modal();
}
function select_coupon(o) {
$(":input[name=" + currentCouponType + "couponid]").val(o.id);
$("." + currentCouponType + "group").find('button').html("[" + o.id + "]" + o.couponname);
$("#modal-module-menus-coupon .close").click();
}
</script>
</div>
<script language='javascript'>
require(['bootstrap'], function ($) {
$('.btn').each(function () {
if ($(this).closest('td').css('position') == 'relative') {
return true;
}
$(this).hover(function () {
$(this).tooltip('show');
}, function () {
$(this).tooltip('hide');
});
})
});
$('.js-clip').each(function () {
util.clip(this, $(this).attr('data-url'));
});
</script>
{/literal}
</section>
</html>