完善商城快讯商品

This commit is contained in:
wangxiaowei 2024-08-09 00:57:18 +08:00
parent aef6d02190
commit e2fa865ac6
4 changed files with 322 additions and 6 deletions

@ -99,6 +99,7 @@ class MallNews extends AdminBase
return view();
}
// 快讯商品列表
public function shop()
{
if ($this->request->isAjax()) {
@ -109,6 +110,7 @@ class MallNews extends AdminBase
return view('');
}
// 添加快讯商品
public function add_shop()
{
if ($this->request->isAjax()) {
@ -123,4 +125,37 @@ class MallNews extends AdminBase
'max_upload_file' => MallNewsLogic::$MAX_UPLOAD_FILE,
]);
}
// 修改快讯商品
public function audit_shop()
{
if ($this->request->isAjax()) {
$post = $this->request->post();
$result = MallNewsLogic::edit_shop($post);
if ($result['code'] == 1) {
return JsonServer::success('修改成功');
}
return JsonServer::error($result['msg']);
}
$id = $this->request->get('id');
return view('', [
'detail' => MallNewsLogic::shop_detail($id),
'max_upload_file' => MallNewsLogic::$MAX_UPLOAD_FILE,
]);
}
// 删除快讯商品
public function del_shop()
{
if ($this->request->isAjax()) {
$post = $this->request->post();
$result = MallNewsLogic::del_shop($post['id']);
if ($result) {
return JsonServer::success('删除成功');
}
return JsonServer::error('删除失败');
}
}
}

