This commit is contained in:
lisong 2022-01-10 13:07:24 +08:00
parent 9a771acc77
commit 8b5672a203
22 changed files with 1639 additions and 214 deletions

16
.example.env Executable file
View File

@ -0,0 +1,16 @@
[app]
app_debug = true;
app_trace = false;
[database]
hostname = like-mysql
database = test_likeshop
username = root
password = roixxx2008fffot
hostport = 3306
[project]
env_name =
file_domain = www.likeshopv2.localhost

8
.gitignore vendored Executable file
View File

@ -0,0 +1,8 @@
/config/install.lock
/public/uploads/*
!/public/uploads/index.html
/runtime/*
!/runtime/index.html
/.env
/public/upgrade/*
!/public/upgrade/version.json

7
.htaccess Executable file
View File

@ -0,0 +1,7 @@
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>

42
.travis.yml Executable file
View File

@ -0,0 +1,42 @@
sudo: false
language: php
branches:
only:
- stable
cache:
directories:
- $HOME/.composer/cache
before_install:
- composer self-update
install:
- composer install --no-dev --no-interaction --ignore-platform-reqs
- zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip .
- composer require --update-no-dev --no-interaction "topthink/think-image:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0"
- composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0"
- composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0"
- zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip .
script:
- php think unit
deploy:
provider: releases
api_key:
secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw=
file:
- ThinkPHP_Core.zip
- ThinkPHP_Full.zip
skip_cleanup: true
on:
tags: true

View File

@ -74,6 +74,8 @@ class ShopSetting extends AdminBase
'service' => ConfigServer::get('policy', 'service'), 'service' => ConfigServer::get('policy', 'service'),
'privacy' => ConfigServer::get('policy', 'privacy'), 'privacy' => ConfigServer::get('policy', 'privacy'),
'after_sale' => ConfigServer::get('policy', 'after_sale'), 'after_sale' => ConfigServer::get('policy', 'after_sale'),
'payment' => ConfigServer::get('policy', 'payment'),
'reason' => ConfigServer::get('policy', 'reason'),
]; ];
$this->assign('config', $config); $this->assign('config', $config);
@ -87,6 +89,8 @@ class ShopSetting extends AdminBase
ConfigServer::set('policy', 'service', $post['service']); ConfigServer::set('policy', 'service', $post['service']);
ConfigServer::set('policy', 'privacy', $post['privacy']); ConfigServer::set('policy', 'privacy', $post['privacy']);
ConfigServer::set('policy', 'after_sale', $post['after_sale']); ConfigServer::set('policy', 'after_sale', $post['after_sale']);
ConfigServer::set('policy', 'payment', $post['payment']);
ConfigServer::set('policy', 'reason', $post['reason']);
$this->_success('修改成功'); $this->_success('修改成功');
} }
} }

View File

@ -0,0 +1,99 @@
<?php
// +----------------------------------------------------------------------
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | Author: HcyShop-kiki
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\logic\{
StoreLogic
};
class Store extends AdminBase
{
/**
* 门店列表
* @return mixed
*/
public function lists()
{
if ($this->request->isAjax()) {
$get = $this->request->get();
$this->_success('', StoreLogic::lists($get));
}
return $this->fetch();
}
/**
* 添加文章
*/
public function add()
{
if ($this->request->isAjax()) {
$post = $this->request->post();
$post['del'] = 0;
$result = $this->validate($post, 'app\admin\validate\Store.add');
if ($result === true) {
StoreLogic::addStore($post);
$this->_success('添加成功!');
}
$this->_error($result);
}
return $this->fetch();
}
/**
* 编辑文章
*/
public function edit($id)
{
if ($this->request->isAjax()) {
$post = $this->request->post();
$post['del'] = 0;
$result = $this->validate($post, 'app\admin\validate\Store.edit');
if ($result === true) {
StoreLogic::editStore($post);
$this->_success('编辑成功!');
}
$this->_error($result);
}
$article = StoreLogic::getStore($id);
$this->assign('article', $article);
return $this->fetch();
}
/**
* 删除文章
*/
public function del($id)
{
if ($this->request->isAjax()) {
$result = $this->validate(['id' => $id], 'app\admin\validate\Store.del');
if ($result === true) {
StoreLogic::delStore($id);
$this->_success('删除成功');
}
$this->_error($result);
}
}
/**
* 修改状态
*/
public function switchStatus()
{
$post = $this->request->post();
StoreLogic::switchStatus($post);
$this->_success('修改成功');
}
}

View File

@ -0,0 +1,104 @@
<?php
// +----------------------------------------------------------------------
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | Author: HcyShop-kiki
// +----------------------------------------------------------------------
namespace app\admin\logic;
use app\admin\model\Store;
use app\common\server\UrlServer;
use think\Db;
class StoreLogic
{
public static function lists($get)
{
$store = Db::name('store');
$where = [];
$where[] = ['del', '=', '0'];
if (isset($get['title']) && $get['title']) {
$where[] = ['title|address|image|business', 'like', '%' . $get['title'] . '%'];
}
$count = $store->where($where)->count();
$list = $store->where($where)->page($get['page'], $get['limit'])->order('id desc')->select();
foreach ($list as &$item) {
$item['image'] = UrlServer::getFileUrl($item['image']);
$item['create_time'] = date('Y-m-d H:i:s', $item['create_time']);
if ($item['is_show'] == 1) {
$item['is_show_text'] = '显示';
} else {
$item['is_show_text'] = '隐藏';
}
}
return ['count' => $count, 'lists' => $list];
}
public static function addStore($post)
{
$store = new Store();
$data = [
'title' => $post['title'],
'address' => $post['address'],
'image' => $post['image'],
'business' => $post['business'],
'is_show' => $post['is_show'],
'traffic' => $post['traffic'],
'create_time' => time(),
'contact' => $post['contact'],
];
return $store->save($data);
}
public static function editStore($post)
{
$store = new Store();
$data = [
'title' => $post['title'],
'address' => $post['address'],
'image' => $post['image'],
'business' => $post['business'],
'is_show' => $post['is_show'],
'traffic' => $post['traffic'],
'update_time' => time(),
'contact' => $post['contact'],
];
return $store->save($data, ['id' => $post['id'], 'del' => 0]);
}
public static function getStore($id)
{
$store = new Store();
$detail = $store::get(['id' => $id, 'del' => 0]);
$detail['abs_image'] = UrlServer::getFileUrl($detail['image']);
return $detail;
}
public static function delStore($id)
{
$store = new Store();
$data = [
'del' => time(),
'update_time' => 1
];
return $article->save($data, ['id' => $id, 'del' => 0]);
}
public static function switchStatus($post)
{
$data = [
'is_show' => $post['is_show'],
'update_time' => time(),
];
return Db::name('store')->where(['del' => 0, 'id' => $post['id']])->update($data);
}
}

View File

@ -50,6 +50,8 @@ class SupplierLogic{
'cid' => $post['cid'], 'cid' => $post['cid'],
'remark' => $post['remark'], 'remark' => $post['remark'],
'honor' => $post['honor'], 'honor' => $post['honor'],
'is_notice' => $post['is_notice'],
'position' => $post['position'],
'create_time' => time(), 'create_time' => time(),
]; ];
@ -68,6 +70,8 @@ class SupplierLogic{
'cid' => $post['cid'], 'cid' => $post['cid'],
'remark' => $post['remark'], 'remark' => $post['remark'],
'honor' => $post['honor'], 'honor' => $post['honor'],
'is_notice' => $post['is_notice'],
'position' => $post['position'],
'update_time' => time(), 'update_time' => time(),
]; ];

View File

@ -0,0 +1,13 @@
<?php
// +----------------------------------------------------------------------
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | Author: HcyShop-kiki
// +----------------------------------------------------------------------
namespace app\admin\model;
use think\Model;
class Store extends Model {
}

