初始上传
This commit is contained in:
253
app/shop/view/article/add.html
Executable file
253
app/shop/view/article/add.html
Executable file
@@ -0,0 +1,253 @@
|
||||
<style>
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>文章标题:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="article_title" lay-verify="required" maxlength="40" autocomplete="off" placeholder="文章标题最多40个字" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>文章分类:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="category_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $category_list as $v}
|
||||
<option value="{$v['category_id']}">{$v['category_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="article_abstract" class="layui-textarea len-long" maxlength="100"></textarea>
|
||||
</div>
|
||||
<div class="word-aux">文章摘要最多可输入100个字</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>封面:</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block square simple-uploading">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="image" />
|
||||
<i class="del">x</i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">推荐使用 750x420 像素的图片</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>正文:</label>
|
||||
<div class="layui-input-inline">
|
||||
<script id="editor" type="text/plain" class="special-length" style="height:500px;"></script>
|
||||
<input type="hidden" name="article_content" id="article_content" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">发布时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show_release_time" value="1" title="显示" checked>
|
||||
<input type="radio" name="is_show_release_time" value="0" title="不显示">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">阅读次数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show_read_num" value="1" title="显示" checked>
|
||||
<input type="radio" name="is_show_read_num" value="0" title="不显示">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">点赞次数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show_dianzan_num" value="1" title="显示" checked>
|
||||
<input type="radio" name="is_show_dianzan_num" value="0" title="不显示">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">虚拟阅读数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="initial_read_num" onchange="detectionNumType(this,'integral')" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">虚拟点赞数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="initial_dianzan_num" onchange="detectionNumType(this,'integral')" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="sort" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">立即发布</button>
|
||||
<button class="layui-btn" lay-submit lay-filter="saveDrafts">保存至草稿箱</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backArticleList()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script>
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
if($("#article_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#article_content").val());
|
||||
});
|
||||
}
|
||||
|
||||
var form,repeat_flag,
|
||||
IMAGE_MAX = 9, //最多可以上传多少张图片
|
||||
imageCollection = [], //图片集合
|
||||
selectedGoodsId = [],
|
||||
goods_id = [],
|
||||
goods_list =[];
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
repeat_flag = false;
|
||||
|
||||
form.render();
|
||||
|
||||
// 单图上传
|
||||
$("body").off("click", "#img").on("click", "#img", function () {
|
||||
openAlbum(function (data) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(data[0].pic_path);
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}, 1);
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(data){
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
data.cover_img = imageCollection.join();
|
||||
|
||||
if (!ue.getContent()){
|
||||
layer.msg("文章内容不能为空");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
data.article_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("shop/article/add"),
|
||||
data: data,
|
||||
async: false,
|
||||
success: function(res){
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
layer.confirm('添加成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function(index, layero){
|
||||
if(data.status == 1){
|
||||
location.hash = ns.hash("shop/article/lists");
|
||||
}else{
|
||||
location.hash = ns.hash("shop/article/drafts");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function backArticleList() {
|
||||
location.hash = ns.hash("shop/article/lists");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
function detectionNumType(el, type) {
|
||||
var value = $(el).val();
|
||||
//大于零 且 不是小数
|
||||
if (value < 0 && type == 'integral')
|
||||
$(el).val(0);
|
||||
else if (type == 'integral')
|
||||
$(el).val(Math.round(value));
|
||||
|
||||
//大于1 且 不是小数
|
||||
if (value < 1 && type == 'positiveInteger')
|
||||
$(el).val(1);
|
||||
else if (type == 'positiveInteger')
|
||||
$(el).val(Math.round(value));
|
||||
//大于零可以是小数
|
||||
if (type == 'positiveNumber') {
|
||||
value = parseFloat(value).toFixed(2);
|
||||
if (value < 0)
|
||||
$(el).val(0);
|
||||
else
|
||||
$(el).val(value);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
159
app/shop/view/article/article_select.html
Executable file
159
app/shop/view/article/article_select.html
Executable file
@@ -0,0 +1,159 @@
|
||||
<style>
|
||||
.select-article{margin: 20px;}
|
||||
.select-article .single-filter-box{padding: 0;}
|
||||
.select-article .single-filter-box .layui-form{margin: inherit;}
|
||||
.select-article .single-filter-box .layui-form div{margin: 0;}
|
||||
</style>
|
||||
|
||||
<div class="select-article">
|
||||
<div class="single-filter-box">
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入文章名称" autocomplete="off" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<table id="article_list" lay-filter="article_list"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="checkbox">
|
||||
<input type="checkbox" data-article-id="{{d.article_id}}" name="article_checkbox" lay-skin="primary" lay-filter="article_checkbox">
|
||||
<input type="hidden" data-article-id="{{d.article_id}}" name="article_json" value='{{ JSON.stringify(d) }}' />
|
||||
</script>
|
||||
<script>
|
||||
var select_id = localStorage.getItem('article_select_id') || '', // "{$select_id}", //选中文章id
|
||||
articleList ={:json_encode($article_list)},
|
||||
selectList = {}, //选中文章所有数据res
|
||||
articleIdArr = select_id.length ? select_id.split(',') : [], //已选中的文章id
|
||||
table, form,laytpl,element;
|
||||
$(function () {
|
||||
|
||||
for (var k in articleList) {
|
||||
selectList['article_id_' + articleList[k].article_id] = {
|
||||
article_id: articleList[k].article_id,
|
||||
article_title: articleList[k].article_title,
|
||||
cover_img: articleList[k].cover_img,
|
||||
article_abstract: articleList[k].article_abstract,
|
||||
read_num: articleList[k].read_num,
|
||||
}
|
||||
}
|
||||
|
||||
layui.use(['form', 'laytpl', 'element'], function () {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
element = layui.element;
|
||||
table = new Table({
|
||||
elem: '#article_list',
|
||||
url: '{:addon_url("shop/article/articleselect")}',
|
||||
cols: [
|
||||
[
|
||||
{
|
||||
title: '<input type="checkbox" name="article_checkbox_all" lay-skin="primary" lay-filter="article_checkbox_all">',
|
||||
width: "8%",
|
||||
templet: '#checkbox'
|
||||
},
|
||||
{
|
||||
field: 'article_title',
|
||||
title: '文章名称',
|
||||
width: '35%'
|
||||
},
|
||||
{
|
||||
field: 'category_name',
|
||||
title: '文章分类',
|
||||
width: '30%'
|
||||
},
|
||||
{
|
||||
field: 'cover_img',
|
||||
title: '封面图',
|
||||
width: '20%',
|
||||
templet: function (d) {
|
||||
return `<img layer-src src="${ns.img(d.cover_img)}"/>`;
|
||||
}
|
||||
},
|
||||
]
|
||||
],
|
||||
callback: function (res) {
|
||||
// 更新复选框状态
|
||||
for (var i = 0; i < articleIdArr.length; i++) {
|
||||
var selected_article = $("input[name='article_checkbox'][data-article-id='" + articleIdArr[i] + "']");
|
||||
if (selected_article.length) {
|
||||
selected_article.prop("checked", true);
|
||||
}
|
||||
}
|
||||
form.render();
|
||||
dealWithTableSelectedNum();
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(search)', function (data) {
|
||||
formSearch();
|
||||
return false;
|
||||
});
|
||||
|
||||
//公共搜索方法
|
||||
function formSearch() {
|
||||
var data = {};
|
||||
data.search_text = $("input[name='search_text']").val();
|
||||
data.article_ids = articleIdArr.toString();
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data
|
||||
});
|
||||
}
|
||||
|
||||
// 勾选文章
|
||||
form.on('checkbox(article_checkbox_all)', function (data) {
|
||||
var all_checked = data.elem.checked;
|
||||
$("input[name='article_checkbox']").each(function () {
|
||||
var checked = $(this).prop('checked');
|
||||
if (all_checked != checked) {
|
||||
$(this).next().click();
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
// 勾选文章
|
||||
form.on('checkbox(article_checkbox)', function (data) {
|
||||
var article_id = $(data.elem).attr("data-article-id");
|
||||
var spuLen = $("input[name='article_checkbox'][data-article-id=" + article_id + "]:checked").length;
|
||||
if (spuLen) {
|
||||
var item = JSON.parse($("input[name='article_json'][data-article-id=" + article_id + "]").val());
|
||||
delete item.LAY_INDEX;
|
||||
delete item.LAY_TABLE_INDEX;
|
||||
selectList['article_id_' + article_id] = item;
|
||||
} else {
|
||||
delete selectList['article_id_' + article_id];
|
||||
}
|
||||
dealWithTableSelectedNum();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function selectArticleListener(callback) {
|
||||
articleIdArr = [];
|
||||
for (var key in selectList){
|
||||
articleIdArr.push(selectList[key].article_id);
|
||||
}
|
||||
|
||||
if(articleIdArr.length == 0) {
|
||||
layer.msg('请选择文章');
|
||||
return;
|
||||
}
|
||||
callback({
|
||||
articleIds: articleIdArr,
|
||||
list: selectList
|
||||
});
|
||||
}
|
||||
|
||||
//在表格底部增加了一个容器
|
||||
function dealWithTableSelectedNum() {
|
||||
$(".layui-table-bottom-left-container").html('已选择 '+ Object.keys(selectList).length +' 个文章');
|
||||
}
|
||||
</script>
|
||||
170
app/shop/view/article/drafts.html
Executable file
170
app/shop/view/article/drafts.html
Executable file
@@ -0,0 +1,170 @@
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入文章标题" autocomplete="off" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="article_list" lay-filter="article_list"></table>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="sort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.article_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table, repeat_flag = false;//防重复标识;
|
||||
layui.use('form', function() {
|
||||
var form = layui.form;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#article_list',
|
||||
url: ns.url("shop/article/drafts"),
|
||||
cols: [
|
||||
[ {
|
||||
field: 'article_title',
|
||||
title: '文章标题',
|
||||
width: '30%',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'category_name',
|
||||
title: '文章分类',
|
||||
width: '20%',
|
||||
unresize: 'false'
|
||||
},{
|
||||
field: 'sort',
|
||||
title: '排序',
|
||||
width: '15%',
|
||||
sort : true,
|
||||
unresize: 'false',
|
||||
templet: '#sort'
|
||||
}, {
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
width: '20%',
|
||||
unresize: 'false',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
table.on("sort",function (obj) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
order:obj.field,
|
||||
sort:obj.type
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("shop/article/edit?article_id=" + data.article_id);
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deleteArticle(data.article_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteArticle(article_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除该文章内容吗?',
|
||||
function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/article/delete"),
|
||||
data: {article_id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
layer.close(layer.index - 1);
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
function () {
|
||||
repeat_flag = false;
|
||||
layer.close();
|
||||
});
|
||||
}
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(article_id, event) {
|
||||
var data = $(event).val();
|
||||
if (!new RegExp("^-?[1-9]\\d*$").test(data)) {
|
||||
layer.msg("排序号只能是整数");
|
||||
return;
|
||||
}
|
||||
if(data < 0){
|
||||
layer.msg("排序号必须大于0");
|
||||
return ;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("shop/article/modifySort"),
|
||||
data: {
|
||||
sort: data,
|
||||
article_id: article_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
263
app/shop/view/article/edit.html
Executable file
263
app/shop/view/article/edit.html
Executable file
@@ -0,0 +1,263 @@
|
||||
<style>
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
</style>
|
||||
|
||||
<div class="layui-form form-wrap">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>文章标题:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="article_title" value="{$info.article_title}" lay-verify="required" maxlength="40" autocomplete="off" placeholder="文章标题最多40个字" class="layui-input len-long">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>文章分类:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="category_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $category_list as $v}
|
||||
<option value="{$v['category_id']}" {if $info.category_id == $v.category_id} selected {/if}>{$v['category_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="article_abstract" class="layui-textarea len-long" maxlength="100">{$info.article_abstract}</textarea>
|
||||
</div>
|
||||
<div class="word-aux">文章摘要最多可输入100个字</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">封面</label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block square simple-uploading">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">推荐使用 750x420 像素的图片 最多上传1张</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>文章内容:</label>
|
||||
<div class="layui-input-inline">
|
||||
<script id="editor" type="text/plain" class="special-length" style="height:500px;"></script>
|
||||
<input type="hidden" name="article_content" id="article_content" value="{$info.article_content}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">发布时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show_release_time" value="1" title="显示" {if $info.is_show_release_time == 1} checked {/if}>
|
||||
<input type="radio" name="is_show_release_time" value="0" title="不显示" {if $info.is_show_release_time == 0} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">阅读次数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show_read_num" value="1" title="显示" {if $info.is_show_read_num == 1} checked {/if}>
|
||||
<input type="radio" name="is_show_read_num" value="0" title="不显示" {if $info.is_show_read_num == 0} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">点赞次数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="is_show_dianzan_num" value="1" title="显示" {if $info.is_show_dianzan_num == 1} checked {/if}>
|
||||
<input type="radio" name="is_show_dianzan_num" value="0" title="不显示" {if $info.is_show_dianzan_num == 0} checked {/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">虚拟阅读数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="initial_read_num" value="{$info.initial_read_num}" onchange="detectionNumType(this,'integral')" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">虚拟点赞数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="initial_dianzan_num" value="{$info.initial_dianzan_num}" onchange="detectionNumType(this,'integral')" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" min="0" name="sort" value="{$info.sort}" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="article_id" value="{$info.article_id}" />
|
||||
|
||||
<div class="form-row">
|
||||
{if $info.status == 1}
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backArticleList()">返回</button>
|
||||
{else /}
|
||||
<button class="layui-btn" lay-submit lay-filter="saveDrafts">保存</button>
|
||||
<button class="layui-btn" lay-submit lay-filter="save">立即发布</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="backArticleList()">返回</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.config.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/ueditor.all.js?time=20240614"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="STATIC_EXT/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script>
|
||||
var form,upload,
|
||||
IMAGE_MAX = 9, //最多可以上传多少张图片
|
||||
imageCollection = [], //图片集合
|
||||
selectedGoodsId = [],
|
||||
goods_id=[],
|
||||
repeat_flag = false,
|
||||
coverImg = '{$info.cover_img}';
|
||||
|
||||
initImg();//初始化图片
|
||||
function initImg(){
|
||||
$("#img").html("<img src=" + ns.img(coverImg) + " >");
|
||||
imageCollection = [coverImg];
|
||||
|
||||
}
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
if($("#article_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#article_content").val());
|
||||
});
|
||||
}
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
// 单图上传
|
||||
$("body").off("click", "#img").on("click", "#img", function () {
|
||||
openAlbum(function (data) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(data[0].pic_path);
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}, 1);
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(field)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
field.cover_img = imageCollection.join();
|
||||
|
||||
if (!ue.getContent()){
|
||||
layer.msg("文章内容不能为空");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(field.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
field.article_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("shop/article/edit"),
|
||||
data: field,
|
||||
async: false,
|
||||
success: function(res){
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表', '继续编辑'],
|
||||
yes: function(index, layero){
|
||||
if(field.status == 1){
|
||||
location.hash = ns.hash("shop/article/lists");
|
||||
}else{
|
||||
location.hash = ns.hash("shop/article/drafts");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function backArticleList() {
|
||||
location.hash = ns.hash("shop/article/lists");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
function detectionNumType(el, type) {
|
||||
var value = $(el).val();
|
||||
//大于零 且 不是小数
|
||||
if (value < 0 && type == 'integral')
|
||||
$(el).val(0);
|
||||
else if (type == 'integral')
|
||||
$(el).val(Math.round(value));
|
||||
|
||||
//大于1 且 不是小数
|
||||
if (value < 1 && type == 'positiveInteger')
|
||||
$(el).val(1);
|
||||
else if (type == 'positiveInteger')
|
||||
$(el).val(Math.round(value));
|
||||
//大于零可以是小数
|
||||
if (type == 'positiveNumber') {
|
||||
value = parseFloat(value).toFixed(2);
|
||||
if (value < 0)
|
||||
$(el).val(0);
|
||||
else
|
||||
$(el).val(value);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
188
app/shop/view/article/lists.html
Executable file
188
app/shop/view/article/lists.html
Executable file
@@ -0,0 +1,188 @@
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加文章</button>
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="search_text" placeholder="请输入文章标题" autocomplete="off" class="layui-input">
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
|
||||
<i class="layui-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 列表 -->
|
||||
<table id="article_list" lay-filter="article_list"></table>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="promote">推广</a>
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
<script type="text/html" id="sort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.article_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<!-- 推广 -->
|
||||
{include file="app/shop/view/component/promote_show.html"}
|
||||
|
||||
<script>
|
||||
var form,laytpl,table, repeat_flag = false;//防重复标识;
|
||||
layui.use(['form','laytpl'], function() {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#article_list',
|
||||
url: ns.url("shop/article/lists"),
|
||||
cols: [
|
||||
[ {
|
||||
field: 'article_title',
|
||||
title: '文章标题',
|
||||
width: '30%',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'category_name',
|
||||
title: '文章分类',
|
||||
width: '20%',
|
||||
unresize: 'false'
|
||||
},{
|
||||
field: 'sort',
|
||||
title: '排序',
|
||||
width: '15%',
|
||||
sort : true,
|
||||
unresize: 'false',
|
||||
templet: '#sort'
|
||||
}, {
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
width: '20%',
|
||||
unresize: 'false',
|
||||
templet: function (data) {
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align : 'right'
|
||||
}]
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
table.on("sort",function (obj) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
order:obj.field,
|
||||
sort:obj.type
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'promote': // 推广
|
||||
promote(data);
|
||||
break;
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("shop/article/edit?article_id=" + data.article_id);
|
||||
break;
|
||||
case 'delete': //删除
|
||||
deleteArticle(data.article_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteArticle(article_id) {
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除该文章内容吗?', function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("shop/article/delete"),
|
||||
data: {article_id},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
function () {
|
||||
repeat_flag = false;
|
||||
layer.close();
|
||||
});
|
||||
}
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(article_id, event) {
|
||||
var data = $(event).val();
|
||||
if (!new RegExp("^-?[1-9]\\d*$").test(data)) {
|
||||
layer.msg("排序号只能是整数");
|
||||
return;
|
||||
}
|
||||
if(data < 0){
|
||||
layer.msg("排序号必须大于0");
|
||||
return ;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("shop/article/modifySort"),
|
||||
data: {
|
||||
sort: data,
|
||||
article_id: article_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
listenerHash(); // 刷新页面
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function promote(data){
|
||||
new PromoteShow({
|
||||
url:ns.url("shop/article/promote"),
|
||||
param:{article_id:data.article_id},
|
||||
})
|
||||
}
|
||||
|
||||
function add() {
|
||||
location.hash = ns.hash("shop/article/add");
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user