@ -186,11 +186,11 @@ class MallNewsLogic extends Logic
// 快讯商品列表
public static function shop_list($get)
{
$where[] = ['delete_time', '=', 0];
$where[] = ['mns.delete_time', '=', 0];
$model = new MallNewsShop();
$lists = $model->alias('mns')
->join('goods g', 'mns.shop_id = g.id')
->field('mns.id, g.id, g.name, g.image')
->field('mns.id, g.id as gid, g.name, g.image')
->where($where)
->order('mns.create_time desc')
->paginate([
@ -203,6 +203,24 @@ class MallNewsLogic extends Logic
return ['count' => $lists['total'], 'lists' => $lists['data']];
}
// 获取快讯商品详情
public static function shop_detail($id)
{
$result = MallNewsShop::with('files')->where(['id' => $id, 'delete_time' => 0])->find();
if (isset($result['files'])) {
foreach ($result['files'] as &$v) {
if ($result['type'] == 0) {
$v['src'] = UrlServer::getFileUrl('uploads/images/' . $v['src']);
} else {
$v['src'] = Config::get('aliyunoss.domain') . self::$FILE_VIDEO_PATH . '/'. $v['src'];
}
}
}
$result['shop'] = Db::name('goods')->where('id', $result['shop_id'])->find();
return $result;
}
// 创建快讯商品
public static function create_shop($post)
{
@ -222,6 +240,44 @@ class MallNewsLogic extends Logic
return ['code' => 1, 'msg' => '添加成功'];
}
// 修改表单信息
public static function edit_shop($post)
{
$arr['shop_id'] = $post['shop_id'];
$arr['content'] = $post['content'];
$arr['update_time'] = time();
MallNewsShop::where('id', $post['id'])->update($arr);
if (isset($post['mall_news_images'])) {
MallNewsFile::where('mall_news_shop_id', $post['id'])->delete();
foreach ($post['mall_news_images'] as &$v) {
MallNewsFile::create([
'mall_news_shop_id' => $post['id'],
'src' => basename($v)
]);
}
}
return ['code' => 1, 'msg' => '修改成功'];
}
// 删除文章
public static function del_shop($id)
{
$result = MallNewsShop::where([
'id' => $id
])->update([
'delete_time' => time(),
]);
if ($result) {
return true;
}
return false;
}
private static function checkForm(&$form)
{
if (empty($form)) {

@ -0,0 +1,225 @@
{layout name="layout2" /}
<style>
.layui-form {padding: 20px 30px;background-color: #ffffff;}
.layui-form-item .layui-form-label { width: 95px; }
.layui-form-item .layui-input-inline { width: 240px; }
.layui-form-item .map-container{ width: 600px; height: 400px; margin-left: 100px; margin-top: 20px; }
#video-block {position: relative; width: 700px;height: 300px}
.del-video-btn {
visibility: hidden;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
z-index: 100;
top: -11px;
right: -9px;
width: 20px;
height: 20px;
cursor: pointer;
font-size: 14px;
color: #FFFFFF;
border-radius: 50%;
background: hsla(0, 0%, 60%, .6)
}
.select-goods {margin-left: 10px}
</style>
<div class="layui-card layui-form">
<div class="layui-card-body">
<input type="hidden" value="{$detail.id}" name="id">
<div id="mall-image" class="layui-form-item">
<label class="layui-form-label">图片:</label>
<div class="layui-input-block" id="goodsImageContainer">
<div class="like-upload-image">
<div class="upload-image-elem"><a class="add-upload-image" id="mallNewImage"> + 添加图片</a></div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">商品:</label>
<div class="layui-input-inline" style="display: flex">
<div id="shop_name">{$detail.shop ? $detail.shop['name'] : ''}</div>
<input type="hidden" id="shop_id" name="shop_id" style="margin-right: 10px;" value="{$detail.shop_id}">
<a class="layui-btn layui-btn-normal select-goods">选择商品</a>
</div>
</div>
<div class="layui-form-item">
<label for="content" class="layui-form-label">文章详情:</label>
<div class="layui-input-block">
<textarea name="content" id="content" lay-verify="content">{$detail.content}</textarea>
</div>
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="addSubmit" id="addSubmit" value="确认">
</div>
</div>
<script src="__PUBLIC__/static/common/js/area.js"></script>
<script>
var detail= {$detail|raw|default=''};
layui.config({
base: "/static/lib/"
}).extend({
likeedit: "likeedit/likeedit",
likeArea: "likeArea/likeArea",
txMap: "likeMap/txMap"
}).use(["form", "laydate", "likeArea", "txMap", 'likeedit', 'upload', 'element'], function(){
var $ = layui.$;
var form = layui.form;
var laydate = layui.laydate;
var likeedit = layui.likeedit;
var likeupload = layui.upload;
//------------------------------------------富文本编辑器 begin --------------------------------
var content = likeedit.build("content", {
uploadImage: {
url: '{:url("file/lists")}?type=10'
}
});
form.verify({
content: function() {
likeedit.sync(content)
}
});
//------------------------------------------富文本编辑器 end --------------------------------
//文章图片
if(detail['files']){
var html = '';
for(j = 0; j < detail['files'].length; j++) {
html = html +
'<div class="upload-image-div">' +
'<img src="' + detail['files'][j].src + '" alt="img" />' +
'<input type="hidden" name="mall_news_images[]" value="' + detail['files'][j].src + '">' +
'<div class="del-upload-btn">x</div>' +
'</div>';
}
html = html + '<div class="upload-image-elem"><a class="add-upload-image" id="mallNewImage"> + 添加图片</a></div>';
$('#goodsImageContainer').html(html);
}
// 视频上传
if (detail['files'] && detail['type'] === 1) {
$("#upload-video-block").hide()
$("#video-block").show()
$("#mallVideo").attr('src', detail['files'][0]['src'])
$("input[name='video_file']").val(detail['files'][0]['src'])
}
// 切换文章类型
form.on('radio(type)', function(data){
if(data.value == 0){
$("#mall-image").show()
$("#mall-video").hide()
} else {
$("#mall-image").hide()
$("#mall-video").show()
}
});
laydate.render({type:"datetime", elem:"#expire_time", trigger:"click",min:0});
like.delUpload();
$(document).on("click", "#mallNewImage", function () {
like.imageUpload({
limit: {$max_upload_file},
field: "mall_news_images[]",
that: $(this)
});
});
// 视频上传
likeupload
var uploadInst = likeupload.render({
elem: '.add-upload-video' //绑定元素
,url: "{:url('MallNews/uploadVideo')}" //上传接口
,accept: 'video'
,exts: "mp4"
,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
console.log(222)
layer.load(); //上传loading
}
,done: function(res, index, upload){
if (res.code === 1) {
console.log(res)
$("#upload-video-block").hide()
$("#video-block").show()
$("#mallVideo").attr('src', res.data.file)
$("#mall_news_images").val(res.data.file)
$("input[name='video_file']").val(res.data.file)
} else {
layer.msg('上传错误');
return false;
}
layer.closeAll('loading'); //关闭loading
}
,error: function(index, upload){
layer.closeAll('loading'); //关闭loading
}
});
// 删除视频
$(document).on("click", ".del-video-btn", function (e) {
layer.confirm("是否删除该视频?", function(index) {
const videoFile = $("#mallVideo").attr('src')
like.ajax({
url: '{:url("mallNews/delVideo")}',
data: {videoFile},
type: "post",
success: function (res) {}
});
$("#upload-video-block").show()
$("#video-block").hide()
$("#mallVideo").attr('src', '')
layer.close(index);
})
});
// 选择商品
$(document).on('click','.select-goods',function () {
layer.open({
type: 2
,title: '选择商品'
,content: '{:url("mallNews/goods")}'
,area: ['90%', '90%']
,btn: ['确认', '取消']
,yes: function(index, layero){
var data = window["layui-layer-iframe" + index].callbackdata();
$('#shop_name').html(data[0].name)
$('#shop_id').val(data[0].id)
}
})
})
form.verify({
title: function (value, item) {
if (!value) {
switchTab($(item).attr("switch-tab"));
return "请填写标题";
}
},
desc: function (value, item) {
if (!value) {
switchTab($(item).attr("switch-tab"));
return "请填写文章概述";
}
},
});
function switchTab(number) {
$('.layui-tab-card .layui-tab-title li').removeClass('layui-this');
$('.layui-tab-content .layui-tab-item').removeClass('layui-show');
$('.layui-tab-card .layui-tab-title li').eq(number).addClass('layui-this');
$('.layui-tab-content .layui-tab-item').eq(number).addClass('layui-show');
}
})
</script>

@ -128,7 +128,7 @@
layer.open({
type: 2
, title: '编辑'
, content: '{:url("mallNews/audit")}?id=' + obj.data.id
, content: '{:url("mallNews/audit_shop")}?id=' + obj.data.id
, area: ['90%', '90%']
,btn: ['确定', '取消']
, yes: function (index, layero) {
@ -138,7 +138,7 @@
iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
var field = data.field;
like.ajax({
url: '{:url("mallNews/audit")}',
url: '{:url("mallNews/audit_shop")}',
data: field,
type: "post",
success: function (res) {
@ -156,9 +156,9 @@
},
// 删除
del: function (obj) {
layer.confirm('确定要删除该文章吗?', function (index) {
layer.confirm('确定要删除该快讯商品吗?', function (index) {
like.ajax({
url: '{:url("mallNews/del")}',
url: '{:url("mallNews/del_shop")}',
data: {id: obj.data.id},
type: "post",
success: function (res) {