View File

@ -0,0 +1,53 @@
<?php
// +----------------------------------------------------------------------
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | Author: HcyShop-kiki
// +----------------------------------------------------------------------
namespace app\admin\validate;
use think\Validate;
class Store extends Validate
{
protected $rule = [
'id' => 'require',
'title' => 'require|unique:article,title^del',
'address' => 'require',
'image' => 'require',
'business' => 'require',
'traffic' => 'require',
'contact' => 'require',
];
protected $message = [
'id.require' => 'id不可为空',
'title.require' => '请输入门店名称',
'title.unique' => '标题不能重复!',
'address.require' => '请输入门店地址',
'image.require' => '请商城门店图片',
'business.require' => '请输入门店营业时间',
'traffic.require' => '请输入门店交通情况',
'contact.require' => '请输入门店联系方式',
];
protected function sceneAdd()
{
$this->remove('id');
}
protected function sceneEdit()
{
}
public function sceneDel()
{
$this->only(['id']);
}
}

View File

@ -25,6 +25,8 @@
<li class="layui-this">服务协议</li> <li class="layui-this">服务协议</li>
<li>隐私政策</li> <li>隐私政策</li>
<li>售后保障</li> <li>售后保障</li>
<li>选择理由</li>
<li>支付方式</li>
</ul> </ul>
<div class="layui-tab-content"> <div class="layui-tab-content">
<div class="layui-tab-item layui-show"> <div class="layui-tab-item layui-show">
@ -47,6 +49,20 @@
<textarea name="after_sale" id="after_sale" lay-verify="content" class="field-content">{$config.after_sale}</textarea> <textarea name="after_sale" id="after_sale" lay-verify="content" class="field-content">{$config.after_sale}</textarea>
</div> </div>
</div> </div>
<div class="layui-tab-item">
<label class="layui-form-label"style="white-space: nowrap;">内容:</label>
<div class="layui-input-block">
<textarea name="payment" id="payment" lay-verify="content" class="field-content">{$config.payment}</textarea>
</div>
</div>
<div class="layui-tab-item">
<label class="layui-form-label"style="white-space: nowrap;">内容:</label>
<div class="layui-input-block">
<textarea name="reason" id="reason" lay-verify="content" class="field-content">{$config.reason}</textarea>
</div>
</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -84,12 +100,16 @@
var service = likeedit.build('service'); //建立编辑器 var service = likeedit.build('service'); //建立编辑器
var privacy = likeedit.build('privacy'); //建立编辑器 var privacy = likeedit.build('privacy'); //建立编辑器
var after_sale = likeedit.build('after_sale'); //建立编辑器 var after_sale = likeedit.build('after_sale'); //建立编辑器
var payment = likeedit.build('payment'); //建立编辑器
var reason = likeedit.build('reason'); //建立编辑器
form.verify({ form.verify({
content: function() { content: function() {
likeedit.sync(service) likeedit.sync(service)
likeedit.sync(privacy) likeedit.sync(privacy)
likeedit.sync(after_sale) likeedit.sync(after_sale)
likeedit.sync(payment)
likeedit.sync(reason)
} }
}) })
form.verify({ form.verify({

View File

@ -0,0 +1,133 @@
{layout name="layout2" /}
<style>
.layui-form-label {
color: #6a6f6c;
}
.goods-li {
float: left;
opacity: 1;
position: relative;
}
.goods-img {
width: 80px;
height: 80px;
padding: 4px;
}
.goods-img-del-x {
position: absolute;
z-index: 100;
top: -4px;
right: -2px;
width: 20px;
height: 20px;
font-size: 16px;
line-height: 16px;
color: #fff;
text-align: center;
cursor: pointer;
background: hsla(0, 0%, 60%, .6);
border-radius: 10px;
}
#image{
left:110px;
}
#notice{ left:110px;}
</style>
<div class="layui-form" lay-filter="layuiadmin-form-category" id="layuiadmin-form-category" style="padding: 20px 30px 0 0;">
<input type="hidden" value="0" name="id">
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>门店名称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="required" lay-verType="tips" placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">门店封面图</label>
<div class="layui-input-inline">
<div class="" style="height:80px;line-height:80px">
<input name="image" type="hidden" value="">
<div class="goods-img-add"></div>
</div>
</div>
<div class="layui-form-item">
<label class=" layui-form-mid layui-word-aux" id="image">建议尺寸500*500像素</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>详细地址</label>
<div class="layui-input-block">
<input type="text" name="address" lay-verify="required" lay-verType="tips" placeholder="请输入门店地址" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>营业时间</label>
<div class="layui-input-block">
<input type="text" name="business" lay-verify="required" lay-verType="tips" placeholder="请输入营业时间" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>交通情况</label>
<div class="layui-input-block">
<input type="text" name="traffic" lay-verify="required" lay-verType="tips" placeholder="请输入门店交通" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>联系方式</label>
<div class="layui-input-block">
<input type="text" name="contact" lay-verify="required" lay-verType="tips" placeholder="请输入门店联系方式" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">门店状态</label>
<div class="layui-input-inline" >
<input type="radio" name="is_show" lay-filter="is_show" style="width: 500px" value=1 title="显示" checked >
<input type="radio" name="is_show" lay-filter="is_show" style="width: 500px" value=0 title="隐藏">
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="add-store-submit" id="add-store-submit" value="确认">
</div>
</div>
<script>
layui.config({
version:"{$front_version}",
base: '/static/plug/layui-admin/dist/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form','likeedit','like'], function(){
var $ = layui.$
,form = layui.form
,like = layui.like
,likeedit = layui.likeedit;
//上传图片
like.imageUpload('.goods-img-add', function (uri, element) {
if(uri.length>1){
layer.msg('最多最能选中1张图片');
return;
}
var html = '<div class="goods-li">\n' +
'<img class="goods-img" ' +
'src="' + uri[0] + '">' +
'<a class="goods-img-del-x">x</a>' +
'</div>';
element.prev().val(like.getUrlFileName(uri[0], '{$storageUrl}'));
element.parent().append(html);
element.css('display','none');
}, true);
//删除图片
$(document).on('click', '.goods-img-del-x', function () {
$(this).parent().siblings('input').val('');
$(this).parent().prev().css('display','block');
$(this).parent().remove();
});
//显示图片
$(document).on('click', '.goods-img', function () {
var image = $(this).attr('src');
like.showImg(image,600);
});
});
</script>

View File

@ -0,0 +1,156 @@
{layout name="layout2" /}
<style>
.layui-form-label {
color: #6a6f6c;
}
.goods-li {
float: left;
opacity: 1;
position: relative;
}
.goods-img {
width: 80px;
height: 80px;
padding: 4px;
}
.goods-img-del-x {
position: absolute;
z-index: 100;
top: -4px;
right: -2px;
width: 20px;
height: 20px;
font-size: 16px;
line-height: 16px;
color: #fff;
text-align: center;
cursor: pointer;
background: hsla(0, 0%, 60%, .6);
border-radius: 10px;
}
#image{
left:110px;
}
#notice{ left:110px;}
</style>
<div class="layui-form" lay-filter="layuiadmin-form-category" id="layuiadmin-form-category" style="padding: 20px 30px 0 0;">
<input type="hidden" value="{$article.id}" name="id">
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>门店名称</label>
<div class="layui-input-block">
<input type="text" name="title" value="{$article.title}" lay-verify="required" lay-verType="tips" placeholder="请输入门店名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">门店封面图</label>
<div class="layui-input-inline">
<div style="height:80px;line-height:80px">
<input name="image" type="hidden" value="{$article.image}">
{if !empty($article.image)}
<div class="goods-img-add" style="display: none" ></div>
<div class="goods-li">
<img class="goods-img" src="{$article.abs_image}">
<a class="goods-img-del-x" style="display: none">x</a>
</div>
{else}
<div class="goods-img-add" ></div>
{/if}
</div>
</div>
<div class="layui-form-item">
<label class=" layui-form-mid layui-word-aux" id="image">建议尺寸500*500像素</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>详细地址</label>
<div class="layui-input-block">
<input type="text" name="address" value="{$article.address}" lay-verify="required" lay-verType="tips" placeholder="请输入门店地址" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>营业时间</label>
<div class="layui-input-block">
<input type="text" name="business" value="{$article.business}" lay-verify="required" lay-verType="tips" placeholder="请输入营业时间" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>交通情况</label>
<div class="layui-input-block">
<input type="text" name="traffic" value="{$article.traffic}" lay-verify="required" lay-verType="tips" placeholder="请输入门店交通" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"><font color="red">*</font>联系方式</label>
<div class="layui-input-block">
<input type="text" name="contact" value="{$article.contact}" lay-verify="required" lay-verType="tips" placeholder="请输入门店联系方式" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">门店状态</label>
<div class="layui-input-inline" >
<input type="radio" name="is_show" lay-filter="is_show" style="width: 500px" value=1 title="显示" {if condition="$article.is_show eq 1" }checked{/if}>
<input type="radio" name="is_show" lay-filter="is_show" style="width: 500px" value=0 title="隐藏"{if condition="$article.is_show eq 0" }checked{/if}>
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="edit-store-submit" id="edit-store-submit" value="确认">
</div>
</div>
<script>
layui.config({
version:"{$front_version}",
base: '/static/plug/layui-admin/dist/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form','likeedit','like'], function(){
var $ = layui.$
,form = layui.form
,like = layui.like
,likeedit = layui.likeedit;
//上传图片
like.imageUpload('.goods-img-add', function (uri, element) {
if(uri.length>1){
layer.msg('最多最能选中1张图片');
return;
}
var html = '<div class="goods-li">\n' +
'<img class="goods-img" ' +
'src="' + uri[0] + '">' +
'<a class="goods-img-del-x">x</a>' +
'</div>';
element.prev().val(like.getUrlFileName(uri[0], '{$storageUrl}'));
element.parent().append(html);
element.css('display','none');
}, true);
//删除图片
$(document).on('click', '.goods-img-del-x', function () {
$(this).parent().siblings('input').val('');
$(this).parent().prev().css('display','block');
$(this).parent().remove();
});
//显示图片
$(document).on('click', '.goods-img', function () {
var image = $(this).attr('src');
like.showImg(image,600);
});
// 删除按钮的显示与隐藏
$(document).on('mouseover', '.goods-img', function () {
$(this).next().show();
});
$(document).on('mouseout', '.goods-img', function () {
$(this).next().hide();
});
$(document).on('mouseover', '.goods-img-del-x', function () {
$(this).show();
});
$(document).on('mouseout', '.goods-img-del-x', function () {
$(this).hide();
});
});
</script>

View File

@ -0,0 +1,333 @@
{layout name="layout1" /}
<style>
.layui-table-cell {
height: auto;
}
</style>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-collapse like-layui-collapse" lay-accordion="" style="border:1px dashed #c4c4c4">
<div class="layui-colla-item">
<h2 class="layui-colla-title like-layui-colla-title" style="background-color: #fff">操作提示</h2>
<div class="layui-colla-content layui-show">
<p>*平台发布门店,可在商城首页栏目查看。</p>
</div>
</div>
</div>
</div>
<div class="layui-form layui-card-header layuiadmin-card-header-auto">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">关键词</label>
<div class="layui-input-block">
<input type="text" name="title" id="title" placeholder="请输入" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<button class="layui-btn layui-btn-sm layuiadmin-btn-store {$view_theme_color}" lay-submit lay-filter="store-search">
<i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
</button>
<button class="layui-btn layui-btn-sm layui-btn-primary layuiadmin-btn-store }" lay-submit lay-filter="store-clear-search">重置</button>
</div>
</div>
</div>
<div class="layui-card-body">
<div style="padding-bottom: 10px;">
<button class="layui-btn layui-btn-sm layuiadmin-btn-store {$view_theme_color}" data-type="add">新增门店</button>
</div>
<table id="store-lists" lay-filter="store-lists"></table>
<script type="text/html" id="image">
<img src="{{d.image}}" style="height:auto;width: auto" class="image-show">
</script>
<script type="text/html" id="store-operation">
<a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-sm" lay-event="status_switch">
{{# if(d.is_show == 1){ }}
隐藏
{{# } else { }}
显示
{{# } }}
</a>
<a class="layui-btn layui-btn-danger layui-btn-sm" lay-event="del">删除</a>
</script>
</div>
</div>
</div>
<script>
layui.config({
version:"{$front_version}",
base: '/static/plug/layui-admin/dist/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index','table','like'], function(){
var $ = layui.$
,form = layui.form
,table = layui.table
,like = layui.like;
//图片放大
$(document).on('click', '.image-show', function () {
var src = $(this).attr('src');
like.showImg(src,600);
});
//监听搜索
form.on('submit(store-search)', function(data){
var field = data.field;
//执行重载
table.reload('store-lists', {
where: field,
page: {
curr: 1 //重新从第 1 页开始
},
});
});
//监听重置
form.on('submit(store-clear-search)', function(){
$('#title').val('');
$('#cid').val('');
$('#is_notice').val('');
form.render('select');
//刷新列表
table.reload('store-lists', {
where: [],
page: {
curr: 1 //重新从第 1 页开始
}
});
});
//事件
var active = {
add: function(){
layer.open({
type: 2
,title: '添加门店'
,content: '{:url("store/add")}'
,area: ['90%','90%']
,btn: ['确定', '取消']
,yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index]
,submitID = 'add-store-submit'
,submit = layero.find('iframe').contents().find('#'+ submitID);
//监听提交
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
var field = data.field;
like.ajax({
url:'{:url("store/add")}',
data:field,
type:"post",
success:function(res)
{
if(res.code == 1)
{
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index); //关闭弹层
table.reload('store-lists'); //数据刷新
}
}
});
});
submit.trigger('click');
}
});
}
,batchdel:function(){ //删除所选
var checkStatus = table.checkStatus('store-lists')
,checkData = checkStatus.data; //得到选中的数据
//是否已选数据
if(checkData.length === 0){
return layer.msg('请选择数据');
}else {
//获取所选id
ids = [];
for (var i in checkData){
ids.push(checkData[i]['id']);
}
layer.confirm('确定删除所选门店信息?', function(index){
like.ajax({
url:'{:url("store/del")}',
data:{id:ids},
type:"post",
success:function(res)
{
if(res.code == 1)
{
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index); //关闭弹层
table.reload('store-lists'); //数据刷新
}
}
});
layer.close(index);
});
}
}
};
$('.layui-btn.layuiadmin-btn-store').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
table.render({
elem: '#store-lists'
,url: '{:url("store/lists")}'
,cols: [[
{type: 'checkbox',title: '当页全选'}
,{field: 'title', title: '门店名称',width:150}
,{field: 'image', title: '门店封面图',toolbar: '#image',width:150}
,{field: 'address', title: '门店地址',width:150}
,{field: 'traffic', title: '门店交通',width:150}
,{field: 'contact', title: '门店联系方式',width:150}
,{field: 'business', title:'门店营业时间', align: 'center',width:100}
,{field: 'create_time', title: '创建时间',width:160}
,{fixed: 'right', title: '操作', align: 'center', toolbar: '#store-operation',width:230}
]]
,page:true
,text: {none: '暂无数据!'}
,parseData: function(res){ //将原始数据解析成 table 组件所规定的数据
return {
"code":res.code,
"msg":res.msg,
"count": res.data.count, //解析数据长度
"data": res.data.lists, //解析数据列表
};
}
,done: function(res, curr, count){
setTimeout(function () {
// 解决操作栏因为内容过多换行问题
$(".layui-table-fixed-l .layui-table-body").removeAttr("style");
$(".layui-table-fixed-r .layui-table-body").removeAttr("style");
$(".layui-table-main tr").each(function (index, val) {
console.log($(val).height());
$($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height());
$($(".layui-table-fixed-r .layui-table-body tbody tr")[index]).height($(val).height());
});
}, 100)
}
});
//监听工具条
table.on('tool(store-lists)', function(obj){
if(obj.event === 'del'){
var id = obj.data.id;
var title = obj.data.title;
layer.confirm('确定要删除门店:'+'<span style="color: red">'+title+'</span>', function(index){
like.ajax({
url:'{:url("store/del")}',
data:{'id':id},
type:"post",
success:function(res)
{
if(res.code == 1)
{
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index);
table.reload('store-lists');
}
}
});
});
}
if(obj.event === 'edit'){
var id = obj.data.id;
layer.open({
type: 2
,title: '编辑门店'
,content: '{:url("store/edit")}?id='+id
,area: ['90%','90%']
,btn: ['确定', '取消']
,yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index]
,submitID = 'edit-store-submit'
,submit = layero.find('iframe').contents().find('#'+ submitID);
//监听提交
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
var field = data.field;
like.ajax({
url:'{:url("store/edit")}',
data:field,
type:"post",
success:function(res)
{
if(res.code == 1)
{
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index);
table.reload('store-lists');
}
}
});
});
submit.trigger('click');
}
})
}else if(obj.event === 'status_switch'){
var id = obj.data.id;
var status = obj.data.is_show;
var title = obj.data.title;
var confirm_text = '';
if (status == 1){
confirm_text = '确定隐藏门店:';
status = 0;
} else {
status = 1;
confirm_text = '确定显示门店:';
}
layer.confirm(confirm_text+'<span style="color: red">'+title+'</span>', function(index){
like.ajax({
url:'{:url("store/switchStatus")}',
data:{id:id,is_show:status},
type:"post",
success:function(res)
{
if(res.code == 1)
{
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index); //关闭弹层
table.reload('store-lists');
}
}
});
layer.close(index);
});
}
});
});
</script>

