初始上传
This commit is contained in:
146
addon/notes/api/controller/Notes.php
Executable file
146
addon/notes/api/controller/Notes.php
Executable file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
/**
|
||||
* Index.php
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2015-2025 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
* @author : niuteam
|
||||
* @date : 2022.8.8
|
||||
* @version : v5.0.0.1
|
||||
*/
|
||||
|
||||
namespace addon\notes\api\controller;
|
||||
|
||||
use addon\notes\model\Group;
|
||||
use app\api\controller\BaseApi;
|
||||
use addon\notes\model\Notes as NotesModel;
|
||||
use addon\notes\model\Record as RecordModel;
|
||||
|
||||
class Notes extends BaseApi
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取笔记分组
|
||||
*/
|
||||
public function group()
|
||||
{
|
||||
$model = new Group();
|
||||
$list = $model->getNotesGroupList([['site_id', '=', $this->site_id]], 'group_id,group_name,notes_num,release_num', 'sort asc');
|
||||
return $this->response($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文章分页列表
|
||||
*/
|
||||
public function page()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
$page = $this->params['page'] ?? 1;
|
||||
$page_size = $this->params['page_size'] ?? PAGE_LIST_ROWS;
|
||||
$group_id = $this->params['group_id'] ?? '';
|
||||
$note_id_arr = $this->params['note_id_arr'] ?? '';
|
||||
|
||||
$condition[] = ['pn.site_id', '=', $this->site_id];
|
||||
if ($group_id) {
|
||||
$condition[] = ['pn.group_id', '=', $group_id];
|
||||
}
|
||||
|
||||
if(!empty($note_id_arr)){
|
||||
$condition[] = ['pn.note_id', 'in', $note_id_arr];
|
||||
}
|
||||
$note_model = new NotesModel();
|
||||
$list_result = $note_model->getNotesPageList($condition, $page, $page_size);
|
||||
if($token['code'] >= 0){
|
||||
$list = $list_result['data']['list'];
|
||||
|
||||
$record_model = new RecordModel();
|
||||
foreach($list as $k=>$v){
|
||||
//获取用户是否点赞
|
||||
$is_dianzan = $record_model->getIsDianzan($v['note_id'],$this->member_id);
|
||||
$list[$k]['is_dianzan'] = $is_dianzan['data'];
|
||||
}
|
||||
$list_result['data']['list'] = $list;
|
||||
}
|
||||
return $this->response($list_result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文章列表
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
$num = $this->params['num'] ?? 0;
|
||||
$group_id = $this->params['group_id'] ?? '';
|
||||
$note_id_arr = $this->params['note_id_arr'] ?? '';
|
||||
|
||||
$condition[] = ['pn.site_id', '=', $this->site_id];
|
||||
if ($group_id) {
|
||||
$condition[] = ['pn.group_id', '=', $group_id];
|
||||
}
|
||||
|
||||
if(!empty($note_id_arr)){
|
||||
$condition[] = ['pn.note_id', 'in', $note_id_arr];
|
||||
}
|
||||
|
||||
$field = 'pn.*,png.group_name';
|
||||
$alias = 'pn';
|
||||
$join = [
|
||||
[
|
||||
'notes_group png',
|
||||
'png.group_id = pn.group_id',
|
||||
'left'
|
||||
]
|
||||
];
|
||||
|
||||
$note_model = new NotesModel();
|
||||
$list_result = $note_model->getNotesList($condition,$field,'pn.sort asc', $num, $alias, $join);
|
||||
if($token['code'] >= 0){
|
||||
$list = $list_result['data'];
|
||||
$record_model = new RecordModel();
|
||||
$note_type = $note_model->getNoteType();
|
||||
$note_type = array_column($note_type, 'name', 'type');
|
||||
foreach($list as $k=>$v){
|
||||
//获取用户是否点赞
|
||||
$is_dianzan = $record_model->getIsDianzan($v['note_id'],$this->member_id);
|
||||
$list[$k]['is_dianzan'] = $is_dianzan['data'];
|
||||
$list[$k]['note_type_name'] = $note_type[$v['note_type']];
|
||||
}
|
||||
$list_result['data'] = $list;
|
||||
}
|
||||
return $this->response($list_result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 文章详情
|
||||
*/
|
||||
public function detail()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
|
||||
$note_id = $this->params['note_id'] ?? '';
|
||||
if (empty($note_id)) {
|
||||
return $this->response($this->error('', 'REQUEST_NOTE_ID'));
|
||||
}
|
||||
$condition = [
|
||||
['site_id', '=', $this->site_id],
|
||||
['note_id', '=', $note_id]
|
||||
];
|
||||
|
||||
$note_model = new NotesModel();
|
||||
$info_result = $note_model->getNotesDetailInfo($condition, '*', 2);
|
||||
if($token['code'] >= 0){
|
||||
$info = $info_result['data'];
|
||||
$record_model = new RecordModel();
|
||||
$is_dianzan = $record_model->getIsDianzan($info['note_id'],$this->member_id);
|
||||
$info['is_dianzan'] = $is_dianzan['data'];
|
||||
$info_result['data'] = $info;
|
||||
}
|
||||
return $this->response($info_result);
|
||||
}
|
||||
|
||||
}
|
||||
75
addon/notes/api/controller/Record.php
Executable file
75
addon/notes/api/controller/Record.php
Executable file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace addon\notes\api\controller;
|
||||
|
||||
use app\api\controller\BaseApi;
|
||||
use addon\notes\model\Record as RecordModel;
|
||||
|
||||
/**
|
||||
* 文章点赞
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class Record extends BaseApi
|
||||
{
|
||||
/**
|
||||
* 添加点赞
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token['code'] < 0) return $this->response($token);
|
||||
|
||||
$note_id = $this->params['note_id'] ?? 0;
|
||||
|
||||
if (empty($note_id)) {
|
||||
return $this->response($this->error('', 'REQUEST_NOTE_ID'));
|
||||
}
|
||||
|
||||
$record_model = new RecordModel();
|
||||
$data = [
|
||||
'member_id' => $token['data']['member_id'],
|
||||
'note_id' => $note_id
|
||||
];
|
||||
$res = $record_model->addRecord($data);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除点赞
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token['code'] < 0) return $this->response($token);
|
||||
|
||||
$note_id = $this->params['note_id'] ?? 0;
|
||||
if (empty($note_id)) {
|
||||
return $this->response($this->error('', 'REQUEST_NOTE_ID'));
|
||||
}
|
||||
$record_model = new RecordModel();
|
||||
$res = $record_model->deleteRecord($token['data']['member_id'], $note_id);
|
||||
return $this->response($res);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否点赞
|
||||
* @return string
|
||||
*/
|
||||
public function isDianzan()
|
||||
{
|
||||
$token = $this->checkToken();
|
||||
if ($token['code'] < 0) return $this->response($token);
|
||||
|
||||
$note_id = $this->params['note_id'] ?? 0;
|
||||
if (empty($note_id)) {
|
||||
return $this->response($this->error('', 'REQUEST_NOTE_ID'));
|
||||
}
|
||||
|
||||
$record_model = new RecordModel();
|
||||
$res = $record_model->getIsDianzan($note_id, $token['data']['member_id']);
|
||||
return $this->response($res);
|
||||
}
|
||||
|
||||
}
|
||||
21
addon/notes/component/controller/Notes.php
Executable file
21
addon/notes/component/controller/Notes.php
Executable file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace addon\notes\component\controller;
|
||||
|
||||
use app\component\controller\BaseDiyView;
|
||||
|
||||
/**
|
||||
* 店铺笔记·组件
|
||||
*
|
||||
*/
|
||||
class Notes extends BaseDiyView
|
||||
{
|
||||
|
||||
/**
|
||||
* 设计界面
|
||||
*/
|
||||
public function design()
|
||||
{
|
||||
return $this->fetch("notes/design.html");
|
||||
}
|
||||
}
|
||||
51
addon/notes/component/view/notes/css/design.css
Executable file
51
addon/notes/component/view/notes/css/design.css
Executable file
@@ -0,0 +1,51 @@
|
||||
@CHARSET "UTF-8";
|
||||
.component-notes .goods-head {display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-pack: justify;-webkit-justify-content: space-between;justify-content: space-between;-webkit-box-align: center;-webkit-align-items: center;align-items: center;margin-bottom: 10px;padding: 10px;}
|
||||
.component-notes .goods-head .title-wrap {display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-align: center;-webkit-align-items: center;align-items: center;width: calc(100% - 75px);}
|
||||
.component-notes .goods-head .title-wrap .name {font-size: 14px;margin-right: 8px; font-weight: 600;}
|
||||
.component-notes .goods-head .more {display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-align: center;-webkit-align-items: center;align-items: center;justify-content: flex-end;}
|
||||
.component-notes .goods-head .more {font-size: 12px;width: 75px;}
|
||||
.component-notes .goods-head .left-icon, .component-notes .goods-head .right-icon {display: inline-block; height: 20px; line-height: 20px; flex-shrink: 0;}
|
||||
.component-notes .goods-head .iconfont {flex-shrink: 0;}
|
||||
.component-notes .goods-head .more span, .component-notes .goods-head .title-wrap .name {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.component-notes .goods-head .more span {text-align: right;}
|
||||
.component-notes .goods-head .more i {font-size: 12px; margin-left: 2px;}
|
||||
.component-notes .goods-head .title-wrap .name {max-width: 180px;}
|
||||
.component-notes .goods-head .left-icon img, .component-notes .goods-head .right-icon img {max-height: 20px;vertical-align: top;}
|
||||
.component-notes .goods-head .left-icon img {margin-right: 5px;}
|
||||
.component-notes .goods-head .right-icon img {margin-left: 5px;}
|
||||
.component-notes .goods-head .time {font-size: 12px; color: #777777;}
|
||||
.component-notes .goods-head .time span {display: inline-block; width: 18px; height: 18px; line-height: 18px; text-align: center; background-color: #383838; color: #FFFFFF; border-radius: 3px; margin: 0 3px;}
|
||||
.component-notes .goods-head .time .second {background-color: #FF4544;}
|
||||
|
||||
/* 风格一 */
|
||||
.component-notes .list-wrap {width: 100%;}
|
||||
.component-notes .list-wrap .item {width: 100%; height: 100%; border-radius: 5px; overflow: hidden; margin-top: 15px; box-sizing: border-box; -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0, .1); -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, .1); box-shadow: 1px 2px 4px rgba(0, 0, 0, .1);}
|
||||
.component-notes .list-wrap .item:first-child{margin-top: 0;}
|
||||
.component-notes .list-wrap .item .img-wrap {width: 100%; height: 130px; padding: 0 10px; box-sizing: border-box;}
|
||||
.component-notes .list-wrap .item .img-wrap img {width: 100%; height: 100%; object-fit: cover; padding: 0; margin: 0;}
|
||||
.component-notes .list-wrap .item .img-wrap-boxs {display: flex; justify-content: space-between; flex-wrap: wrap; height: auto;}
|
||||
.component-notes .list-wrap .item .img-wrap-boxs img {display: inline-block; width: 31%; height: 100px; margin-top: 10px;}
|
||||
.component-notes .list-wrap .item .img-wrap-boxs img:nth-child(-n+3) {margin-top: 0;}
|
||||
.component-notes .list-wrap .item .item-con {padding: 10px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-title {font-size: 16px; font-weight: 600; line-height: 22px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-highlights-list {margin-top: 5px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-highlights-list span {display: inline-block; color: #FFFFFF; font-size: 12px; line-height: 18px; padding: 0 5px; border-radius: 2px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-intro {margin-top: 5px; font-size: 14px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-intro span {float: left; margin-right: 7px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-info {display: flex; justify-content: space-between; align-items: center; margin-top: 3px;}
|
||||
.component-notes .list-wrap .item .item-con .notes-info span {color: #969799; font-size: 12px; display: flex; align-items: center;}
|
||||
.component-notes .list-wrap .item .item-con .notes-info span img {width: 11px; margin-right: 3px;}
|
||||
.component-notes .list-wrap .item .new-price {font-size: 14px;display: block;}
|
||||
.component-notes .list-wrap .item .old-price {font-size: 12px;color: #898989;text-decoration: line-through;}
|
||||
.component-notes .list-wrap .item .good-name {margin-top: 5px;}
|
||||
.component-notes .list-wrap .item .good-desc {color: #898989; font-size: 12px;}
|
||||
.component-notes .list-wrap .item .good-stock {color: #898989; font-size: 12px;}
|
||||
.component-notes .goods-show-box .layui-input-inline {padding-left: 20px;}
|
||||
|
||||
/* 风格 */
|
||||
.component-notes .notes-list-style{display: none;}
|
||||
.style-list-con-notes{display: flex;flex-wrap: wrap;}
|
||||
.style-list-con-notes .style-li-notes{width: 32%;height: 300px;line-height: 300px;margin-right: 2%;margin-bottom: 15px;cursor: pointer;border: 1px solid #ededed;background: #f7f8fa;box-sizing: border-box;}
|
||||
.style-list-con-notes .style-li-notes:nth-child(3n){margin-right: 0;}
|
||||
.style-list-con-notes .style-li-notes img{width: 100%;}
|
||||
.layui-layer-page .layui-layer-content{overflow: auto !important;}
|
||||
196
addon/notes/component/view/notes/design.html
Executable file
196
addon/notes/component/view/notes/design.html
Executable file
@@ -0,0 +1,196 @@
|
||||
<nc-component :data="data[index]" class="component-notes">
|
||||
|
||||
<!-- 预览 -->
|
||||
<template slot="preview">
|
||||
<div class="preview-box">
|
||||
<div class="notes-list-preview" :class="'text-title-'+ nc.style" :style="{ backgroundColor : nc.componentBgColor }">
|
||||
<div class="goods-head">
|
||||
<div class="title-wrap">
|
||||
<span class="name" :style="{color: nc.titleTextColor || 'rgba(0,0,0,0)'}">{{nc.title}}</span>
|
||||
</div>
|
||||
<div class="more red-color" v-if="nc.more">
|
||||
<span :style="{color: nc.moreTextColor || 'rgba(0,0,0,0)'}">{{nc.more}}</span>
|
||||
<i class="iconfont iconyoujiantou" :style="{color: nc.moreTextColor || 'rgba(0,0,0,0)'}"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list-wrap" v-if="nc.style==1">
|
||||
<div class="item" :style="{
|
||||
backgroundColor : nc.contentBgColor,
|
||||
borderTopLeftRadius: (nc.elementAngle == 'round' ? nc.topElementAroundRadius + 'px' : 0),
|
||||
borderTopRightRadius: (nc.elementAngle == 'round' ? nc.topElementAroundRadius + 'px' : 0),
|
||||
borderBottomLeftRadius: (nc.elementAngle == 'round' ? nc.bottomElementAroundRadius + 'px' : 0),
|
||||
borderBottomRightRadius: (nc.elementAngle == 'round' ? nc.bottomElementAroundRadius + 'px' : 0)
|
||||
}">
|
||||
<div class="item-con">
|
||||
<p class="notes-title multi-line-hiding">这里显示笔记标题最多显示2行</p>
|
||||
<div class="notes-highlights-list" v-show="nc.notesLabel == 1">
|
||||
<span class="bg-color">亮点</span>
|
||||
</div>
|
||||
<div class="notes-intro">
|
||||
<span class="notes-label text-color">#掌柜说#</span>
|
||||
<p>笔记内容介绍</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="img-wrap">
|
||||
<img :src="changeImgUrl('public/static/img/default_img/figure.png')" />
|
||||
</div>
|
||||
<div class="item-con">
|
||||
<div class="notes-info">
|
||||
<div class="notes-num"><span v-show="nc.uploadTime == 1">2020-01-01</span></div>
|
||||
<div class="notes-num"><span v-show="nc.readNum == 1">阅读 1000</span></div>
|
||||
<!-- <div class="notes-num"><span v-show="nc.thumbsUpNum == 1"><img src="{$resource_path}/img/thumbs_up.png" /><span>1000</span></span></div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item" :style="{
|
||||
backgroundColor : nc.contentBgColor,
|
||||
borderTopLeftRadius: (nc.elementAngle == 'round' ? nc.topElementAroundRadius + 'px' : 0),
|
||||
borderTopRightRadius: (nc.elementAngle == 'round' ? nc.topElementAroundRadius + 'px' : 0),
|
||||
borderBottomLeftRadius: (nc.elementAngle == 'round' ? nc.bottomElementAroundRadius + 'px' : 0),
|
||||
borderBottomRightRadius: (nc.elementAngle == 'round' ? nc.bottomElementAroundRadius + 'px' : 0)
|
||||
}">
|
||||
<div class="item-con">
|
||||
<p class="notes-title multi-line-hiding">这里显示笔记标题最多显示2行</p>
|
||||
<div class="notes-highlights-list" v-show="nc.notesLabel == 1">
|
||||
<span class="bg-color">亮点</span>
|
||||
</div>
|
||||
<div class="notes-intro">
|
||||
<span class="notes-label text-color">#掌柜说#</span>
|
||||
<p>笔记内容介绍</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="img-wrap img-wrap-boxs">
|
||||
<img :src="changeImgUrl('public/static/img/default_img/square.png')" />
|
||||
<img :src="changeImgUrl('public/static/img/default_img/square.png')" />
|
||||
<img :src="changeImgUrl('public/static/img/default_img/square.png')" />
|
||||
</div>
|
||||
<div class="item-con">
|
||||
<div class="notes-info">
|
||||
<div class="notes-num"><span v-show="nc.uploadTime == 1">2020-01-01</span></div>
|
||||
<div class="notes-num"><span v-show="nc.readNum == 1">阅读 1000</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 内容编辑 -->
|
||||
<template slot="edit-content">
|
||||
<template v-if="nc.lazyLoad">
|
||||
<notes-set></notes-set>
|
||||
<div class="template-edit-title">
|
||||
<h3>风格选择</h3>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">风格</label>
|
||||
<div class="layui-input-block" v-if="nc.tempData.methods">
|
||||
<div class="text-color selected-style" @click="nc.tempData.methods.selectStyle()">
|
||||
<span>{{nc.styleName}}</span>
|
||||
<i class="layui-icon layui-icon-right"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>笔记数据</h3>
|
||||
<div class="layui-form-item" v-if="nc.tempData.goodsSources">
|
||||
<label class="layui-form-label sm">数据来源</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="source-selected">
|
||||
<div class="source">{{ nc.tempData.goodsSources[nc.sources].text }}</div>
|
||||
<div v-for="(item,sourcesKey) in nc.tempData.goodsSources" :key="sourcesKey" class="source-item" :title="item.text" @click="nc.sources=sourcesKey" :class="{ 'text-color border-color' : (nc.sources == sourcesKey) }">
|
||||
<i class='iconfont' :class='item.icon'></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<slide v-if="nc.sources != 'diy'" :data="{ field : 'count', label : '显示数量', max: 9, min: 1 }"></slide>
|
||||
<div class="layui-form-item" v-if="nc.sources == 'diy'">
|
||||
<label class="layui-form-label sm">手动选择</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="selected-style" @click="nc.tempData.methods.addNotes()">
|
||||
<span v-if="nc.noteId.length == 0">请选择</span>
|
||||
<span v-if="nc.noteId.length > 0" class="text-color">已选{{ nc.noteId.length }}个</span>
|
||||
<i class="iconfont iconyoujiantou"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>顶部标题</h3>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">标题</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name='title' v-model="nc.title" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label sm">文本内容</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name='title' v-model="nc.more" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="template-edit-title">
|
||||
<h3>显示内容</h3>
|
||||
<div class="layui-form-item" v-for="item in nc.tempData.showContentList">
|
||||
<label class="layui-form-label sm">{{item.title}}</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-unselect layui-form-checkbox" lay-skin="primary" @click="nc.tempData.methods.changeStatus(item.name)" :class="{ 'layui-form-checked' : nc[item.name] }">
|
||||
<span>{{ nc[item.name] ? '显示' : '隐藏' }}</span>
|
||||
<i class="layui-icon layui-icon-ok"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 弹框 -->
|
||||
<article class="notes-list-style">
|
||||
<div class="style-list-notes layui-form">
|
||||
<div class="style-list-con-notes">
|
||||
<div class="style-li-notes" :class="{'selected border-color': nc.style == 1}">
|
||||
<img src="{$resource_path}/img/notes_style_1.png" />
|
||||
<span class="layui-hide">风格一</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="style">
|
||||
<input type="hidden" name="style_name">
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</template>
|
||||
|
||||
<!-- 样式编辑 -->
|
||||
<template slot="edit-style">
|
||||
<div class="template-edit-title">
|
||||
<h3>顶部标题</h3>
|
||||
<color :data="{ field : 'titleTextColor', label : '标题颜色', defaultColor : '#333333' }"></color>
|
||||
<color :data="{ field : 'moreTextColor', defaultColor: '#858585' }"></color>
|
||||
</div>
|
||||
<div class="template-edit-title">
|
||||
<h3>笔记内容</h3>
|
||||
<color :data="{ field : 'contentBgColor', 'label' : '背景颜色' , defaultColor : '#FFFFFF'}"></color>
|
||||
|
||||
<slide v-show="nc.elementAngle == 'round'" :data="{ field : 'topElementAroundRadius', label : '上圆角', max : 50 }"></slide>
|
||||
<slide v-show="nc.elementAngle == 'round'" :data="{ field : 'bottomElementAroundRadius', label : '下圆角', max : 50 }"></slide>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 资源 -->
|
||||
<template slot="resource">
|
||||
<js>
|
||||
var notesResourcePath = "{$resource_path}"; // http路径
|
||||
var notesRelativePath = "{$relative_path}"; // 相对路径
|
||||
</js>
|
||||
<js src="{$resource_path}/js/design.js"></js>
|
||||
<css src="{$resource_path}/css/design.css"></css>
|
||||
</template>
|
||||
|
||||
</nc-component>
|
||||
BIN
addon/notes/component/view/notes/img/notes_style_1.png
Executable file
BIN
addon/notes/component/view/notes/img/notes_style_1.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
addon/notes/component/view/notes/img/thumbs_up.png
Executable file
BIN
addon/notes/component/view/notes/img/thumbs_up.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
90
addon/notes/component/view/notes/js/design.js
Executable file
90
addon/notes/component/view/notes/js/design.js
Executable file
@@ -0,0 +1,90 @@
|
||||
var notesSetHtml = '<div style="display:none;"></div>';
|
||||
|
||||
Vue.component("notes-set", {
|
||||
template: notesSetHtml,
|
||||
data: function () {
|
||||
return {
|
||||
data: this.$parent.data,
|
||||
goodsSources: {
|
||||
initial: {
|
||||
text: "默认",
|
||||
icon: "iconmofang"
|
||||
},
|
||||
diy: {
|
||||
text: "手动选择",
|
||||
icon: "iconshoudongxuanze"
|
||||
},
|
||||
},
|
||||
showContentList: [
|
||||
{
|
||||
title: "亮点",
|
||||
name: "notesLabel"
|
||||
},
|
||||
{
|
||||
title: "阅读数",
|
||||
name: "readNum"
|
||||
},
|
||||
{
|
||||
title: "更新时间",
|
||||
name: "uploadTime"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
if (!this.$parent.data.verify) this.$parent.data.verify = [];
|
||||
this.$parent.data.verify.push(this.verify);//加载验证方法
|
||||
|
||||
this.$parent.data.ignore = ['textColor', 'componentAngle', 'elementBgColor']; //加载忽略内容 -- 其他设置中的属性设置
|
||||
this.$parent.data.ignoreLoad = true; // 等待忽略数组赋值后加载
|
||||
|
||||
// 组件所需的临时数据
|
||||
this.$parent.data.tempData = {
|
||||
goodsSources: this.goodsSources,
|
||||
showContentList: this.showContentList,
|
||||
methods: {
|
||||
selectStyle: this.selectStyle,
|
||||
addNotes: this.addNotes,
|
||||
changeStatus: this.changeStatus
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
changeStatus: function (field) {
|
||||
this.$parent.data[field] = this.$parent.data[field] ? 0 : 1;
|
||||
},
|
||||
addNotes: function () {
|
||||
var self = this;
|
||||
notesSelect(function (res) {
|
||||
self.$parent.data.noteId = [];
|
||||
for (var i = 0; i < res.length; i++) {
|
||||
self.$parent.data.noteId.push(res[i]);
|
||||
}
|
||||
}, self.$parent.data.noteId, {});
|
||||
},
|
||||
selectStyle: function () {
|
||||
var self = this;
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '风格选择',
|
||||
area: ['930px', '630px'],
|
||||
btn: ['确定', '返回'],
|
||||
content: $(".draggable-element[data-index='" + self.data.index + "'] .edit-attribute .notes-list-style").html(),
|
||||
success: function (layero, index) {
|
||||
$(".layui-layer-content input[name='style']").val(self.data.style);
|
||||
$(".layui-layer-content input[name='style_name']").val(self.data.styleName);
|
||||
$("body").off("click", ".layui-layer-content .style-list-con-notes .style-li-notes").on("click", ".layui-layer-content .style-list-con-notes .style-li-notes", function () {
|
||||
$(this).addClass("selected border-color").siblings().removeClass("selected border-color");
|
||||
$(".layui-layer-content input[name='style']").val($(this).index() + 1);
|
||||
$(".layui-layer-content input[name='style_name']").val($(this).find("span").text());
|
||||
});
|
||||
},
|
||||
yes: function (index, layero) {
|
||||
self.data.style = $(".layui-layer-content input[name='style']").val();
|
||||
self.data.styleName = $(".layui-layer-content input[name='style_name']").val();
|
||||
layer.closeAll()
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
68
addon/notes/config/diy_view.php
Executable file
68
addon/notes/config/diy_view.php
Executable file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
return [
|
||||
|
||||
// 自定义模板页面类型,格式:[ 'title' => '页面类型名称', 'name' => '页面标识', 'path' => '页面路径', 'value' => '页面数据,json格式' ]
|
||||
'template' => [],
|
||||
|
||||
// 后台自定义组件——装修
|
||||
'util' => [
|
||||
[
|
||||
'name' => 'Notes',
|
||||
'title' => '店铺笔记',
|
||||
'type' => 'SYSTEM',
|
||||
'value' => '{"style":1,"styleName": "风格一","sources":"initial","noteId":[],"count":"3","notesLabel":1,"readNum":1,"uploadTime":1,"titleTextColor":"#333333","moreTextColor":"#858585","title":"店铺笔记","more":"查看更多","contentBgColor":"#FFFFFF"}',
|
||||
'sort' => '10050',
|
||||
'support_diy_view' => '',
|
||||
'max_count' => 1,
|
||||
'icon' => 'iconfont iconbiji',
|
||||
]
|
||||
],
|
||||
|
||||
// 自定义页面路径
|
||||
'link' => [
|
||||
[
|
||||
'name' => 'NOTES',
|
||||
'title' => '店铺笔记',
|
||||
'parent' => 'MARKETING_LINK',
|
||||
'wap_url' => '',
|
||||
'web_url' => '',
|
||||
'sort' => 0,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'NOTES_PREFECTURE',
|
||||
'title' => '店铺笔记',
|
||||
'wap_url' => '/pages_tool/store_notes/note_list',
|
||||
'web_url' => '',
|
||||
'sort' => 0
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
|
||||
// 自定义图标库
|
||||
'icon_library' => [],
|
||||
|
||||
// uni-app 组件,格式:[ 'name' => '组件名称/文件夹名称', 'path' => '文件路径/目录路径' ],多个逗号隔开,自定义组件名称前缀必须是diy-,也可以引用第三方组件
|
||||
'component' => [],
|
||||
|
||||
// uni-app 页面,多个逗号隔开
|
||||
'pages' => [],
|
||||
|
||||
// 模板信息,格式:'title' => '模板名称', 'name' => '模板标识', 'cover' => '模板封面图', 'preview' => '模板预览图', 'desc' => '模板描述'
|
||||
'info' => [],
|
||||
|
||||
// 主题风格配色,格式可以自由定义扩展,【在uni-app中通过:this.themeStyle... 获取定义的颜色字段,例如:this.themeStyle.main_color】
|
||||
'theme' => [],
|
||||
|
||||
// 自定义页面数据,格式:[ 'title' => '页面名称', 'name' => "页面标识", 'value' => [页面数据,json格式] ]
|
||||
'data' => []
|
||||
];
|
||||
21
addon/notes/config/event.php
Executable file
21
addon/notes/config/event.php
Executable file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
// 事件定义文件
|
||||
return [
|
||||
'bind' => [
|
||||
|
||||
],
|
||||
|
||||
'listen' => [
|
||||
//展示活动
|
||||
'ShowPromotion' => [
|
||||
'addon\notes\event\ShowPromotion',
|
||||
],
|
||||
|
||||
'PromotionType' => [
|
||||
'addon\notes\event\PromotionType',
|
||||
]
|
||||
],
|
||||
|
||||
'subscribe' => [
|
||||
],
|
||||
];
|
||||
20
addon/notes/config/info.php
Executable file
20
addon/notes/config/info.php
Executable file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
return [
|
||||
'name' => 'notes',
|
||||
'title' => '店铺笔记',
|
||||
'description' => '店铺笔记管理活动',
|
||||
'type' => 'promotion', //插件类型 system :系统插件(自动安装), promotion:扩展营销插件 tool:工具插件
|
||||
'status' => 1,
|
||||
'author' => '',
|
||||
'version' => '5.5.3',
|
||||
'version_no' => '553250709001',
|
||||
'content' => '',
|
||||
];
|
||||
110
addon/notes/config/menu_shop.php
Executable file
110
addon/notes/config/menu_shop.php
Executable file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | 店铺端菜单设置
|
||||
// +----------------------------------------------------------------------
|
||||
return [
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES',
|
||||
'title' => '店铺笔记',
|
||||
'url' => 'notes://shop/notes/lists',
|
||||
'parent' => 'PROMOTION_TOOL',
|
||||
'picture' => 'addon/notes/shop/view/public/img/distribution_new.png',
|
||||
'picture_selected' => 'addon/notes/shop/view/public/img/distribution_select.png',
|
||||
'is_show' => 1,
|
||||
'sort' => 1,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_LISTS',
|
||||
'title' => '笔记列表',
|
||||
'url' => 'notes://shop/notes/lists',
|
||||
'is_show' => 1,
|
||||
'sort' => 1,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_ADD',
|
||||
'title' => '添加笔记',
|
||||
'url' => 'notes://shop/notes/add',
|
||||
'sort' => 1,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_EDIT',
|
||||
'title' => '编辑笔记',
|
||||
'url' => 'notes://shop/notes/edit',
|
||||
'sort' => 2,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_DELETE',
|
||||
'title' => '删除笔记',
|
||||
'url' => 'notes://shop/notes/delete',
|
||||
'sort' => 3,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_MODIFYSORT',
|
||||
'title' => '修改排序',
|
||||
'url' => 'notes://shop/notes/modifySort',
|
||||
'sort' => 4,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
]
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_DRAFTS',
|
||||
'title' => '草稿箱',
|
||||
'url' => 'notes://shop/notes/drafts',
|
||||
'is_show' => 1,
|
||||
'is_control' => 1,
|
||||
'sort' => 2,
|
||||
'child_list' => []
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_GROUP',
|
||||
'title' => '笔记分组',
|
||||
'url' => 'notes://shop/group/lists',
|
||||
'is_show' => 1,
|
||||
'sort' => 3,
|
||||
'child_list' => [
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_GROUP_ADD',
|
||||
'title' => '添加分组',
|
||||
'url' => 'notes://shop/group/add',
|
||||
'sort' => 1,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_GROUP_EDIT',
|
||||
'title' => '编辑分组',
|
||||
'url' => 'notes://shop/group/edit',
|
||||
'sort' => 2,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_GROUP_DELETE',
|
||||
'title' => '删除分组',
|
||||
'url' => 'notes://shop/group/delete',
|
||||
'sort' => 3,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
[
|
||||
'name' => 'PROMOTION_NOTES_GROUP_MODIFYSORT',
|
||||
'title' => '修改排序',
|
||||
'url' => 'notes://shop/group/modifySort',
|
||||
'sort' => 4,
|
||||
'is_show' => 0,
|
||||
'type' => 'button',
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
|
||||
];
|
||||
1
addon/notes/data/install.sql
Executable file
1
addon/notes/data/install.sql
Executable file
@@ -0,0 +1 @@
|
||||
SET NAMES 'utf8';
|
||||
1
addon/notes/data/uninstall.sql
Executable file
1
addon/notes/data/uninstall.sql
Executable file
@@ -0,0 +1 @@
|
||||
SET NAMES 'utf8';
|
||||
25
addon/notes/event/Install.php
Executable file
25
addon/notes/event/Install.php
Executable file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\event;
|
||||
|
||||
/**
|
||||
* 应用安装
|
||||
*/
|
||||
class Install
|
||||
{
|
||||
/**
|
||||
* 执行安装
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return success();
|
||||
}
|
||||
}
|
||||
28
addon/notes/event/PromotionType.php
Executable file
28
addon/notes/event/PromotionType.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\event;
|
||||
|
||||
/**
|
||||
* 活动类型
|
||||
*/
|
||||
class PromotionType
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动类型
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return ["name" => "店铺笔记", "type" => "notes"];
|
||||
}
|
||||
}
|
||||
46
addon/notes/event/ShowPromotion.php
Executable file
46
addon/notes/event/ShowPromotion.php
Executable file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\event;
|
||||
|
||||
/**
|
||||
* 活动展示
|
||||
*/
|
||||
class ShowPromotion
|
||||
{
|
||||
|
||||
/**
|
||||
* 活动展示
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$data = [
|
||||
'shop' => [
|
||||
[
|
||||
//插件名称
|
||||
'name' => 'notes',
|
||||
//店铺端展示分类 shop:营销活动 member:互动营销
|
||||
'show_type' => 'tool',
|
||||
//展示主题
|
||||
'title' => '店铺笔记',
|
||||
//展示介绍
|
||||
'description' => '好物分享引流促成交易',
|
||||
//展示图标
|
||||
'icon' => 'addon/notes/icon.png',
|
||||
//跳转链接
|
||||
'url' => 'notes://shop/notes/lists',
|
||||
]
|
||||
]
|
||||
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
25
addon/notes/event/UnInstall.php
Executable file
25
addon/notes/event/UnInstall.php
Executable file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\event;
|
||||
|
||||
/**
|
||||
* 应用卸载
|
||||
*/
|
||||
class UnInstall
|
||||
{
|
||||
/**
|
||||
* 执行卸载
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
return success();
|
||||
}
|
||||
}
|
||||
BIN
addon/notes/icon.png
Executable file
BIN
addon/notes/icon.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 746 B |
104
addon/notes/model/Group.php
Executable file
104
addon/notes/model/Group.php
Executable file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\model;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
/**
|
||||
* 笔记分组
|
||||
*/
|
||||
class Group extends BaseModel
|
||||
{
|
||||
/**
|
||||
* 添加笔记分组
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function addNotesGroup($data)
|
||||
{
|
||||
$data['create_time'] = time();
|
||||
|
||||
$res = model('notes_group')->add($data);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑笔记分组
|
||||
* @param $condition
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function editNotesGroup($condition, $data)
|
||||
{
|
||||
$data['update_time'] = time();
|
||||
|
||||
$res = model('notes_group')->update($data, $condition);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除笔记分组
|
||||
* @param $group_id
|
||||
* @param $site_id
|
||||
* @return array|\multitype
|
||||
*/
|
||||
public function deleteNotesGroup($group_id, $site_id)
|
||||
{
|
||||
//笔记数
|
||||
$notes_count = model('notes')->getCount([['group_id', '=', $group_id], ['site_id', '=', $site_id]]);
|
||||
if ($notes_count > 0) {
|
||||
return $this->error('', '该分组下存在店铺笔记,暂不能删除');
|
||||
} else {
|
||||
$res = model('notes_group')->delete([['group_id', '=', $group_id], ['site_id', '=', $site_id]]);
|
||||
return $this->success($res);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取笔记分组信息
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getNotesGroupInfo($condition = [], $field = '*')
|
||||
{
|
||||
$info = model('notes_group')->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取笔记分组列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param string $limit
|
||||
*/
|
||||
public function getNotesGroupList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('notes_group')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取笔记分页列表
|
||||
* @param array $condition
|
||||
* @param number $page
|
||||
* @param string $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
*/
|
||||
public function getNotesGroupPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('notes_group')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
}
|
||||
299
addon/notes/model/Notes.php
Executable file
299
addon/notes/model/Notes.php
Executable file
@@ -0,0 +1,299 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\model;
|
||||
|
||||
use app\model\BaseModel;
|
||||
use extend\WxCrawler;
|
||||
|
||||
/**
|
||||
* 笔记
|
||||
*/
|
||||
class Notes extends BaseModel
|
||||
{
|
||||
|
||||
//笔记类型
|
||||
private $note_type = [
|
||||
[ 'type' => 'shop_said', 'name' => '掌柜说' ],
|
||||
[ 'type' => 'goods_item', 'name' => '单品介绍' ],
|
||||
//['type' => 'article', 'name' => '种草文章'],
|
||||
//['type' => 'wechat_article', 'name' => '公众号文章'],
|
||||
//['type' => 'goods_video', 'name' => '短视频']
|
||||
];
|
||||
|
||||
/**
|
||||
* 获取笔记类型
|
||||
* @return array
|
||||
*/
|
||||
public function getNoteType()
|
||||
{
|
||||
return $this->note_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加笔记
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function addNotes($data)
|
||||
{
|
||||
$data[ 'create_time' ] = time();
|
||||
|
||||
model('notes')->startTrans();
|
||||
try {
|
||||
//添加笔记
|
||||
if ($data[ 'status' ] == 1) {
|
||||
$data[ 'release_time' ] = time();
|
||||
}
|
||||
model('notes')->add($data);
|
||||
//更新分组笔记数等信息
|
||||
model('notes_group')->setInc([ [ 'group_id', '=', $data[ 'group_id' ] ] ], 'notes_num');
|
||||
if ($data[ 'status' ] == 1) {
|
||||
model('notes_group')->setInc([ [ 'group_id', '=', $data[ 'group_id' ] ] ], 'release_num');
|
||||
}
|
||||
model('notes')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('notes')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 文章发布
|
||||
* @param $params
|
||||
*/
|
||||
public function releaseEvent($params)
|
||||
{
|
||||
$site_id = $params[ 'site_id' ] ?? 0;
|
||||
$note_id = $params[ 'note_id' ];
|
||||
$status = $params[ 'status' ];
|
||||
$condition = array (
|
||||
[ 'note_id', '=', $note_id ],
|
||||
[ 'site_id', '=', $site_id ]
|
||||
);
|
||||
$info = model('notes')->getInfo($condition);
|
||||
if (!empty($info)) {
|
||||
if ($info[ 'status' ] != $status) {
|
||||
if ($status == 1) {
|
||||
$release_time = time();
|
||||
model('notes_group')->setInc([ [ 'group_id', '=', $info[ 'group_id' ] ] ], 'release_num');
|
||||
} else {
|
||||
$release_time = 0;
|
||||
model('notes_group')->setDec([ [ 'group_id', '=', $info[ 'group_id' ] ] ], 'release_num');
|
||||
}
|
||||
$data = array (
|
||||
'release_time' => $release_time,
|
||||
'status' => $status
|
||||
);
|
||||
model('notes')->update($data, $condition);
|
||||
}
|
||||
return $this->success();
|
||||
} else {
|
||||
return $this->error();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑笔记
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function editNotes($data)
|
||||
{
|
||||
$data[ 'update_time' ] = time();
|
||||
|
||||
model('notes')->startTrans();
|
||||
try {
|
||||
$info = model('notes')->getInfo([ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'note_id', '=', $data[ 'note_id' ] ] ]);
|
||||
|
||||
//添加笔记
|
||||
|
||||
model('notes')->update($data, [ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'note_id', '=', $data[ 'note_id' ] ] ]);
|
||||
$release_data = array (
|
||||
'note_id' => $data[ 'note_id' ],
|
||||
'site_id' => $data[ 'site_id' ]
|
||||
);
|
||||
if ($info[ 'group_id' ] != $data[ 'group_id' ]) {
|
||||
model('notes_group')->setDec([ [ 'group_id', '=', $info[ 'group_id' ] ] ], 'notes_num');
|
||||
|
||||
model('notes_group')->setInc([ [ 'group_id', '=', $data[ 'group_id' ] ] ], 'notes_num');
|
||||
//减去原分组的发布数
|
||||
if ($info[ 'status' ] == 1) {
|
||||
model('notes_group')->setDec([ [ 'group_id', '=', $info[ 'group_id' ] ] ], 'release_num');
|
||||
}
|
||||
//增加新分组的发布数
|
||||
if ($data[ 'status' ] == 1) {
|
||||
model('notes_group')->setInc([ [ 'group_id', '=', $data[ 'group_id' ] ] ], 'release_num');
|
||||
}
|
||||
|
||||
} else {
|
||||
$release_data[ 'status' ] = $data[ 'status' ];
|
||||
$this->releaseEvent($release_data);
|
||||
}
|
||||
//更新分组笔记数等信息
|
||||
if ($data[ 'status' ] == 1) {
|
||||
model('notes_group')->setInc([ [ 'group_id', '=', $data[ 'group_id' ] ] ], 'release_num');
|
||||
}
|
||||
model('notes')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('notes')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除笔记
|
||||
* @param $condition
|
||||
* @return array|\multitype
|
||||
*/
|
||||
public function deleteNotes($condition)
|
||||
{
|
||||
//笔记数
|
||||
$notes_info = model('notes')->getInfo($condition, 'group_id,status');
|
||||
if (empty($notes_info)) {
|
||||
return $this->success('', '数据不合法');
|
||||
} else {
|
||||
|
||||
model('notes')->startTrans();
|
||||
try {
|
||||
//删除笔记
|
||||
model('notes')->delete($condition);
|
||||
|
||||
//更新分组笔记数等信息
|
||||
if ($notes_info[ 'status' ] == 1) {
|
||||
model('notes_group')->setDec([ [ 'group_id', '=', $notes_info[ 'group_id' ] ] ], 'notes_num');
|
||||
model('notes_group')->setDec([ [ 'group_id', '=', $notes_info[ 'group_id' ] ] ], 'release_num');
|
||||
} else {
|
||||
model('notes_group')->setDec([ [ 'group_id', '=', $notes_info[ 'group_id' ] ] ], 'notes_num');
|
||||
}
|
||||
model('notes')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('notes')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改排序
|
||||
* @param int $sort
|
||||
* @param int $class_id
|
||||
*/
|
||||
public function modifyNotesSort($sort, $note_id, $site_id)
|
||||
{
|
||||
$res = model('notes')->update([ 'sort' => $sort ], [ [ 'note_id', '=', $note_id ], [ 'site_id', '=', $site_id ] ]);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取笔记信息
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getNotesInfo($condition = [], $field = '*')
|
||||
{
|
||||
$info = model("notes")->getInfo($condition, $field);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取笔记信息
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param int $type
|
||||
* @return array
|
||||
*/
|
||||
public function getNotesDetailInfo($condition = [], $field = '*', $type = 1)
|
||||
{
|
||||
$info = model('notes')->getInfo($condition, $field);
|
||||
|
||||
if (!empty($info)) {
|
||||
$goods_field = 'sku_id,goods_name,goods_stock,price,goods_image,goods_id';
|
||||
$goods_list = model('goods')->getList([ [ 'site_id', '=', $info[ 'site_id' ] ], [ 'goods_id', 'in', $info[ 'goods_ids' ] ], [ 'goods_state', '=', 1 ], [ 'is_delete', '=', 0 ] ], $goods_field);
|
||||
if (!empty($goods_list)) {
|
||||
foreach ($goods_list as $k => $v) {
|
||||
$goods_list[ $k ][ 'goods_stock' ] = numberFormat($goods_list[ $k ][ 'goods_stock' ]);
|
||||
}
|
||||
}
|
||||
$info[ 'goods_list' ] = $goods_list;
|
||||
}
|
||||
//添加浏览记录
|
||||
if ($type == 2) {
|
||||
model('notes')->setInc($condition, 'read_num', 1);
|
||||
}
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取笔记列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param string $limit
|
||||
*/
|
||||
public function getNotesList($condition = [], $field = '*', $order = '', $limit = null, $alias = '', $join = [])
|
||||
{
|
||||
$list = model('notes')->getList($condition, $field, $order, $alias, $join, '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取笔记分页列表
|
||||
* @param array $condition
|
||||
* @param number $page
|
||||
* @param string $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
*/
|
||||
public function getNotesPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'pn.sort asc')
|
||||
{
|
||||
$field = 'pn.*,png.group_name';
|
||||
$alias = 'pn';
|
||||
$join = [
|
||||
[
|
||||
'notes_group png',
|
||||
'png.group_id = pn.group_id',
|
||||
'left'
|
||||
]
|
||||
];
|
||||
$note_type = $this->getNoteType();
|
||||
$note_type = array_column($note_type, 'name', 'type');
|
||||
$list = model('notes')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
|
||||
foreach ($list[ 'list' ] as $k => $v) {
|
||||
$list[ 'list' ][ $k ][ 'note_type_name' ] = $note_type[ $v[ 'note_type' ] ];
|
||||
}
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 采集微信公众号的文章信息
|
||||
* @param $params
|
||||
*/
|
||||
public function pullWechatArticle($params)
|
||||
{
|
||||
$url = $params[ 'url' ];
|
||||
$crawler = new WxCrawler();
|
||||
$data = $crawler->crawByUrl($url);
|
||||
// echo $data['data']['content_html'];exit();
|
||||
return $data;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
70
addon/notes/model/Record.php
Executable file
70
addon/notes/model/Record.php
Executable file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\model;
|
||||
|
||||
use app\model\BaseModel;
|
||||
|
||||
/**
|
||||
* 笔记点赞记录
|
||||
*/
|
||||
class Record extends BaseModel
|
||||
{
|
||||
/**
|
||||
* 添加点赞记录
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function addRecord($data)
|
||||
{
|
||||
$info = model('notes_dianzan_record')->getInfo([['member_id', '=', $data['member_id']], ['note_id', '=', $data['note_id']]], 'record_id');
|
||||
if (empty($info)) {
|
||||
|
||||
$res = model('notes_dianzan_record')->add($data);
|
||||
if ($res) {
|
||||
model("notes")->setInc([['note_id', '=', $data['note_id']]], 'dianzan_num', 1);
|
||||
}
|
||||
return $this->success($res);
|
||||
} else {
|
||||
return $this->error();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消点赞
|
||||
* @param $member_id
|
||||
* @param $note_id
|
||||
* @return array
|
||||
*/
|
||||
public function deleteRecord($member_id, $note_id)
|
||||
{
|
||||
$res = model('notes_dianzan_record')->delete([['member_id', '=', $member_id], ['note_id', '=', $note_id]]);
|
||||
if ($res) {
|
||||
model("notes")->setDec([['note_id', '=', $note_id]], 'dianzan_num', 1);
|
||||
}
|
||||
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测商品是否收藏
|
||||
* @param $note_id
|
||||
* @param $member_id
|
||||
* @return array
|
||||
*/
|
||||
public function getIsDianzan($note_id, $member_id)
|
||||
{
|
||||
$count = model('notes_dianzan_record')->getCount([['member_id', '=', $member_id], ['note_id', '=', $note_id]]);
|
||||
return $this->success($count);
|
||||
}
|
||||
|
||||
}
|
||||
134
addon/notes/model/share/WchatShare.php
Executable file
134
addon/notes/model/share/WchatShare.php
Executable file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\model\share;
|
||||
|
||||
use addon\notes\model\Notes as NotesModel;
|
||||
use app\model\share\WchatShareBase as BaseModel;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 分享
|
||||
*/
|
||||
class WchatShare extends BaseModel
|
||||
{
|
||||
protected $config = [
|
||||
[
|
||||
'title' => '店铺笔记列表',
|
||||
'config_key' => 'WCHAT_SHARE_CONFIG_NOTES_LIST',
|
||||
'path' => [ '/pages_tool/store_notes/note_list' ],
|
||||
'method_prefix' => 'noteList',
|
||||
],
|
||||
[
|
||||
'title' => '店铺笔记分享',
|
||||
'config_key' => 'WCHAT_SHARE_CONFIG_NOTES_DETAIL',
|
||||
'path' => [ '/pages_tool/store_notes/note_detail' ],
|
||||
'method_prefix' => 'noteDetail',
|
||||
],
|
||||
];
|
||||
|
||||
protected $sort = 4;
|
||||
|
||||
/**
|
||||
* 店铺笔记列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function noteListShareData($param)
|
||||
{
|
||||
//跳转路径
|
||||
$link = $this->getShareLink($param);
|
||||
$config_data = $this->noteListShareConfig($param)[ 'value' ];
|
||||
|
||||
$data = [
|
||||
'link' => $link,
|
||||
'desc' => $config_data[ 'desc' ],
|
||||
'imgUrl' => $config_data[ 'imgUrl' ],
|
||||
'title' => $config_data[ 'title' ]
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'hideOptionMenu' => false,
|
||||
'hideMenuItems' => [],
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 店铺笔记分享配置
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
public function noteListShareConfig($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ];
|
||||
$config = $param[ 'config' ];
|
||||
|
||||
$config_model = new ConfigModel();
|
||||
$data = $config_model->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', $config[ 'config_key' ] ] ])[ 'data' ];
|
||||
if (empty($data[ 'value' ])) {
|
||||
$data[ 'value' ] = [
|
||||
'title' => "店铺笔记",
|
||||
'desc' => "好物精选\n向您推荐",
|
||||
'imgUrl' => ''
|
||||
];
|
||||
}
|
||||
if (empty($data[ 'value' ][ 'imgUrl' ])) {
|
||||
$data[ 'value' ][ 'imgUrl' ] = img('addon/notes/icon.png');
|
||||
}
|
||||
return [
|
||||
'value' => $data[ 'value' ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 店铺笔记分享数据
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function noteDetailShareData($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ] ?? 0;
|
||||
parse_str(parse_url($param[ 'url' ])[ 'query' ] ?? '', $query);
|
||||
if (isset($query[ 'note_id' ]) || isset($query[ 'id' ])) {
|
||||
$note_id = $query['id'] ?? $query['note_id'];
|
||||
$condition = [
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'note_id', '=', $note_id ]
|
||||
];
|
||||
|
||||
$note_model = new NotesModel();
|
||||
$note_detail = $note_model->getNotesDetailInfo($condition, '*', 2)[ 'data' ];
|
||||
if (!empty($note_detail)) {
|
||||
$title = $note_detail[ 'note_title' ];
|
||||
$desc = $note_detail[ 'note_title' ];
|
||||
$link = $this->getShareLink($param);
|
||||
$image_url = img(explode(',', $note_detail[ 'cover_img' ])[ 0 ]);
|
||||
|
||||
$data = [
|
||||
'title' => $title,
|
||||
'desc' => $desc,
|
||||
'link' => $link,
|
||||
'imgUrl' => $image_url,
|
||||
'detail' => $note_detail,
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'hideOptionMenu' => false,
|
||||
'hideMenuItems' => [],
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
89
addon/notes/model/share/WeappShare.php
Executable file
89
addon/notes/model/share/WeappShare.php
Executable file
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\model\share;
|
||||
|
||||
use app\model\share\WeappShareBase;
|
||||
use app\model\system\Config as ConfigModel;
|
||||
|
||||
/**
|
||||
* 分享
|
||||
*/
|
||||
class WeappShare extends WeappShareBase
|
||||
{
|
||||
protected $config = [
|
||||
[
|
||||
'title' => '店铺笔记列表',
|
||||
'config_key' => 'WEAPP_SHARE_CONFIG_NOTES_LIST',
|
||||
'path' => [ '/pages_tool/store_notes/note_list' ],
|
||||
'method_prefix' => 'noteList',
|
||||
],
|
||||
];
|
||||
|
||||
protected $sort = 6;
|
||||
|
||||
/**
|
||||
* 拼团返利列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function noteListShareData($param)
|
||||
{
|
||||
//获取和替换配置数据
|
||||
$config_data = $this->noteListShareConfig($param);
|
||||
$title = $config_data[ 'value' ][ 'title' ];
|
||||
$image_url = $config_data[ 'value' ][ 'imageUrl' ] ? img($config_data[ 'value' ][ 'imageUrl' ]) : '';
|
||||
$path = $this->getSharePath($param);
|
||||
|
||||
$data = [
|
||||
'title' => $title,
|
||||
'path' => $path,
|
||||
'imageUrl' => $image_url,
|
||||
];
|
||||
return [
|
||||
'permission' => [
|
||||
'onShareAppMessage' => true,
|
||||
'onShareTimeline' => true,
|
||||
],
|
||||
'data' => $data,//分享内容
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 拼团返利列表
|
||||
* @param $param
|
||||
* @return array
|
||||
*/
|
||||
protected function noteListShareConfig($param)
|
||||
{
|
||||
$site_id = $param[ 'site_id' ];
|
||||
$config = $param[ 'config' ];
|
||||
|
||||
$config_model = new ConfigModel();
|
||||
$data = $config_model->getConfig([
|
||||
[ 'site_id', '=', $site_id ],
|
||||
[ 'app_module', '=', 'shop' ],
|
||||
[ 'config_key', '=', $config[ 'config_key' ] ],
|
||||
])[ 'data' ];
|
||||
if (empty($data[ 'value' ])) {
|
||||
$data[ 'value' ] = [
|
||||
'title' => '有一些优选商品向你推荐',
|
||||
'imageUrl' => '',
|
||||
];
|
||||
}
|
||||
$variable = [];
|
||||
|
||||
return [
|
||||
'value' => $data[ 'value' ],
|
||||
'variable' => $variable,
|
||||
];
|
||||
}
|
||||
}
|
||||
119
addon/notes/shop/controller/Group.php
Executable file
119
addon/notes/shop/controller/Group.php
Executable file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\shop\controller;
|
||||
|
||||
use app\shop\controller\BaseShop;
|
||||
use addon\notes\model\Group as GroupModel;
|
||||
|
||||
/**
|
||||
* 笔记控制器
|
||||
*/
|
||||
class Group extends BaseShop
|
||||
{
|
||||
|
||||
/*
|
||||
* 笔记分组列表
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$model = new GroupModel();
|
||||
|
||||
$condition[] = ['site_id', '=', $this->site_id];
|
||||
//获取续签信息
|
||||
if (request()->isJson()) {
|
||||
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
//排序
|
||||
$order = input('order', 'sort');
|
||||
$sort = input('sort', 'desc');
|
||||
if($order == 'sort'){
|
||||
$order_by = $order . ' ' . $sort;
|
||||
}else{
|
||||
$order_by = $order . ' ' . $sort.',sort desc';
|
||||
}
|
||||
$list = $model->getNotesGroupPageList($condition, $page, $page_size, $order_by);
|
||||
return $list;
|
||||
} else {
|
||||
|
||||
return $this->fetch('group/lists');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加分组
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$data = [
|
||||
'site_id' => $this->site_id,
|
||||
'group_name' => input('group_name', ''),
|
||||
'sort' => input('sort'),
|
||||
];
|
||||
|
||||
$notes_model = new GroupModel();
|
||||
return $notes_model->addNotesGroup($data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑分组
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$data = [
|
||||
'group_id' => input('group_id'),
|
||||
'site_id' => $this->site_id,
|
||||
'group_name' => input('group_name', ''),
|
||||
'sort' => input('sort'),
|
||||
];
|
||||
|
||||
$notes_model = new GroupModel();
|
||||
return $notes_model->editNotesGroup([['site_id', '=', $this->site_id], ['group_id', '=', $data['group_id']]], $data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑分组排序
|
||||
* @return array
|
||||
*/
|
||||
public function modifySort()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$data = [
|
||||
'group_id' => input('group_id'),
|
||||
'site_id' => $this->site_id,
|
||||
'sort' => input('sort'),
|
||||
];
|
||||
$notes_model = new GroupModel();
|
||||
return $notes_model->editNotesGroup([['site_id', '=', $this->site_id], ['group_id', '=', $data['group_id']]], $data);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 删除分组
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$group_id = input('group_id', '');
|
||||
$site_id = $this->site_id;
|
||||
|
||||
$notes_model = new GroupModel();
|
||||
return $notes_model->deleteNotesGroup($group_id, $site_id);
|
||||
}
|
||||
|
||||
}
|
||||
346
addon/notes/shop/controller/Notes.php
Executable file
346
addon/notes/shop/controller/Notes.php
Executable file
@@ -0,0 +1,346 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\notes\shop\controller;
|
||||
|
||||
use app\shop\controller\BaseShop;
|
||||
use addon\notes\model\Notes as NotesModel;
|
||||
use addon\notes\model\Group as GroupModel;
|
||||
|
||||
/**
|
||||
* 笔记控制器
|
||||
*/
|
||||
class Notes extends BaseShop
|
||||
{
|
||||
|
||||
/*
|
||||
* 笔记活动列表
|
||||
*/
|
||||
public function lists()
|
||||
{
|
||||
$model = new NotesModel();
|
||||
//获取续签信息
|
||||
if (request()->isJson()) {
|
||||
|
||||
$condition[] = [ 'pn.site_id', '=', $this->site_id ];
|
||||
//笔记状态
|
||||
$status = input('status', '');
|
||||
if ($status !== '') {
|
||||
$condition[] = [ 'pn.status', '=', $status ];
|
||||
}
|
||||
//笔记标题
|
||||
$note_title = input('note_title', '');
|
||||
if ($note_title) {
|
||||
$condition[] = [ 'pn.note_title', 'like', '%' . $note_title . '%' ];
|
||||
}
|
||||
//笔记类型
|
||||
$note_type = input('note_type', '');
|
||||
if ($note_type) {
|
||||
$condition[] = [ 'pn.note_type', '=', $note_type ];
|
||||
}
|
||||
//分组
|
||||
$group_id = input('group_id', '');
|
||||
if ($group_id) {
|
||||
$condition[] = [ 'pn.group_id', '=', $group_id ];
|
||||
}
|
||||
|
||||
//时间
|
||||
$start_time = input("start_time", '');
|
||||
$end_time = input("end_time", '');
|
||||
if (!empty($start_time) && empty($end_time)) {
|
||||
$condition[] = [ "pn.create_time", ">=", date_to_time($start_time) ];
|
||||
} elseif (empty($start_time) && !empty($end_time)) {
|
||||
$condition[] = [ "pn.create_time", "<=", date_to_time($end_time) ];
|
||||
} elseif (!empty($start_time) && !empty($end_time)) {
|
||||
$condition[] = [ 'pn.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
|
||||
}
|
||||
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
|
||||
//排序
|
||||
// $order = input('order', 'sort');
|
||||
// $sort = input('sort', 'desc');
|
||||
// if($order == 'sort'){
|
||||
// $order_by = 'pn.'.$order . ' ' . $sort;
|
||||
// }else{
|
||||
// $order_by = 'pn.'.$order . ' ' . $sort.',pn.sort desc';
|
||||
// }
|
||||
$order_by = 'pn.create_time desc';
|
||||
$list = $model->getNotesPageList($condition, $page, $page_size, $order_by);
|
||||
return $list;
|
||||
} else {
|
||||
//笔记类型
|
||||
$note_type = $model->getNoteType();
|
||||
$this->assign('note_type', $note_type);
|
||||
//笔记分组
|
||||
$group_model = new GroupModel();
|
||||
$group_list = $group_model->getNotesGroupList([ [ 'site_id', '=', $this->site_id ] ], 'group_id,group_name');
|
||||
$this->assign('group_list', $group_list[ 'data' ]);
|
||||
return $this->fetch("notes/lists");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加活动
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$note_type = input('note_type', '');
|
||||
if (request()->isJson()) {
|
||||
$notes_data = [
|
||||
'site_id' => $this->site_id,
|
||||
'note_type' => $note_type,
|
||||
'note_title' => input('note_title', ''),
|
||||
'note_abstract' => input('note_abstract', ''),
|
||||
'group_id' => input('group_id', ''),
|
||||
'cover_type' => input('cover_type', ''),
|
||||
'cover_img' => input('cover_img', ''),
|
||||
'goods_ids' => input('goods_ids', ''),
|
||||
'goods_highlights' => input('goods_highlights', ''),
|
||||
'note_content' => htmlspecialchars_decode(input('note_content', '')),
|
||||
'status' => input('status', ''),
|
||||
'sort' => input('sort', '0'),
|
||||
'is_show_release_time' => input('is_show_release_time', ''),
|
||||
'is_show_read_num' => input('is_show_read_num', ''),
|
||||
'is_show_dianzan_num' => input('is_show_dianzan_num', ''),
|
||||
'initial_read_num' => input('initial_read_num', ''),
|
||||
'initial_dianzan_num' => input('initial_dianzan_num', ''),
|
||||
|
||||
'note_link' => input('note_link', ''),
|
||||
'video_path' => input('video_path', ''),
|
||||
|
||||
];
|
||||
$notes_model = new NotesModel();
|
||||
return $notes_model->addNotes($notes_data);
|
||||
} else {
|
||||
$this->assign('note_type', $note_type);
|
||||
//笔记分组
|
||||
$group_model = new GroupModel();
|
||||
$group_list = $group_model->getNotesGroupList([ [ 'site_id', '=', $this->site_id ] ], 'group_id,group_name');
|
||||
$this->assign('group_list', $group_list[ 'data' ]);
|
||||
switch ( $note_type ) {
|
||||
case 'shop_said':
|
||||
return $this->fetch('notes/add_shop_said');
|
||||
case 'goods_item':
|
||||
return $this->fetch('notes/add_goods_item');
|
||||
case 'article':
|
||||
return $this->fetch('notes/add_article');
|
||||
case 'wechat_article':
|
||||
return $this->fetch('notes/add_wechat_article');
|
||||
case 'goods_video':
|
||||
return $this->fetch('notes/add_goods_video');
|
||||
default:
|
||||
$this->error("笔记类型不存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 编辑活动
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
$notes_model = new NotesModel();
|
||||
$note_id = input('note_id', '');
|
||||
$note_type = input('note_type', '');
|
||||
if (request()->isJson()) {
|
||||
|
||||
$notes_data = [
|
||||
'note_id' => $note_id,
|
||||
'site_id' => $this->site_id,
|
||||
'note_type' => $note_type,
|
||||
'note_title' => input('note_title', ''),
|
||||
'note_abstract' => input('note_abstract', ''),
|
||||
'group_id' => input('group_id', ''),
|
||||
'cover_type' => input('cover_type', ''),
|
||||
'cover_img' => input('cover_img', ''),
|
||||
'goods_ids' => input('goods_ids', ''),
|
||||
'goods_highlights' => input('goods_highlights', ''),
|
||||
'note_content' => htmlspecialchars_decode(input('note_content', '')),
|
||||
'status' => input('status', ''),
|
||||
'sort' => input('sort', '0'),
|
||||
'is_show_release_time' => input('is_show_release_time', ''),
|
||||
'is_show_read_num' => input('is_show_read_num', ''),
|
||||
'is_show_dianzan_num' => input('is_show_dianzan_num', ''),
|
||||
'initial_read_num' => input('initial_read_num', ''),
|
||||
'initial_dianzan_num' => input('initial_dianzan_num', ''),
|
||||
|
||||
'note_link' => input('note_link', ''),
|
||||
'video_path' => input('video_path', ''),
|
||||
];
|
||||
|
||||
return $notes_model->editNotes($notes_data);
|
||||
|
||||
} else {
|
||||
$this->assign('note_id', $note_id);
|
||||
$this->assign('note_type', $note_type);
|
||||
//笔记分组
|
||||
$group_model = new GroupModel();
|
||||
$group_list = $group_model->getNotesGroupList([ [ 'site_id', '=', $this->site_id ] ], 'group_id,group_name');
|
||||
$this->assign('group_list', $group_list[ 'data' ]);
|
||||
|
||||
//获取笔记信息
|
||||
$note_info = $notes_model->getNotesDetailInfo([ [ 'note_id', '=', $note_id ], [ 'site_id', '=', $this->site_id ] ])[ 'data' ] ?? [];
|
||||
if (empty($note_info)) $this->error('未获取到笔记数据', href_url('notes://shop/notes/lists'));
|
||||
$note_type = $note_info[ 'note_type' ];
|
||||
$this->assign('info', $note_info);
|
||||
switch ( $note_type ) {
|
||||
case 'shop_said':
|
||||
return $this->fetch('notes/edit_shop_said');
|
||||
case 'goods_item':
|
||||
return $this->fetch('notes/edit_goods_item');
|
||||
case 'article':
|
||||
return $this->fetch('notes/edit_article');
|
||||
case 'wechat_article':
|
||||
return $this->fetch('notes/edit_wechat_article');
|
||||
case 'goods_video':
|
||||
return $this->fetch('notes/edit_goods_video');
|
||||
default:
|
||||
$this->error("笔记类型不存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 删除笔记活动
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$note_id = input('note_id', '');
|
||||
|
||||
$notes_model = new NotesModel();
|
||||
return $notes_model->deleteNotes([ [ 'note_id', '=', $note_id ], [ 'site_id', '=', $this->site_id ] ]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 草稿箱
|
||||
* @return mixed
|
||||
*/
|
||||
public function drafts()
|
||||
{
|
||||
$model = new NotesModel();
|
||||
//笔记类型
|
||||
$note_type = $model->getNoteType();
|
||||
$this->assign('note_type', $note_type);
|
||||
//笔记分组
|
||||
$group_model = new GroupModel();
|
||||
$group_list = $group_model->getNotesGroupList([ [ 'site_id', '=', $this->site_id ] ], 'group_id,group_name');
|
||||
$this->assign('group_list', $group_list[ 'data' ]);
|
||||
return $this->fetch("notes/drafts");
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布或取消发布
|
||||
* @return array
|
||||
*/
|
||||
public function releaseEvent()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$note_id = input('note_id', 0);
|
||||
$notes_model = new NotesModel();
|
||||
$data = array (
|
||||
'note_id' => $note_id,
|
||||
'site_id' => $this->site_id,
|
||||
'status' => input('status', 0)
|
||||
);
|
||||
return $notes_model->releaseEvent($data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品类型排序
|
||||
*/
|
||||
public function modifySort()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
|
||||
$sort = input('sort', 0);
|
||||
$note_id = input('note_id', 0);
|
||||
$notes_model = new NotesModel();
|
||||
return $notes_model->modifyNotesSort($sort, $note_id, $this->site_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 笔记选择组件
|
||||
* @return \multitype
|
||||
*/
|
||||
public function notesSelect()
|
||||
{
|
||||
$model = new NotesModel();
|
||||
if (request()->isJson()) {
|
||||
$condition[] = [ 'pn.site_id', '=', $this->site_id ];
|
||||
//笔记状态
|
||||
$status = input('status', '');
|
||||
if ($status !== '') {
|
||||
$condition[] = [ 'pn.status', '=', $status ];
|
||||
}
|
||||
//笔记标题
|
||||
$note_title = input('note_title', '');
|
||||
if ($note_title) {
|
||||
$condition[] = [ 'pn.note_title', 'like', '%' . $note_title . '%' ];
|
||||
}
|
||||
//笔记类型
|
||||
$note_type = input('note_type', '');
|
||||
if ($note_type) {
|
||||
$condition[] = [ 'pn.note_type', '=', $note_type ];
|
||||
}
|
||||
//分组
|
||||
$group_id = input('group_id', '');
|
||||
if ($group_id) {
|
||||
$condition[] = [ 'pn.group_id', '=', $group_id ];
|
||||
}
|
||||
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$list = $model->getNotesPageList($condition, $page, $page_size, 'pn.sort asc');
|
||||
return $list;
|
||||
|
||||
} else {
|
||||
|
||||
//已经选择的商品sku数据
|
||||
$select_id = input('select_id', '');
|
||||
$max_num = input('max_num', 0);
|
||||
$min_num = input('min_num', 0);
|
||||
|
||||
$this->assign('select_id', $select_id);
|
||||
$this->assign('max_num', $max_num);
|
||||
$this->assign('min_num', $min_num);
|
||||
|
||||
//笔记类型
|
||||
$note_type = $model->getNoteType();
|
||||
$this->assign('note_type', $note_type);
|
||||
//笔记分组
|
||||
$group_model = new GroupModel();
|
||||
$group_list = $group_model->getNotesGroupList([ [ 'site_id', '=', $this->site_id ] ], 'group_id,group_name');
|
||||
$this->assign('group_list', $group_list[ 'data' ]);
|
||||
|
||||
return $this->fetch("notes/notes_select");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 采集文章
|
||||
*/
|
||||
public function pullArticle()
|
||||
{
|
||||
$note_model = new NotesModel();
|
||||
$url = input('wechat_url', 'https://mp.weixin.qq.com/s/uyocVJ4DSGqDbu_BR77XwQ');
|
||||
$result = $note_model->pullWechatArticle([ 'url' => $url ]);
|
||||
//['title' => '', 'content' => '']
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
315
addon/notes/shop/view/group/lists.html
Executable file
315
addon/notes/shop/view/group/lists.html
Executable file
@@ -0,0 +1,315 @@
|
||||
<!-- 搜索框 -->
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="addGroup()">添加笔记分组</button>
|
||||
<div class="layui-form">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="group_name" 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="attr_class_list" lay-filter="attr_class_list"></table>
|
||||
|
||||
<!-- 编辑排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.group_id}}, this)" value="{{d.sort}}" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<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="addGroup">
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid"><span class="required">*</span>笔记分组:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="group_name" type="text" placeholder="请输入笔记分组名称" lay-verify="required" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid">排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="sort" type="number" class="layui-input edit-sort len-short">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn" lay-submit lay-filter="save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="editGroup">
|
||||
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid"><span class="required">*</span>笔记分组:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="group_name" type="text" value="{{ d.group_name }}" placeholder="请输入笔记分组名称" lay-verify="required" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label mid">排序:</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="sort" type="number" value="{{ d.sort }}" class="layui-input edit-sort len-short">
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="group_id" value="{{ d.group_id }}">
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn" lay-submit lay-filter="edit_save">保存</button>
|
||||
<button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl, add_attr_index = -1,
|
||||
form, table;
|
||||
layui.use(['form', 'laytpl'], function() {
|
||||
var repeat_flag = false; //防重复标识
|
||||
laytpl = layui.laytpl;
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
table = new Table({
|
||||
elem: '#attr_class_list',
|
||||
url: ns.url("notes://shop/group/lists"),
|
||||
cols: [
|
||||
[ {
|
||||
field: 'group_name',
|
||||
title: '分组名称',
|
||||
unresize: 'false'
|
||||
},{
|
||||
field: 'notes_num',
|
||||
title: '店铺笔记总数',
|
||||
unresize: 'false'
|
||||
},{
|
||||
field: 'release_num',
|
||||
title: '笔记发布数',
|
||||
unresize: 'false'
|
||||
},{
|
||||
field: 'sort',
|
||||
sort : true,
|
||||
unresize:'false',
|
||||
title: '排序',
|
||||
width: '20%',
|
||||
align: 'center',
|
||||
templet: '#editSort'
|
||||
},{
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]
|
||||
]
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit':
|
||||
editGroup(data);
|
||||
break;
|
||||
case 'delete':
|
||||
deleteGroup(data.group_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteGroup(group_id) {
|
||||
layer.confirm('确认删除该分组吗?', function(index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("notes://shop/group/delete"),
|
||||
data: {
|
||||
group_id:group_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
table.on("sort",function (obj) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: {
|
||||
order:obj.field,
|
||||
sort:obj.type
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
});
|
||||
|
||||
form.on('submit(save)', function(data) {
|
||||
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: '{:addon_url("notes://shop/group/add")}',
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(data) {
|
||||
layer.msg(data.message);
|
||||
if (data.code == 0) {
|
||||
table.reload();
|
||||
layer.close(add_attr_index);
|
||||
}
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
form.on('submit(edit_save)', function(data) {
|
||||
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
url: '{:addon_url("notes://shop/group/edit")}',
|
||||
data: data.field,
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(data) {
|
||||
layer.msg(data.message);
|
||||
if (data.code == 0) {
|
||||
table.reload();
|
||||
layer.close(add_attr_index);
|
||||
}
|
||||
repeat_flag = false;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
form.verify({
|
||||
num: function(value) {
|
||||
if (value == '') {
|
||||
return;
|
||||
}
|
||||
if (value % 1 != 0) {
|
||||
return '排序数值必须为整数';
|
||||
}
|
||||
if (value < 0) {
|
||||
return '排序数值必须为大于0';
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function addGroup() {
|
||||
var add_attr = $("#addGroup").html();
|
||||
laytpl(add_attr).render({}, function(html) {
|
||||
add_attr_index = layer.open({
|
||||
title: '添加笔记分组',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['500px'],
|
||||
content: html
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function editGroup(data) {
|
||||
var add_attr = $("#editGroup").html();
|
||||
laytpl(add_attr).render(data, function(html) {
|
||||
add_attr_index = layer.open({
|
||||
title: '编辑笔记分组',
|
||||
skin: 'layer-tips-class',
|
||||
type: 1,
|
||||
area: ['500px'],
|
||||
content: html
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function closeAttrLayer() {
|
||||
layer.close(add_attr_index);
|
||||
}
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(group_id, event){
|
||||
var data = $(event).val();
|
||||
|
||||
if (data == '') {
|
||||
$(event).val(0);
|
||||
data = 0;
|
||||
}
|
||||
|
||||
if(!new RegExp("^-?[0-9]\\d*$").test(data)){
|
||||
layer.msg("排序号只能是整数");
|
||||
return ;
|
||||
}
|
||||
if(data<0){
|
||||
layer.msg("排序号必须大于0");
|
||||
return ;
|
||||
}
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("notes://shop/group/modifySort"),
|
||||
data: {
|
||||
sort: data,
|
||||
group_id: group_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if(res.code==0){
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
439
addon/notes/shop/view/notes/add_article.html
Executable file
439
addon/notes/shop/view/notes/add_article.html
Executable file
@@ -0,0 +1,439 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
</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="note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" checked>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type">
|
||||
</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>
|
||||
<input type="hidden" name="image" />
|
||||
<i class="del">x</i>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading layui-hide">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</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="note_content" id="note_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="backNotesList()">返回</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="goods_ids" value="" />
|
||||
<input type="hidden" name="note_type" value="{$note_type}" />
|
||||
</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>
|
||||
//实例化富文本
|
||||
UE.registerUI('添加商品', function(editor, uiName) {
|
||||
//注册按钮执行时的command命令,使用命令默认就会带有回退操作
|
||||
editor.registerCommand(uiName, {
|
||||
execCommand: function() {
|
||||
alert('execCommand:' + uiName)
|
||||
}
|
||||
});
|
||||
//创建一个button
|
||||
var btn = new UE.ui.Button({
|
||||
//按钮的名字
|
||||
name: uiName,
|
||||
//提示
|
||||
title: uiName,
|
||||
label:'添加商品',
|
||||
//添加额外样式,指定icon图标,这里默认使用一个重复的icon
|
||||
cssRules: 'background-position: -500px 0;',
|
||||
showIcon:false,
|
||||
//点击时执行的命令
|
||||
onclick: function() {
|
||||
//这里可以不用执行命令,做你自己的操作也可
|
||||
// editor.execCommand(uiName);
|
||||
addGoods();
|
||||
}
|
||||
});
|
||||
//当点到编辑内容上时,按钮要做的状态反射
|
||||
editor.addListener('selectionchange', function() {
|
||||
var state = editor.queryCommandState(uiName);
|
||||
if (state == -1) {
|
||||
btn.setDisabled(true);
|
||||
btn.setChecked(false);
|
||||
} else {
|
||||
btn.setDisabled(false);
|
||||
btn.setChecked(state);
|
||||
}
|
||||
});
|
||||
//因为你是添加button,所以需要返回这个button
|
||||
return btn;
|
||||
});
|
||||
|
||||
var ue = UE.getEditor('editor');
|
||||
if($("#note_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#note_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();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
/* var upload = new Upload({
|
||||
elem: '#img',
|
||||
callback:function (res) {
|
||||
if (res.code >= 0) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(res.data.pic_path)
|
||||
}
|
||||
},
|
||||
deleteCallback:function () {
|
||||
upload.delete();
|
||||
imageCollection = [];
|
||||
}
|
||||
}); */
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX) $("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(data)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
|
||||
data.cover_img = imageCollection.join();
|
||||
|
||||
var goodsHighlights = [];
|
||||
$(".lightspot-item").each(function (index,item) {
|
||||
goodsHighlights.push($(item).find('input').val());
|
||||
});
|
||||
data.goods_highlights = goodsHighlights.toString();
|
||||
|
||||
if (!ue.getContent()){
|
||||
layer.msg("笔记内容不能为空");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
data.note_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/* 添加商品 */
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
for (var key in data) {
|
||||
var item = data[key];
|
||||
|
||||
var temp_html = `<div style="margin-bottom:20px;">`;
|
||||
temp_html += `<div style="width:100%;padding:8px;box-sizing:border-box;border-radius:4px;background:#f8f8f8;display:flex">`;
|
||||
temp_html += `<img style='width:74px;height:74px;border-radius:4px' src="${item.goods_image ? ns.img(item.goods_image) : ''}">`;
|
||||
temp_html += `<div style="margin-left: 10px;width: 200px;flex: 1;min-height: 0;min-width: 0;">`;
|
||||
temp_html += `<div style="font-size:14px;color:#202021;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap" >${item.goods_name}</div>`;
|
||||
temp_html += `<div style="font-size:13px;color:#5e6066;overflow:hidden;text-overflow:ellipsis;white-space:nowrap"></div>`;
|
||||
temp_html += `<div style="font-size:14px;color:#fd463e;font-weight:700;margin-top:10px"><span>¥</span>${item.price}</div>`;
|
||||
temp_html += `</div>`;
|
||||
temp_html += `</div></div>`;
|
||||
ue.setContent(temp_html, true);
|
||||
}
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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>
|
||||
545
addon/notes/shop/view/notes/add_goods_item.html
Executable file
545
addon/notes/shop/view/notes/add_goods_item.html
Executable file
@@ -0,0 +1,545 @@
|
||||
<style>
|
||||
.layui-form-selected dl {
|
||||
z-index: 1000;
|
||||
}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
|
||||
.multiple-uploading {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.multiple-uploading .multiple-item {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border: 1px dashed #ddd;
|
||||
text-align: center;
|
||||
box-sizing: border-box;
|
||||
line-height: 1;
|
||||
color: #5a5a5a;
|
||||
}
|
||||
|
||||
.multiple-uploading .multiple-item p {
|
||||
line-height: 20px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.multiple-uploading .multiple-item span {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: -7px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 1px solid #999;
|
||||
color: #999;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
line-height: 1;
|
||||
font-size: 18px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.multiple-uploading .multiple-item:hover .icon {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.multiple-uploading .multiple-item ~ .multiple-item {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
|
||||
#multiple_uploading {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.multiple-item img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.shopping-lightspot {
|
||||
width: 290px;
|
||||
}
|
||||
|
||||
.shopping-lightspot .add-lightspot {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.shopping-lightspot .add-lightspot, .shopping-lightspot .lightspot-item {
|
||||
padding: 15px;
|
||||
border: 1px dashed #e5e5e5;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.shopping-lightspot .lightspot-item {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.shopping-lightspot .lightspot-item span {
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: -9px;
|
||||
display: none;
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 1px solid #999;
|
||||
border-radius: 50%;
|
||||
font-size: 18px;
|
||||
color: #999;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.shopping-lightspot .lightspot-item:hover span {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.shopping-lightspot .lightspot-item input {
|
||||
margin-left: 5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>管理员可以在此页添加店铺笔记</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" checked>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type">
|
||||
</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>
|
||||
<input type="hidden" name="image"/>
|
||||
<i class="del">x</i>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading layui-hide">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">关联商品:</label>
|
||||
<div class="layui-input-inline">
|
||||
<div class="upload-img-block square">
|
||||
<div class="upload-img-box" id="goodImg" lay-verify="select" onclick="addGoods()">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>选择商品</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品亮点:</label>
|
||||
<div class="layui-input-block shopping-lightspot">
|
||||
<div class="add-lightspot">+ 添加亮点</div>
|
||||
</div>
|
||||
<div class="word-aux">商品亮点最多可添加3个亮点</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="note_content" id="note_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="backNotesList()">返回</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="goods_ids" value=""/>
|
||||
<input type="hidden" name="note_type" value="{$note_type}"/>
|
||||
</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, repeat_flag,
|
||||
IMAGE_MAX = 9, //最多可以上传多少张图片
|
||||
imageCollection = [], //图片集合
|
||||
goods_ids = "";
|
||||
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
if ($("#note_content").val()) {
|
||||
ue.ready(function () {
|
||||
ue.setContent($("#note_content").val());
|
||||
});
|
||||
}
|
||||
|
||||
layui.use(['form'], function () {
|
||||
form = layui.form;
|
||||
repeat_flag = false;
|
||||
|
||||
form.render();
|
||||
|
||||
//图片切换
|
||||
form.on('radio(cover_type)', function (data) {
|
||||
//0单图 1多图
|
||||
if (data.value == 0) {
|
||||
|
||||
if (imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else {
|
||||
if (imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
/* var upload = new Upload({
|
||||
elem: '#img',
|
||||
callback: function (res) {
|
||||
if (res.code >= 0) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(res.data.pic_path)
|
||||
}
|
||||
},
|
||||
deleteCallback: function () {
|
||||
upload.delete();
|
||||
imageCollection = [];
|
||||
}
|
||||
}); */
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click", "#multiple_uploading").on("click", "#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX) {
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index, 1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX)
|
||||
$("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
//商品亮点
|
||||
$("body").off("click", ".shopping-lightspot .add-lightspot").on("click", ".shopping-lightspot .add-lightspot", function () {
|
||||
var len = 0,
|
||||
html = "";
|
||||
|
||||
html += `<div class="lightspot-item">`;
|
||||
html += `亮点名称:<input type="text" class="layui-input" maxlength="10" placeholder="最多10个字">`;
|
||||
html += `<span>x</span>`;
|
||||
html += `</div>`;
|
||||
$(this).before(html);
|
||||
|
||||
len = $(".shopping-lightspot .lightspot-item").length;
|
||||
if (len >= 3)
|
||||
$(this).addClass("layui-hide");
|
||||
});
|
||||
|
||||
$("body").off("click", ".shopping-lightspot .lightspot-item span").on("click", ".shopping-lightspot .lightspot-item span", function () {
|
||||
$(this).parents(".lightspot-item").remove();
|
||||
|
||||
var len = $(".shopping-lightspot .lightspot-item").length;
|
||||
if (len < 3)
|
||||
$(".shopping-lightspot .add-lightspot").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function (data) {
|
||||
field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function (data) {
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
function formSubmit(data) {
|
||||
|
||||
if (selectedGoodsId.length == 0) {
|
||||
layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
data.cover_img = imageCollection.join();
|
||||
|
||||
var goodsHighlights = [];
|
||||
$(".lightspot-item").each(function (index, item) {
|
||||
goodsHighlights.push($(item).find('input').val());
|
||||
});
|
||||
data.goods_highlights = goodsHighlights.toString();
|
||||
|
||||
if (!ue.getContent()) {
|
||||
layer.msg("笔记内容不能为空");
|
||||
return false;
|
||||
}
|
||||
data.note_content = ue.getContent();
|
||||
|
||||
if (data.cover_img == '') {
|
||||
layer.msg("请选择笔记封面");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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) {
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function (index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 添加商品
|
||||
*/
|
||||
var selectedGoodsId = [];
|
||||
|
||||
function addGoods() {
|
||||
goodsSelect(function (data) {
|
||||
if (Object.keys(data).length == 0) {
|
||||
selectGoodsSkuId = [];
|
||||
$("#goodImg").html('<div class="upload-default"> <i class="iconfont iconshangchuan"></i> <p>选择商品</p> </div>');
|
||||
return;
|
||||
}
|
||||
|
||||
selectedGoodsId = [];
|
||||
for (var key in data) {
|
||||
var item = data[key];
|
||||
goods_ids = item.goods_id;
|
||||
$("input[name=goods_ids]").val(goods_ids);
|
||||
$("#goodImg").html("<img src=" + ns.img(item.goods_image.split(",")[0], 'SMALL') + " >");
|
||||
}
|
||||
selectedGoodsId.push(goods_ids);
|
||||
}, selectedGoodsId, {mode: "spu", max_num: 1, min_num: 1, disabled: 0});
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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>
|
||||
572
addon/notes/shop/view/notes/add_goods_video.html
Executable file
572
addon/notes/shop/view/notes/add_goods_video.html
Executable file
@@ -0,0 +1,572 @@
|
||||
<link rel="stylesheet" href="__STATIC__/ext/video/video.css">
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
|
||||
/*上传视频相关*/
|
||||
.video-thumb{display:block;float:left;width:250px;height:120px;position:relative}
|
||||
.delete-video{width:51px;height:51px;cursor:pointer;position:absolute;right:150px;top:45px;color:#fff;z-index:100}
|
||||
.replace-video{width:75px;height:51px;cursor:pointer;position:absolute;right:50px;top:45px;color:#fff;z-index:100}
|
||||
.replace-video2{right:100px}
|
||||
.mask{position:absolute;left:0;width:250px;height:92px;background:#000;opacity:.6;cursor:pointer;z-index:10}
|
||||
.del-img{width:14px;margin-right:5px;padding-bottom:2px}
|
||||
.up-img{width:14px;height:14px;margin-right:5px;padding-bottom:3px}
|
||||
.up-video{position:absolute;left:0;width:250px;height:92px;cursor:pointer;z-index:10}
|
||||
.video-thumb .hide{display:none!important}
|
||||
.video-thumb>#goods_video{width:100%!important;height:121px;background:#fff}
|
||||
.hide{display:none}
|
||||
</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="note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" checked>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type">
|
||||
</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>
|
||||
<input type="hidden" name="image" />
|
||||
<i class="del">x</i>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading layui-hide">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods_list">
|
||||
<label class="layui-form-label">关联商品:</label>
|
||||
<div class="layui-input-block">
|
||||
<table id="selected_goods_list"></table>
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>添加视频:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="hidden" name="video_path" placeholder="在此输入外链视频地址" value="" autocomplete="off" class="layui-input len-long">
|
||||
<div class="video-thumb">
|
||||
<video id="goods_video" class="video-js vjs-big-play-centered" controls="" poster="SHOP_IMG/goods_video_preview.png" preload="auto"></video>
|
||||
</div>
|
||||
<div id="videoUpload2" class="up-video" title="商品视频" >
|
||||
<span class="delete-video hide" onclick="deleteVideo()"><img class="del-img" src="SHOP_IMG/delete.png">删除</span>
|
||||
<span id="" class="replace-video hide js-add-goods-video" ><img class="up-img" src="SHOP_IMG/upload.png">上传视频</span>
|
||||
</div>
|
||||
|
||||
</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="backNotesList()">返回</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="goods_ids" value="" />
|
||||
<input type="hidden" name="note_type" value="{$note_type}" />
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script src="__STATIC__/ext/video/videojs-ie8.min.js"></script>
|
||||
<script src="__STATIC__/ext/video/video.min.js"></script>
|
||||
<script>
|
||||
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();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
/* var upload = new Upload({
|
||||
elem: '#img',
|
||||
callback:function (res) {
|
||||
if (res.code >= 0) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(res.data.pic_path)
|
||||
}
|
||||
},
|
||||
deleteCallback:function () {
|
||||
upload.delete();
|
||||
imageCollection = [];
|
||||
}
|
||||
}); */
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX) $("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
var upload = new Upload({
|
||||
elem: '#videoUpload',
|
||||
url: ns.url("shop/upload/video"),
|
||||
accept: "video",
|
||||
callback:function (res) {
|
||||
if (res.code >= 0) {
|
||||
$("input[name='video_path']").val(res.data.path);
|
||||
loadVideo();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(data)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
|
||||
data.cover_img = imageCollection.join();
|
||||
if(data.video_path == ''){
|
||||
layer.msg('请选择视频!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格渲染
|
||||
renderTable();
|
||||
function renderTable(goods_list = []) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'goods_name',
|
||||
title: '商品名称',
|
||||
unresize: 'false',
|
||||
width: '50%'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
align: 'center',
|
||||
width: '20%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}],
|
||||
],
|
||||
data: goods_list
|
||||
});
|
||||
}
|
||||
|
||||
/* 添加商品 */
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
goods_id = [];
|
||||
goods_list = [];
|
||||
|
||||
for (var key in data) {
|
||||
goods_id.push(data[key].goods_id);
|
||||
goods_list.push(data[key]);
|
||||
}
|
||||
|
||||
renderTable(goods_list);
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
selectedGoodsId = goods_id;
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
// 删除选中商品
|
||||
function delGoods(id) {
|
||||
$.each(goods_list, function(index, item) {
|
||||
var goods_id = item.goods_id;
|
||||
|
||||
if (id == Number(goods_id)) {
|
||||
goods_list.splice(index, 1);
|
||||
renderTable(goods_list);
|
||||
}
|
||||
});
|
||||
|
||||
$.each(selectedGoodsId, function(index, item) {
|
||||
if (id == Number(item)) {
|
||||
selectedGoodsId.splice(index, 1);
|
||||
goods_id = selectedGoodsId;
|
||||
}
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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);
|
||||
}
|
||||
}
|
||||
|
||||
function deleteVideoClass(){
|
||||
$('#goods_video').removeClass("vjs-error");
|
||||
}
|
||||
//删除已选择的视频
|
||||
function deleteVideo() {
|
||||
var src = $("input[name='video_path']").val();
|
||||
if (src != "") {
|
||||
var video = 'goods_video';
|
||||
var myPlayer = videojs(video);
|
||||
videojs(video).ready(function () {
|
||||
var myPlayer = this;
|
||||
myPlayer.pause();
|
||||
});
|
||||
|
||||
$("#goods_video_html5_api").attr('src', "");
|
||||
$(".vjs-modal-dialog-content").hide();
|
||||
$(".vjs-error-display").hide();
|
||||
setTimeout("deleteVideoClass()",30 );
|
||||
$('#goods_video_html5_api').attr('controls', true);
|
||||
$(".vjs-poster").hide();
|
||||
|
||||
$("input[name='video_path']").val('');
|
||||
}
|
||||
}
|
||||
|
||||
$('body').off('mouseover', '#videoUpload2').on('mouseover', '#videoUpload2', function () {
|
||||
$(this).addClass('mask');
|
||||
var src = $('#goods_video_html5_api').attr('src');
|
||||
if(src) {
|
||||
$(".delete-video").removeClass('hide');
|
||||
$(".replace-video").removeClass('hide').removeClass('replace-video2');
|
||||
} else {
|
||||
$(".replace-video").removeClass('hide').addClass('replace-video2');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$('body').off('mouseout', '#videoUpload2').on('mouseout', '#videoUpload2', function () {
|
||||
$(this).removeClass('mask');
|
||||
$(".delete-video").addClass('hide');
|
||||
$(".replace-video").addClass('hide');
|
||||
});
|
||||
|
||||
//添加商品视频
|
||||
$("body").off("click", ".js-add-goods-video").on("click", ".js-add-goods-video", function () {
|
||||
openAlbum(function (data) {
|
||||
if(data.length > 0) {
|
||||
$("input[name='video_path']").val(data[0]['pic_path']);
|
||||
loadVideo();
|
||||
}
|
||||
}, 1, 0, 'video');
|
||||
});
|
||||
|
||||
/**
|
||||
* 加载视频
|
||||
* @param flag 是否暂停
|
||||
*/
|
||||
function loadVideo(flag) {
|
||||
|
||||
var video_path = $("input[name='video_path']").val();
|
||||
if (!video_path.length) return;
|
||||
|
||||
var video = "goods_video";
|
||||
var myPlayer = videojs(video);
|
||||
var value = ns.img(video_path);
|
||||
|
||||
videojs(video).ready(function () {
|
||||
var myPlayer = this;
|
||||
myPlayer.src(value);
|
||||
myPlayer.load(value);
|
||||
myPlayer.play();
|
||||
if (flag) {
|
||||
setTimeout(function () {
|
||||
myPlayer.pause();
|
||||
}, 10);
|
||||
}
|
||||
setTimeout(function () {
|
||||
if (!$(".video-thumb .vjs-error-display").hasClass("vjs-hidden")) {
|
||||
$("input[name='video_path']").val("");//video.js Line:7873
|
||||
layer.msg("媒体不能加载,要么是因为服务器或网络失败,要么是因为格式不受支持。");
|
||||
} else {
|
||||
}
|
||||
}, 1000);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
471
addon/notes/shop/view/notes/add_shop_said.html
Executable file
471
addon/notes/shop/view/notes/add_shop_said.html
Executable file
@@ -0,0 +1,471 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
</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="note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" checked>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type">
|
||||
</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>
|
||||
<input type="hidden" name="image" />
|
||||
<i class="del">x</i>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading layui-hide">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods_list">
|
||||
<label class="layui-form-label">选择商品:</label>
|
||||
<div class="layui-input-block">
|
||||
<table id="selected_goods_list"></table>
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button>
|
||||
</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="note_content" id="note_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="backNotesList()">返回</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="goods_ids" value="" />
|
||||
<input type="hidden" name="note_type" value="{$note_type}" />
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<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($("#note_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#note_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();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
/* var upload = new Upload({
|
||||
elem: '#img',
|
||||
callback:function (res) {
|
||||
if (res.code >= 0) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(res.data.pic_path)
|
||||
}
|
||||
},
|
||||
deleteCallback:function () {
|
||||
upload.delete();
|
||||
imageCollection = [];
|
||||
}
|
||||
}); */
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX) $("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
|
||||
data.cover_img = imageCollection.join();
|
||||
|
||||
var goodsHighlights = [];
|
||||
$(".lightspot-item").each(function (index,item) {
|
||||
goodsHighlights.push($(item).find('input').val());
|
||||
});
|
||||
data.goods_highlights = goodsHighlights.toString();
|
||||
|
||||
if (!ue.getContent()){
|
||||
layer.msg("笔记内容不能为空");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
data.note_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格渲染
|
||||
renderTable();
|
||||
function renderTable(goods_list = []) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'goods_name',
|
||||
title: '商品名称',
|
||||
unresize: 'false',
|
||||
width: '50%'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
align: 'center',
|
||||
width: '20%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}],
|
||||
],
|
||||
data: goods_list
|
||||
});
|
||||
}
|
||||
|
||||
/* 添加商品 */
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
goods_id = [];
|
||||
goods_list = [];
|
||||
|
||||
for (var key in data) {
|
||||
goods_id.push(data[key].goods_id);
|
||||
goods_list.push(data[key]);
|
||||
}
|
||||
|
||||
renderTable(goods_list);
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
selectedGoodsId = goods_id;
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
// 删除选中商品
|
||||
function delGoods(id) {
|
||||
$.each(goods_list, function(index, item) {
|
||||
var goods_id = item.goods_id;
|
||||
|
||||
if (id == Number(goods_id)) {
|
||||
goods_list.splice(index, 1);
|
||||
renderTable(goods_list);
|
||||
}
|
||||
});
|
||||
|
||||
$.each(selectedGoodsId, function(index, item) {
|
||||
if (id == Number(item)) {
|
||||
selectedGoodsId.splice(index, 1);
|
||||
goods_id = selectedGoodsId;
|
||||
}
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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>
|
||||
528
addon/notes/shop/view/notes/add_wechat_article.html
Executable file
528
addon/notes/shop/view/notes/add_wechat_article.html
Executable file
@@ -0,0 +1,528 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
|
||||
.form-view .short-label{width:120px}
|
||||
.form-view .layui-input-block{margin-left:120px}
|
||||
.form-view .word-aux{margin-left:120px}
|
||||
.wechat-view{width: 100%;display: flex;}
|
||||
.content-view{width: 450px;}
|
||||
.form-view{flex:1;}
|
||||
.preview-head-div{background:url(STATIC_EXT/diyview/img/preview_head.png) no-repeat 50%/cover;font-size:14px;display:block;height:64px;line-height:82px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;cursor:pointer;margin:0 auto}
|
||||
#title_html{text-align: center;font-size: 16px;font-weight: bold;}
|
||||
|
||||
.content-box::-webkit-scrollbar { width: 0 !important }
|
||||
.content-box { -ms-overflow-style: none; }
|
||||
.content-box { overflow: -moz-scrollbars-none; }
|
||||
.pull-disabled-btn{opacity: .6;filter: alpha(opacity=60);color: #fff;}
|
||||
</style>
|
||||
|
||||
<div class="wechat-view">
|
||||
<div class="content-view" style="padding: 0px 24px;height: 100%;overflow: auto;">
|
||||
<div style="border: 1px solid rgb(241, 241, 241);width: 375px;">
|
||||
<div style="padding: 13px 20px; background: rgb(255, 255, 255); box-shadow: rgb(239, 239, 239) 0px -1px 0px inset;">
|
||||
<div data-v-713f8b68="" class="component-title" style="padding-left: 0px; font-size: 14px; font-weight: bold; color: rgba(0, 0, 0, 0.8);">店铺笔记预览</div>
|
||||
</div>
|
||||
<div class="preview-head-div" style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); text-align: left;"><span style="text-align: left;"> </span></div>
|
||||
<div>
|
||||
<h5 id="title_html"></h5>
|
||||
</div>
|
||||
<div class="content-box" style="padding: 9px 12px;box-sizing: border-box;height: 650px;overflow-x: hidden; overflow-y: auto;">
|
||||
<div id="content_html"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form form-wrap form-view" style="overflow: auto;background: #fff;position: relative;">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">文章链接:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="note_link" autocomplete="off" placeholder="请输入文章链接" class="layui-input len-mid">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn pull-btn" onclick="pullArticle(this)">获取文章</button>
|
||||
</div>
|
||||
</div>
|
||||
<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="note_title" lay-verify="required" onchange="fetchTitle(this.value)" maxlength="40" autocomplete="off" placeholder="笔记标题最多40个字" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_abstract" class="layui-textarea len-mid" maxlength="100"></textarea>
|
||||
</div>
|
||||
<div class="word-aux">笔记摘要最多可输入100个字</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>封面:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" checked>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 图片上传 -->
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-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>
|
||||
<input type="hidden" name="image" />
|
||||
<i class="del">x</i>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading layui-hide">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">推荐使用 750x420 像素的图片 最多上传1张</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>笔记分组:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods_list">
|
||||
<label class="layui-form-label short-label">关联商品:</label>
|
||||
<div class="layui-input-block">
|
||||
<table id="selected_goods_list"></table>
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-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 short-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 short-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 short-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 short-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 short-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="backNotesList()">返回</button>
|
||||
</div>
|
||||
<input type="hidden" name="note_content" value=""/>
|
||||
<input type="hidden" name="goods_ids" value="" />
|
||||
<input type="hidden" name="note_type" value="{$note_type}" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
//实例化富文本
|
||||
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();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
/* var upload = new Upload({
|
||||
elem: '#img',
|
||||
callback:function (res) {
|
||||
if (res.code >= 0) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(res.data.pic_path)
|
||||
}
|
||||
},
|
||||
deleteCallback:function () {
|
||||
upload.delete();
|
||||
imageCollection = [];
|
||||
}
|
||||
}); */
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX) $("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
|
||||
formSubmit(field)
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(data)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
if(data.note_content == ''){
|
||||
layer.msg('请先获取文章信息!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
data.cover_img = imageCollection.join();
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
listenerHash(); // 刷新页面
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格渲染
|
||||
renderTable();
|
||||
function renderTable(goods_list = []) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'goods_name',
|
||||
title: '商品名称',
|
||||
unresize: 'false',
|
||||
width: '50%'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
align: 'center',
|
||||
width: '20%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}],
|
||||
],
|
||||
data: goods_list
|
||||
});
|
||||
}
|
||||
|
||||
/* 添加商品 */
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
goods_id = [];
|
||||
goods_list = [];
|
||||
|
||||
for (var key in data) {
|
||||
goods_id.push(data[key].goods_id);
|
||||
goods_list.push(data[key]);
|
||||
}
|
||||
|
||||
renderTable(goods_list);
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
selectedGoodsId = goods_id;
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
// 删除选中商品
|
||||
function delGoods(id) {
|
||||
$.each(goods_list, function(index, item) {
|
||||
var goods_id = item.goods_id;
|
||||
|
||||
if (id == Number(goods_id)) {
|
||||
goods_list.splice(index, 1);
|
||||
renderTable(goods_list);
|
||||
}
|
||||
});
|
||||
|
||||
$.each(selectedGoodsId, function(index, item) {
|
||||
if (id == Number(item)) {
|
||||
selectedGoodsId.splice(index, 1);
|
||||
goods_id = selectedGoodsId;
|
||||
}
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 采集公众号文章信息
|
||||
*/
|
||||
function pullArticle(self_obj){
|
||||
if($(self_obj).hasClass('pull-disabled-btn')){
|
||||
return;
|
||||
}
|
||||
var wechat_url = $('input[name=note_link]').val();
|
||||
if(wechat_url == ''){
|
||||
layer.msg('文章链接不可为空!', {icon: 5, anim: 6});
|
||||
return false;
|
||||
}
|
||||
$(self_obj).addClass('pull-disabled-btn');
|
||||
$(self_obj).prepend(`<i class="common-loading-layer layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>`);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/pullArticle"),
|
||||
data: {wechat_url:$('input[name=note_link]').val()},
|
||||
// async: false,
|
||||
success: function(res){
|
||||
if (res.code >= 0) {
|
||||
fetchTitle(res.data.title);
|
||||
fetchArticle(res.data.content_html);
|
||||
initPullBtn();
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function initPullBtn(){
|
||||
$(".pull-btn").text('获取文章');
|
||||
$(".pull-btn").removeClass('pull-disabled-btn');
|
||||
}
|
||||
|
||||
//填充标题
|
||||
function fetchTitle(data){
|
||||
$('input[name=note_title]').val(data);
|
||||
$('#title_html').text(data);
|
||||
}
|
||||
function fetchArticle(data){
|
||||
$('input[name=note_content]').val(data);
|
||||
$("#content_html").html(data);
|
||||
}
|
||||
</script>
|
||||
261
addon/notes/shop/view/notes/drafts.html
Executable file
261
addon/notes/shop/view/notes/drafts.html
Executable file
@@ -0,0 +1,261 @@
|
||||
<style>
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
</style>
|
||||
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="note_title" placeholder="请输入笔记名称" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记类型:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="note_type" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
{foreach $note_type as $v}
|
||||
<option value="{$v['type']}">{$v['name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记分组:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="group_id" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">创建时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_time" id="start_time" autocomplete="off" placeholder="开始时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="end_time" id="end_time" autocomplete="off" placeholder="结束时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="notes_tab">
|
||||
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="notes_list" lay-filter="notes_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goods">
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.goods_image){ }}
|
||||
<img layer-src src="{{ns.img(d.goods_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{{d.goods_name}}">{{d.goods_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 时间 -->
|
||||
<script id="time" type="text/html">
|
||||
<div class="layui-elip">开始:{{ns.time_to_date(d.start_time)}}</div>
|
||||
<div class="layui-elip">结束:{{ns.time_to_date(d.end_time)}}</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="del">删除</a>
|
||||
{{# if(d.status == 0){ }}
|
||||
<a class="layui-btn text-color" lay-event="release">发布</a>
|
||||
{{# }else{ }}
|
||||
<a class="layui-btn" lay-event="unrelease">取消发布</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var table;
|
||||
|
||||
layui.use(['form', 'element','laydate'], function() {
|
||||
var form = layui.form,
|
||||
laydate = layui.laydate,
|
||||
repeat_flag = false; //防重复标识
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#notes_list',
|
||||
url: ns.url("notes://shop/notes/lists"),
|
||||
where:{
|
||||
status:0
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
field:'note_title',
|
||||
title: '笔记标题',
|
||||
unresize: 'false',
|
||||
width: '23%'
|
||||
}, {
|
||||
field: 'group_name',
|
||||
title: '所属分组',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
title: '添加时间',
|
||||
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
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function(obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'edit': //编辑
|
||||
location.hash = ns.hash("notes://shop/notes/edit", {"note_id": data.note_id});
|
||||
break;
|
||||
case 'del': //删除
|
||||
deleteNotes(data.note_id);
|
||||
break;
|
||||
case 'release': //发布
|
||||
release(data.note_id);
|
||||
break;
|
||||
case 'unrelease': //取消发布
|
||||
unrelease(data.note_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteNotes(note_id) {
|
||||
layer.confirm('确定要删除该笔记吗?', function(index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("notes://shop/notes/delete"),
|
||||
data: {
|
||||
note_id: note_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function() {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
function release(id){
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("notes://shop/notes/releaseEvent"),
|
||||
data: {
|
||||
status: 1,
|
||||
note_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function unrelease(id){
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("notes://shop/notes/releaseEvent"),
|
||||
data: {
|
||||
status: 0,
|
||||
note_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function add() {
|
||||
location.hash = ns.hash("notes://shop/notes/add");
|
||||
}
|
||||
</script>
|
||||
429
addon/notes/shop/view/notes/edit_article.html
Executable file
429
addon/notes/shop/view/notes/edit_article.html
Executable file
@@ -0,0 +1,429 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>管理员可以在此页编辑店铺笔记</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="note_title" value="{$info.note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_abstract" class="layui-textarea len-long" maxlength="100">{$info.note_abstract}</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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" {if $info.cover_type == 0} checked {/if}>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type" {if $info.cover_type == 1} checked {/if}>
|
||||
</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 {if $info.cover_type != 0}layui-hide{/if}">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading {if $info.cover_type != 1}layui-hide{/if}">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}" {if $info.group_id == $v.group_id} selected {/if}>{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</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="note_content" id="note_content" value="{$info.note_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="note_id" value="{$info.note_id}" />
|
||||
<input type="hidden" name="goods_ids" value="{$info.goods_ids}" />
|
||||
<input type="hidden" name="note_type" value="{$info.note_type}" />
|
||||
|
||||
<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="backNotesList()">返回</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="backNotesList()">返回</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.LAY_INDEX}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<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,
|
||||
coverType = '{$info.cover_type}',
|
||||
coverImg = '{$info.cover_img}';
|
||||
|
||||
initImg();//初始化图片
|
||||
function initImg(){
|
||||
if (coverType == 0){
|
||||
imageCollection.push(coverImg);
|
||||
//单图
|
||||
if (coverImg) $("#img").html("<img src=" + ns.img(coverImg) + " >");
|
||||
} else if (coverType == 1) {
|
||||
//多图
|
||||
var coverImgArr = coverImg.split(','),
|
||||
html = '';
|
||||
|
||||
imageCollection = coverImgArr;
|
||||
for (var i = 0; i < coverImgArr.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(coverImgArr[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
}
|
||||
}
|
||||
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
if($("#note_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#note_content").val());
|
||||
});
|
||||
}
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
// 单图上传
|
||||
$("body").off("click", "#img").on("click", "#img", function () {
|
||||
var html = '';
|
||||
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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX)
|
||||
$("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(field)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// 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.note_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/* 添加商品 */
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
for (var key in data) {
|
||||
var item = data[key];
|
||||
|
||||
var temp_html = `<div style="margin-bottom:20px;">`;
|
||||
temp_html += `<div style="width:100%;padding:8px;box-sizing:border-box;border-radius:4px;background:#f8f8f8;display:flex">`;
|
||||
temp_html += `<img style='width:74px;height:74px;border-radius:4px' src="${item.goods_image ? ns.img(item.goods_image) : ''}">`;
|
||||
temp_html += `<div style="margin-left: 10px;width: 200px;flex: 1;min-height: 0;min-width: 0;">`;
|
||||
temp_html += `<div style="font-size:14px;color:#202021;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap" >${item.goods_name}</div>`;
|
||||
temp_html += `<div style="font-size:13px;color:#5e6066;overflow:hidden;text-overflow:ellipsis;white-space:nowrap"></div>`;
|
||||
temp_html += `<div style="font-size:14px;color:#fd463e;font-weight:700;margin-top:10px"><span>¥</span>${item.price}</div>`;
|
||||
temp_html += `</div>`;
|
||||
temp_html += `</div></div>`;
|
||||
ue.setContent(temp_html, true);
|
||||
}
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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>
|
||||
515
addon/notes/shop/view/notes/edit_goods_item.html
Executable file
515
addon/notes/shop/view/notes/edit_goods_item.html
Executable file
@@ -0,0 +1,515 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
.shopping-lightspot{width: 290px;}
|
||||
.shopping-lightspot .add-lightspot{cursor: pointer;}
|
||||
.shopping-lightspot .add-lightspot, .shopping-lightspot .lightspot-item{padding: 15px;border: 1px dashed #e5e5e5;line-height: 1;}
|
||||
.shopping-lightspot .lightspot-item{position: relative;display: flex;align-items: center;margin-bottom: 10px;white-space: nowrap;}
|
||||
.shopping-lightspot .lightspot-item span{position: absolute;top: -10px;right: -9px;display: none;text-align: center;width: 20px;height: 20px;border: 1px solid #999;border-radius: 50%;font-size: 18px;color: #999;background: #fff;}
|
||||
.shopping-lightspot .lightspot-item:hover span{display: block;cursor: pointer;}
|
||||
.shopping-lightspot .lightspot-item input{margin-left: 5px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>管理员可以在此页编辑店铺笔记</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="note_title" value="{$info.note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_abstract" class="layui-textarea len-long" maxlength="100">{$info.note_abstract}</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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" {if $info.cover_type == 0} checked {/if}>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type" {if $info.cover_type == 1} checked {/if}>
|
||||
</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 {if $info.cover_type != 0}layui-hide{/if}">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading {if $info.cover_type != 1}layui-hide{/if}">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}" {if $info.group_id == $v.group_id} selected {/if}>{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">关联商品:</label>
|
||||
<div class="layui-input-inline">
|
||||
<div class="upload-img-block square">
|
||||
{if condition="$info.goods_list"}
|
||||
<div class="upload-img-box" id="goodImg" lay-verify="select" onclick="addGoods()">
|
||||
<img src="{:img(explode(',', $info.goods_list[0]['goods_image'])[0])}" alt="">
|
||||
</div>
|
||||
{else/}
|
||||
<div class="upload-img-box" id="goodImg" lay-verify="select" onclick="addGoods()">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>选择商品</p>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">商品亮点:</label>
|
||||
<div class="layui-input-block shopping-lightspot">
|
||||
<div class="add-lightspot">+ 添加亮点</div>
|
||||
</div>
|
||||
<div class="word-aux">商品亮点最多可添加3个亮点</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="note_content" id="note_content" value="{$info.note_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="note_id" value="{$info.note_id}" />
|
||||
<input type="hidden" name="goods_ids" value="{$info.goods_ids}" />
|
||||
<input type="hidden" name="note_type" value="{$info.note_type}" />
|
||||
|
||||
<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="backNotesList()">返回</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="backNotesList()">返回</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<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,
|
||||
IMAGE_MAX = 9, //最多可以上传多少张图片
|
||||
imageCollection = [], //图片集合
|
||||
repeat_flag = false,
|
||||
coverType = '{$info.cover_type}',
|
||||
coverImg = '{$info.cover_img}',
|
||||
goods_ids = '{$info.goods_ids}';
|
||||
|
||||
initImg();//初始化图片
|
||||
function initImg(){
|
||||
if (coverType == 0){
|
||||
imageCollection.push(coverImg);
|
||||
//单图
|
||||
$("#img").html("<img src=" + ns.img(coverImg) + " >");
|
||||
} else if (coverType == 1) {
|
||||
//多图
|
||||
var coverImgArr = coverImg.split(','),
|
||||
html = '';
|
||||
|
||||
imageCollection = coverImgArr;
|
||||
for (var i = 0; i < coverImgArr.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(coverImgArr[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
}
|
||||
}
|
||||
//初始化商品亮点
|
||||
var spotGoods = "{$info.goods_highlights}";
|
||||
initShoppingLightspot();
|
||||
function initShoppingLightspot() {
|
||||
if (!spotGoods) return false;
|
||||
|
||||
spotGoods = spotGoods.split(',');
|
||||
|
||||
var html = '';
|
||||
|
||||
for(var i = 0; i < spotGoods.length; i++){
|
||||
html += `<div class="lightspot-item">`;
|
||||
html += `亮点名称:<input type="text" class="layui-input" maxlength="10" placeholder="最多10个字" value="${spotGoods[i]}">`;
|
||||
html += `<span>x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
if (spotGoods.length == 3) $(".shopping-lightspot").html(html);
|
||||
else $(".shopping-lightspot .add-lightspot").before(html)
|
||||
}
|
||||
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
if($("#note_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#note_content").val());
|
||||
});
|
||||
}
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX)
|
||||
$("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
//商品亮点
|
||||
$("body").off("click", ".shopping-lightspot .add-lightspot").on("click", ".shopping-lightspot .add-lightspot", function () {
|
||||
var len = 0,
|
||||
html = "";
|
||||
|
||||
html += `<div class="lightspot-item">`;
|
||||
html += `亮点名称:<input type="text" class="layui-input" maxlength="10" placeholder="最多10个字">`;
|
||||
html += `<span>x</span>`;
|
||||
html += `</div>`;
|
||||
$(this).before(html);
|
||||
|
||||
len = $(".shopping-lightspot .lightspot-item").length;
|
||||
if(len >= 3)
|
||||
$(this).addClass("layui-hide");
|
||||
});
|
||||
|
||||
$("body").off("click", ".shopping-lightspot .lightspot-item span").on("click", ".shopping-lightspot .lightspot-item span", function () {
|
||||
$(this).parents(".lightspot-item").remove();
|
||||
|
||||
var len = $(".shopping-lightspot .lightspot-item").length;
|
||||
if(len < 3) $(".shopping-lightspot .add-lightspot").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(field)
|
||||
{
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
field.cover_img = imageCollection.join();
|
||||
|
||||
var goodsHighlights = [];
|
||||
for (var i = 0; i < $(".lightspot-item").length; i++){
|
||||
if($(".lightspot-item").eq(i).find('input').val()){
|
||||
goodsHighlights.push($(".lightspot-item").eq(i).find('input').val());
|
||||
}
|
||||
// else{
|
||||
// layer.msg("商品亮点不能为空");
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
field.goods_highlights = goodsHighlights.toString();
|
||||
|
||||
if (!ue.getContent()){
|
||||
layer.msg("笔记内容不能为空");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(field.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
field.note_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品
|
||||
*/
|
||||
var selectedGoodsId = ['{$info.goods_ids}'];
|
||||
function addGoods() {
|
||||
goodsSelect(function (data) {
|
||||
if (Object.keys(data).length == 0) {
|
||||
selectGoodsSkuId = [];
|
||||
$("#goodImg").html('<div class="upload-default"> <i class="iconfont iconshangchuan"></i> <p>选择商品</p> </div>');
|
||||
return;
|
||||
}
|
||||
|
||||
selectedGoodsId = [];
|
||||
for (var key in data) {
|
||||
var item = data[key];
|
||||
goods_ids = item.goods_id;
|
||||
$("input[name=goods_ids]").val(goods_ids);
|
||||
$("#goodImg").html("<img src=" + ns.img(item.goods_image.split(",")[0],'small') + " >");
|
||||
$(".good-img").val(item.goods_image);
|
||||
$(".good-name").text(item.goods_name);
|
||||
$(".good-price span").text(item.price);
|
||||
}
|
||||
selectedGoodsId.push(goods_ids);
|
||||
}, selectedGoodsId, {mode: "spu", max_num: 1, min_num: 1, disabled:0});
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
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>
|
||||
585
addon/notes/shop/view/notes/edit_goods_video.html
Executable file
585
addon/notes/shop/view/notes/edit_goods_video.html
Executable file
@@ -0,0 +1,585 @@
|
||||
|
||||
<link rel="stylesheet" href="__STATIC__/ext/video/video.css">
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
|
||||
/*上传视频相关*/
|
||||
.video-thumb{display:block;float:left;width:250px;height:120px;position:relative}
|
||||
.delete-video{width:51px;height:51px;cursor:pointer;position:absolute;right:150px;top:45px;color:#fff;z-index:100}
|
||||
.replace-video{width:75px;height:51px;cursor:pointer;position:absolute;right:50px;top:45px;color:#fff;z-index:100}
|
||||
.replace-video2{right:100px}
|
||||
.mask{position:absolute;left:0;width:250px;height:92px;background:#000;opacity:.6;cursor:pointer;z-index:10}
|
||||
.del-img{width:14px;margin-right:5px;padding-bottom:2px}
|
||||
.up-img{width:14px;height:14px;margin-right:5px;padding-bottom:3px}
|
||||
.up-video{position:absolute;left:0;width:250px;height:92px;cursor:pointer;z-index:10}
|
||||
.video-thumb .hide{display:none!important}
|
||||
.video-thumb>#goods_video{width:100%!important;height:121px;background:#fff}
|
||||
.hide{display:none}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>管理员可以在此页编辑店铺笔记</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="note_title" value="{$info.note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_abstract" class="layui-textarea len-long" maxlength="100">{$info.note_abstract}</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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" {if $info.cover_type == 0} checked {/if}>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type" {if $info.cover_type == 1} checked {/if}>
|
||||
</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 {if $info.cover_type != 0}layui-hide{/if}">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading {if $info.cover_type != 1}layui-hide{/if}">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}" {if $info.group_id == $v.group_id} selected {/if}>{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods_list">
|
||||
<label class="layui-form-label">关联商品:</label>
|
||||
|
||||
<div class="layui-input-block">
|
||||
<table id="selected_goods_list"></table>
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="required">*</span>添加视频:</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="hidden" name="video_path" placeholder="在此输入外链视频地址" value="{$info.video_path}" autocomplete="off" class="layui-input len-long">
|
||||
<div class="video-thumb">
|
||||
<video id="goods_video" class="video-js vjs-big-play-centered" controls="" poster="SHOP_IMG/goods_video_preview.png" preload="auto"></video>
|
||||
</div>
|
||||
<div id="videoUpload2" class="up-video" title="商品视频" >
|
||||
<span class="delete-video hide" onclick="deleteVideo()"><img class="del-img" src="SHOP_IMG/delete.png">删除</span>
|
||||
<span id="" class="replace-video hide js-add-goods-video" ><img class="up-img" src="SHOP_IMG/upload.png">上传视频</span>
|
||||
</div>
|
||||
|
||||
</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="note_id" value="{$info.note_id}"/>
|
||||
<input type="hidden" name="goods_ids" value="{$info.goods_ids}"/>
|
||||
<input type="hidden" name="note_type" value="{$info.note_type}"/>
|
||||
|
||||
<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="backNotesDrafts()">返回</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="backNotesDrafts()">返回</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.LAY_INDEX}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script src="__STATIC__/ext/video/videojs-ie8.min.js"></script>
|
||||
<script src="__STATIC__/ext/video/video.min.js"></script>
|
||||
<script>
|
||||
var form,upload,
|
||||
IMAGE_MAX = 9, //最多可以上传多少张图片
|
||||
imageCollection = [], //图片集合
|
||||
selectedGoodsId = [],
|
||||
goods_id=[],
|
||||
repeat_flag = false,
|
||||
coverType = '{$info.cover_type}',
|
||||
coverImg = '{$info.cover_img}',
|
||||
goods_list = {:json_encode($info.goods_list, JSON_UNESCAPED_UNICODE)};
|
||||
|
||||
initImg();//初始化图片
|
||||
function initImg(){
|
||||
if (coverType == 0){
|
||||
imageCollection.push(coverImg);
|
||||
//单图
|
||||
if (coverImg) $("#img").html("<img src=" + ns.img(coverImg) + " >");
|
||||
} else if (coverType == 1) {
|
||||
//多图
|
||||
var coverImgArr = coverImg.split(','), html = '';
|
||||
|
||||
imageCollection = coverImgArr;
|
||||
for (var i = 0; i < coverImgArr.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(coverImgArr[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
}
|
||||
}
|
||||
|
||||
loadVideo(true);
|
||||
|
||||
//初始化商品
|
||||
$.each(goods_list, function(index, item) {
|
||||
var id = item.goods_id;
|
||||
selectedGoodsId.push(id);
|
||||
goods_id.push(id);
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
|
||||
renderTable(goods_list); // 初始化表格
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX)
|
||||
$("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(data)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
|
||||
data.cover_img = imageCollection.join();
|
||||
if(data.video_path == ''){
|
||||
layer.msg('请选择视频!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/edit"),
|
||||
data: data,
|
||||
async: false,
|
||||
success: function(res){
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
layer.confirm('编辑成功', {
|
||||
title:'操作提示',
|
||||
btn: ['返回列表', '继续编辑'],
|
||||
yes: function(index, layero){
|
||||
if(data.status == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格渲染
|
||||
function renderTable(goods_list) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'goods_name',
|
||||
title: '商品名称',
|
||||
unresize: 'false',
|
||||
width: '50%'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
align: 'center',
|
||||
width: '20%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}],
|
||||
],
|
||||
data: goods_list,
|
||||
});
|
||||
}
|
||||
|
||||
// 添加商品
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
goods_id = [];
|
||||
goods_list = [];
|
||||
|
||||
for (var key in data) {
|
||||
goods_id.push(data[key].goods_id);
|
||||
goods_list.push(data[key]);
|
||||
}
|
||||
|
||||
renderTable(goods_list);
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
selectedGoodsId = goods_id;
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
// 删除选中商品
|
||||
function delGoods(index) {
|
||||
goods_list.splice(index, 1);
|
||||
renderTable(goods_list);
|
||||
|
||||
selectedGoodsId.splice(index, 1);
|
||||
goods_id = selectedGoodsId;
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
}
|
||||
|
||||
function backNotesDrafts() {
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
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);
|
||||
}
|
||||
}
|
||||
function deleteVideoClass(){
|
||||
$('#goods_video').removeClass("vjs-error");
|
||||
}
|
||||
//删除已选择的视频
|
||||
function deleteVideo() {
|
||||
var src = $("input[name='video_path']").val();
|
||||
if (src != "") {
|
||||
var video = 'goods_video';
|
||||
var myPlayer = videojs(video);
|
||||
videojs(video).ready(function () {
|
||||
var myPlayer = this;
|
||||
myPlayer.pause();
|
||||
});
|
||||
|
||||
$("#goods_video_html5_api").attr('src', "");
|
||||
$(".vjs-modal-dialog-content").hide();
|
||||
$(".vjs-error-display").hide();
|
||||
setTimeout("deleteVideoClass()",30 );
|
||||
$('#goods_video_html5_api').attr('controls', true);
|
||||
$(".vjs-poster").hide();
|
||||
|
||||
$("input[name='video_path']").val('');
|
||||
}
|
||||
}
|
||||
|
||||
$('body').off('mouseover', '#videoUpload2').on('mouseover', '#videoUpload2', function () {
|
||||
$(this).addClass('mask');
|
||||
var src = $('#goods_video_html5_api').attr('src');
|
||||
if(src) {
|
||||
$(".delete-video").removeClass('hide');
|
||||
$(".replace-video").removeClass('hide').removeClass('replace-video2');
|
||||
} else {
|
||||
$(".replace-video").removeClass('hide').addClass('replace-video2');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$('body').off('mouseout', '#videoUpload2').on('mouseout', '#videoUpload2', function () {
|
||||
$(this).removeClass('mask');
|
||||
$(".delete-video").addClass('hide');
|
||||
$(".replace-video").addClass('hide');
|
||||
});
|
||||
|
||||
//添加商品视频
|
||||
$("body").off("click", ".js-add-goods-video").on("click", ".js-add-goods-video", function () {
|
||||
openAlbum(function (data) {
|
||||
if(data.length > 0) {
|
||||
$("input[name='video_path']").val(data[0]['pic_path']);
|
||||
loadVideo();
|
||||
}
|
||||
}, 1, 0, 'video');
|
||||
});
|
||||
/**
|
||||
* 加载视频
|
||||
* @param flag 是否暂停
|
||||
*/
|
||||
function loadVideo(flag) {
|
||||
|
||||
var video_path = $("input[name='video_path']").val();
|
||||
if (!video_path.length) return;
|
||||
|
||||
var video = "goods_video";
|
||||
var myPlayer = videojs(video);
|
||||
var value = ns.img(video_path);
|
||||
|
||||
videojs(video).ready(function () {
|
||||
var myPlayer = this;
|
||||
myPlayer.src(value);
|
||||
myPlayer.load(value);
|
||||
myPlayer.play();
|
||||
// if (flag) {
|
||||
// setTimeout(function () {
|
||||
// myPlayer.pause();
|
||||
// }, 10);
|
||||
// }
|
||||
setTimeout(function () {
|
||||
if (!$(".video-thumb .vjs-error-display").hasClass("vjs-hidden")) {
|
||||
$("input[name='video_path']").val("");//video.js Line:7873
|
||||
layer.msg("媒体不能加载,要么是因为服务器或网络失败,要么是因为格式不受支持。");
|
||||
} else {
|
||||
}
|
||||
}, 1000);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
491
addon/notes/shop/view/notes/edit_shop_said.html
Executable file
491
addon/notes/shop/view/notes/edit_shop_said.html
Executable file
@@ -0,0 +1,491 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>管理员可以在此页编辑店铺笔记</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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="note_title" value="{$info.note_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 short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_abstract" class="layui-textarea len-long" maxlength="100">{$info.note_abstract}</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-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type" {if $info.cover_type == 0} checked {/if}>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type" {if $info.cover_type == 1} checked {/if}>
|
||||
</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 {if $info.cover_type != 0}layui-hide{/if}">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading {if $info.cover_type != 1}layui-hide{/if}">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</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">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}" {if $info.group_id == $v.group_id} selected {/if}>{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods_list">
|
||||
<label class="layui-form-label">选择商品:</label>
|
||||
|
||||
<div class="layui-input-block">
|
||||
<table id="selected_goods_list"></table>
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button>
|
||||
</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="note_content" id="note_content" value="{$info.note_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="note_id" value="{$info.note_id}" />
|
||||
<input type="hidden" name="goods_ids" value="{$info.goods_ids}" />
|
||||
<input type="hidden" name="note_type" value="{$info.note_type}" />
|
||||
|
||||
<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="backNotesDrafts()">返回</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="backNotesDrafts()">返回</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.LAY_INDEX-1}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<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,
|
||||
coverType = '{$info.cover_type}',
|
||||
coverImg = '{$info.cover_img}',
|
||||
goods_list = {:json_encode($info.goods_list, JSON_UNESCAPED_UNICODE)};
|
||||
|
||||
initImg();//初始化图片
|
||||
function initImg(){
|
||||
if (coverType == 0){
|
||||
imageCollection.push(coverImg);
|
||||
//单图
|
||||
if (coverImg) $("#img").html("<img src=" + ns.img(coverImg) + " >");
|
||||
} else if (coverType == 1) {
|
||||
//多图
|
||||
var coverImgArr = coverImg.split(','),
|
||||
html = '';
|
||||
|
||||
imageCollection = coverImgArr;
|
||||
for (var i = 0; i < coverImgArr.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(coverImgArr[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
}
|
||||
}
|
||||
|
||||
//初始化商品
|
||||
$.each(goods_list, function(index, item) {
|
||||
var id = item.goods_id;
|
||||
selectedGoodsId.push(id);
|
||||
goods_id.push(id);
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
|
||||
renderTable(goods_list); // 初始化表格
|
||||
|
||||
//实例化富文本
|
||||
var ue = UE.getEditor('editor');
|
||||
if($("#note_content").val()){
|
||||
ue.ready(function() {
|
||||
ue.setContent($("#note_content").val());
|
||||
});
|
||||
}
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX)
|
||||
$("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(field)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// 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.note_content = ue.getContent();
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格渲染
|
||||
function renderTable(goods_list) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'goods_name',
|
||||
title: '商品名称',
|
||||
unresize: 'false',
|
||||
width: '50%'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
align: 'center',
|
||||
width: '20%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}],
|
||||
],
|
||||
data: goods_list,
|
||||
});
|
||||
}
|
||||
|
||||
// 添加商品
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
goods_id = [];
|
||||
goods_list = [];
|
||||
|
||||
for (var key in data) {
|
||||
goods_id.push(data[key].goods_id);
|
||||
goods_list.push(data[key]);
|
||||
}
|
||||
|
||||
renderTable(goods_list);
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
selectedGoodsId = goods_id;
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
// 删除选中商品
|
||||
function delGoods(index) {
|
||||
goods_list.splice(index, 1);
|
||||
renderTable(goods_list);
|
||||
|
||||
selectedGoodsId.splice(index, 1);
|
||||
goods_id = selectedGoodsId;
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
}
|
||||
|
||||
function backNotesDrafts() {
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}
|
||||
|
||||
//检测数据类型
|
||||
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>
|
||||
568
addon/notes/shop/view/notes/edit_wechat_article.html
Executable file
568
addon/notes/shop/view/notes/edit_wechat_article.html
Executable file
@@ -0,0 +1,568 @@
|
||||
<style>
|
||||
.layui-form-selected dl{z-index: 1000;}
|
||||
.upload-img-block .upload-img-box .upload-default{position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}
|
||||
.multiple-uploading{display: flex;flex-wrap: wrap;}
|
||||
.multiple-uploading .multiple-item{position: relative;display: flex;justify-content: center;align-items: center;flex-direction: column;margin-bottom: 10px;padding: 10px;width: 100px;height: 100px;border: 1px dashed #ddd;text-align: center;box-sizing: border-box;line-height: 1;color: #5a5a5a;}
|
||||
.multiple-uploading .multiple-item p{line-height: 20px;margin-top: 5px;}
|
||||
.multiple-uploading .multiple-item span{display: none;position: absolute;top: -10px;right: -7px;width: 20px;height: 20px;border: 1px solid #999;color: #999;background-color: #fff;border-radius: 50%;line-height: 1;font-size: 18px;cursor: pointer;}
|
||||
.multiple-uploading .multiple-item:hover .icon{display: block;}
|
||||
.multiple-uploading .multiple-item ~ .multiple-item{margin-left: 10px;}
|
||||
.multiple-uploading .iconfont{font-size: 30px;color: #6D7278;}
|
||||
#multiple_uploading{cursor: pointer;}
|
||||
.multiple-item img{max-width: 100%;max-height: 100%;}
|
||||
|
||||
.form-view .short-label{width:120px}
|
||||
.form-view .layui-input-block{margin-left:120px}
|
||||
.form-view .word-aux{margin-left:120px}
|
||||
.wechat-view{width: 100%;display: flex;}
|
||||
.content-view{width: 450px;}
|
||||
.form-view{flex:1;}
|
||||
.preview-head-div{background:url(STATIC_EXT/diyview/img/preview_head.png) no-repeat 50%/cover;font-size:14px;display:block;height:64px;line-height:82px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;cursor:pointer;margin:0 auto}
|
||||
#title_html{text-align: center;font-size: 16px;font-weight: bold;}
|
||||
|
||||
.content-box::-webkit-scrollbar { width: 0 !important }
|
||||
.content-box { -ms-overflow-style: none; }
|
||||
.content-box { overflow: -moz-scrollbars-none; }
|
||||
.pull-disabled-btn{opacity: .6;filter: alpha(opacity=60);color: #fff;}
|
||||
</style>
|
||||
|
||||
<div class="wechat-view">
|
||||
<div class="content-view" style="padding: 0px 24px;height: 100%;overflow: auto;">
|
||||
<div style=" border: 1px solid rgb(241, 241, 241);width: 375px;">
|
||||
<div style="padding: 13px 20px; background: rgb(255, 255, 255); box-shadow: rgb(239, 239, 239) 0px -1px 0px inset;">
|
||||
<div class="component-title" style="padding-left: 0px; font-size: 14px; font-weight: bold; color: rgba(0, 0, 0, 0.8);">店铺笔记预览</div>
|
||||
</div>
|
||||
<div class="preview-head-div" style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); text-align: left;"><span style="text-align: left;"> </span></div>
|
||||
<div>
|
||||
<h5 id="title_html">{$info.note_title}</h5>
|
||||
</div>
|
||||
<div class="content-box" style="padding: 9px 12px;box-sizing: border-box;height: 650px;overflow-x: hidden; overflow-y: auto;">
|
||||
<div id="content_html">{php}echo $info['note_content'];{/php}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form form-wrap form-view" style="overflow: auto;background: #fff;position: relative;">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">文章链接:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="note_link" value="{$info.note_link}" autocomplete="off" placeholder="请输入文章链接" class="layui-input len-mid">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn pull-btn" onclick="pullArticle(this)">获取文章</button>
|
||||
</div>
|
||||
</div>
|
||||
<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" value="{$info.note_title}"name="note_title" lay-verify="required" onchange="fetchTitle(this.value)" maxlength="40" autocomplete="off" placeholder="笔记标题最多40个字" class="layui-input len-mid">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label">摘要:</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="note_abstract" class="layui-textarea len-mid" maxlength="100">{$info.note_abstract}</textarea>
|
||||
</div>
|
||||
<div class="word-aux">笔记摘要最多可输入100个字</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>封面:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="cover_type" value="0" title="单图" lay-filter="cover_type"{if $info.cover_type == 0} checked{/if}>
|
||||
<input type="radio" name="cover_type" value="1" title="多图" lay-filter="cover_type"{if $info.cover_type == 1} checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 图片上传 -->
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"></label>
|
||||
<div class="layui-input-block img-upload">
|
||||
<div class="upload-img-block square simple-uploading {if $info.cover_type != 0}layui-hide{/if}">
|
||||
<div class="upload-img-box" id="img">
|
||||
<div class="upload-default">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="multiple-uploading {if $info.cover_type != 1}layui-hide{/if}">
|
||||
<div class="multiple-item" id="multiple_uploading">
|
||||
<i class="iconfont iconshangchuan"></i>
|
||||
<p>点击上传</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="word-aux">推荐使用 750x420 像素的图片 最多上传1张</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-label"><span class="required">*</span>笔记分组:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="group_id" lay-verify="required">
|
||||
<option value="">请选择</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}" {if $info.group_id == $v.group_id} selected {/if}>{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item goods_list">
|
||||
<label class="layui-form-label short-label">关联商品:</label>
|
||||
|
||||
<div class="layui-input-block">
|
||||
<table id="selected_goods_list"></table>
|
||||
<button class="layui-btn" onclick="addGoods()">选择商品</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label short-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 short-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 short-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 short-label">虚拟阅读数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" value="{$info.initial_read_num}" 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 short-label">虚拟点赞数:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" value="{$info.initial_dianzan_num}" 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 short-label">排序:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" value="{$info.sort}" 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="backNotesList()">返回</button>
|
||||
</div>
|
||||
<input type="hidden" name="note_content" value="{$info.note_content}"/>
|
||||
<input type="hidden" name="goods_ids" value="{$info.goods_ids}" />
|
||||
<input type="hidden" name="note_type" value="{$info.note_type}" />
|
||||
<input type="hidden" name="note_id" value="{$info.note_id}" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
//实例化富文本
|
||||
var form,repeat_flag,
|
||||
IMAGE_MAX = 9, //最多可以上传多少张图片
|
||||
imageCollection = [], //图片集合
|
||||
coverType = '{$info.cover_type}',
|
||||
coverImg = '{$info.cover_img}',
|
||||
selectedGoodsId = [],
|
||||
goods_id=[],
|
||||
goods_list = {:json_encode($info.goods_list, JSON_UNESCAPED_UNICODE)};
|
||||
|
||||
initImg();//初始化图片
|
||||
function initImg(){
|
||||
if (coverType == 0){
|
||||
imageCollection.push(coverImg);
|
||||
//单图
|
||||
$("#img").html("<img src=" + ns.img(coverImg) + " >");
|
||||
} else if (coverType == 1) {
|
||||
//多图
|
||||
var coverImgArr = coverImg.split(','),
|
||||
html = '';
|
||||
|
||||
imageCollection = coverImgArr;
|
||||
for (var i = 0; i < coverImgArr.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(coverImgArr[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
}
|
||||
}
|
||||
|
||||
//初始化商品
|
||||
$.each(goods_list, function(index, item) {
|
||||
var id = item.goods_id;
|
||||
selectedGoodsId.push(id);
|
||||
goods_id.push(id);
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
|
||||
renderTable(goods_list); // 初始化表格
|
||||
|
||||
layui.use(['form'], function() {
|
||||
form = layui.form;
|
||||
repeat_flag = false;
|
||||
|
||||
form.render();
|
||||
|
||||
/**
|
||||
* 图片切换
|
||||
*/
|
||||
form.on('radio(cover_type)', function(data){
|
||||
//0单图 1多图
|
||||
if (data.value == 0){
|
||||
|
||||
if(imageCollection.length) {
|
||||
imageCollection.splice(1, imageCollection.length);
|
||||
var val = '<img src="' + ns.img(imageCollection[0]) + '" alt="">';
|
||||
$("#img").html(val);
|
||||
}
|
||||
|
||||
$(".simple-uploading").removeClass("layui-hide");
|
||||
$(".multiple-uploading").addClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 750x420 像素的图片 最多上传1张');
|
||||
|
||||
} else{
|
||||
if(imageCollection.length) {
|
||||
var html = '';
|
||||
html += `<div class="multiple-item" id="multiple_uploading">`;
|
||||
html += `<i class="iconfont iconshangchuan"></i>`;
|
||||
html += `<p>点击上传</p>`;
|
||||
html += `</div>`;
|
||||
|
||||
for (var i = 0; i < imageCollection.length; i++) {
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(imageCollection[i])}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
|
||||
$(".multiple-uploading").html(html);
|
||||
}
|
||||
|
||||
$(".simple-uploading").addClass("layui-hide");
|
||||
$(".multiple-uploading").removeClass("layui-hide");
|
||||
$(".simple-uploading").parents(".layui-form-item").find('.word-aux').text('推荐使用 350x350 像素的图片,最多上传9张');
|
||||
}
|
||||
});
|
||||
|
||||
/* var upload = new Upload({
|
||||
elem: '#img',
|
||||
callback:function (res) {
|
||||
if (res.code >= 0) {
|
||||
imageCollection = [];
|
||||
imageCollection.push(res.data.pic_path)
|
||||
}
|
||||
},
|
||||
deleteCallback:function () {
|
||||
upload.delete();
|
||||
imageCollection = [];
|
||||
}
|
||||
}); */
|
||||
|
||||
// 单图上传
|
||||
$("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);
|
||||
});
|
||||
|
||||
//多图上传
|
||||
$("body").off("click","#multiple_uploading").on("click","#multiple_uploading", function () {
|
||||
var html = '';
|
||||
openAlbum(function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (imageCollection.length < IMAGE_MAX){
|
||||
imageCollection.push(data[i].pic_path);
|
||||
|
||||
html += `<div class="multiple-item">`;
|
||||
html += `<img src="${ns.img(data[i].pic_path)}" alt="">`;
|
||||
html += `<span class="icon">x</span>`;
|
||||
html += `</div>`;
|
||||
}
|
||||
}
|
||||
if (imageCollection.length >= IMAGE_MAX)
|
||||
$("#multiple_uploading").addClass("layui-hide");
|
||||
|
||||
$(".multiple-uploading").append(html);
|
||||
|
||||
}, IMAGE_MAX);
|
||||
});
|
||||
|
||||
$("body").off('click', '.multiple-item .icon').on('click', '.multiple-item .icon', function () {
|
||||
var index = $(this).parent().index() - 1;
|
||||
imageCollection.splice(index,1);
|
||||
$(this).parent().remove();
|
||||
|
||||
if (imageCollection.length < IMAGE_MAX) $("#multiple_uploading").removeClass("layui-hide");
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(立即发布)
|
||||
*/
|
||||
form.on('submit(save)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 1;
|
||||
formSubmit(field)
|
||||
});
|
||||
|
||||
/**
|
||||
* 表单提交(草稿箱)
|
||||
*/
|
||||
form.on('submit(saveDrafts)', function(data){
|
||||
var field = data.field;
|
||||
field.status = 0;
|
||||
formSubmit(field)
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
function formSubmit(data)
|
||||
{
|
||||
if (!imageCollection.length){
|
||||
layer.msg('请选择封面图!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selectedGoodsId.length == 0) {
|
||||
// layer.msg('请选择参与活动的商品!', {icon: 5, anim: 6});
|
||||
// return;
|
||||
// }
|
||||
if(data.note_content == ''){
|
||||
layer.msg('请先获取文章信息!', {icon: 5, anim: 6});
|
||||
return;
|
||||
}
|
||||
data.cover_img = imageCollection.join();
|
||||
|
||||
var goodsHighlights = [];
|
||||
$(".lightspot-item").each(function (index,item) {
|
||||
goodsHighlights.push($(item).find('input').val());
|
||||
});
|
||||
data.goods_highlights = goodsHighlights.toString();
|
||||
|
||||
if(data.sort < 0){
|
||||
layer.msg("排序号不能小于0");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/edit"),
|
||||
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 == 0){
|
||||
location.hash = ns.hash("notes://shop/notes/drafts");
|
||||
}else{
|
||||
location.hash = ns.hash("notes://shop/notes/lists");
|
||||
}
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function(index, layero) {
|
||||
layer.close(index);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 表格渲
|
||||
function renderTable(goods_list = []) {
|
||||
//展示已知数据
|
||||
table = new Table({
|
||||
elem: '#selected_goods_list',
|
||||
cols: [
|
||||
[{
|
||||
field: 'goods_name',
|
||||
title: '商品名称',
|
||||
unresize: 'false',
|
||||
width: '50%'
|
||||
}, {
|
||||
field: 'price',
|
||||
title: '商品价格(元)',
|
||||
unresize: 'false',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
templet: function(data) {
|
||||
return '¥' + data.price;
|
||||
}
|
||||
}, {
|
||||
field: 'goods_stock',
|
||||
title: '库存',
|
||||
unresize: 'false',
|
||||
align: 'center',
|
||||
width: '20%'
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}],
|
||||
],
|
||||
data: goods_list
|
||||
});
|
||||
}
|
||||
|
||||
/* 添加商品 */
|
||||
function addGoods(){
|
||||
goodsSelect(function (data) {
|
||||
|
||||
goods_id = [];
|
||||
goods_list = [];
|
||||
|
||||
for (var key in data) {
|
||||
goods_id.push(data[key].goods_id);
|
||||
goods_list.push(data[key]);
|
||||
}
|
||||
|
||||
renderTable(goods_list);
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
selectedGoodsId = goods_id;
|
||||
|
||||
},selectedGoodsId, {mode: "spu"});
|
||||
}
|
||||
|
||||
// 删除选中商品
|
||||
function delGoods(id) {
|
||||
$.each(goods_list, function(index, item) {
|
||||
var goods_id = item.goods_id;
|
||||
|
||||
if (id == Number(goods_id)) {
|
||||
goods_list.splice(index, 1);
|
||||
renderTable(goods_list);
|
||||
}
|
||||
});
|
||||
|
||||
$.each(selectedGoodsId, function(index, item) {
|
||||
if (id == Number(item)) {
|
||||
selectedGoodsId.splice(index, 1);
|
||||
goods_id = selectedGoodsId;
|
||||
}
|
||||
});
|
||||
$("input[name='goods_ids']").val(goods_id.toString());
|
||||
}
|
||||
|
||||
function backNotesList() {
|
||||
location.hash = ns.hash("notes://shop/notes/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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 采集公众号文章信息
|
||||
*/
|
||||
function pullArticle(self_obj){
|
||||
if($(self_obj).hasClass('pull-disabled-btn')){
|
||||
return;
|
||||
}
|
||||
var wechat_url = $('input[name=note_link]').val();
|
||||
if(wechat_url == ''){
|
||||
layer.msg('文章链接不可为空!', {icon: 5, anim: 6});
|
||||
return false;
|
||||
}
|
||||
$(self_obj).addClass('pull-disabled-btn');
|
||||
$(self_obj).prepend(`<i class="common-loading-layer layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>`);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
dataType: 'JSON',
|
||||
url: ns.url("notes://shop/notes/pullArticle"),
|
||||
data: {wechat_url:$('input[name=note_link]').val()},
|
||||
// async: false,
|
||||
success: function(res){
|
||||
if (res.code >= 0) {
|
||||
fetchTitle(res.data.title);
|
||||
fetchArticle(res.data.content_html);
|
||||
initPullBtn();
|
||||
}else{
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function initPullBtn(){
|
||||
$(".pull-btn").text('获取文章');
|
||||
$(".pull-btn").removeClass('pull-disabled-btn');
|
||||
}
|
||||
|
||||
//填充标题
|
||||
function fetchTitle(data){
|
||||
$('input[name=note_title]').val(data);
|
||||
$('#title_html').text(data);
|
||||
}
|
||||
function fetchArticle(data){
|
||||
$('input[name=note_content]').val(data);
|
||||
$("#content_html").html(data);
|
||||
}
|
||||
</script>
|
||||
427
addon/notes/shop/view/notes/lists.html
Executable file
427
addon/notes/shop/view/notes/lists.html
Executable file
@@ -0,0 +1,427 @@
|
||||
<style>
|
||||
.goods-type{display: flex;justify-content: space-between;}
|
||||
.goods-type .item-type{display: flex;flex-direction: column;align-items: center;padding: 15px;border: 1px solid #e5e5e5;border-radius: 5px;cursor: pointer;}
|
||||
.goods-type .item-type ~ .item-type{margin-left: 20px;}
|
||||
.goods-type .item-img{display: flex;justify-content: center;align-content: center;width: 200px;height: 270px;}
|
||||
.goods-type .item-img img{max-width: 100%;max-height: 100%;}
|
||||
.goods-type .item-content{margin-top: 15px;text-align: center;}
|
||||
.goods-type .item-content .description{margin-top: 10px;font-size: 12px;color: #999;line-height: 1.6;}
|
||||
.layui-layer-page .layui-layer-content{padding: 30px;}
|
||||
|
||||
.layui-table-header{overflow: inherit;}
|
||||
.layui-table-header .layui-table-cell{overflow: inherit;}
|
||||
.layui-form-item .layui-form-checkbox[lay-skin=primary] {margin-top: 0;}
|
||||
.layui-layout-admin .layui-form-item .layui-input-inline{background-color: #fff;}
|
||||
</style>
|
||||
|
||||
<div class="single-filter-box">
|
||||
<button class="layui-btn" onclick="add()">添加笔记</button>
|
||||
</div>
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">筛选</h2>
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="note_title" placeholder="请输入笔记名称" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记类型:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="note_type" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
{foreach $note_type as $v}
|
||||
<option value="{$v['type']}">{$v['name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记分组:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="group_id" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">发布时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_time" id="start_time" autocomplete="off" placeholder="开始时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="end_time" id="end_time" autocomplete="off" placeholder="结束时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab table-tab" lay-filter="notes_tab">
|
||||
|
||||
<div class="layui-tab-content">
|
||||
<!-- 列表 -->
|
||||
<table id="notes_list" lay-filter="notes_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 商品 -->
|
||||
<script type="text/html" id="goods">
|
||||
|
||||
<!--<ul class="layui-tab-title">-->
|
||||
<!--<li class="layui-this" data-status="">全部</li>-->
|
||||
<!--<li data-status="1">正常</li>-->
|
||||
<!--<li data-status="2">关闭</li>-->
|
||||
<!--</ul>-->
|
||||
|
||||
<div class="table-title">
|
||||
<div class="title-pic">
|
||||
{{# if(d.goods_image){ }}
|
||||
<img layer-src src="{{ns.img(d.goods_image.split(',')[0],'small')}}"/>
|
||||
{{# } }}
|
||||
</div>
|
||||
<div class="title-content">
|
||||
<a href="javascript:;" class="multi-line-hiding text-color" title="{{d.goods_name}}">{{d.goods_name}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 时间 -->
|
||||
<script id="time" type="text/html">
|
||||
<div class="layui-elip">开始:{{ns.time_to_date(d.start_time)}}</div>
|
||||
<div class="layui-elip">结束:{{ns.time_to_date(d.end_time)}}</div>
|
||||
</script>
|
||||
|
||||
<!-- 操作 -->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="edit">编辑</a>
|
||||
<a class="layui-btn" lay-event="del">删除</a>
|
||||
{{# if(d.status == 0){ }}
|
||||
<a class="layui-btn text-color" lay-event="release">发布</a>
|
||||
{{# }else{ }}
|
||||
<a class="layui-btn" lay-event="unrelease">取消发布</a>
|
||||
{{# } }}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 添加笔记 -->
|
||||
<script type="text/html" id="addNote">
|
||||
<div class="goods-type">
|
||||
<div class="item-type" onclick="location.hash = ns.hash('notes://shop/notes/add', {'note_type': 'goods_item'})">
|
||||
<div class="item-img"><img src="SHOP_IMG/notes/item_introduction.png" alt=""></div>
|
||||
<div class="item-content">
|
||||
<p class="name">单品介绍</p>
|
||||
<p class="description">围绕单个商品的亮点、使用心得展开介绍。好的介绍将让粉丝购买的欲望大增</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item-type" onclick="location.hash = ns.hash('notes://shop/notes/add', {'note_type': 'shop_said'})">
|
||||
<div class="item-img"><img src="SHOP_IMG/notes/shopkeeper_said.png" alt=""></div>
|
||||
<div class="item-content">
|
||||
<p class="name">掌柜说</p>
|
||||
<p class="description">创作自由度高,多种组件灵活编辑。优质的笔记更容易使消费者产生购买欲望</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="item-type" onclick="location.hash = ns.hash('notes://shop/notes/add', {'note_type': 'article'})">-->
|
||||
<!-- <div class="item-img"><img src="SHOP_IMG/notes/shopkeeper_said.png" alt=""></div>-->
|
||||
<!-- <div class="item-content">-->
|
||||
<!-- <p class="name">种草文章</p>-->
|
||||
<!-- <p class="description">商家将专题,爆款等活动展示在一起,提升消费者对活动的参与</p>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="item-type" onclick="location.hash = ns.hash('notes://shop/notes/add', {'note_type': 'wechat_article'})">-->
|
||||
<!-- <div class="item-img"><img src="SHOP_IMG/notes/shopkeeper_said.png" alt=""></div>-->
|
||||
<!-- <div class="item-content">-->
|
||||
<!-- <p class="name">公众号文章</p>-->
|
||||
<!-- <p class="description">在小程序或者公众号内发布公众号文章,打通小程序、公众号、视频号等微信流量</p>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="item-type" onclick="location.hash = ns.hash('notes://shop/notes/add', {'note_type': 'goods_video'})">-->
|
||||
<!-- <div class="item-img"><img src="SHOP_IMG/notes/shopkeeper_said.png" alt=""></div>-->
|
||||
<!-- <div class="item-content">-->
|
||||
<!-- <p class="name">短视频</p>-->
|
||||
<!-- <p class="description">快速布局短视频导购,提升店铺留存,促进商品成交转化</p>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.note_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl,table,form,laydate,repeat_flag;
|
||||
layui.use(['form', 'element','laydate','laytpl'], function() {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
laydate = layui.laydate;
|
||||
repeat_flag = false; //防重复标识
|
||||
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#notes_list',
|
||||
url: ns.url("notes://shop/notes/lists"),
|
||||
where:{
|
||||
status:1
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
field:'note_title',
|
||||
title: '笔记标题',
|
||||
unresize: 'false',
|
||||
width: '15%'
|
||||
},{
|
||||
field: 'note_type_name',
|
||||
title: '笔记类型',
|
||||
unresize: 'false',
|
||||
width: '8%'
|
||||
}, {
|
||||
field: 'group_name',
|
||||
title: '所属分组',
|
||||
unresize: 'false',
|
||||
width: '10%'
|
||||
}, {
|
||||
field: 'read_num',
|
||||
title: '阅读次数',
|
||||
unresize: 'false',
|
||||
width: '8%'
|
||||
}, {
|
||||
field: 'dianzan_num',
|
||||
title: '点赞次数',
|
||||
unresize: 'false',
|
||||
width: '8%'
|
||||
}, {
|
||||
field: 'sort',
|
||||
title: '排序',
|
||||
unresize: 'false',
|
||||
align: 'left',
|
||||
sort : true,
|
||||
width: '10%',
|
||||
templet:'#editSort'
|
||||
}, {
|
||||
title: '创建时间',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet:function(data){
|
||||
return ns.time_to_date(data.create_time);
|
||||
}
|
||||
}, {
|
||||
title: '发布时间',
|
||||
unresize: 'false',
|
||||
width: '13%',
|
||||
templet:function(data){
|
||||
return ns.time_to_date(data.release_time);
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
width: '15%',
|
||||
align: 'right',
|
||||
}]
|
||||
]
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
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("notes://shop/notes/edit", {"note_id": data.note_id,"note_type": data.note_type});
|
||||
break;
|
||||
case 'del': //删除
|
||||
deleteNotes(data.note_id);
|
||||
break;
|
||||
case 'release': //发布
|
||||
release(data.note_id);
|
||||
break;
|
||||
case 'unrelease': //取消发布
|
||||
unrelease(data.note_id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteNotes(note_id) {
|
||||
layer.confirm('确定要删除该笔记吗?', function(index) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
layer.close(index);
|
||||
|
||||
$.ajax({
|
||||
url: ns.url("notes://shop/notes/delete"),
|
||||
data: {
|
||||
note_id: note_id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
if (res.code == 0) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}, function() {
|
||||
layer.close();
|
||||
repeat_flag = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(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("notes://shop/notes/modifySort"),
|
||||
data: {
|
||||
sort: data,
|
||||
note_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function add() {
|
||||
var html = $("#addNote").html();
|
||||
laytpl(html).render({}, function (html) {
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '选择笔记类型',
|
||||
area: ['800px'],
|
||||
//area: ['1300px'],
|
||||
content: html
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$("body").off("mouseenter",".goods-type .item-type").on("mouseenter",".goods-type .item-type",function () {
|
||||
$(this).addClass("border-color");
|
||||
});
|
||||
$("body").off("mouseleave",".goods-type .item-type").on("mouseleave",".goods-type .item-type",function () {
|
||||
$(this).removeClass("border-color");
|
||||
});
|
||||
|
||||
function release(id){
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("notes://shop/notes/releaseEvent"),
|
||||
data: {
|
||||
status: 1,
|
||||
note_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function unrelease(id){
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: ns.url("notes://shop/notes/releaseEvent"),
|
||||
data: {
|
||||
status: 0,
|
||||
note_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
274
addon/notes/shop/view/notes/notes_select.html
Executable file
274
addon/notes/shop/view/notes/notes_select.html
Executable file
@@ -0,0 +1,274 @@
|
||||
<style>
|
||||
.notes-list-layer {padding: 20px;}
|
||||
</style>
|
||||
|
||||
<div class="notes-list-layer">
|
||||
<div class="screen layui-collapse" lay-filter="selection_panel">
|
||||
<div class="layui-colla-item">
|
||||
<form class="layui-colla-content layui-form layui-show">
|
||||
<div class="layui-form-item">
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记名称:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="note_title" placeholder="请输入笔记名称" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记类型:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="note_type" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
{foreach $note_type as $v}
|
||||
<option value="{$v['type']}">{$v['name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">笔记分组:</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="group_id" lay-filter="status">
|
||||
<option value="">全部</option>
|
||||
{foreach $group_list as $v}
|
||||
<option value="{$v['group_id']}">{$v['group_name']}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">发布时间:</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="start_time" id="start_time" autocomplete="off" placeholder="开始时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
<div class="layui-form-mid">-</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" class="layui-input" name="end_time" id="end_time" autocomplete="off" placeholder="结束时间" readonly>
|
||||
<i class=" iconrili iconfont calendar"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="notes_list" lay-filter="notes_list"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="checkbox">
|
||||
{{# if($.inArray(d.note_id.toString(), selected_id_arr) != -1){ }}
|
||||
<input type="checkbox" data-note-id="{{d.note_id}}" name="notes_checkbox" lay-skin="primary" lay-filter="notes_checkbox" checked>
|
||||
{{# }else{ }}
|
||||
<input type="checkbox" data-note-id="{{d.note_id}}" name="notes_checkbox" lay-skin="primary" lay-filter="notes_checkbox">
|
||||
{{# } }}
|
||||
<input type="hidden" data-note-id="{{d.note_id}}" name="notes_json" value='{{ JSON.stringify(d) }}' />
|
||||
</script>
|
||||
|
||||
<!-- 排序 -->
|
||||
<script type="text/html" id="editSort">
|
||||
<input name="sort" type="number" onchange="editSort({{d.note_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort len-short">
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var laytpl, table, form, laydate,
|
||||
select_id = localStorage.getItem('note_select_id') || '', // "{$select_id}", //选中商品id
|
||||
max_num = "{$max_num}", //最大商品数量
|
||||
min_num = "{$min_num}", //最小商品数量
|
||||
selected_id_arr = select_id.length ? select_id.split(',') : [],
|
||||
select_list = [], //选中商品所有数据
|
||||
notesIdArr = selected_id_arr;
|
||||
layui.use(['form', 'element', 'laydate', 'laytpl'], function() {
|
||||
form = layui.form;
|
||||
laytpl = layui.laytpl;
|
||||
laydate = layui.laydate;
|
||||
|
||||
form.render();
|
||||
|
||||
//渲染时间
|
||||
laydate.render({
|
||||
elem: '#start_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#end_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
|
||||
table = new Table({
|
||||
elem: '#notes_list',
|
||||
url: ns.url("notes://shop/notes/notesSelect"),
|
||||
where:{
|
||||
status:1
|
||||
},
|
||||
cols: [
|
||||
[{
|
||||
unresize: 'false',
|
||||
width: '8%',
|
||||
templet: '#checkbox'
|
||||
}, {
|
||||
field:'note_title',
|
||||
title: '笔记标题',
|
||||
unresize: 'false',
|
||||
width: '20%'
|
||||
}, {
|
||||
field: 'group_name',
|
||||
title: '所属分组',
|
||||
unresize: 'false',
|
||||
width: '15%'
|
||||
}, {
|
||||
field: 'read_num',
|
||||
title: '阅读次数',
|
||||
unresize: 'false',
|
||||
width: '10%'
|
||||
}, {
|
||||
field: 'dianzan_num',
|
||||
title: '点赞次数',
|
||||
unresize: 'false',
|
||||
width: '10%'
|
||||
}, {
|
||||
title: '排序',
|
||||
unresize: 'false',
|
||||
align: 'left',
|
||||
templet:'#editSort',
|
||||
width: '17%'
|
||||
}, {
|
||||
title: '发布时间',
|
||||
unresize: 'false',
|
||||
templet:function(data){
|
||||
return ns.time_to_date(data.create_time);
|
||||
},
|
||||
width: '20%'
|
||||
}]
|
||||
],
|
||||
callback: function(res) {
|
||||
// 更新复选框状态
|
||||
for (var i=0;i<notesIdArr.length;i++) {
|
||||
var selected_notes = $("input[name='notes_checkbox'][data-note-id='" + notesIdArr[i] + "']");
|
||||
if (selected_notes.length) {
|
||||
$("input[name='notes_checkbox'][data-note-id='" + notesIdArr[i] + "']").prop("checked", true);
|
||||
}
|
||||
}
|
||||
|
||||
initData();
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 搜索功能
|
||||
*/
|
||||
form.on('submit(search)', function(data) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
where: data.field
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
// 勾选商品
|
||||
form.on('checkbox(notes_checkbox)', function(data) {
|
||||
var note_id = $(data.elem).attr("data-note-id"),
|
||||
json = {};
|
||||
|
||||
var dataLen = $("input[name='notes_checkbox'][data-note-id="+ note_id +"]:checked").length;
|
||||
|
||||
if (dataLen){
|
||||
json = JSON.parse($("input[name='notes_json'][data-note-id="+ note_id +"]").val());
|
||||
delete json.LAY_INDEX;
|
||||
delete json.LAY_TABLE_INDEX;
|
||||
delete json.create_time;
|
||||
select_list.push(json);
|
||||
notesIdArr.push(note_id);
|
||||
} else {
|
||||
var temp = "";
|
||||
$.each(select_list, function(index, item) {
|
||||
if (note_id == item.note_id) {
|
||||
temp = index;
|
||||
}
|
||||
})
|
||||
select_list.splice(temp);
|
||||
notesIdArr.splice(temp);
|
||||
}
|
||||
});
|
||||
|
||||
//初始化数据
|
||||
function initData(){
|
||||
var dataLen = $("input[name='notes_checkbox'][data-note-id]:checked").length;
|
||||
|
||||
//父级
|
||||
for (var i = 0; i < dataLen; i++){
|
||||
var noteId = $("input[name='notes_checkbox'][data-note-id]:checked").eq(i).attr("data-note-id");
|
||||
var ident = false;
|
||||
for (var k = 0; k < select_list.length; k++){
|
||||
if(select_list[k].note_id == noteId){
|
||||
ident = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ident) return;
|
||||
|
||||
json = JSON.parse($("input[name='notes_json'][data-note-id="+ noteId +"]").val());
|
||||
delete json.LAY_INDEX;
|
||||
delete json.LAY_TABLE_INDEX;
|
||||
delete json.create_time;
|
||||
select_list.push(json);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 监听单元格编辑
|
||||
function editSort(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("notes://shop/notes/modifySort"),
|
||||
data: {
|
||||
sort: data,
|
||||
note_id: id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function(res) {
|
||||
layer.msg(res.message);
|
||||
if (res.code == 0) {
|
||||
table.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function selectNotesListener(callback) {
|
||||
var res = select_list;
|
||||
var num = notesIdArr.length;
|
||||
res = notesIdArr;
|
||||
|
||||
if (min_num && min_num > 0 && num < min_num) {
|
||||
layer.msg("所选数量不能少于" + min_num + '条');
|
||||
return;
|
||||
}
|
||||
callback(res);
|
||||
}
|
||||
</script>
|
||||
BIN
addon/notes/shop/view/public/img/distribution.png
Executable file
BIN
addon/notes/shop/view/public/img/distribution.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
addon/notes/shop/view/public/img/distribution_new.png
Executable file
BIN
addon/notes/shop/view/public/img/distribution_new.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
addon/notes/shop/view/public/img/distribution_select.png
Executable file
BIN
addon/notes/shop/view/public/img/distribution_select.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Reference in New Issue
Block a user