View File

@ -65,6 +65,22 @@
<label class=" layui-form-mid layui-word-aux" id="image">建议尺寸730*530像素</label> <label class=" layui-form-mid layui-word-aux" id="image">建议尺寸730*530像素</label>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">首页推荐</label>
<div class="layui-input-inline" id="" >
<input type="radio" name="is_notice" lay-filter="is_notice" style="width: 500px" value=1 title="是" checked >
<input type="radio" name="is_notice" lay-filter="is_notice" style="width: 500px" value=0 title="否">
</div>
<div class="layui-form-item">
<label class=" layui-form-mid layui-word-aux" id="notice">在商城首页的名家推荐显示</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="white-space: nowrap;">职位:</label>
<div class="layui-input-inline" style="width: 400px">
<input type="text" name="position" class="layui-input">
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label" style="white-space: nowrap;">荣誉:</label> <label class="layui-form-label" style="white-space: nowrap;">荣誉:</label>
<div class="layui-input-inline" style="width: 400px"> <div class="layui-input-inline" style="width: 400px">

View File

@ -73,6 +73,22 @@
<label class=" layui-form-mid layui-word-aux" id="image">建议尺寸730*530像素</label> <label class=" layui-form-mid layui-word-aux" id="image">建议尺寸730*530像素</label>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">首页推荐</label>
<div class="layui-input-inline" id="" >
<input type="radio" name="is_notice" lay-filter="is_notice" style="width: 500px" value=1 title="是" {if condition="$info.is_notice eq 1" }checked{/if}>
<input type="radio" name="is_notice" lay-filter="is_notice" style="width: 500px" value=0 title="否"{if condition="$info.is_notice eq 0" }checked{/if}>
</div>
<div class="layui-form-item">
<label class=" layui-form-mid layui-word-aux" id="notice">在商城首页的名家推荐显示</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="white-space: nowrap;">职位:</label>
<div class="layui-input-inline" style="width: 400px">
<input type="text" name="position" value="{$info.position}" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label" style="white-space: nowrap;">荣誉:</label> <label class="layui-form-label" style="white-space: nowrap;">荣誉:</label>
<div class="layui-input-inline" style="width: 400px"> <div class="layui-input-inline" style="width: 400px">

View File

@ -9,17 +9,25 @@ namespace app\api\controller;
use app\api\logic\GoodsLogic; use app\api\logic\GoodsLogic;
class Goods extends ApiBase{ class Goods extends ApiBase{
public $like_not_need_login = ['getgoodsdetail', 'getgoodslist','getbestlist','gethostlist','getsearchpage']; public $like_not_need_login = ['getgoodsdetail', 'getgoodslist','getbestlist','gethostlist','getsearchpage','tjgoodslist'];
/** /**
* note 商品列表 * note 商品列表
* create_time 2020/10/20 11:12
*/ */
public function getGoodsList(){ public function getGoodsList(){
$get = $this->request->get(); $get = $this->request->get();
$goods_list = GoodsLogic::getGoodsList($this->user_id, $get, $this->page_no, $this->page_size); $goods_list = GoodsLogic::getGoodsList($this->user_id, $get, $this->page_no, $this->page_size);
$this->_success('获取成功',$goods_list); $this->_success('获取成功',$goods_list);
}
/**
* note 商品列表筛选条件
*/
public function tjGoodsList(){
$get = $this->request->get();
$tjgoods_list = GoodsLogic::tjGoodsList();
$this->_success('获取成功',$tjgoods_list);
} }

View File

@ -9,7 +9,27 @@ namespace app\api\controller;
use app\api\logic\PcLogic; use app\api\logic\PcLogic;
class Pc extends ApiBase{ class Pc extends ApiBase{
public $like_not_need_login = ['index','commonData','goodsList']; public $like_not_need_login = ['index','commonData','goodsList','supplierList','supplierclassList','temaigoods','baijianclass','cangpingoods','getsupplierDetail'];
/**
* Notes: 惠藏百件分类
* @author: kiki
*/
public function baijianclass(){
$lists = PcLogic::baijian_goods_category();
return $this->_success('',$lists);
}
/**
* Notes: 惠藏藏品接口
* @author: kiki
*/
public function cangpingoods(){
$lists = PcLogic::cangpingoods();
return $this->_success('',$lists);
}
/** /**
* Notes: pc端首页接口 * Notes: pc端首页接口
* @author: kiki * @author: kiki
@ -19,6 +39,48 @@ class Pc extends ApiBase{
return $this->_success('',$lists); return $this->_success('',$lists);
} }
/**
* Notes: 获取分类专家列表
* @author: kiki
*/
public function supplierclassList(){
$lists = PcLogic::supplierclssList();
return $this->_success('',$lists);
}
/**
* Notes:获取专家列表
* @author:kiki
*/
public function supplierList(){
$cid = $this->request->get('category_id','');
$list = PcLogic::supplierList($this->page_no,$this->page_size,$cid);
return $this->_success('',$list);
}
/**
* Notes:获取专家详情
* @author:kiki
*/
public function getsupplierDetail(){
$id = $this->request->get('id');
$supplier = PcLogic::getsupplierDetail($id);
if($supplier){
$this->_success('获取成功',$supplier);
}
$this->_error('专家不存在',[],0,0);
}
/**
* Notes: 特卖商城接口
* @author: kiki
*/
public function temaigoods(){
$lists = PcLogic::temaigoods();
return $this->_success('',$lists);
}
/** /**
* Notes:pc广告公告数据 * Notes:pc广告公告数据
* @author: kiki * @author: kiki

View File

@ -12,57 +12,126 @@ use app\common\model\TeamActivity;
use app\common\model\TeamFound; use app\common\model\TeamFound;
use app\common\model\TeamGoodsItem; use app\common\model\TeamGoodsItem;
use app\common\server\ConfigServer; use app\common\server\ConfigServer;
use app\common\server\UrlServer;
use think\Db; use think\Db;
use think\facade\Hook; use think\facade\Hook;
class GoodsLogic{ class GoodsLogic{
//商品列表筛选条件
public static function tjGoodsList(){
//容量筛选表
$capacity_list = Db::name('screen_capacity')
->where(['del'=>0,'is_show'=>1])
->order('sort desc')
->field('id,name')
->select();
//泥料筛选表
$mud_list = Db::name('screen_mud')
->where(['del'=>0,'is_show'=>1])
->order('sort desc')
->field('id,name')
->select();
//价格筛选表
$price_list = Db::name('screen_price')
->where(['del'=>0,'is_show'=>1])
->order('sort desc')
->field('id,name')
->select();
//尺寸筛选表
$size_list = Db::name('screen_size')
->where(['del'=>0,'is_show'=>1])
->order('sort desc')
->field('id,name')
->select();
//壶型筛选表
$category_list = Db::name('goods_brand')
->where(['del'=>0,'is_show'=>1])
->order('sort desc')
->field('id,name,image')
->select();
foreach ($category_list as $key => $v1){
$category_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
$list = [
'capacity_list' => $capacity_list,//容量筛选表
'mud_list' => $mud_list,//泥料筛选表
'price_list' => $price_list,//价格筛选表
'size_list' => $size_list,//尺寸筛选表
'category_list' => $category_list //壶型筛选表
];
return $list;
}
//商品列表 //商品列表
public static function getGoodsList($user_id,$get,$page,$size){ public static function getGoodsList($user_id,$get,$page,$size){
$where = []; $where = [];
$order = []; $order = [];
$where[] = ['status','=',1]; $where[] = ['g.status','=',1];
$where[] = ['del','=',0]; $where[] = ['g.del','=',0];
$goods = new Goods(); $goods = new Goods();
//品牌筛选 //壶型筛选
if(isset($get['brand_id']) && $get['brand_id']) {
$where[] = ['brand_id', '=', $get['brand_id']];
}
//分类筛选
if(isset($get['category_id']) && $get['category_id']){ if(isset($get['category_id']) && $get['category_id']){
$where[] = ['first_category_id|second_category_id|third_category_id','=',$get['category_id']]; $where[] = ['first_category_id|second_category_id|third_category_id','=',$get['category_id']];
} }
//价格
if(isset($get['price']) && $get['price']) {
$screen_price_info = Db::name('screen_price')->field('start_price,end_price')->where(['id'=>$get['price'],'del'=>0])->find();
if($screen_price_info){
$where[] = ['min_price','>=',strtotime($screen_price_info['start_price'])];
$where[] = ['min_price','<=',strtotime($screen_price_info['end_price'])];
}
}
//容量
if(isset($get['rongliang']) && $get['rongliang']) {
$screen_capacity_info = Db::name('screen_capacity')->field('start_capacity,end_capacity')->where(['id'=>$get['rongliang'],'del'=>0])->find();
if($screen_capacity_info){
$where[] = ['rongliang_name','>=',strtotime($screen_capacity_info['start_capacity'])];
$where[] = ['rongliang_name','<=',strtotime($screen_capacity_info['end_capacity'])];
}
}
//泥料
if(isset($get['mud_id']) && $get['mud_id']) {
$where[] = ['mud_id', '=', $get['mud_id']];
}
//尺寸
if(isset($get['size_id']) && $get['size_id']) {
$where[] = ['size_id', '=', $get['size_id']];
}
//关键词搜索 //关键词搜索
if(isset($get['keyword']) && $get['keyword']){ if(isset($get['keyword']) && $get['keyword']){
$where[] = ['name','like','%'.$get['keyword'].'%']; $where[] = ['g.name','like','%'.$get['keyword'].'%'];
if($user_id){//记录关键词 if($user_id){//记录关键词
self::recordKeyWord(trim($get['keyword']),$user_id); self::recordKeyWord(trim($get['keyword']),$user_id);
} }
} }
//销量排序 $order['g.sort'] = 'desc';
if(isset($get['sales_sum']) && $get['sales_sum']){ $order['g.id'] = 'desc';
$order['sales_sum'] = $get['sales_sum']; $goods_count =Db::name('goods g')
}
//价格排序
if(isset($get['price']) && $get['price']){
$order['min_price'] = $get['price'];
}
$order['sort'] = 'desc';
$order['id'] = 'desc';
$goods_count = $goods
->where($where) ->where($where)
->join('screen_mud sm', 'g.mud_id = sm.id')
->join('supplier s', 'g.supplier_id = s.id')
->count(); ->count();
$goods_list =Db::name('goods g')
$goods_list = $goods
->where($where) ->where($where)
->page($page,$size) ->page($page,$size)
->order($order) ->order($order)
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum,sort') ->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,sm.name as mud_name,s.name as supplier_name,g.code')
->select(); ->join('screen_mud sm', 'g.mud_id = sm.id')
->join('supplier s', 'g.supplier_id = s.id')
->select();
foreach ($goods_list as $key => $v1){
$goods_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
$more = is_more($goods_count,$page,$size); //是否有下一页 $more = is_more($goods_count,$page,$size); //是否有下一页
$data = [ $data = [
@ -87,69 +156,33 @@ class GoodsLogic{
} }
//商品详情 //商品详情
public static function getGoodsDetail($user_id,$id){ public static function getGoodsDetail($user_id,$id){
$goods = Goods::get(['id'=>$id,'status'=>1],['goods_image','goods_item']); $goods = Goods::get(['id'=>$id,'status'=>1],['goods_image','goods_item']);
if($goods){ if($goods){
//点击量 //点击量
$goods->click_count = $goods->click_count + 1; $goods->click_count = $goods->click_count + 1;
$goods->save(); $goods->save();
$goods->sales_sum += $goods->virtual_sales_sum; $goods->sales_sum += $goods->virtual_sales_sum;
$goods->is_collect = 0;
$goods->member_price = 0;
$goods->append(['order_give_integral', 'commission_price']);
//检查商品是否整在参加活动,如果正在参加活动替换商品的价格为活动价 //专家信息
$goods = self::checkActivity($goods); $supplier = Db::name('supplier')
if($user_id) { ->where(['del'=>0,'id'=>$goods->supplier_id])
//是否收藏 ->order('create_time desc')
$collect = Db::name('goods_collect')->where(['user_id'=>$user_id,'goods_id'=>$id])->find(); ->field('id,name,remark,avatar')
$goods->is_collect= $collect ? 1 : 0; ->find();
$supplier['avatar']=UrlServer::getFileUrl($supplier['avatar']);
$goods->supplier_list=$supplier;
$goods->payment=ConfigServer::get('policy', 'payment');
$goods->reason = ConfigServer::get('policy', 'reason');
$goods->after_sale =ConfigServer::get('policy', 'after_sale');
//会员折扣
$member_discount = Db::name('user_level l')
->join('user u', 'u.level = l.id')
->where(['u.id' => $user_id])
->value('discount');
$price_array = [];
//处理会员折扣价格
if ($goods->is_member > 0 && $member_discount > 0) {
//会员价格
foreach ($goods->goods_item as $item => $value){
$goods->goods_item[$item]['member_price'] = 0;
if($member_discount){
$member_price = round($value['price'] * $member_discount / 10,2);
$goods->goods_item[$item]['member_price'] = $member_price;
$price_array[] = $member_price;
}
}
$price_array && $goods->member_price = min($price_array);
}
//多规格,按最高的价格计算积分
if($price_array && 2 === $goods->give_integral_type){
$price = $price_array ? max($price_array) : $goods->max_price;
$goods->order_give_integral = intval($price * $goods->give_integral / 100);
}
}
//猜你喜欢
$goods->Like();
//商品规格 //商品规格
$goods->GoodsSpec(); $goods->GoodsSpec();
$goods->append(['comment'])->hidden(['Spec','GoodsSpecValue']) $goods->append(['comment'])->hidden(['Spec','GoodsSpecValue'])
->visible(['id','name','image','video','stock','remark','content','sales_sum', ->visible(['id','name','code','image','stock','content',
'click_count','price','market_price','is_collect','goods_spec','goods_image', 'price','market_price','goods_spec','goods_image',
'goods_item','activity','member_price']); 'goods_item','supplier_list','payment','reason','after_sale']);
//判断是否开启了拼团
if ($goods['is_team']) {
$resTeam = self::getTeam($goods);
// 如果活动没结束,则返回拼团数据, 否则把商品是否已开团状态改为,不是开团商品
if ($resTeam !== 100 and is_array($resTeam)) {
$goods['activity'] = $resTeam;
} else {
$goods['is_team'] = 0;
}
}
// 钩子-记录足迹(浏览商品) // 钩子-记录足迹(浏览商品)
Hook::listen('footprint', [ Hook::listen('footprint', [

View File

@ -13,52 +13,45 @@ use app\common\server\UrlServer;
use think\Db; use think\Db;
class PcLogic{ class PcLogic{
/**
* Notes:惠藏百件分类
* @return array
* @author:kiki
*/
public static function baijian_goods_category(){
$category_list = Db::name('goods_category')
->where(['del'=>0,'is_recommend'=>1])
->order('sort desc')
->field('id,name')
->select();
return $category_list;
}
/** /**
* Notes:pc端首页接口 * Notes:pc端首页接口
* @return array * @return array
* @author:kiki * @author:kiki
*/ */
public static function pcLists(){ public static function pcLists(){
$goods = new Goods(); //新品上架
$new_list = Db::name('goods g')
//热销榜单 ->where(['g.del'=>0,'g.status'=>1,'g.is_new'=>1])
$host_list = $goods ->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,sm.name as mud_name,s.name as supplier_name')
->where(['del'=>0,'status'=>1]) ->join('screen_mud sm', 'g.mud_id = sm.id')
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum') ->join('supplier s', 'g.supplier_id = s.id')
->order('sales_sum desc,click_count desc') ->order('g.id desc,g.sort desc')
->limit(10)
->select();
//新品推荐
$new_list = $goods
->where(['del'=>0,'status'=>1,'is_new'=>1])
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum')
->order('id desc,sort desc')
->limit(10)
->select();
//好物优选
$best_list = $goods
->where(['del'=>0,'status'=>1,'is_best'=>1])
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum')
->order('id desc,sort desc')
->limit(10) ->limit(10)
->select(); ->select();
$ad_list = Db::name('ad a') $ad_list = Db::name('ad a')
->join('ad_position ap', 'a.pid = ap.id') ->join('ad_position ap', 'a.pid = ap.id')
->where(['pid' =>[18,19,20,21],'a.status' => 1,'a.del' => 0,'ap.status' => 1,'ap.del' => 0]) ->where(['pid' =>[2],'a.status' => 1,'a.del' => 0,'ap.status' => 1,'ap.del' => 0])
->order('a.id desc') ->order('a.id desc')
->field('a.*') ->field('a.*')
->select(); ->select();
$host_ad = []; //热销榜单广告 $index_ad = []; //首页轮播图广告
$new_ad = []; //新品推荐广告
$best_ad = []; //好物优选广告
$category_ad = []; //分类广告
foreach ($ad_list as $ad){ foreach ($ad_list as $ad){
$url = $ad['link']; $url = $ad['link'];
$is_tab = 0; $is_tab = 0;
@ -77,9 +70,9 @@ class PcLogic{
]; ];
break; break;
} }
//首页热销榜单广告 //首页轮播图广告
if(empty($host_ad) && 18 == $ad['pid']){ if(empty($index_ad) && 2 == $ad['pid']){
$host_ad = [ $index_ad = [
'image' => UrlServer::getFileUrl($ad['image']), 'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url, 'link' => $url,
'link_type' => $ad['link_type'], 'link_type' => $ad['link_type'],
@ -87,85 +80,147 @@ class PcLogic{
'is_tab' => $is_tab, 'is_tab' => $is_tab,
]; ];
} }
//首页新品推荐广告
if(empty($new_ad) && 19 == $ad['pid']){
$new_ad = [
'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url,
'link_type' => $ad['link_type'],
'params' => $params,
'is_tab' => $is_tab,
];
}
//首页好物优选广告
if(empty($best_ad) && 20 == $ad['pid']){
$best_ad = [
'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url,
'link_type' => $ad['link_type'],
'params' => $params,
'is_tab' => $is_tab,
];
}
//首页分类广告
if(21 == $ad['pid']){
$category_ad[$ad['category_id']] = [
'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url,
'link_type' => $ad['link_type'],
'params' => $params,
'is_tab' => $is_tab,
];
}
} }
//分类信息 //紫砂资讯
$goods_category = new \app\admin\model\GoodsCategory(); $article = Db::name('article')
$goods_category_list = $goods_category ->where(['del'=>0,'is_notice'=>1,'is_show'=>1])
->where(['del'=>0, 'level'=>1,'is_recommend'=>1]) ->order('create_time desc')
->with(['sons']) ->field('id,title,synopsis,image,create_time')
->field('id,name') ->limit(4)
->select(); ->select();
foreach ($article as $key => $v1){
$article[$key]['image']=UrlServer::getFileUrl($v1['image']);
$article[$key]['create_time'] = date('Y-m-d', $v1['create_time']);
}
$category_list = []; //专家信息
foreach ($goods_category_list as $key => $goods_category){ $supplier = Db::name('supplier')
$sons = []; ->where(['del'=>0,'is_notice'=>1])
$goods_list = $goods ->order('create_time desc')
->where(['first_category_id'=>$goods_category['id'],'del'=>0,'status'=>1]) ->field('id,name,remark,avatar')
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum') ->limit(6)
->limit(8) ->select();
->select(); foreach ($supplier as $key => $v2){
foreach ($goods_category['sons'] as $son){ $supplier[$key]['avatar']=UrlServer::getFileUrl($v2['avatar']);
$sons[] = [ }
'id' => $son['id'],
'name' => $son['name'], //门店信息
]; $store = Db::name('store')
} ->where(['del'=>0,'is_show'=>1])
$ad = $category_ad[$goods_category['id']] ?? []; ->order('create_time desc')
$category_list[] = [ ->field('id,title,address,image,business,traffic,contact')
'id' => $goods_category['id'], ->limit(4)
'name' => $goods_category['name'], ->select();
'ad' => $ad, foreach ($store as $key => $v2){
'sons' => $sons, $store[$key]['image']=UrlServer::getFileUrl($v1['image']);
'goods_list'=> $goods_list,
];
} }
$list = [ $list = [
'host_ad' => $host_ad, 'new_list' => $new_list,
'host_list' => $host_list, 'index_ad' => $index_ad,
'new_ad' => $new_ad, 'article' => $article,
'new_list' => $new_list, 'supplier' => $supplier,
'best_ad' => $best_ad, 'store' => $store
'best_list' => $best_list,
'category_list' => $category_list,
]; ];
return $list; return $list;
} }
//专家信息
public static function supplierclssList(){
$supplier_category = new \app\admin\model\SupplierCategory();
$supplier_category_list = $supplier_category
->where(['del'=>0, 'is_show'=>1])
->field('id,name')
->select();
$category_list = [];
foreach ($supplier_category_list as $key => $supplier_category){
$supplier_list = Db::name('supplier')
->where(['cid'=>$supplier_category['id'],'del'=>0])
->field('id,name')
->select();
if(!$supplier_list){
continue;
}
$category_list[] = [
'id' => $supplier_category['id'],
'name' => $supplier_category['name'],
'supplier_list'=> $supplier_list,
];
}
return $category_list;
}
/**
* Notes:获取专家列表
* @param $page int 页码
* @param $size int 每页数量
* @param $cid int 分类id
* @return array
* @author: kiki
*/
public static function supplierList($page,$size,$cid){
$where[] = ['del','=',0];
//按商品分类搜索
if($cid){
$where[] = ['cid','=',$cid];
}
$count =Db::name('supplier')
->field('id,name,remark,avatar')
->where($where)
->count();
$list =Db::name('supplier')
->order('create_time desc')
->field('id,name,remark,avatar')
->where($where)
->page($page, $size)
->select();
$more = is_more($count, $page, $size); //是否有下一页
return [
'list' => $list,
'page' => $page,
'size' => $size,
'count' => $count,
'more' => $more
];
}
/**
* Notes:获取专家详情
* @param $cid int 专家id
* @return array
* @author: kiki
*/
public static function getsupplierDetail($id){
$where[] = ['del','=',0];
$where[] = ['id','=',$id];
$info =Db::name('supplier')
->order('create_time desc')
->field('id,name,remark,avatar,honor,position')
->where($where)
->find();
$goods_list=Db::name('goods g')
->where(['g.del'=>0,'g.status'=>1,'g.supplier_id'=>$info['id']])
->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,sm.name as mud_name,s.name as supplier_name')
->join('screen_mud sm', 'g.mud_id = sm.id')
->join('supplier s', 'g.supplier_id = s.id')
->order('g.id desc,g.sort desc')
->select();
return [
'info' => $info,
'goods_list' => $goods_list,
];
}
/** /**
* Notes:pc端获取公共数据 * Notes:pc端获取公共数据
* @param $user_id int 用户id * @param $user_id int 用户id
@ -173,31 +228,220 @@ class PcLogic{
* @author: kiki * @author: kiki
*/ */
public static function commonData($user_id){ public static function commonData($user_id){
$article = Db::name('article')
->where(['del'=>0,'is_notice'=>1,'is_show'=>1])
->order('create_time desc')
->field('id,title')
->limit(3)
->select();
$cart_num = 0;
$coupon_num = 0;
$nickname = ''; $nickname = '';
if($user_id){ if($user_id){
$cart_num = Db::name('cart')->where(['user_id'=>$user_id])->sum('goods_num');
$coupon_num = Db::name('coupon_list')->where(['user_id'=>$user_id,'del'=>0,'status'=>0])->count();
$nickname = Db::name('user')->where(['id'=>$user_id])->value('nickname'); $nickname = Db::name('user')->where(['id'=>$user_id])->value('nickname');
} }
$help_category_list = DB::name('help_category')
->where('is_show', 1)
->where(['del' => 0])
->field('id,name')
->select();
$h_category_list = [];
foreach ($help_category_list as $key => $help_category){
$help_list = Db::name('help')
->where(['cid'=>$help_category['id'],'del'=>0])
->field('id,title')
->select();
$h_category_list[] = [
'id' => $help_category['id'],
'name' => $help_category['name'],
'help_list'=> $help_list,
];
}
return [
'logo' => UrlServer::getFileUrl(ConfigServer::get('website', 'pc_logo')),
'name' => ConfigServer::get('website', 'name',''),
'nickname' => $nickname,
'kfphone' => ConfigServer::get('service','phone',''),
'kf_qr_code' => UrlServer::getFileUrl(ConfigServer::get('service','image','')),
'oa_qr_code' => UrlServer::getFileUrl(ConfigServer::get('oa', 'qr_code', '')),
'h_category_list'=>$h_category_list,
];
}
/**
* Notes:惠藏藏品列表
* @author: kiki
*/
public static function cangpingoods(){
$ad_list = Db::name('ad a')
->join('ad_position ap', 'a.pid = ap.id')
->where(['pid' =>[24],'a.status' => 1,'a.del' => 0,'ap.status' => 1,'ap.del' => 0])
->order('a.id desc')
->field('a.*')
->select();
$ad = []; //广告
foreach ($ad_list as $ad){
$url = $ad['link'];
$is_tab = 0;
$params = [];
switch ($ad['link_type']) {
case 1:
$page = Ad::getLinkPage($ad['client'], $ad['link']);
$url = $page['path'];
$is_tab = $page['is_tab'] ?? 0;
break;
case 2:
$goods_path = Ad::getGoodsPath($ad['client']);
$url = $goods_path;
$params = [
'id' => $ad['link'],
];
break;
}
//广告
if(empty($tiemai_tup_ad) && 24 == $ad['pid']){
$tiemai_tup_ad = [
'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url,
'link_type' => $ad['link_type'],
'params' => $params,
'is_tab' => $is_tab,
];
}
}
$where[] = ['g.del','=',0];
$where[] = ['g.status','=',1];
//藏品捡宝
$where1[] = ['is_jiantreasure','=',1];
//镇店藏品
$where2[] = ['is_zdtreasure','=',1];
$jiantreasure_list =Db::name('goods g')
->field('g.id as goods_id,g.name as goods_name,g.image,remark')
->where($where)
->where($where1)
->page(0,7)
->select();
foreach ($jiantreasure_list as $key => $v1){
$jiantreasure_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
$zdtreasure_list =Db::name('goods g')
->field('g.id as goods_id,g.name as goods_name,g.image,remark')
->where($where)
->where($where2)
->page(0,7)
->select();
foreach ($zdtreasure_list as $key => $v1){
$zdtreasure_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
return [
'ad' => $tiemai_tup_ad,//广告
'jiantreasure_list' => $jiantreasure_list,//藏品捡宝
'zdtreasure_list' => $zdtreasure_list,//镇店藏品
];
}
/**
* Notes:特卖商品列表
* @author: kiki
*/
public static function temaigoods(){
$ad_list = Db::name('ad a')
->join('ad_position ap', 'a.pid = ap.id')
->where(['pid' =>[16,21],'a.status' => 1,'a.del' => 0,'ap.status' => 1,'ap.del' => 0])
->order('a.id desc')
->field('a.*')
->select();
$tiemai_tup_ad = []; //特卖大图广告
$tiemai_bott_ad = []; //特卖小图广告
foreach ($ad_list as $ad){
$url = $ad['link'];
$is_tab = 0;
$params = [];
switch ($ad['link_type']) {
case 1:
$page = Ad::getLinkPage($ad['client'], $ad['link']);
$url = $page['path'];
$is_tab = $page['is_tab'] ?? 0;
break;
case 2:
$goods_path = Ad::getGoodsPath($ad['client']);
$url = $goods_path;
$params = [
'id' => $ad['link'],
];
break;
}
//特卖大图广告
if(empty($tiemai_tup_ad) && 21 == $ad['pid']){
$tiemai_tup_ad = [
'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url,
'link_type' => $ad['link_type'],
'params' => $params,
'is_tab' => $is_tab,
];
}
//特卖小图广告
if(16 == $ad['pid']){
$tiemai_bott_ad[] = [
'image' => UrlServer::getFileUrl($ad['image']),
'link' => $url,
'link_type' => $ad['link_type'],
'params' => $params,
'is_tab' => $is_tab,
];
}
}
$where[] = ['g.del','=',0];
$where[] = ['g.status','=',1];
//新品上架
$where1[] = ['is_new','=',1];
//精品推荐
$where2[] = ['is_best','=',1];
//今日促销
$where3[] = ['is_like','=',1];
$xinpin_list =Db::name('goods g')
->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,s.name as supplier_name')
->join('supplier s', 'g.supplier_id = s.id')
->where($where)
->where($where1)
->page(0,7)
->select();
foreach ($xinpin_list as $key => $v1){
$xinpin_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
$jingpin_list =Db::name('goods g')
->field('g.id as goods_id,g.name as goods_name,g.image,min_price as price')
->where($where)
->where($where2)
->page(0,6)
->select();
foreach ($jingpin_list as $key => $v1){
$jingpin_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
$cuxiao_list =Db::name('goods g')
->field('g.id as goods_id,g.name as goods_name,g.image,min_price as price')
->where($where)
->where($where3)
->page(0,6)
->select();
foreach ($cuxiao_list as $key => $v1){
$cuxiao_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
return [ return [
'article' => $article, 'da_ad' => $tiemai_tup_ad,//大图
'logo' => UrlServer::getFileUrl(ConfigServer::get('website', 'pc_logo')), 'xiao_ad' => $tiemai_bott_ad,//4小图
'name' => ConfigServer::get('website', 'name',''), 'xinpin_list' => $xinpin_list,//新品
'cart_num' => $cart_num, 'jingpin_list' => $jingpin_list,//精品
'coupon_num' => $coupon_num, 'cuxiao_list' => $cuxiao_list//促销
'nickname' => $nickname,
'oa_qr_code' => UrlServer::getFileUrl(ConfigServer::get('oa', 'qr_code', '')),
'mnp_qr_code' => UrlServer::getFileUrl(ConfigServer::get('mnp', 'qr_code', '')),
]; ];
} }
@ -215,11 +459,11 @@ class PcLogic{
*/ */
public static function goodsList($page,$size,$name,$category_id,$type,$sort_type,$sort){ public static function goodsList($page,$size,$name,$category_id,$type,$sort_type,$sort){
$where[] = ['del','=',0]; $where[] = ['g.del','=',0];
$where[] = ['status','=',1]; $where[] = ['g.status','=',1];
//按商品名称搜索 //按商品名称搜索
if($name){ if($name){
$where[] = ['name','like','%'.$name.'%']; $where[] = ['g.name','like','%'.$name.'%'];
} }
//按商品分类搜索 //按商品分类搜索
@ -230,11 +474,25 @@ class PcLogic{
if(1 != $type){ if(1 != $type){
switch ($type){ switch ($type){
case 2: case 2:
//新品上架
$where[] = ['is_new','=',1]; $where[] = ['is_new','=',1];
break; break;
case 3: case 3:
//精品推荐
$where[] = ['is_best','=',1]; $where[] = ['is_best','=',1];
break; break;
case 4:
//今日促销
$where[] = ['is_like','=',1];
break;
case 5:
//藏品捡宝
$where[] = ['is_jiantreasure','=',1];
break;
case 6:
//镇店藏品
$where[] = ['is_zdtreasure','=',1];
break;
} }
} }
//按排序条件显示 //按排序条件显示
@ -242,20 +500,24 @@ class PcLogic{
if($sort_type && $sort){ if($sort_type && $sort){
$order = [$sort_type=>$sort]; $order = [$sort_type=>$sort];
} }
$goods = new Goods(); $goods = new Goods();
$count =Db::name('goods g')
$count = $goods ->join('screen_mud sm', 'g.mud_id = sm.id')
->join('supplier s', 'g.supplier_id = s.id')
->where($where) ->where($where)
->count(); ->count();
$list = $goods $list =Db::name('goods g')
->where($where) ->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,sm.name as mud_name,s.name as supplier_name')
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum') ->join('screen_mud sm', 'g.mud_id = sm.id')
->order($order) ->join('supplier s', 'g.supplier_id = s.id')
->page($page, $size) ->where($where)
->select(); ->order($order)
->page($page, $size)
->select();
foreach ($list as $key => $v1){
$list[$key]['image']=UrlServer::getFileUrl($v1['image']);
}
$more = is_more($count, $page, $size); //是否有下一页 $more = is_more($count, $page, $size); //是否有下一页
return [ return [

View File

@ -1,4 +1,4 @@
<?php /*a:2:{s:92:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/supplier/edit.html";i:1640333906;s:86:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/layout2.html";i:1628618358;}*/ ?> <?php /*a:2:{s:92:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/supplier/edit.html";i:1641741931;s:86:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/layout2.html";i:1628618358;}*/ ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -89,6 +89,22 @@
<label class=" layui-form-mid layui-word-aux" id="image">建议尺寸730*530像素</label> <label class=" layui-form-mid layui-word-aux" id="image">建议尺寸730*530像素</label>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">首页推荐</label>
<div class="layui-input-inline" id="" >
<input type="radio" name="is_notice" lay-filter="is_notice" style="width: 500px" value=1 title="" <?php if($info['is_notice'] == 1): ?>checked<?php endif; ?>>
<input type="radio" name="is_notice" lay-filter="is_notice" style="width: 500px" value=0 title=""<?php if($info['is_notice'] == 0): ?>checked<?php endif; ?>>
</div>
<div class="layui-form-item">
<label class=" layui-form-mid layui-word-aux" id="notice">在商城首页的名家推荐显示</label>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="white-space: nowrap;">职位:</label>
<div class="layui-input-inline" style="width: 400px">
<input type="text" name="position" value="<?php echo htmlentities($info['position']); ?>" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label" style="white-space: nowrap;">荣誉:</label> <label class="layui-form-label" style="white-space: nowrap;">荣誉:</label>
<div class="layui-input-inline" style="width: 400px"> <div class="layui-input-inline" style="width: 400px">

View File

@ -1,4 +1,4 @@
<?php /*a:2:{s:98:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/shop_setting/policy.html";i:1628618358;s:86:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/layout1.html";i:1628618358;}*/ ?> <?php /*a:2:{s:98:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/shop_setting/policy.html";i:1641735877;s:86:"/Library/WebServer/Documents/dggxiangmu/dggzichahu/application/admin/view/layout1.html";i:1628618358;}*/ ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
@ -43,6 +43,8 @@
<li class="layui-this">服务协议</li> <li class="layui-this">服务协议</li>
<li>隐私政策</li> <li>隐私政策</li>
<li>售后保障</li> <li>售后保障</li>
<li>选择理由</li>
<li>支付方式</li>
</ul> </ul>
<div class="layui-tab-content"> <div class="layui-tab-content">
<div class="layui-tab-item layui-show"> <div class="layui-tab-item layui-show">
@ -65,6 +67,20 @@
<textarea name="after_sale" id="after_sale" lay-verify="content" class="field-content"><?php echo htmlentities($config['after_sale']); ?></textarea> <textarea name="after_sale" id="after_sale" lay-verify="content" class="field-content"><?php echo htmlentities($config['after_sale']); ?></textarea>
</div> </div>
</div> </div>
<div class="layui-tab-item">
<label class="layui-form-label"style="white-space: nowrap;">内容:</label>
<div class="layui-input-block">
<textarea name="payment" id="payment" lay-verify="content" class="field-content"><?php echo htmlentities($config['payment']); ?></textarea>
</div>
</div>
<div class="layui-tab-item">
<label class="layui-form-label"style="white-space: nowrap;">内容:</label>
<div class="layui-input-block">
<textarea name="reason" id="reason" lay-verify="content" class="field-content"><?php echo htmlentities($config['reason']); ?></textarea>
</div>
</div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -102,12 +118,16 @@
var service = likeedit.build('service'); //建立编辑器 var service = likeedit.build('service'); //建立编辑器
var privacy = likeedit.build('privacy'); //建立编辑器 var privacy = likeedit.build('privacy'); //建立编辑器
var after_sale = likeedit.build('after_sale'); //建立编辑器 var after_sale = likeedit.build('after_sale'); //建立编辑器
var payment = likeedit.build('payment'); //建立编辑器
var reason = likeedit.build('reason'); //建立编辑器
form.verify({ form.verify({
content: function() { content: function() {
likeedit.sync(service) likeedit.sync(service)
likeedit.sync(privacy) likeedit.sync(privacy)
likeedit.sync(after_sale) likeedit.sync(after_sale)
likeedit.sync(payment)
likeedit.sync(reason)
} }
}) })
form.verify({ form.verify({